Python 简单的验证会导致无限的While循环

Python 简单的验证会导致无限的While循环,python,python-3.x,dictionary,while-loop,Python,Python 3.x,Dictionary,While Loop,我目前正在为一个事件制作一个记分系统,但在使用while循环验证用户输入时遇到了问题。例如,我想强制用户输入他们的姓名,以便将其添加到我使用字典搜索的网球等运动的位置。每次我要求他们输入他们的用户输入时,while循环就一直在进行,导致了一个永无止境的while循环。这就是我所做的 ```solo_player = { "Contestant 1":{"Player 1":[],"Score":[],"Event"

我目前正在为一个事件制作一个记分系统,但在使用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造成的。

以下是我相信您想要的

有几个变化:

  • while循环可以包含要作为其条件执行的验证。如果您的验证变得更加复杂,那么您可以考虑返回到布尔来打破while循环,但是对于您的要求来说,它过于复杂。

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



  • 在您发布的代码中,缩进是完全错误的,因此我们无法真正说出循环和函数的确切含义。您能否尝试将代码包装在代码块中,通过三个勾号“I ll try and fixed”来修复它?请提供预期的(MRE)。我们应该能够复制和粘贴一个连续的代码块,执行该文件,并再现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和期望的输出来测试我们的建议。您发布的代码无法运行。它挂起等待输入——不要期望我们输入测试数据。相反,只需硬编码一个导致问题的测试用例;删除额外的案例,即初始化开销。您还必须测试程序的较小部分,以便我们集中精力解决一个问题。扫描您的代码至少会显示三个。很抱歉复制了整个代码,我会尽量缩短它。感谢这位男士solo_player=“”到底应该做什么?我对编程很陌生,所以IdkI在代码中看不到
    solo\u player=”“
    。我的坏意思是你给我的答案上的
    solo\u menu=“”
    ,我在尝试使用代码时似乎遇到了与以前相同的问题
    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)