#python
Вопрос:
Я новичок в python и у меня проблема с получением входных данных из лямбды. Я создал функцию для вычисления:
def d_a():
d_a_compute = lambda v_i, t, a: (v_i * t) (0.5 * a) * (t ** 2)
print("KINEMATIC EQUATIONS")
print ("d_a = Displacement with acceleration")
print ("v_f = Final velocity")
print ("v_f_squared = Final velocity squared")
print ("d = Displacement without acceleration")
print ("t = Time")
print ("a = Acceleration")
print ("v_i = Initial velocity")
print ("===================================")
var = ["d_a", "v_f", "v_f_squared", "d", "t", "a","v_i"]
print ("1.", var[0])
print ("2.", var[1])
print ("3.", var[2])
print ("4.", var[3])
print ("5.", var[4])
print ("6.", var[5])
print ("7.", var[6])
print ("===================================")
num = int(input("Input the number you want to compute: ")) - 1
choice = (var[num])
if choice == "d_a":
float(input("Enter the initial velocity: "))
float(input("Enter the time: "))
float(input("Enter the acceleration: "))
Как вы можете видеть, я не вызывал функцию, потому что сначала хочу знать, как подключить мои входные данные к лямбде в моей функции. Я хочу , чтобы моя начальная скорость была связана с v_i
и т. Д. Как я могу это сделать?
Комментарии:
1. Я отредактировал свою озабоченность. Я намеренно не вызываю эту функцию, потому что не знаю, как я могу подключить свои входные данные из лямбда.
2. Я не понял твоего вопроса. Почему бы вам просто не назначить три входных параметра переменным, а затем передать эти три переменные в качестве аргументов
d_a_compute
?
Ответ №1:
Я думаю, ты сможешь это сделать … но вам, вероятно, не следует (см. PEP8 )
# def d_a(): < you dont need(or want) this line ...
d_a_compute = lambda v_i, t, a: (v_i * t) (0.5 * a) * (t ** 2)
...
if choice == "d_a":
result = d_a_compute( # <- you need to actually call you lambda
float(input("Enter the initial velocity: ")), # v_i
float(input("Enter the time: ")), # t
float(input("Enter the acceleration: ")) # a
)
print("DA = ", result)
как указано в комментариях, почти наверняка более читабельно просто использовать обычную функцию здесь (на самом деле в PEP8 явно указано, что вы должны использовать определение обычной функции, а не присваивать лямбда переменной).
def d_a_compute(v_i, t, a):
return (v_i * t) (0.5 * a) * (t ** 2)
вместо
Комментарии:
1. Я попробовал ваш обновленный код, я не получил ошибки. Но за то, что я позвонил в d_a, я должен получить ответ или нет?
2. @TomKarzes, потому что он специально сказал, что хочет лямбду и реализовал лямбда-бит … пожалуйста, укажите, где вы видите «вы никогда не должны определять подобную функцию» … (Я в основном согласен, но я не думаю, что это какой-то смертный грех)
sqrt = lambda x:x**0.5
это то, что я делал раньше3. @JoranBeasley Привет, спасибо! Теперь я все понял! Большое вам спасибо! Ты спас меня
4. @JoranBeasley Если это так, то это вопрос x-y, и подходящим ответом является объяснение этого как такового, а не поощрение кода, который не имеет смысла.
5. @TomKarzes добавлен в мое редактирование, чтобы препятствовать этому …