TypeError int和funcs

时间:2019-04-18 19:51:57

标签: python optimization typeerror knapsack-problem

大家好,我正在尝试为python中的优化问题编写代码,问题是我需要医治一个人,Medicine1可以治愈25个单位,需要3种草药A和2个草药B,而Medicine2可以治愈20个单位,需要4个草药A和1种草药BI分别具有25个单位的草药A和10个单位的草药B。最后,我想打印出我能治愈的最大健康值以及我使用的每种药物1和2中有多少(显然不知道怎么放)

我试图写一个背包问题,但我不断收到错误消息

  

TypeError:+不支持的操作数类型:“ int”和“ function”

med1= 25
med2= 20
x=25
y=10
health=0
def knapsack(health,med1,med2,x,y):
    if x==0 or y==0:
        return knapsack
    if(med1+knapsack(health+med1,med1,med2,x-3,y- 
   2)>med2+knapsack(health+med2,med1,med2,x-4,y-1)):
        return (med1+knapsack(health+med1,med1,med2,x-3,y-2))
    else:
        return (med2+knapsack(health+med2,med1,med2,x-4,y-1))
print(knapsack(health,med1,med2,x,y))

有人可以帮助我吗? 谢谢

2 个答案:

答案 0 :(得分:0)

您正在从knapsack()函数的返回值不一致,特别是在行中:

return knapsack

给您带来麻烦,因为它返回可调用的但您想要整数值 (进一步递归调用)

return (med1[0]+knapsack(health+med1[0],med1,med2,x-3,y-2))

然后变成了(顺便说一句,您有太多的括号):

return int + callable

,然后您的代码失败。因此,这要么是不完整的代码,要么是从没有阅读的地方复制粘贴。

答案 1 :(得分:0)

您的主要问题是return knapsack返回的是函数本身,而不是整数,这就是为什么要获取TypeError的原因。如果我正确地阅读了您的代码,您要返回的是health的值不变(因为您将不会使用任何药物)。

这是一种更简单的方法,对med1med2使用纯整数而不是单元素列表,并使用内置函数max()来返回传递给它的两个值中的较大者:

def knapsack(health,med1,med2,x,y):
    if x <= 0 or y <= 0:
        return health
    return max(med1+knapsack(health+med1, med1, med2, x-3, y-2),
               med2+knapsack(health+med2, med1, med2, x-4, y-1))

print(knapsack(0, 25, 10, 25, 10))