Python while循环单条件致猜词游戏代码异常的原因咨询
Python while循环多条件判断的运行逻辑说明
第一版代码崩溃的核心原因
while循环的执行规则是:每次启动循环体前,都会先检查条件是否为真,只有条件为真才会进入循环体;只要条件为假,就立刻终止循环。
你第一版代码的循环判断条件只有guess != secret_word这一项:
secret_word = "giraffe" guess = "" guess_count = 0 guess_limit = 3 out_of_guesses = False while guess != secret_word: if guess_count < guess_limit: guess = input("Enter guess: ") guess_count += 1 else: out_of_guesses = True if out_of_guesses: print("out of guesses, You lose!") else: print("You Win!")
当玩家3次都没猜对时,执行流程会变成:
- 前3次进入循环时,
guess_count分别是0、1、2,都满足<3的要求,正常接收用户输入、计数+1,3次输入完后guess_count变为3 - 第4次触发循环条件检查:因为
guess一直不等于正确答案,guess != secret_word为真,循环继续执行 - 这次进入循环后,
guess_count < guess_limit不成立,走到else分支把out_of_guesses设为True - 本轮循环体执行完,程序回到循环开头做下一次条件检查——这时候问题出现了:循环条件根本不关心
out_of_guesses是什么值,只要没猜对,guess != secret_word就永远为真,循环会无限重复执行else分支的赋值语句,再也不会弹出输入框,程序卡在无意义的死循环里,表现出来就是"崩溃无响应"。
新增判断条件后代码正常运行的原理
你修改后的循环条件用and做了逻辑连接:
secret_word = "giraffe" guess = "" guess_count = 0 guess_limit = 3 out_of_guesses = False while guess != secret_word and out_of_guesses != True: if guess_count < guess_limit: guess = input("Enter guess: ") guess_count += 1 else: out_of_guesses = True if out_of_guesses: print("out of guesses, You lose!") else: print("You Win!")
Python中and连接的多个判断,必须全部为真,整个表达式才会为真;只要有任意一个判断为假,整个循环条件就不成立,循环立刻终止。
当3次猜测用完,out_of_guesses被设为True后,下一次循环做条件检查时,out_of_guesses != True的结果为False,整个循环条件直接不成立,程序会立刻跳出循环,执行后续的胜负判断逻辑,自然不会再卡死。
写while循环时一定要提前梳理清楚所有需要终止循环的场景,把所有终止判断都写到循环条件里,或者在循环体内用
break关键字主动触发退出,否则很容易写出无限死循环。
内容的提问来源于stack exchange,提问作者F.Sil93
相关产品推荐
相关产品推荐

