Python - 由定义引起的永无止境的 While 循环

Python - Never Ending While Loops caused by a Definition

我目前正在为我的评分系统制作一个主菜单,它将通过使用 while 循环作为一种简单的验证形式将用户带到代码的不同部分,但它会导致永无止境的 while 循环,因为我的一些定义也有 while 循环。这是我所做的

def menu():
 print("""\n Main Menu \n
 1) Join the Event as a Team
 2) Join the Event by Yourself
 3) Score Screen""")

 menuchoice_option = ["1","2","3"]

 menuchoice = ""

 while menuchoice not in menuchoice_option:
  menuchoice = input("Please enter your choice here:")

 if menuchoice == "1":
  team_menu()
  menuchoice = True
 elif menuchoice == "2":
  individual()
  menuchoice = True
 elif menuchoice == "3":
   #scorescreen()
   menuchoice = True
 else:
   menuchoice = False
   print("Please enter a value between 1-3")
   menuchoice = input("Please enter your choice here:")

这是我的其他功能,菜单定义导致无限循环

def team_menu():

 global teamS
 team_player = ""
 while team_player != "":
  team_player = input("What is your name:")
  print("""\n Available Teams \n
  1) Team Ahab
  2) Team Ishmael
 \n 3) Go back to Main Menu\n""")

 team_choice = ""
 team_choice_option = ["1","2","3"] # all valid choices on team menu

 while team_choice not in team_choice_option:
  team_choice = input("Enter your choice here:")

 if team_choice == "1":
  teamS["Team 1"]["Team Ahab"].append(team_player)
  print(teamS["Team 1"])
  print("Thank You for Joining Team Ahab")
  team_choice = True

 elif team_choice == "2":
 teamS["Team "+ team_choice]["Teeam Ishmael"].append(team_player)
 print(teamS["Team 2"])
 print("\nThank You for Joining Team Miller\n")
 team_choice = False

elif team_choice == "3":
 menu()
 team_choice = True

else:
 print("Enter a value between 1-3")
 team_choice = False

我的理想输出是停止在我的代码中从不同的 defs 导致无限 while 循环。我是初学者,请见谅

旧:

Well... True will never be one of your menuchoice_option, they are 1,2,3. Make menuchoice="1" (instead of True), for example, if the user select "1".

编辑:

尝试简化您的代码:理想情况下,数据应该是原子的,并且代码应该围绕数据工作以尽可能地提取和充当 best/smart。并使用更好的缩进(有助于查看块)。 像下面这样的东西对maintain/develop来说会好得多:

def menu():
  options = {
    1: "Join the Event as a Team",
    2: "Join the Event by Yourself",
    3: "Score Screen"
  }

  funcs = {
    1: team_menu,
    2: individual,
    3: scorescreen
  }

  print("\n Main Menu \n")
  for k,v in options.items():
    print(f"{k}) {v}")

  choice = None
  while choice not in options:
    # notice that if a value invalid for "int()" casting, 
    # the code will blow. Wrap this with try/except to avoid it.
    choice = int(input("Please enter your choice here:"))

  # By now, you know a valid option was chosen.
  # Let's use to select the corresponding function from "funcs" dict
  funcs[choice]()

我没有测试。不过看起来还行。

对菜单使用一些递归怎么样,我分享我的想法:

options = """
Main Menu

 1) Join the Event as a Team
 2) Join the Event by Yourself
 3) Score Screen
 4) Exit

>>> """

def menu(menuchoice):
    if menuchoice == "1":
        team_menu()
    elif menuchoice == "2":
        individual()
    elif menuchoice == "3":
        #scorescreen()
        pass
    elif menuchoice == "4":
        exit()
    else:
        print("Please enter a value between 1-5")
        decision = str(input(">>> "))
        menu(decision)



if __name__ == "__main__":
    decision = str(input(options))
    menu(decision)

希望能给大家一个思路