首页 > 解决方案 > 简单的验证导致无限循环

问题描述

我目前正在为事件制作评分系统,但在使用 while 循环作为验证用户输入的方式时遇到了麻烦。例如,我想强制用户输入他们的姓名,以便可以将其添加到我使用字典的网球等运动的位置。每次我完成询问他们的用户输入时,while 循环都会不断出现,导致一个永无止境的 while 循环。这就是我所做的。

  ```solo_player = {
"Contestant 1":{"Player 1":[],"Score":[],"Event":[]},
"Contestant 2":{"Player 2 ":[],"Score":[],"Event":[]},
"Contestant 3":{"Player 3":[],"Score":[],"Event":[]},
"Contestant 4":{"Player 4":[],"Score":[],"Event":[]}}

 def individual():
  solo_name = False
  while not solo_name:
 solo_name = input("What is your name:")
 print(""" \nIndividual Menu and Available Spots\n
  1) Player 1
  2) Player 2
  3) Player 3
 \n4) Go back to Main Menu\n""")

 solo_menu = ["1","2","3","4"] #valid choices for this menu
 solo_menu = False
 while not solo_menu:
   solo_menu = input("Please enter your choice here:")

   if solo_menu == "1":
    solo_player["Contestant 1"]["Player 1"].append(solo_name)
    print(solo_player["Contestant 1"])
    print("Thank you for taking the spot of Player 1")
    solo_menu = True

   elif solo_menu == "2":
    solo_player["Contestant 2"]["Player 2"].append(solo_name)
    print(solo_player["Contestant 2"])
    print("Thank you for taking the spot of Player 2")
    solo_menu = True

    else: 
     print("Enter a value between 1-4)
     solo_menu = False```

我的理想输出是当我从可用点中选择一个点后,while 循环将停止。很抱歉 if/else 语句很长,我对它很陌生,所以我不知道如何使它更短

编辑:我解决了这个问题。这是由于在我的菜单 def 之外调用单个 func 引起的。

标签: pythonpython-3.xdictionarywhile-loop

解决方案


这就是我相信你所追求的。

几个变化:

  1. 您的 while 循环可以包含您要作为条件执行的验证。如果您的验证变得更加复杂,那么您可以考虑返回一个布尔值来中断 while 循环,但是对于您的要求来说它感觉过于复杂。

  2. 删除 if 语句。字典的整个想法是您可以指定一个键并获取一个值,因此elif为每个潜在的键设置一个过于繁琐。只需连接经过验证的用户输入即可派生密钥。


solo_player = {
"Contestant 1":{"Player 1":[],"Score":[],"Event":[]},
"Contestant 2":{"Player 2":[],"Score":[],"Event":[]},
"Contestant 3":{"Player 3":[],"Score":[],"Event":[]},
"Contestant 4":{"Player 4":[],"Score":[],"Event":[]},
"Contestant 5":{"Player 5":[],"Score":[],"Event":[]},
"Contestant 6":{"Player 6":[],"Score":[],"Event":[]},
"Contestant 7":{"Player 7":[],"Score":[],"Event":[]}}


solo_name=""    
while solo_name == "":
    solo_name = input("What is your name:")
    print(""" \nIndividual Menu and Available Spots\n
        1) Player 1
        2) Player 2
        3) Player 3
        4) Player 4
        5) Player 5
        6) Player 6
        7) Player 7
        \8) Go back to Main Menu\n""")

#prompt for player slot
solo_menu_options = ["1","2","3","4","5","6","7","8"] #valid choices for this menu
solo_menu=""
while solo_menu not in solo_menu_options:
    solo_menu = input("Please enter your choice here:")    

solo_player["Contestant "+solo_menu]["Player "+solo_menu].append(solo_name)
print(solo_player["Contestant "+solo_menu])
print("Thank you for taking the spot of Player "+solo_menu)

推荐阅读