You need to enable JavaScript to run this app. Python赛事计分系统输入校验引发while循环无限执行问题求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 19:27:03