You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数间调用报错:函数与整数无法比较的解决方法

解决文本游戏重构中的TypeError问题

错误原因

你重构后的代码触发TypeError有两个核心问题:

  • roll函数没有返回生成的随机数,调用后拿不到可用的数值
  • 判断时直接使用函数名roll(这是一个函数对象)和整数6比较,两种类型无法用<=判断

正确重构方案

要实现每次调用roll生成新随机数,同时支持不同场景调整成功率,按以下方式修改:

  1. 让roll函数返回随机数,还可支持自定义随机范围,方便后续灵活调整
  2. 调用roll时接收返回值,把生成的随机数存到变量里再和阈值比较
  3. 按场景设置不同胜负阈值,实现不同场景的成功率差异

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:15:35