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)