Python循环代码仅单次读取输入重复输出7次的问题排查
问题根源
你的代码存在6处核心问题,直接导致预期逻辑失效:
- 输入逻辑位置错误:读取用户输入的
input()语句全部写在了while循环外部,程序启动时只会执行1次输入读取,后续7轮循环全程复用第一次输入的分数值,不会重新触发输入请求,自然会重复打印同一轮结果直到胜场累计到7。 - 循环条件存在运算符优先级bug:
while player_one != 7 or player_two != 7 is True会被Python按优先级解析为player_one !=7 or (player_two != (7 is True)),7 is True的结果永远是False,等价于判断player_one !=7 or player_two != False,完全不符合「任意一方未到7分就继续对局」的预期,正确循环终止条件应该是任意一方胜场达到7就停止循环,即循环运行条件为player_one <7 and player_two <7。 - 输入类型未转换:
input()默认返回字符串类型,字符串按字典序比较大小,和整数比较逻辑完全不同,哪怕输入全是数字,也会出现"10" < "2"的逻辑错误,必须显式用int()转成整数再做分数对比。 - 平局分支存在冗余无效代码:
score_one == score_two是比较运算不是赋值操作,写在分支里没有任何实际作用,属于无效代码。 - 变量名拼写错误:打印Player1获胜结果时写的
player-two是减号连接的非法标识符,运行时会直接触发名称错误,正确变量名是下划线连接的player_two。 - 结果判断逻辑冗余错误:你把平局判断写成了嵌套在主循环内的while循环,完全没有必要。胜场判断、最终胜负输出完全可以移到主循环结束后统一执行,不需要在循环内反复break判断,嵌套的while循环也无法正确触发平局判定。
修正后可直接运行的代码
player_one = 0 player_two = 0 # 双方胜场均未达到7时持续对局 while player_one < 7 and player_two < 7: # 每轮对局开始时读取本轮输入,放在循环内部才能逐轮触发输入 score_one = int(input("Player one, what is your score?")) score_two = int(input("Player two, what is your score?")) # 对比本轮分数累计胜场 if score_one > score_two: print(f"Player 1 wins the round with {score_one} beating Player 2 with {score_two}") player_one += 1 elif score_two > score_one: print(f"Player 2 wins the round with {score_two} beating Player 1 with {score_one}") player_two += 1 else: print("This round has ended in a draw.") player_one += 1 player_two += 1 # 对局结束后统一输出最终结果 if player_one == 7 and player_two == 7: print("DING DING it's a draw.") elif player_one == 7: print(f"The game has ended with Player 1 winning by {player_one} to Player 2's {player_two}") else: print(f"The game has ended with Player 2 winning by {player_two} to Player 1's {player_one}")
内容的提问来源于stack exchange,提问作者BaltoTheDog
相关产品推荐
相关产品推荐

