Python中While循环执行次数超出预期(多执行一次)
猜数字游戏循环次数异常问题解析
问题代码
import random as rd secret_number = rd.randint(1,100) num_guesses = 5 guess = int(input("Please guess a number")) while num_guesses > 0 and guess != secret_number: if guess > secret_number: print(f"Too high.\n You have {num_guesses - 1} guesses remaining.") num_guesses = num_guesses - 1 guess = int(input("Make a guess.")) elif guess < secret_number: print(f"Too low.\n You have {num_guesses - 1} guesses remaining.") num_guesses = num_guesses - 1 guess = int(input("Make a guess.")) else: print('You guessed correctly!')
实际运行输出
Please guess a number>? 50 Too low. You have 4 guesses remaining. Make a guess.? 40 Too low. You have 3 guesses remaining. Make a guess.? 50 Too low. You have 2 guesses remaining. Make a guess.? 30 Too low. You have 1 guesses remaining. Make a guess.? 10 Too low. You have 0 guesses remaining. Make a guess.? 10
问题原因拆解
核心有两个逻辑漏洞导致次数超出预期:
- 第一次猜测脱离循环计数:你在
while循环启动前,就让用户完成了第1次猜测(输入50),这次猜测完全不受num_guesses的限制,等于额外多了一次机会。 - 循环内的执行顺序问题:循环里是先处理当前猜测、扣减剩余次数,再要求用户输入下一次猜测。哪怕剩余次数已经减到0,代码还是会执行
input()让用户再猜一次,直到这次输入完成后,下一轮循环判断num_guesses>0不成立,才会停止。
对应到你的运行流程:
- 循环外:第1次猜测(50)
- 循环第1次执行:处理50,次数减到4,要求第2次猜测(40)
- 循环第2次执行:处理40,次数减到3,要求第3次猜测(50)
- 循环第3次执行:处理50,次数减到2,要求第4次猜测(30)
- 循环第4次执行:处理30,次数减到1,要求第5次猜测(10)
- 循环第5次执行:处理10,次数减到0,要求第6次猜测(10)
- 输入第6次后,循环判断条件不满足,才停止运行
说白了就是:循环外的1次 + 循环触发的5次输入,凑成了6次猜测。
内容的提问来源于stack exchange,提问作者Tim Starr
相关产品推荐
相关产品推荐

