python - 简单的验证导致无限循环
问题描述
我目前正在为事件制作评分系统,但在使用 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
为每个潜在的键设置一个过于繁琐。只需连接经过验证的用户输入即可派生密钥。
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)
推荐阅读
- r - 如何嵌套 ifelse 语句以适应三个条件
- excel - 复制命名范围并将其粘贴到另一个工作表中而不覆盖数据
- python - Python:Foursquare API 和请求需要 cookie 和 javascript
- python - 负对数似然的约简参数
- javascript - 如何使用 Google File Picker API 下载文件?
- rendering - RealityKit 如何在运行时创建自定义网格?
- javascript - JavaScript - 比较非常大的对象数组的有效方法
- sqlite - SQLite 可以返回不存在的列的默认值而不是错误吗?
- ansible - 在 Ansible 中的角色内运行具有特定标签的任务
- linux - Tensorflow 在 proto-files 上创建错误