Python冷热猜数字游戏报错:unsupported operand type(s) for -: 'str' and 'str'
冷热猜数字游戏问题修复
核心错误分析
- 类型不匹配报错:你把随机生成的答案转成了字符串(
str(random.randint(1, 1000))),而input()返回的用户输入也是字符串类型。字符串无法直接执行减法运算,这就是unsupported operand type(s) for -: 'str' and 'str'错误的根源。 - 语法错误:第三个
print("You're cold."语句缺少闭合括号),会触发语法解析错误。 - 逻辑顺序问题:原代码先判断
abs(...) <=250,再判断<=100,但所有满足<=100的数值必然也满足<=250,导致第二个条件永远不会被触发。
修正后的代码
import random # 生成1-1000之间的整数答案,无需转字符串 answer = random.randint(1, 1000) # 将用户输入转换为整数,同时添加异常处理防止非数字输入 try: guess = int(input('take a guess\n')) diff = abs(guess - answer) if diff <= 100: print("You're getting warmer.") elif diff <= 250: print("You're warm!") else: print("You're cold.") except ValueError: print("请输入有效的整数!")
关键修改说明
- 移除
answer的str()转换,保留整数类型,同时无需导入math模块(abs()是Python内置函数)。 - 将用户输入
guess通过int()转换为整数,并添加try-except捕获非数字输入的异常,提升程序健壮性。 - 调整条件判断顺序,先判断更小的范围(<=100),再判断<=250,确保逻辑正确触发。
- 修复
print语句的括号缺失问题,并用else简化最后一个条件判断。
内容的提问来源于stack exchange,提问作者Jacob Taylor
相关产品推荐
相关产品推荐

