如何修复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
关键修改点说明
- 新增内层
while True循环:专门处理单轮游戏的多次猜测,确保每轮只对应一个目标数字,直到用户猜对才跳出内层循环。 - 调整随机数生成位置:把目标数字的生成放到外层循环开头,每轮游戏只生成一次。
- 重置尝试次数:每轮游戏开始时把
attempts设为0,保证每轮的次数统计独立。 - 移除冗余代码:删掉了猜对后多余的随机数生成,因为下一轮外层循环会自动生成新数字。
- 优化输入判断:用
lower()处理用户输入,支持"YES""Yes"等多种大小写形式的"yes"。
内容的提问来源于stack exchange,提问作者Pearchy
相关产品推荐
相关产品推荐

