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

Python猜数字游戏中random.randint重复生成相同数字的解决方法

问题分析与解决方案

核心问题:重复随机数的原因

你遇到的重复随机数问题,根源是循环逻辑错误:当用户输入y选择继续时,你用了continue,但这个continue只会让内层的while 1 != 0:循环继续执行,外层的while True:循环没机会重新运行number = random.randint(1, 1000),所以随机数一直不变。

另外代码里还有几个明显的小问题:

  • i-1这行没有实际作用,因为没有将结果赋值给i,而且这个变量本身也没被用到,完全可以删除
  • 重复执行import random,导入语句只需要在代码最开头执行一次
  • while 1 != 0:可以简化为while True:,更符合Python的可读性规范
  • 没有处理用户输入非数字的情况,会直接引发ValueError导致程序崩溃

修正后的代码

import random

while True:
    number = random.randint(1, 1000)
    guess_count = 0  # 统计猜测次数
    
    while True:
        player_guess = input("Choose a number from 1-1000: ")
        # 处理非数字输入
        if not player_guess.isdigit():
            print("请输入有效的数字!")
            continue
        
        guess_count += 1
        guess = int(player_guess)
        
        if guess == number:
            print(f"You got it! 总共猜了{guess_count}次!")
            # 确保用户输入有效的y/n
            while True:
                play_again = input("Do you want to play again? (y/n): ").lower()
                if play_again in ["y", "n"]:
                    break
                print("请输入y或n!")
            
            if play_again == "y":
                break  # 跳出内层循环,回到外层生成新随机数
            else:
                print("游戏结束!")
                exit()
        elif guess > number:
            print("Too high!")
        else:
            print("Too low!")

优化点说明

  • 规范导入逻辑:import random放在代码最顶部,只执行一次,符合Python编码规范
  • 处理无效输入:增加isdigit()检查,避免用户输入非数字时程序崩溃
  • 增加游戏反馈:添加guess_count统计用户猜测次数,提升游戏趣味性
  • 优化循环控制:用break跳出内层循环,让外层循环重新生成随机数,解决重复数字的问题
  • 输入容错处理:用.lower()统一输入大小写,同时增加循环确保用户输入有效的y/n
  • 移除冗余代码:删除了无用的i变量,简化代码结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:03:12