2016-07-20 134 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