2012-12-24 193 views
0

我有一个循环运行16次,因为它读取的文件有16行,我使用循环来读取时间戳的前两个字符。但我不知道如何保持n变量达到17.我试图使用while来限制n到16,但无济于事。这里是我的全部功能,我想作为http://calicoproject.org/Calico_Python_GIS详细的动画飓风艾琳的路径:IndexError:索引超出范围

def drawIrene(win): 
line = Line() 
n = 0 
for (x,y) in dots: 
    time_stamp[n] = time_stamp[n][:2] 
    time_stamp[n+1] = time_stamp[n+1][:2] 
    time1 = abs(int(time_stamp[n]) - 12) 
    time2 = abs(int(time_stamp[n+1]) - 12) 
    wait_time = abs(int(time1) - int(time2)) 
    x, y = ll2xy(x, y) 
    c = Circle(Point(x, y), int(eye_size[n])) 
    line.append(Point(x,y)) 
    c.fill = Color(255, 255, 0, 62) 
    c.draw(win) 
    t = Polygon((x, y), (x+10, y+5), (x+int(movement_speed[n]), y-int(movement_speed[n])/2)) 
    t.fill = Color("orange") 
    t.draw(win) 
    print(time1) 
    print(time2) 
    print() 
    #print (wait_time) 
    wait(wait_time) 
    if n < len(dots): 
     n += 1 
    else: 
     break 
line.draw(win) 
line.border = 2 
+1

这里需要提供显著更多的代码上下文。 – Amber

+1

由于您的环境很少,我认为您的问题与'n + 1'索引有关。所以循环超过15倍,而不是16应解决您的问题 – inspectorG4dget

+0

两个选项: LEN(点) - 1 或 N = 1个 –

回答

1

的问题是,你遍历相同长度的两个序列,dotstime_stamp。但是,您正在预测time_stamp顺序,访问当前项目和下一个项目以计算wait_time值。这会导致您的IndexError在循环的最后一个循环中,因为n+1索引指向列表的末尾。

有几种不同的方法可以解决这个问题。你可以修改你的数据结构,使得dots只有一个元素,或者time_stamp有一个元素。或者您可以简单地循环一次,正如评论中所建议的那样。

但我认为最好的解决方案是改变你的循环中的逻辑来计算wait_time不同的第一或最后一个周期。例如,你可以选择在最后一个周期没有延迟。

这里有一些代码就是这么做的。特殊情况是最后一次通过,其中n等于len(time_stamp)-1,并且在该情况下简单地将wait_time设置为零。请注意,我产生从n内置在for循环enumerate功能,所以它不需要被初始化为零或手动更新:

for n, (x, y) in enumerate(dots): 
    if n < len(time_stamp)-1: 
     time_stamp[n] = time_stamp[n][:2] 
     time_stamp[n+1] = time_stamp[n+1][:2] 
     time1 = abs(int(time_stamp[n]) - 12) 
     time2 = abs(int(time_stamp[n+1]) - 12) 
     wait_time = abs(int(time1) - int(time2)) 
    else: # special case n >= len(time_stamp)-1, which should be the last pass 
     wait_time = 0 
    x, y = ll2xy(x, y) 
    c = Circle(Point(x, y), int(eye_size[n])) 
    line.append(Point(x,y)) 
    c.fill = Color(255, 255, 0, 62) 
    c.draw(win) 
    t = Polygon((x, y), (x+10, y+5), 
       (x+int(movement_speed[n]), y-int(movement_speed[n])/2)) 
    t.fill = Color("orange") 
    t.draw(win) 
    wait(wait_time) 
+0

非常感谢,这个解决方案允许我遍历地图上的所有点,同时仍然计算我的时间调整。非常感激。 –