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 :

Arbre de calcul


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut Arbre de calcul
    Bonjour, je voudrais créer une fonction qui parse une expression mathématique (un problème classique pour lequel je n'ai pas trouvé de solution en python). Le but serait quelque chose du genre :

    analyse('2*x+(3+x)') renverrai une liste : ['+','2*x','3+x']

    J'arrive à parser l'expression en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import ast
    st = ast.parse("2*x+(3+x)").body[0]
    print st.value
    print st.value.left
    print st.value.right
    Le problème est que je n'ai pas trouvé l'instruction pour recréer le membre de gauche et de droite. Avez-vous une solution ?

    Merci d'avance,
    Vincent

    P.S : Je ne veux pas utiliser sympy car il effectue des simplifications au moment de la conversion.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Peut-être voir du côté de pyparsing: http://pyparsing.wikispaces.com/

    Je ne le connais pas, mais il y a un exemple ici: http://pyparsing.wikispaces.com/file/view/fourFn.py

    Avec lui, on peut obtenir par exemple:

    '(2+3)/5^2' => ['2', '3', '+', '5', '2', '^', '/']

    C'est de la polonaise inverse, mais on peut peut-être obtenir l'arbre que tu cherches en modifiant sa configuration?


    [Edit] Sinon, avec ast:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    y = ast.parse('2*x+(3+x)', "", "eval")
     
    print ast.dump(y)
    #Expression(body=BinOp(left=BinOp(left=Num(n=2), op=Mult(), right=Name(id='x', ctx=Load())), op=Add(), right=BinOp(left=Num(n=3), op=Add(), right=Name(id='x', ctx=Load()))))
    print "=>", y.body.left, isinstance(y.body.left, ast.BinOp)
    #=> <_ast.BinOp object at 0x021A83D0> True
    print "=>", y.body.op, isinstance(y.body.op, ast.Add)
    #=> <_ast.Add object at 0x021A3350> True
    print "=>", y.body.right, isinstance(y.body.left, ast.BinOp)
    #=> <_ast.BinOp object at 0x021A8430> True
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 121
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    J'ai finalement recréé l'expression à la main via une petite fonction récursive, je pensais qu'elle existait déjà.

    Merci pour la réponse,
    Vincent

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

Discussions similaires

  1. [C] Calcul arbre de possibilité puissance 4
    Par bglacial dans le forum Intelligence artificielle
    Réponses: 2
    Dernier message: 23/11/2011, 23h09
  2. Arbre de calcul et sympy
    Par magicvinni dans le forum EDI/RAD
    Réponses: 1
    Dernier message: 28/08/2011, 19h34
  3. Calculer le niveau d'un arbre
    Par alex2746 dans le forum Général Java
    Réponses: 1
    Dernier message: 23/08/2011, 13h06
  4. Calcul d'un arbre n-aires , debutant
    Par Freedom57 dans le forum Caml
    Réponses: 8
    Dernier message: 05/02/2011, 19h19
  5. [conception] arbre de calculs
    Par Jidévé dans le forum Modélisation
    Réponses: 7
    Dernier message: 10/10/2005, 18h02

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