为何猜数字游戏中变量ans赋值为0仍变为str类型引发TypeError?
猜数字游戏类型错误原因及修复
为什么初始为int的ans会变成字符串?
Python的input()函数有个固定特性:无论用户输入的是数字还是字符,返回值永远是字符串类型。你的代码里虽然一开始给ans赋值为整数0,但进入while循环后,执行了ans = input(...),这行代码直接把ans的类型覆盖成了字符串,后续拿它和整数类型的ansnum做<比较,自然会触发TypeError。
修复方案
核心是把input()获取到的字符串转换成整数类型,同时可以加异常处理避免用户输入非数字内容导致崩溃:
import random def guess(x): ansnum = random.randint(1, x) ans = 0 chance = 0 limit = 4 while ans != ansnum and chance < limit: try: # 将输入转换为整数类型 ans = int(input(f"Guess between 1 and {x}: ")) except ValueError: print("请输入有效的数字!") continue # 跳过本次循环,重新获取输入 chance += 1 if ans < ansnum: print("差一点,太小了") elif ans > ansnum: print("差一点,太大了") else: # 猜对了直接跳出循环 print("你猜对了!") break else: # 循环正常结束(没猜对且用完次数) print(f"次数用完了,正确数字是{ansnum}") guess(10)
额外说明
- 原代码的else分支逻辑有问题:不管是猜对还是用完次数都会打印"You Guess IT",修复后区分了两种情况。
- 增加
try-except是为了提升程序健壮性,避免用户输入字母、符号等非数字内容时程序直接报错退出。
内容的提问来源于stack exchange,提问作者Big Yong
相关产品推荐
相关产品推荐

