Python猜数字游戏内层循环无法终止问题求助
解决猜数字游戏的循环无法终止问题
嘿,我一眼就瞅出你代码里的问题啦!导致循环永远停不下来的核心原因有两个:
问题根源
- 类型不匹配:
randint(1,10)生成的是整数(int),但input()获取的用户输入是字符串(str)。哪怕你输入的数字和随机数完全一样,一个是数字类型一个是文本类型,它们也不可能相等,所以random_num is not guess这个判断永远为真,循环根本停不下来。 - 错误的比较运算符:就算类型一致,用
is来比较数值也不对——is是用来判断两个变量是否指向同一个对象的,判断数值是否相等应该用==(或者取反的!=)。
修复方案
我给你调整了代码,不仅解决了循环问题,还加了一些健壮性处理(比如防止用户输入非数字崩溃),完整代码如下:
from random import randint print('Welcome to the Number Guessing Game (Numbers 1 - 1000).') while True: tries = 0 random_num = randint(1, 10) print(f"Debug: The random number is {random_num}") # 保留调试用的打印 # 第一次获取输入并转换为整数,处理非数字输入 while True: try: guess = int(input('Guess my number, human: ')) break except ValueError: print("Please enter a valid number!") while guess != random_num: tries += 1 # 再次获取输入并处理非数字情况 while True: try: guess = int(input('Try again: ')) break except ValueError: print("Please enter a valid number!") print(f"Your guess: {guess}") print(f'Correct! It took you {tries + 1} tries.') # 补全胜利提示内容 play_again = input("Want to play again? (y/n): ") if play_again.lower() != 'y': break
关键修改点
- 用
int()把用户输入的字符串转换成整数类型,确保和随机数的类型一致。 - 新增
try-except块处理用户输入非数字的情况,避免程序直接崩溃。 - 把循环条件从
random_num is not guess改成guess != random_num,用正确的方式比较数值是否相等。 - 补全了胜利提示的内容,还增加了“是否再玩一次”的交互,让游戏更完整。
内容的提问来源于stack exchange,提问作者Armend Veseli
相关产品推荐
相关产品推荐

