You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python校验两路球队输入是否匹配预设列表及while循环适用性咨询

现有代码核心问题
  1. 字符串输入不会触发ValueError,你写的校验逻辑全部放在except ValueError分支里,永远不会执行
  2. (team1, team2) in team_list判断逻辑错误:team_list存储的是单个球队名的字符串,你用二元组去判断成员关系,结果永远为False,这也是你之前校验规则不符合预期的根本原因
  3. finally分支无论校验结果如何都会执行print("failed"),逻辑完全错误
方案说明

你用while循环实现重复输入直到校验通过的思路是合理的,对新手来说可读性高、逻辑清晰,完全能满足你的需求,不存在非换不可的必要性。
正确的校验逻辑只需要分别判断两个输入的球队名都存在于team_list中,且两个队名不重复即可。

优化后代码
team_list = ["diamondbacks", "braves", "orioles", "red sox", "white sox", "cubs", "reds", "indians", "rockies",
            "tigers", "astros", "royals", "angels", "dodgers", "marlins", "brewers", "twins", "yankees", "mets",
            "athletics", "phillies", "pirates", "padres", "giants", "mariners", "cardinals", "rays", "rangers",
            "blue jays", "nationals"]
# 转成集合优化查询速度,可选
team_set = set(team_list)

path = int(input("请输入功能路径:"))
if path == 1:  #percentage calculator
   p = int(input("What %? "))
   t = int(input("What is your total? "))
   percent = (t * p) / 100
   print(percent)
elif path == 2:  #Bet logging
   while True:
       team1 = input("Betting Team? ").strip().lower()
       team2 = input("Opposing Team? ").strip().lower()
       # 校验逻辑
       if team1 not in team_set:
           print(f"输入错误:投注球队{team1}不在预设列表中,请重新输入")
           continue
       if team2 not in team_set:
           print(f"输入错误:对手球队{team2}不在预设列表中,请重新输入")
           continue
       if team1 == team2:
           print("输入错误:投注球队和对手球队不能相同,请重新输入")
           continue
       # 所有校验通过
       print("accepted")
       break
额外优化建议
  • 输入时统一做小写转换+首尾去空格处理,能兼容用户大小写输入、不小心输了空格的场景,进一步降低拼写错误带来的校验失败概率
  • 校验不通过时明确提示错误原因,用户能快速调整输入,使用体验更好
  • 把球队列表转成集合后做in判断,时间复杂度从O(n)降到O(1),数据量越大优势越明显,属于可养成的编程好习惯

内容的提问来源于stack exchange,提问作者Sunnyside391

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:45:03