user2758113
user2758113

Reputation: 1049

Porting Lua to Python

Lua

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));

My Python code

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)

I'm getting errors with the if values[i] > weight statement that i ported to python. What is the mistake I'm making?

Traceback

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

Upvotes: 1

Views: 380

Answers (1)

damienfrancois
damienfrancois

Reputation: 59070

I guess you are missing a len() at the end ; the Python equivalent of

knapsack(#values, tonumber(number));

would be

knapsack(len(values), number)

Upvotes: 2

Related Questions