2016-07-20 123 views
-3

我有一個奇怪的問題,我的Python代碼奇怪蟒蛇索引超出範圍

當我與測試:

4 
Prashant 
32 
Pallavi 
36 
Dheeraj 
39 
Shivam 
40 

它工作得很好,但是當我試圖用這個來測試它:

5 
Harry 
37.21 
Berry 
37.21 
Tina 
37.2 
Akriti 
41 
Harsh 
39 

它失敗,此錯誤:

運行時錯誤 回溯(至多r最後一次調用last): 文件「solution.py」,第48行,在 final = find(嵌套,查找(嵌套,最小(嵌套))[0] [1]) IndexError:列表索引超出範圍

下面是代碼,我不明白爲什麼會崩潰,我嘗試很多型動物的解決方案,沒有任何結果..

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(nested,minimum(nested))'給你的代碼,並且它打印了[]'。可能你的問題出現在「find」中,我不禁注意到你的回報很奇怪。 – tdelaney

+0

如果你只是在'find'中定義return語句(現在它在循環中返回,所以你只處理一個條目)。 – tdelaney

回答

2

是有好處的單元測試的功能,或至少補充一些打印語句,看看他們返回的內容。我加

print find(nested,minimum(nested)) 

其印刷

[] 

find不工作,你希望它和檢查後的樣子,這似乎是一個for循環內return語句有問題。這使它工作

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