我正在为我的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图上的坐标对,获取所有线条的距离,并给出线条组成的多边形的周长。抱歉,如果这个问题不清楚。但是无论输入什么,列表都不会被填充。
答案 0 :(得分:0)
range(end)
在[0,end)(不包括结尾)中进行迭代
在这种情况下,您希望循环的最后一轮具有x1[i]
和x2=x1[len(x)-1]
,其中i
是len(x1)-2
因此您需要range(len(x1)-1)
答案 1 :(得分:0)
range(x)
为您提供从0到 x-1
假设您的列表中有10个元素,您想要的是将for
的{{1}}循环从0到8,并为每个循环计算点i和i + 1之间的距离。
因此它应该是i