Лямбда-функция не принимает сопоставление с помощью ввода (Python)

Как сделать так, чтобы функция в лямбда-форме принимала правила отображения через ввод вместо явного указания в функции?

Вот мой код, я пытаюсь создать программу для числовой интеграции.

while True:

 fx=input("Enter a function: ")
 a=int(input("Choose lower integration limit: "))
 b=int(input("Choose upper integration limit: "))
 delta=float(input("Choose delta x: "))

 step=int(1/delta)

 interval=list(range((a*step),(b*step)))
 f= lambda x: (x**2)*delta

Теперь я хочу заменить эту часть (x**2) для произвольного многочлена через вход fx

 result=map(f,interval)
 print(sum(list(result))*(delta**2))


continue

если я попробую заменить (x**2) за fx это выдаст эту ошибку:

Traceback (most recent call last):
  File "C:\Users\Christian\Desktop\Python-Programme\Nummerische         Integration.py", line 13, in <module>
    print(sum(list(result))*(delta**2))
  File "C:\Users\Christian\Desktop\Python-Programme\Nummerische    Integration.py", line 11, in <lambda>
    f= lambda x: fx*delta
TypeError: can't multiply sequence by non-int of type 'float'

* Я полностью осознаю, что это, вероятно, не оптимальная программа для числовой интеграции, причина, по которой я ее создаю, заключается в том, чтобы просто тренировать свои навыки программирования при создании программ, которые я все еще мог бы теоретически использовать.

2 ответа

Решение

Независимо от вопроса, если это имеет смысл, ошибка происходит из-за несоответствия типов:

Когда вы получаете вход от fx=input("Enter a function: ") переменная fx будет иметь тип str, Пытаться print(type(fx)),

Когда вы затем выполните fx*delta в основном вы пытаетесь умножить строку на числовое значение, что не имеет смысла. Таким образом ваша ошибка TypeError: can't multiply sequence by non-int of type 'float',

Быстрое решение будет

while True:
    n=int(input("Enter degree of polynomial: "))
    print(type(fx))
    a=int(input("Choose lower integration limit: "))
    b=int(input("Choose upper integration limit: "))
    delta=float(input("Choose delta x: "))
    step=int(1/delta)
    interval=list(range((a*step),(b*step)))
    f= lambda x: (x**n)*delta
    result=map(f,interval)
    print(sum(list(result))*(delta**2))
    continue

Для продвинутого решения нужен способ разбить ваш строковый ввод в лямбда-функцию, что, я думаю, не так просто.

Является

f = lambda x: fx(x) * delta

то, что ты хочешь?

Тогда вы должны войти lambda x: x**2 для FX.

Но может быть, это слишком рано для продвинутых концепций, таких как функциональное программирование, так как Python старается не уделять им слишком много внимания? Например, вы можете начать с того, что сделаете этот фрагмент кода более приятным и корректным для любой функции.

step=int(1/delta)
interval=list(range((a*step),(b*step)))
result=map(f,interval)
print(sum(list(result))*(delta**2))
Другие вопросы по тегам