我对我的菜单进行了一些验证检查,似乎重复了错误信息,我花了很长时间盯着这个错误,我似乎已经空白了!
我正在运行一个名为student_class的文件(不是类,而只是文件名),如果用户输入错误的选项,我希望它显示错误信息然后重新显示菜单等等任何菜单验证。
验证码是:
def ValidateMenuChoice(choice):
validchoice = False
Num = [1,2,3,4,5,6]
while validchoice == False :
if choice not in Num:
print("Invalid choice, please try again.")
display = menu.Menu("Student")
display.printMenu()
GetMenuChoice()
ValidateMenuChoice(choice)
else:
validchoice = True
return choice
我犯的是一个简单的错误还是更复杂?任何帮助将不胜感激。
GetMenuChoice功能:
def GetMenuChoice(): #Gets users menu choice
MenuChoice = int(input())
print()
return MenuChoice
答案编辑:
使用下面的几个答案(谢谢!)我不得不在我的代码中添加main(choice),如下所示:
def ValidateMenuChoice(choice=None):
Num = [1,2,3,4,5,6]
while True:
if choice not in Num:
print("Invalid choice, please try again.")
display = menu.Menu("Student")
display.printMenu()
choice = GetMenuChoice()
main(choice) #Added to make it work
else:
return choice
感谢您的帮助:)
答案 0 :(得分:2)
我认为你需要做一个简单的调整:
choice = GetMenuChoice()
目前,您永远不会更新choice
,因此会无限期地进行更新。
更广泛地说,我可能会采用迭代方法,并避免使用标志(validchoice
):
def GetValidMenuChoice():
display = menu.Menu("Student")
while True:
display.printMenu()
choice = GetMenuChoice()
if choice in range(1, 7):
return choice
else:
"Invalid choice, please try again."
理想情况下,我会移除硬编码的range(1, 7)
,并依赖于Menu
,但我无法告知您发布的内容是否可能
答案 1 :(得分:0)
您正在尝试迭代和递归方法,但您没有正确跟踪choice
和validchoice
变量。
要获得正确的递归方法,请删除while
并添加return
:
def ValidateMenuChoice(choice):
Num = [1,2,3,4,5,6]
if choice not in Num:
print("Invalid choice, please try again.")
display = menu.Menu("Student")
display.printMenu()
choice = GetMenuChoice()
return ValidateMenuChoice(choice)
return choice
迭代方法如下所示:
def ValidateMenuChoice(choice=None):
Num = [1,2,3,4,5,6]
while True:
if choice not in Num:
print("Invalid choice, please try again.")
display = menu.Menu("Student")
display.printMenu()
choice = GetMenuChoice()
else:
return choice