2013-10-16 2 views
1

루아포팅 루아 파이썬

values = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 
inSack = {} 
total = 0; 
function knapsack(i, weight) 
     if weight == 0 then 
       print("Success The following combination is in the knapsack:"); 
       for i = 1, #inSack do 
         total = total + inSack[i]; 
         print(inSack[i]); 
       end 
       print("Totaling to Input of: "..total) 
       return 
     elseif i <= 0 then 
       print("Sorry your weight combination, is not possible with the current values "); 
       return; 
     end 
     if values[i] > weight then 
       return knapsack(i-1, weight); 
     else 
       inSack[#inSack + 1] = values[i]; 
       return knapsack(i-1, weight - values[i]); 
     end 

end 
-- Waits for user input to terminal 
local number = io.read() 
knapsack(#values, tonumber(number)); 

내 파이썬 코드

values = [1,2,3,4,5,6,7,8,9] 
inSack = [] 
total = 0 

def knapsack(i,weight): 
    if weight == 0: 
     print("success: ") 
     for i in inSack: 
      total = total +inSack[i] 
      print(inSack[i]) 
     print("totaling to input of: "+total) 
     return 
    elif i<= 0: 
     print("didn't work yo") 
     return 
    if values[i] > weight: 
     return knapsack(i-1, weight) 
    else: 
     inSack[inSack+1] = values[i] 
     return knapsack(i-1, weight - values[i]) 

number = raw_input("Enter a number: ") 
knapsack(values, number) 

에 내가지고있어 오류가 발생합니다. 내가 뭘 만들고있는 실수 야?

역 추적

Traceback (most recent call last): 
    File "lua.py", line 23, in <module> 
    knapsack(values, number) 
    File "lua.py", line 16, in knapsack 
    if values[i] > weight: 
TypeError: list indices must be integers, not list 
+0

'inSack [inSack + 1] = 값 것 [I] '리스트 있어야 inSack''1을 가산 ? 'inSack.append (values ​​[i])'대신에? :) 또한 forSack in : inSack 요소를 반복합니다. 색인이 아닙니다. 'for 색인, inSack의 요소 :'대신. – Kamiccolo

+0

'i'가리스트라고 가정하면,이 비교는 의미가 없습니다 :'i <= 0'. (루프 in'in i in in :'에서, 실제로'i '에 전달 된 원래 항목을 마스크했습니다.) –

+1

루아 테이블을 파이썬리스트로 사용하는 것을 그만 둡니다. : P – Shashank

답변

2

난 당신이 마지막에 len() 누락 추측;

knapsack(#values, tonumber(number)); 

의 파이썬 동등한

knapsack(len(values), number)