Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何找到元组之间的周长?_Python_Tuples - Fatal编程技术网

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))) 
    
    所以你把一个三元组的元组作为周长的参数。每个元组表示图形中每个点的坐标

    然后,你有两件事要做:

  • 计算每个点之间的距离
  • 添加它们以获得周长
  • 每个步骤都应该是一个函数

    步骤1已开始,但出现错误。对于距离,需要两个点的坐标,因此需要两个元组p1和p2,它们有两个坐标:

    要访问每个坐标,必须使用点p1的x值
    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对象不可下标