Python 如何找到元组之间的周长?
所以我必须写一个函数,其中元组是给定的,你必须计算它们之间的距离,然后把它们加在一起。我不知道元组是如何工作的,所以请帮忙。这是我到目前为止所拥有的Python 如何找到元组之间的周长?,python,tuples,Python,Tuples,所以我必须写一个函数,其中元组是给定的,你必须计算它们之间的距离,然后把它们加在一起。我不知道元组是如何工作的,所以请帮忙。这是我到目前为止所拥有的 import math #Permimeter def perimeter(x1,x2,y1,y2): dist = math.sqrt((x2-x1)**2 + (y2-y1)**2) return dist 它不起作用,表示元组的操作数类型不受支持。我不知道如何确保它仍然有效,如果你有更多或更少的投入 下面是一个测试用例,它应该做什么
import math
#Permimeter
def perimeter(x1,x2,y1,y2):
dist = math.sqrt((x2-x1)**2 + (y2-y1)**2)
return dist
它不起作用,表示元组的操作数类型不受支持。我不知道如何确保它仍然有效,如果你有更多或更少的投入
下面是一个测试用例,它应该做什么
tri = ((0, 0), (1, 0), (0, 1))
>>> perimeter(tri)
3.414213562373095
把问题分成几个部分。希望这里没有人给你一个完整的答案,因为它看起来像H/W。但是你会得到关于错误代码的提示 如上所述,“周长”函数计算作为x1、x2、y1、y2值传入的2个点之间的距离。该函数不能将元组作为输入。所以你有两件事要做:
In [13]: tri = ((0, 0), (1, 0), (0, 1))
In [14]: tri[0]
Out[14]: (0, 0)
In [15]: tri[0][0]
Out[15]: 0
In [16]: x1 = tri[0][0] # etc...
代码中的错误是试图将元组而不是4个变量传递给函数 函数的基本作用是求两点之间的距离。要获得周长,需要添加所有点之间的距离。由于它是三角形,因此需要添加3条边的长度。 一种方法是迭代所有点,并将它们添加到变量中。最好的方法是使用一个生成器,然后求和。 解决方案代码为:
import math
#Perimeter
def perimeter(x1,x2,y1,y2):
dist = math.sqrt((x2-x1)**2 + (y2-y1)**2)
return dist
tri = ((0, 0), (1, 0), (0, 1))
peri = sum(perimeter(tri[i][0], tri[i-1][0], tri[i][1], tri[i-1][1]) for i in range(len(tri)))
print(peri)
Permission基本上是在整个列表中循环,一次两个,最后一个和第一个,第一个和第二个,第二个和第三个,并将它们传递给函数。然后将所有值相加得到总周长
如果您想用一个函数完成整个任务,请尝试:
import math
def perimeter(tri):
return sum(math.sqrt((tri[i][0]-tri[i-1][0])**2, (tri[i][1]-tri[i-1][1])**2) for i in range(len(tri)))
tri = ((0, 0), (1, 0), (0, 1))
print(perimeter(tri)
您可能喜欢此解决方案,唯一的条件是touples的顺序正确:
tri = ((0, 0), (1, 0), (0, 1))
def perimeter(corners):
dist = 0
i = 0
for corner in corners:
print(corner)
if(i != len(corner)):
dist += math.sqrt((corners[i][0]-corners[i+1][0])**2 + (corners[i][1]-corners[i+1][1])**2)
else:
dist += math.sqrt((corners[0][0]-corners[i][0])**2 + (corners[0][1]-corners[i][1])**2)
i+=1
return dist
print(perimeter(tri))
您可以得到x1 y1 x2 y2或仅点:
import math
def distance(point1, point2):
x1 = point1[0]
y1 = point1[1]
x2 = point2[0]
y2 = point2[1]
return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
print(distance((1, 2), (3, 4)))
您将获得:
C:\Users\This_User\AppData\Local\Programs\Python\Python37-32\python.exe
2.8284271247461903
Process finished with exit code 0
如果您这样做:
tri = ((0, 0), (1, 0), (0, 1))
perimeter(tri)
相当于
perimeter(((0, 0), (1, 0), (0, 1)))
所以你把一个三元组的元组作为周长的参数。每个元组表示图形中每个点的坐标
然后,你有两件事要做:
p1[0]
和y值p1[1]
对于第二步,只需创建另一个以tri
为参数的函数。在这个函数中,您只需要添加函数1(p1,p2)的三个调用的结果。您只需使用for循环来了解如何执行以下操作:
#这是一个通用示例
#与
tri=((a1,a2),(b1,b2),(c1,c2),(d1,d2))
#在函数2的for循环中,应该调用
职能2(a、b)
职能2(b、c)
职能2(c、d)
职能2(d,a)
该示例令人困惑,因为元组将在两个级别上使用。首先将点表示为一对x和y值。第二步是将多个点收集成一个三角形。这也是令人困惑的,因为上面的周长函数看起来应该称为距离。代码方面,可以从重命名周长函数距离并修改其参数以获取(x,y)元组开始。如果不全部给出,就会得到一个函数距离(a,b),其中a和b是元组。你可以这样称呼它:
distance((0,1),(0,))
阅读该调用意味着找到两点(0,1)和(0,0)之间的距离。在该函数中,您将使用方括号到达点的x部分或y部分
def distance(a,b):
a_x = a[0]
a_y = a[1]
# more details omitted
然后编写一个新的周长函数来获取点的元组(本身就是元组)并计算周长,如第二个代码段所示。呼叫距离的方式如下所示:
a=(0,0)
b=(0,1)
d=distance(a,b)
元组的工作方式与索引列表类似,如果元组=('a','b','c'),元组[0]将是'a',元组[2]将是'c'。
tri
有3个元组,函数定义需要4个变量。那么,在你的例子中,x1,x2,y1,y2应该是什么?这是作业中的例子,我不知道如何使用元组给出一个有效的例子,你在代码中的公式是关于两点之间的距离,但是你的tri
变量有3个元组,它表示3个点,这很好,但您应该具有范围(1,len(tri))
@valentinignal从默认值开始的原因是0,因此它采用最后一个值。这样就考虑了所有的要点。否则只会有两个边,表示int对象不可下标