Python (повторяющиеся значения с добавлением)

У меня есть следующая формула 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 ответов

Решение

Цикл значений только для того, чтобы применить ту же формулу в понимании списка, также не печатать результат, просто вернуть его (и при необходимости вывести его в вызывающую программу):

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]

Мне кажется, что это то, что вы были после:

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]

Почему вы используете 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)

Цикл 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)

Нет необходимости 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)
Другие вопросы по тегам