python数组未填充

时间:2018-10-18 00:57:55

标签: python list loops indexing append

我正在为我的Python类分配一个作业,我非常接近完成它,但是有一个我似乎无法解决的烦人的问题,但是在解释之前,这是我的代码:

import math as m
def distance(x1,y1,x2,y2):
    xdel=(x2-x1)**2
    ydel=(y2-y1)**2
    print(xdel, "is xdel")
    print(ydel, "is ydel")
    dist = m.sqrt(xdel+ydel)
    return dist
xl = []
yl = []
dists = []
while True:
    ux = input("X for coordinate (blank for exit): ")
    if ux == "":
        break
    ux = int(ux)
    uy = int(input("Y for coordinate: "))
    xl.append(ux)
    yl.append(uy)
for i in range(len(xl)-2):
        x2 = xl[i+1]
        y2 = yl[i+1]
        dist = distance(xl[i],yl[i],x2,y2)
        dists.append(float(dist))        
perimeter = sum(dists)
print(perimeter)

我的列表dists没有被for循环的最后一行代码附加,我不知道为什么。我觉得我已经用尽了大一新生的编码技巧来解决这个问题,所以请转向StackOverflow的高贵向导。

编辑:脚本的要点是从用户那里获取2d图上的坐标对,获取所有线条的距离,并给出线条组成的多边形的周长。抱歉,如果这个问题不清楚。但是无论输入什么,列表都不会被填充。

2 个答案:

答案 0 :(得分:0)

range(end)在[0,end)(不包括结尾)中进行迭代

在这种情况下,您希望循环的最后一轮具有x1[i]x2=x1[len(x)-1],其中ilen(x1)-2

因此您需要range(len(x1)-1)

答案 1 :(得分:0)

range(x)为您提供从0到 x-1

的数字序列

假设您的列表中有10个元素,您想要的是将for的{​​{1}}循环从0到8,并为每个循环计算点i和i + 1之间的距离。

因此它应该是i