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 :

chaine de caractere -> commande


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut chaine de caractere -> commande
    Bonjour a tous,
    Alors voila j'ai un petit problème en python
    Malheureusement je n'arrive pas a convertir simplement ma question en mots clefs, et donc je n'arrive pas a effectuer de recherche sur ce sujet sur google.
    Bref, alors voila

    Admettons que j'ai définis une fonction "result"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def result (a,b):
     return a+b
     
    #main
    a = raw_input ("commande:")

    Donc quand on vas lancer le programme, si l'utilisateur écrit "result(2,3)", je voudrais que ce qui est stocké dans ma variable a, puisse être utilisé en tant que commande, et non plus en tant que chaine de caractere. (Je ne sais pas si je suis trés claire).

    En bref, que mon "main" puisse comprendre que je lui demande de réaliser une fonction.

    Pour l'instant, la seule idée qui me vient à l'esprit serai du type interpreteur de comande:
    if (a="result(a,b)") then
    Ce qui va bien si on a une seule fonction, mais quand on en a 200...

    Quelqu'un a la réponse?

    julien

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    La fonction 'exec' devrait faire l'affaire:
    http://python.developpez.com/faq/?pa...es#GenStrDecla
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut Oui mais...
    Bonjour Zavonen,
    Merci pour ta (rapide) réponse!
    Elle marche bien mais...Je cherche la petite bête

    Alors effectivement si je fais le code suivant, ca marche trés bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Def toto:
      print "Hello world"
     
    #main
    a=raw_input("Entrez la fonction a effecuter: ")
    exec(a)
    Par contre, si maintenant au lieux de définir une procédure je définis une VRAI fonction (c'est à dire avec un return)

    j'ai voulu codé un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Def toto(a,b):
      return a+b
     
    #main
    a=raw_input("Entrez la fonction a effecuter: ")
    b=exec(a)
    print b
    Mais la il n'accepte pas...tu as une idée?

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    utiliser exec est deconseillé.
    Je te propose de passer par un dictionnaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def a():                                                                    
        return "fonction a"                                                        
     
    def b():                                                                    
        return "fonction b"                                                     
     
    d = {'a': a, 'b': b}                                                        
    rep = raw_input('nom de la fonction\n>')                                       
     
    retour = d[rep]()                                                             
     
    print retour
    EDIT: je n'ai pas vu que tu avais besoin de passer des arguments à ta fonction.
    Le type d'argument est-il toujours le même (int, str)?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    Les fonctions peuvent utiliser de nombreux type d'arguments différents, et retournent pleins de choses
    (Des listes, des booléens, des objets contenant un peu de tout ca ...)

    Donc passer par un dictionnaire n'est peut etre pas la solution...

    Argh!! Ca veut dire que je vais être obliger de me taper un méga interpreteur de commande a la main? (y'as un gros paquet de fonction différente à utiliser...)

  6. #6
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Citation Envoyé par ju_bicycle Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def toto(a,b):
      return a+b
     
    #main
    a=raw_input("Entrez la fonction a effecuter: ")
    b=exec(a)
    print b
    Mais la il n'accepte pas...tu as une idée?
    Utilises eval à la place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def toto(a,b):
      return a+b
     
    #main
    a=raw_input("Entrez la fonction a effecuter: ")
    b=eval(a)
    print b

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    DANKE!
    Parfait!!

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    variante:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def toto(a,b):
      return a+b
     
    #main
    a=raw_input("Entrez la fonction a effecuter")
    exec("print "+a)
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

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

Discussions similaires

  1. [Débutant] decoupage d'une chaine de caracteres avec la commande strread
    Par jeune informatique dans le forum MATLAB
    Réponses: 4
    Dernier message: 11/05/2010, 13h49
  2. chaine de caractere et arguments d'une commande
    Par vamos dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 02/01/2010, 21h01
  3. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  4. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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