Python中while True循环位置不同的逻辑差异咨询
石头剪刀布程序中while循环位置的差异解析
我是Python初学者,编写石头剪刀布程序时发现while True语句放在不同位置,程序运行效果完全相反:
- 将
while True放在第3行的版本运行正常,胜负或平局结果仅打印一次 - 将
while True放在第6行的版本会无限重复打印同一个游戏结果(例如持续输出“You win”)
原因解析
正常运行版本(while在第3行)
while True把电脑出拳生成、玩家输入获取、胜负判断打印这一整套完整的游戏流程都包裹在了循环内部。每一轮循环都会:
- 重新随机生成电脑的出拳
- 等待玩家输入新的选择
- 执行一次胜负判断并打印结果
- 若玩家输入
end则退出循环,否则重新开启下一轮游戏
因此每一轮循环对应一次完整游戏,结果只会打印一次,之后进入下一轮等待玩家操作。
异常版本(while在第6行)
这里while True仅包裹了胜负判断与打印的逻辑,而电脑出拳生成、玩家输入获取的代码在循环外部:
- 电脑的出拳只会在程序启动时生成一次,之后永远不会改变
- 玩家的输入也只会在程序启动时获取一次,之后没有机会重新输入
- 循环会反复执行同一个判断逻辑,打印同一个结果,除非玩家一开始就输入
end,否则循环会无限运行,持续输出相同内容
正常运行版本代码
import random moves = "rock", "paper", "scissors" while True: computer = moves[random.randint(0,2)] player = input("Choose rock, paper or scissors... Or 'end' to end the game: ") if player == "end": print("Game over!") break elif player == "rock" and computer == "scissors" or player == "scissors" and computer == "paper" or player == "paper" and computer == "rock": print("You win", player, "beats", computer) elif player == computer: print("Tie!") else: print("You lose!", computer, "beats", player)
异常版本代码
import random moves = "rock", "paper", "scissors" computer = moves[random.randint(0,2)] player = input("Choose rock, paper or scissors... Or 'end' to end the game: ") while True: if player == "end": print("Game over!") break elif player == "rock" and computer == "scissors" or player == "scissors" and computer == "paper" or player == "paper" and computer == "rock": print("You win", player, "beats", computer) elif player == computer: print("Tie!") else: print("You lose!", computer, "beats", player)
内容的提问来源于stack exchange,提问作者MoRayhxn
相关产品推荐
相关产品推荐

