Python校验两路球队输入是否匹配预设列表及while循环适用性咨询
现有代码核心问题
- 字符串输入不会触发
ValueError,你写的校验逻辑全部放在except ValueError分支里,永远不会执行 (team1, team2) in team_list判断逻辑错误:team_list存储的是单个球队名的字符串,你用二元组去判断成员关系,结果永远为False,这也是你之前校验规则不符合预期的根本原因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
相关产品推荐
相关产品推荐

