Python函数间调用报错:函数与整数无法比较的解决方法
解决文本游戏重构中的TypeError问题
错误原因
你重构后的代码触发TypeError有两个核心问题:
roll函数没有返回生成的随机数,调用后拿不到可用的数值- 判断时直接使用函数名
roll(这是一个函数对象)和整数6比较,两种类型无法用<=判断
正确重构方案
要实现每次调用roll生成新随机数,同时支持不同场景调整成功率,按以下方式修改:
- 让
roll函数返回随机数,还可支持自定义随机范围,方便后续灵活调整 - 调用
roll时接收返回值,把生成的随机数存到变量里再和阈值比较 - 按场景设置不同胜负阈值,实现不同场景的成功率差异
修正后的完整代码
import random # 可自定义随机范围的roll函数,默认0-9 def roll(min_val=0, max_val=9): return random.randint(min_val, max_val) def win_f(): print('You won the fight') def win_r(): print('You got away') def lose_f(): print('You lost the fight') quit() def lose_r(): print('You were captured') quit() def user_input1(): ui = input('Fight or Run? ').lower() if ui == 'fight': # 战斗场景:生成随机数,胜利阈值设为7(70%胜率) chance = roll() if chance <= 7: win_f() # user_input1_2() 请自行实现该后续函数 else: lose_f() if ui == 'run': # 逃跑场景:生成随机数,成功阈值设为5(50%成功率) chance = roll() if chance <= 5: win_r() # user_input2() 请自行实现该后续函数 else: lose_r() user_input1()
关键改动说明
roll函数新增return语句,返回生成的随机整数,调用时能拿到具体数值- 调用
roll()时将结果赋值给chance变量,后续用该变量和阈值比较,避免函数对象和整数的类型错误 - 不同场景可以设置不同的阈值(比如战斗的7和逃跑的5),轻松调整各场景的胜负成功率
内容的提问来源于stack exchange,提问作者Maadpotter
相关产品推荐
相关产品推荐

