2016-07-20 2 views
-3

У меня странная проблема с моим питона кодомстранно индекс питон из диапазона

, когда я проверить его с:

4 
Prashant 
32 
Pallavi 
36 
Dheeraj 
39 
Shivam 
40 

это работает хорошо, но когда я пытаюсь проверить его с этим:

5 
Harry 
37.21 
Berry 
37.21 
Tina 
37.2 
Akriti 
41 
Harsh 
39 

он потерпит неудачу с этой ошибкой:

ошибка выполнения Traceback (большинство г ecent call last): Файл «solution.py», строка 48, в final = find (вложенный, поиск (вложенный, минимальный (вложенный)) [0] [1]) IndexError: индекс списка за пределами допустимого диапазона

Вот код, я не понимаю, почему это крах, я стараюсь много Differents решений без какого-либо результата ..

def compteur (list,sch): 
    nb=0 
    for t in list: 
     if t[1] == sch: 
      nb += 1 
    return nb 

def minimum (list): 
    minim = list[0][1] 
    for t in list : 
     if t[1] < minim : 
      minim = t[1] 
    return minim 

def find (list,sch): 
    ret=[] 
    for t in list: 
     if t[1] == sch: 
      ret.append(t) 
     return ret 

def rmv (list,sch): 
    ret = [] 
    fd = find(list,sch) 
    for t in list : 
     if not fd[0][1]==t[1]: 
      ret.append(t) 
    return ret 

nested = [] 
number = int(raw_input()) 

for i in range(number+1) : 
    try: 
     nom = raw_input() 
    except (EOFError): 
     break 
    note = float(raw_input()) 
    nested.append([nom,note]) 

mini = find(nested,minimum(nested)) 
for i in mini: 
    nested = rmv(nested,i[1]) 


final = find(nested,find(nested,minimum(nested))[0][1]) 
final.sort(key=str) 

for e in final : 
    print e[0] 

Благодарим вас за помощь!

+1

Вы можете сломать это заявление на несколько более мелких и сузить проблему. – tdelaney

+0

Я добавил 'print find (вложенный, минимальный (вложенный))' на ваш код и напечатал '[]'. Вероятно, ваша проблема находится в 'find', и я не мог не заметить, что ваше возвращение странно размещено. – tdelaney

+0

Если вы просто разделите оператор return в 'find' (прямо сейчас он возвращается в цикле, так что вы обрабатываете только одну запись), он работает. – tdelaney

ответ

2

Плата за модульное тестирование ваших функций или, по крайней мере, добавление нескольких заявлений на печать, чтобы узнать, что они возвращают. Я добавил

print find(nested,minimum(nested)) 

который печатал

[] 

find не работает так, как вы хотите его, и после осмотра, она, как представляется, проблема с return заявление внутри for цикла. Это заставляет его работать

def find (list,sch): 
    ret=[] 
    for t in list: 
     if t[1] == sch: 
      ret.append(t) 
    return ret 
Смежные вопросы