我有一个函数,如果有文本输入而不是给定范围内的数字,我需要返回原始问题。
当我输入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'
答案 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:
...