2012-10-31 93 views
1

你好我正在编写和测试一个递归动态编程背包(0-1)(下面的代码是主要文件和函数) (这是张贴后的代码)...我真的很困惑,以什么错误是如此的任何帮助将不胜感激!Python错误类型错误:无法订购的类型:int()> list()

主文件

import Knapsack_Test 

size = 10 
W = 2**size 
knapsack = Knapsack_Test.Knapsack_Test() 

for i in range(1, 10): 
    knapsack.recursive_knapsack_test(size, W) 
size = size + 100*i 

W = 2**size 

函数调用(这是CLASS Knapsack_Test.py

def recursive_dynamic_knap(self, v, w, i, W): 
    n = len(v) - 1 
    if i == n: 
     if W < w[n]: 
      return 0 
     else: 
      return v 
    elif W < w[i]: 
     return self.recursive_dynamic_knap(v, w, i+1, W) 

    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 

ERROR

Traceback (most recent call last): 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\Knapsack_Main.py", line 9, in <module> 
    knapsack.recursive_knapsack_test(size, W) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\Knapsack_Test.py", line 19, in recursive_knapsack_test 
    self.knapsack.recursive_dynamic_knap(v, w, j, W) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
TypeError: unorderable types: int() > list() 
+0

您也可以发布函数'knapsack.recursive_knapsack_test'吗? – lvc

+0

请解决我的问题,我解决了它! – user1661211

+0

看起来'recursive_dynamic_knap'返回两种类型的值:'v',它是'list'和'0'。也许你打算返回'v [x]'?整数和列表之间的比较是未定义的。 –

回答

2

我相信问题是,在调用return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i])一个到recursive_dynamic_knap正在返回v,这是一个列表,whi ch作为max()的参数没有任何意义,因为它是“无法订购的”(不能明智地判断为大于或小于int

+0

是的,这是正确的答案...哈哈我已经知道了,但再次感谢! – user1661211

相关问题