参数绕过" ser"是输入而不是数字

时间:2017-10-05 09:52:25

标签: python

我有一个函数,如果有文本输入而不是给定范围内的数字,我需要返回原始问题。

当我输入SER以测试程序时,它会返回错误。我需要输入一个数字,该数字与基于该数字的给定代码片段相关。我怎么能改变这个?

def Choice(question):
  choiceanswer=input(question)
  if choiceanswer in range(1,6):
   return choiceanswer
  else:
    return Choice(question)


loop = True


 while loop:
    DisplayMenu()
    choiceanswer = Choice('Please make your choice:')
    if choiceanswer == 1:
      student = []
      n = numberofstudentstoadd('How many students do you wish to add? You 
 can add between 1 and 5')
      for count in range(0, n):

当我测试这段代码时,每当我输入范围中的数字时,选择的问题就会重复出现,或者当我输入文本时,它会崩溃/错误消息。

我需要运行程序,这样当我输入1-6时,数字对应于我要求它执行的任务,因为这个实例1是输入学生数据。当输入文本时,我需要重新出现的问题,以使用户根据范围插入数字1到6。希望这更有意义。

这是程序中显示的内容:

MAIN MENU
1. Enter and store student details
2. Retrieve details of any student
3. Student List: Birthday Order
4. Student Email List
5. Full Student List
6. Exit
Please make your choice:e
    Traceback (most recent call last):
      File "E:\BCS\From desktop\Validation 3\tutor.py", line 84, in <module>
        choiceanswer = Choice('Please make your choice:')
      File "E:\BCS\From desktop\Validation 3\tutor.py", line 72, in Choice
        choiceanswer=int(input(question))
    ValueError: invalid literal for int() with base 10: 'e'

1 个答案:

答案 0 :(得分:0)

选择的问题是每次我从范围中放入一个数字时重复出现

当然,您没有在任何地方将循环变量设置为 False ,因此 while 条件始终为正。

当我输入文本 时,

崩溃/错误消息

那是因为input函数将输入评估为Python代码。当您输入 SER 时,它并不意味着字符串"SER",而是一个变量SER - 您最终会得到 NameError

您应该使用raw_input代替。除了是您的错误原因之外,input功能也非常危险。实际上,在Python 3中, input 被替换为 raw_input

溶液

您的代码可能如下所示

def choose(question):
    choiceanswer = raw_input(question)

    if choiceanswer == 'SER':
        global loop
        loop = False
        return

    if int(choiceanswer) in range(1, 6):
        return choiceanswer
    else:
        return choose(question)

loop = True

while loop:
    ...