Python 循环中的上一个和下一个元素
我有一份要点清单:Python 循环中的上一个和下一个元素,python,list,python-3.x,for-loop,Python,List,Python 3.x,For Loop,我有一份要点清单: a = [(2,4),(34,53),(34,2),(84,64)] 这些点按顺时针顺序列出,并形成一个多边形。我需要找到多边形的周长,它是相邻点之间距离的总和。我必须使用距离公式来计算距离,因此它必须是(2,4)和(34,53)之间的距离,然后是(34,53)和(34,2)之间的距离,依此类推 如果循环使用距离公式来使用第一个元素和第二个元素的点,然后移动到第二个和第三个元素,依此类推,最后当它位于最后一个元素时,它在最后一个元素和第一个元素上使用距离公式。。有点像单词包
a = [(2,4),(34,53),(34,2),(84,64)]
这些点按顺时针顺序列出,并形成一个多边形。我需要找到多边形的周长,它是相邻点之间距离的总和。我必须使用距离公式来计算距离,因此它必须是(2,4)
和(34,53)
之间的距离,然后是(34,53)
和(34,2)
之间的距离,依此类推
如果循环使用距离公式来使用第一个元素和第二个元素的点,然后移动到第二个和第三个元素,依此类推,最后当它位于最后一个元素时,它在最后一个元素和第一个元素上使用距离公式。。有点像单词包装?使用模数除法来计算索引。例如,如果有一个长度为n的点列表,并且j是索引,则可以使用
j=(j+1)%n
计算换行索引 定义多边形周长函数
也可以使用多边形的点列表作为函数poly_peri(a)的参数。也就是说,当您调用函数poly_peri()时,您会将其称为poly_peri([(2,4),(34,53),(34,2),(84,64)]。这将为作为参数的任何内容输出相同的结果
import math
def poly_peri(a):
points = a
# Intializing perimeter to be 0
perimeter = 0
# MAIN LOOP
#[len(points) - 1] because we dont want to continue after the last number
a.append(a[0])
for i in range(len(points) - 1):
distance = ((points[i + 1][0] - points[i][0])**2 + (points[i+1][1] - points[i][1])**2)
perimeter += math.sqrt(distance)
return perimeter
更简单的for循环是:
>>> for i in range(len(a)):
print a[i-1], a[i]
(84, 64) (2, 4)
(2, 4) (34, 53)
(34, 53) (34, 2)
(34, 2) (84, 64)
考虑“负”距离
import math
perimeter = 0
a = [(2,4),(34,53),(34,2),(84,64)]
for i in range(len(a)):
k = i+1 if (i<len(a)-1) else 0
x,y = a[i]
x2,y2 = a[k]
edge = math.fabs(math.sqrt(math.pow(y2-y, 2) + math.pow(x2-x,2)))
print("""Edge {}: {}""".format(i,edge))
perimeter += edge
# when run
Edge 0: 58.52349955359813
Edge 1: 51.0
Edge 2: 79.64923100695951
Edge 3: 101.6070863670443
>>> print("""Perimeter: {}""".format(perimeter))
Perimeter: 290.7798169276019
导入数学
周长=0
a=[(2,4)、(34,53)、(34,2)、(84,64)]
对于范围内的i(len(a)):
k=i+1如果(i>>打印(““周长:{}”“”。格式(周长))
周长:290.7798169276019
您的逻辑没有找到(84,64)和(2,4)之间的距离,您需要在开始之前添加a.append(a[0])
loop@Ravichandra谢谢你让我知道!
import math
perimeter = 0
a = [(2,4),(34,53),(34,2),(84,64)]
for i in range(len(a)):
k = i+1 if (i<len(a)-1) else 0
x,y = a[i]
x2,y2 = a[k]
edge = math.fabs(math.sqrt(math.pow(y2-y, 2) + math.pow(x2-x,2)))
print("""Edge {}: {}""".format(i,edge))
perimeter += edge
# when run
Edge 0: 58.52349955359813
Edge 1: 51.0
Edge 2: 79.64923100695951
Edge 3: 101.6070863670443
>>> print("""Perimeter: {}""".format(perimeter))
Perimeter: 290.7798169276019