使用* args将毕达哥拉斯定理推广为n个事物

时间:2019-02-16 19:52:28

标签: python python-3.x arguments parameter-passing args

当您不确定向我的函数传递多少个参数时,我了解到通常使用* arg参数。我正在尝试创建一个广义的毕达哥拉斯定理,以便它可以计算出n个事物,

pytha(*arg)

使用

print(pytha(x,y)) = np.sqrt(x**2 + y**2)
print(pytha(x,y,z)) = np.sqrt(x**2 + y**2 + z**2)
print(pytha(x,z)) = np.sqrt(x**2 + z**2)
print(pytha(x-7,y)) = np.sqrt((x-7)**2 + y**2)
print(pytha(x-3,y-5,z-8)) = np.sqrt((x-3)**2 + (y-5)**2 + (z-8)**2)
print(pytha(x,y,z,t)) = np.sqrt(x**2 + y**2 + z**2 + t**2)

我已经完成

def pytha(*arg):

但是我不知道如何在函数体内操纵* arg。那么如何使用* arg创建此函数呢?

2 个答案:

答案 0 :(得分:2)

您提供的参数将以您在函数定义期间提供的名称存储在元组中。如果它是*arg,则该元组将是arg,然后您就可以使用该名称了。

>>> import numpy as np
>>> def pytha(*arg):
...     v = [i**2 for i in arg]   # collected all in one list
...     return np.sqrt(sum(v))    # give argument by summing the list items
... 
>>> pytha(2,3,4)
5.385164807134504

答案 1 :(得分:1)

下面的解决方案与@Vicrobot的解决方案基本相同,但不使用numpy。您可以遍历arg并计算每个元素的平方值,然后取这些值之和的平方根:

import math

def pytha(*arg):
    return math.sqrt(sum(elem**2 for elem in arg))