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
相关产品推荐
相关产品推荐

