Python(带附加的重复值)

时间:2018-02-21 15:18:11

标签: python append equation definition

我有以下公式 Q = [(2 * C * D)/ H]的平方根 我想输入100,150,180所以我想要的输出是18,22,24

所以我的代码是

import math
c=50
h=30
value=[]
def equation(a1,b1,c1):
    for i in (a1,b1,c1):
        value.append(int(math.sqrt(2*c*a1/h)))
        value.append(int(math.sqrt(2*c*b1/h)))
        value.append(int(math.sqrt(2*c*c1/h)))
        print (value)

当我输入等式(100,150,180)时,为什么输出如下?

[18, 12, 24]
[18, 12, 24, 18, 12, 24]
[18, 12, 24, 18, 12, 24, 18, 12, 24]

如何更改代码以便我只获得

[18, 12, 24]

5 个答案:

答案 0 :(得分:2)

循环值只是为了应用相同的公式,在列表理解中,也不打印结果,只需返回它(如果需要,将其打印在调用者中):

import math
c=50
h=30
def equation(a1,b1,c1):
    return [int(math.sqrt(2*c*x/h)) for x in (a1,b1,c1)]

print(equation(100,150,180))

结果:

[18, 22, 24]

(这样可以保存这种循环/我在哪里定义返回值错误和大量复制/粘贴)

变量带有变量参数(相同的调用语法,保存参数打包和解压缩,因为所有参数都得到相同的处理):

def equation(*args):
    return [int(math.sqrt(2*c*x/h)) for x in args]

答案 1 :(得分:0)

为什么使用for循环?

import math
c=50
h=30
def equation(a1,b1,c1):
    value=[]
    value.append(int(math.sqrt(2*c*a1/h)))
    value.append(int(math.sqrt(2*c*b1/h)))
    value.append(int(math.sqrt(2*c*c1/h)))
    print (value)

答案 2 :(得分:0)

for循环似乎有点不必要了。如果您只是希望函数返回三个数字的列表,则可以使用:

import math

c = 50
h = 30


def equation(a1, b1, c1):
    value = []
    value.append(int(math.sqrt(2 * c * a1 / h)))
    value.append(int(math.sqrt(2 * c * b1 / h)))
    value.append(int(math.sqrt(2 * c * c1 / h)))
    print(value)


equation(100, 150, 180)

答案 3 :(得分:0)

无需for循环。

import math
c=50
h=30
value=[]
def equation(a1,b1,c1):
     value.append(int(math.sqrt(2*c*a1/h)))
     value.append(int(math.sqrt(2*c*b1/h)))
     value.append(int(math.sqrt(2*c*c1/h)))
     print (value)

答案 4 :(得分:0)

在我看来,这就是你所追求的目标:

import math

c = 50
h = 30

def equation(values):
    return [int(math.sqrt(2*c*i/h)) for i in values]

input = [100, 150, 180]

print(equation(input))

输出:

[18, 22, 24]