2012-10-31 92 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

相關問題