Python验证检查无法正常工作

时间:2014-04-23 13:08:57

标签: python validation

我对我的菜单进行了一些验证检查,似乎重复了错误信息,我花了很长时间盯着这个错误,我似乎已经空白了!

我正在运行一个名为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

感谢您的帮助:)

2 个答案:

答案 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)

您正在尝试迭代和递归方法,但您没有正确跟踪choicevalidchoice变量。

要获得正确的递归方法,请删除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