Python赛事计分系统输入校验引发while循环无限执行问题求助
问题修复说明
除了你已经定位到的「individual函数放在menu函数外部调用」的问题外,你的代码还存在几处会触发异常或无限循环的问题:
- 语法错误:else分支的打印语句缺少右侧双引号,原代码
print("Enter a value between 1-4)会直接触发语法报错,修改为print("Enter a value between 1-4")即可。 - 逻辑冗余:你先定义了有效选项列表
solo_menu = ["1","2","3","4"],但下一行直接将变量覆盖为False,这个有效校验列表完全没有生效,导致用户输入选项4的时候也会被判定为非法输入,触发循环。 - 分支缺失:现有代码只处理了1、2两个选项的逻辑,3和4选项没有对应的处理分支,用户选3或者4都会走到else分支要求重新输入,这也是之前循环停不下来的核心原因之一。
优化后的可运行参考代码
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 = "" while not solo_name.strip(): solo_name = input("What is your name:") print(""" \nIndividual Menu and Available Spots\n 1) Player 1 2) Player 2 3) Player 3 4) Go back to Main Menu\n""") valid_choices = ["1", "2", "3", "4"] while True: solo_menu = input("Please enter your choice here:").strip() if solo_menu not in valid_choices: print("Enter a value between 1-4") continue if solo_menu == "4": # 选4直接跳出循环返回主菜单 break # 用映射关系替换冗长的if判断,后续新增参赛位只需要修改solo_player结构即可 contestant_key = f"Contestant {solo_menu}" player_key = f"Player {solo_menu}" solo_player[contestant_key][player_key].append(solo_name) print(solo_player[contestant_key]) print(f"Thank you for taking the spot of Player {solo_menu}") break # 主菜单示例,individual函数必须放在对应选项的分支内调用,不要放在全局直接执行 def main_menu(): while True: print("\n===== Main Menu =====") print("1) Register individual player") print("2) Exit") choice = input("Enter your choice:").strip() if choice == "1": individual() elif choice == "2": print("Exiting system...") break else: print("Invalid choice, please try again") if __name__ == "__main__": main_menu()
内容的提问来源于stack exchange,提问作者Paul Atreidis
相关产品推荐
相关产品推荐

