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

Python猜数字游戏猜对仍显示失败提示 如何让代码仅在for循环结束后执行

问题原因

末尾的失败提示打印语句没有附加任何判断条件,无论for循环是因为猜对数字执行break提前退出,还是猜测次数耗尽自然结束,这行代码都会被执行,因此出现猜对后依然弹出失败提示的问题。仅调整缩进只能控制这行代码是否属于循环体,无法解决逻辑判断缺失的问题。

修复方案

方案1:使用Python for循环自带的else分支

Python的for...else是原生支持的语法,仅当for循环完整跑完所有迭代、没有被break中断时,才会执行else块下的代码,完全匹配你的需求,修改后代码如下:

def main(random_pick, guesses):
    for i in range(guesses):
        try:
            guess = int(input(f"{BLUE}[ ? ]{WHITE} Guess the number : "))
            if guess > random_pick:
                print(f"{RED}[ ! ]{WHITE} Your guess is high!")
            elif guess < random_pick:
                print(f"{RED}[ ! ]{WHITE} Your guess is low")
            else:
                print(f"{GREEN}[ $ ]{WHITE} You guessed it! Congratulations")
                break
        except ValueError:
            print(f"{RED}[ ! ]{WHITE} Wrong value, try again!")
    else:
        print(f"{YELLOW}[ ! ]{WHITE} Better luck next time, the number was {random_pick}")

方案2:新增状态变量判断游戏结果

如果不习惯for...else的写法,也可以新增布尔变量标记是否猜对,最后根据变量值判断是否输出失败提示:

def main(random_pick, guesses):
    guess_right = False
    for i in range(guesses):
        try:
            guess = int(input(f"{BLUE}[ ? ]{WHITE} Guess the number : "))
            if guess > random_pick:
                print(f"{RED}[ ! ]{WHITE} Your guess is high!")
            elif guess < random_pick:
                print(f"{RED}[ ! ]{WHITE} Your guess is low")
            else:
                print(f"{GREEN}[ $ ]{WHITE} You guessed it! Congratulations")
                guess_right = True
                break
        except ValueError:
            print(f"{RED}[ ! ]{WHITE} Wrong value, try again!")
    if not guess_right:
        print(f"{YELLOW}[ ! ]{WHITE} Better luck next time, the number was {random_pick}")

两种方案均可解决问题,方案1语法更简洁,属于Python的标准用法。

内容的提问来源于stack exchange,提问作者34598240

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:30:02