Как попросить пользователя ввести функцию в Python 3 - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь сделать программу, чтобы найти предел функции, однако, я не могу найти какой-либо эффективный способ попросить пользователя ввести функцию или преобразовать любой вид пользовательского ввода в одну, лучшую путь, который я нашел, использовал: f= lambda n: eval(input("")
однако, используя этот метод, каждый раз, когда я запускаю цикл, пользователю будет предлагаться вводить функцию снова и снова, что в этом случае делает ее непригодной для использования. Я приветствую любые отзывы Извините, если сообщение или мой английский плохой, я прошу прощения за это, я новичок здесь, а не носитель английского языка, если это поможет, вот полный код (со всем на французском)

from lycee import *
n= int
# Rang actuel
f= lambda n: eval(input("veuillez introduire la fonction avec pour variable n"))
# Fonction introduite par l´usager
m= int(input("veuillez introduire la puisance de la valeur aussi grande, petite, ou proche que l´on veut"))
# Valeur max
l= int(input("veuillez introduire une limite eventuelle de la suite"))
d= int
# Prend une valeur selon la limite trouvé ou non
p= int(input("veuillez intoduire le pas"))
# Pas introduit par l´usager
x=int
# Valeur actuelle de la suite
n=1
d=0
x=0
#La limite est elle −∞?
while l>-10^m and n<10^15+1:
    n=n+p
    x=f(n)
    if n==10^15+1:
        print ("Après le calcul d’un billiard de termes, la suite ne semble pas tendre vers −∞")
    else:
        d=1
n=1
x=0
#La limite est elle +∞?
while l<10^m and n<10^15+1:
    n=n+p
    x=f(n)
    if n==10^15+1:
        print ("Après le calcul d’un billiard de termes, la suite ne semble pas tendre vers +∞")
    else:
        d=2
n=1
x=0
#La limite est elle l?
if l>=0:
    while x+l>10^-m and n<10^15+1:
        n=n+p
        x=f(n)
        if n==10^15+1:
            print ("Après le calcul d’un billiard de termes, la suite ne semble pas tendre vers l")
        else:
           d=3
else:
    while x-l>10^-m and n<10^15+1:
        n=n+p
        x=f(n)
        if n==10^15+1:
            print ("Après le calcul d’un billiard de termes, la suite ne semble pas tendre vers l")
        else:
            d=3
if d==1:
    print ("Après le calcul d’un billiard de termes, la suite semble avoir pour limite −∞")
else:
    if d==2:
        print ("Après le calcul d’un billiard de termes, la suite semble avoir pour limite +∞")
    else:
        if d==3:
            print ("Après le calcul d’un billiard de termes, la suite semble avoir pour limitel")
        else:
            print ("Après le calcul d’un billiard de termes, la suite semble ne pas avoir de limite")

1 Ответ

0 голосов
/ 03 ноября 2018

Вы можете использовать функцию compile для компиляции ввода пользователя в объект AST, чтобы ваша lambda функция могла eval объект AST вместо того, чтобы снова запрашивать ввод у пользователя:

func = compile(input("veuillez introduire la fonction avec pour variable n"), '<input>', 'eval')
f = lambda n: eval(func)
...