【问题标题】:python array not being populated [duplicate]python数组没有被填充[重复]
【发布时间】:2019-03-22 18:14:08
【问题描述】:

我正在为我的 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 的高贵巫师。

编辑:脚本的重点是从用户那里获取二维图形上的坐标对,获取所有线的距离,并给出线组成的多边形的周长。抱歉,如果问题中不清楚。但无论输入是什么,列表仍然没有被填充。

【问题讨论】:

  • 你的意见是什么?
  • @bunbun 我应该在问的时候解释一下,脚本的重点是从用户那里获取二维图上的坐标对,获取所有线的距离,并给出周长线条组成的多边形。
  • 学习调试。例如,添加print("i " + str(i)) 作为循环的第一行会给你一个关于发生了什么的重要提示
  • 如果你有 3 个或更多点,它会被附加,如果你在最后做print(dists),你可以在dists 中看到一些值。但是,您的代码并没有为您提供所需的边界

标签: python list loops indexing append


【解决方案1】:

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

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

所以你需要range(len(x1)-1)

【讨论】:

    【解决方案2】:

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

    的数字序列

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

    因此应该是for i in range(len(xl) -1):

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2020-01-25
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多