You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题原因拆解

核心有两个逻辑漏洞导致次数超出预期:

  1. 第一次猜测脱离循环计数:你在while循环启动前,就让用户完成了第1次猜测(输入50),这次猜测完全不受num_guesses的限制,等于额外多了一次机会。
  2. 循环内的执行顺序问题:循环里是先处理当前猜测、扣减剩余次数,再要求用户输入下一次猜测。哪怕剩余次数已经减到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:20:05