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

如何修复Python猜数字游戏中随机数重复生成的问题?

猜数字游戏代码修复方案

问题分析

  • 致命bug:你把生成目标数字的number1 = random.randint(0,10)放在了外层while True循环的开头,每次用户输入一次猜测,循环就会重新生成一个新数字,导致用户永远没法对着同一个数字猜,自然不可能正常猜对(除非撞大运)。
  • 次要问题:attempts变量在循环外初始化,重新玩的时候不会清零,次数会一直累加,统计出来的尝试次数不准确。

修复后的完整代码

import random

# introduction
print("welcome to my number guessing game! ")
input("press any key to start playing ")

while True:
    # 每轮游戏开始时,生成唯一的目标数字,重置尝试次数
    secret_number = random.randint(0, 10)
    attempts = 0
    
    # 内层循环处理单轮游戏的多次猜测
    while True:
        guess = int(input("guess a random number between 0 and 10. "))
        attempts += 1
        
        if guess == secret_number:
            play_again = input(f"correct! the secret number was indeed {secret_number}, and you guessed it in {attempts} attempts. play again? (yes/no) ")
            break
        elif guess > secret_number:
            print("try a smaller number. ")
        else:
            print("try a bigger number. ")
    
    # 根据用户选择决定是否继续
    if play_again.lower() != "yes":
        break

关键修改点说明

  1. 新增内层while True循环:专门处理单轮游戏的多次猜测,确保每轮只对应一个目标数字,直到用户猜对才跳出内层循环。
  2. 调整随机数生成位置:把目标数字的生成放到外层循环开头,每轮游戏只生成一次。
  3. 重置尝试次数:每轮游戏开始时把attempts设为0,保证每轮的次数统计独立。
  4. 移除冗余代码:删掉了猜对后多余的随机数生成,因为下一轮外层循环会自动生成新数字。
  5. 优化输入判断:用lower()处理用户输入,支持"YES""Yes"等多种大小写形式的"yes"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:52:45