IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Saisie d'une fonction dans un script


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 56
    Par défaut Saisie d'une fonction dans un script
    Bonjour à tous,
    je débute en Python dans le cadre des cours de mathématiques niveau Lycée pour des algorithmes assez simples.
    Je cherche s'il est possible de saisir l'expression algébrique d'une fonction par une commande "Input" afin de l'utiliser pour des calculs sans avoir besoin de modifier le source Python.
    Je sais faire en définissant une fonction comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def f(x):
        return(x**2+1)
    puis son utilisation par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    a=10.
    h=0,001
    t=(f(a+h)-f(a))/h
    print(h,t)
    Les instructions ci-dessus permettent le calcul du nombre dérivé f'(a) pour f définie par f(x)=x^2+1.
    Comment faire pour changer de fonction sans revenir dans le script pour changer la définition de la fonction f?
    Merci pour toute idée d'amélioration et de simplification.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par pzorba75 Voir le message
    Comment faire pour changer de fonction sans revenir dans le script pour changer la définition de la fonction f?
    Si "x**2+1" est la chaîne de caractères saisie, on peut l'évaluer comme instruction avec eval:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> x = 1
    >>> eval('x**2 + 1')
    2
    >>>
    et écrire une fonction f:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def f(x, s):
         return eval(s)
    Mais bon, vous vous rendez compte que çà équivaut de demander à l'utilisateur de saisir les instructions de votre programme.
    Ce qui l'oblige à connaître un peu la syntaxe du langage et être "gentil" car sinon çà va planter ou exécuter des instructions qui feront le ménage de votre disque dur.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Et si au lieu de passer par un input clavier, vous passiez par un input fichier ?

    1ere option: vous avez un fichier d'input, qui contient uniquement la définition d'une fonction f. L'utilisateur peut modifier à souhait ce fichier pour modifier la fonction f

    2eme option: vous avez plusieurs fichier différents, contenant chacun une fonction f. A lancement de votre programme on demande en input dans quel fichier prendre la fonction f

    3eme option: 1 seul fichier, avec plusieurs fonctions dedans (nommées f1,f2,f3, ... par exemple). Au lancement du programme, demander à l'utilisateur le nom de la fonction qu'il souhaite utiliser. Le fichier d'entrée est également modifiable (l'utilisateur peut éditer ce fichier pour y modifier des fonctions, où en rajouter des nouvelles)

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 56
    Par défaut
    Citation Envoyé par wiztricks Voir le message

    Mais bon, vous vous rendez compte que çà équivaut de demander à l'utilisateur de saisir les instructions de votre programme.
    Ce qui l'oblige à connaître un peu la syntaxe du langage et être "gentil" car sinon çà va planter ou exécuter des instructions qui feront le ménage de votre disque dur.

    - W
    Je mesure les risques d'erreur, mais pour mon usage personnel, avec quelques privilèges, je pense qu'éviter les modifications de la fonction dans le script peut avoir des avantages. L'idéal serait de pouvoir "compiler" le code saisi dans l'input avant de l'exécuter dans eval(...) pour éviter des anomalies pendant l'exécution de la fonction.
    Je vais rester simple et m'en tenir à cette solution qui va bien pour ce que je cherche à faire.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par pzorba75 Voir le message
    L'idéal serait de pouvoir "compiler" le code saisi dans l'input avant de l'exécuter dans eval(...) pour éviter des anomalies pendant l'exécution de la fonction.
    On peut s'amuser à écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> s = 'x**2 + 1' 
    >>> code = compile(f'def f(x): return {s}', 'test', 'exec')
    >>> exec(code)
    >>> f(2)
    5
    mais il y a pas mal de choses en comprendre avant de pouvoir écrire et utiliser raisonnablement ce genre de code.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 56
    Par défaut
    il y a pas mal de choses en comprendre avant de pouvoir écrire et utiliser raisonnablement ce genre de code.

    - W[/QUOTE]

    Je retiens votre réponse et je vais essayer d'apprendre un peu plus pour l'utiliser avec précaution.
    Merci beaucoup.

  7. #7
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Finalement, c'est peut-être un module de calcul formel dont tu as besoin, comme SymPy par exemple. Regardes cette fonction de parsing par exemple. A creuser.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Appeler une fonction dans un script Lua
    Par Roland Chastain dans le forum Free Pascal
    Réponses: 4
    Dernier message: 08/02/2015, 11h55
  2. [PHP 5.0] Creer une fonction qui retourne une variable dans le script
    Par keaton7 dans le forum Langage
    Réponses: 8
    Dernier message: 10/02/2009, 14h09
  3. Réponses: 4
    Dernier message: 01/04/2008, 15h24
  4. [JS] Appeler une fonction dans un script externe
    Par agent007se dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/03/2007, 12h30
  5. Réponses: 8
    Dernier message: 30/08/2006, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo