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 :

[Algo] + [Python] Analyse d'une formule


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut [Algo] + [Python] Analyse d'une formule
    Bonsoir,

    Je suis entrain de faire un programme qui numerote les variables d'une formule ! exemple : AA /\ BB \/ CC => {A:1,B:2,C:3} !
    l’entête de la fonction (récursive) : numerote ( formule , correspondance ).
    formule est la formule dont on doit numéroter les variables
    correspondance est la structure qui associe le nom de la variable à un numéro (un dictionnaire)

    des idées pour commencer ?

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Points : 182
    Points
    182
    Par défaut Qésaco
    Je pense que ton objectif n'est pas clairement énnoncé

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par WAKAKA Voir le message
    Bonsoir,

    Je suis entrain de faire un programme qui numerote les variables d'une formule ! exemple : AA /\ BB \/ CC => {A:1,B:2,C:3} !

    des idées pour commencer ?
    Salut

    Ben commencer par nous expliquer comment toi tu numérotes tes variables !!! Ensuite suffira de l'expliquer à Python et ça on sait faire (mais je suis certain que quand tu nous l'auras expliqué tu sauras alors l'expliquer à Python)

    Ce qui ce conçoit bien s'énonce clairement...(Boileau)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses,

    Je dois numéroter les variables de la formule , afin de pouvoir représenter les littéraux par des entiers.
    et pour ça je dois coder une fonction récursive numerote(formule,correspondance)

    qui retourne correspondance (un dictionnaire qui contient les variables numérotés)

    Exemple :
    On a formule = A \/ B /\ C ( A ou B et C )
    On doit avoir dans correspondance { A:1, B:2, C:3 }

    Voila, j'espère avoir été assez clair

    Merci d'avance

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Voila, j'espère avoir été assez clair
    En ce qui me concerne non!

    On a formule = A \/ B /\ C ( A ou B et C )
    Que viennent faire ces \/ et /\ ici?

    Peut-être une nouvelle notation, enfin je ne connais pas ce type d'opérateur, à moins que tu veuilles parler de vectoriel???
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réponse fred1599,
    Ces opérateurs sont prédéfinis :
    # operateurs:
    o_variable='var'
    o_non='~'
    o_et='/\\'
    o_ou='\\/'
    o_implique='=>'
    o_equivaut='<=>'

    un autre exemple :
    si on a une formule : (p6 => (~ (p8 => p10))
    on aura comme résultat un dictionnaire correspondance={ p6:1, p8:2, p10:3 }

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Une proposition simple pour trouver tes variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> formule
    '(p6 => (~ (p8 => p10))'
    >>> ch = ""
    >>> for i in formule:
    	if i not in ["=", ">", "<", "~", "(", ")"]:
    		ch += i
    	else:
    		ch += " "
     
     
    >>> print(ch)
     p6        p8    p10  
    >>> print(ch.split())
    ['p6', 'p8', 'p10']
    >>>
    Pour le dico en simplifiant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> dico = {}
    >>> for i, j in enumerate(ch.split()):
    	dico[j] = i + 1
     
     
    >>> dico
    {'p10': 3, 'p8': 2, 'p6': 1}
    A toi de rassembler toutes ces idées pour construire un code propre et fonctionnant sur tout type de formules
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci fred1599
    est ce que vous pouvez me donner une solution récursive s'il vous plaît ?

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Avec ce que je t'ai donné, tu crées ta fonction et tu la présentes sur le forum, on t'aidera par la suite, mais on est pas là pour faire tes devoirs
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Tu trouveras ici des exemples d'analyse syntaxique de formules avec ou sans les modules lex et yacc.
    http://gilles.dubois10.free.fr/Bases.../formules.html
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Une proposition simple pour trouver tes variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> formule
    '(p6 => (~ (p8 => p10))'
    >>> ch = ""
    >>> for i in formule:
    	if i not in ["=", ">", "<", "~", "(", ")"]:
    		ch += i
    	else:
    		ch += " "
     
     
    >>> print(ch)
     p6        p8    p10  
    >>> print(ch.split())
    ['p6', 'p8', 'p10']
    >>>
    Salut

    En partant de ton idée et en passant par les regex
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import re
    f="(p6 => (~ (p8 => p10))"
    re.compile("[=>~()]").sub(r"", f).split()
    ['p6', 'p8', 'p10']


    Citation Envoyé par WAKAKA Voir le message
    Merci fred1599
    est ce que vous pouvez me donner une solution récursive s'il vous plaît ?
    Pourquoi faire du récursif quand l'itératif fonctionne ? Tu sais à quel point c'est lourd pour le processeur de faire du récursif ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/12/2006, 11h31
  2. Déterminer Algo pour une formule mathématique
    Par jekyll_omiwane dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/01/2005, 18h28
  3. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 00h12
  4. [Debutant(e)] Analyse d'une chaîne de caractères
    Par maire106 dans le forum Langage
    Réponses: 6
    Dernier message: 22/03/2004, 15h04
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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