2015-02-17 6 views
0

Мой код должен оценивать решение проблемы с рюкзаком. Wts - это список. Я бы включил весь код, но он очень длинный. Я получаю эту проблему:IndexError в коде Python

totalwt += int(wts[i]) 
IndexError: list index out of range 

Но вот код:

ev = input("Do you want to evaluate a potential solution? [y/n] ") 
chosen = [] 
totalwt = 0 
totalval = 0 

if ev == 'y': 
    print("Please enter a potential solution.") 
    n = True 
    while n == True: 
     sol = int(input("Enter id [1..{0}] of item to be picked, or 0 when done. ".format(items))) 
     if int(sol) >= 1 and int(sol) <= items: 
      chosen.append(sol) 
     else: 
      n = False 
    for i in chosen: 
     totalwt += int(wts[i]) 
     totalval += int(vals[i]) 
    if totalwt < int(cap): 
     print("Feasible: ","Total Wt = ",totalwt,"Total Val = ",totalval) 
    else: 
     print("Infeasible: ","Total Wt = ",totalwt,"Total Val = ",totalval) 
elif ev == 'n': 
    print("Okay. You are done. Thank you!") 

Я не вижу проблемы. Но если потребуется больше кода, я буду рад его предоставить.

ответ

1

Основываясь на вашем коде, я предполагаю, что items является целым числом, представляющим длину wts.

Если это так, вы хотите изменить этот код:

if int(sol) >= 1 and int(sol) <= items: 
    chosen.append(sol) 

к этому:

if sol >= 1 and sol <= items: 
    chosen.append(sol-1) 

Заметьте, что это происходит потому, что индексы список начинается с 0, а не 1.

+0

Thank youuu ~! :) Это было так просто, я не могу поверить, что пропустил это. : / –