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 :

passer une chaine en nom de variable


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Par défaut passer une chaine en nom de variable
    bonjour
    je programme un jeu de poker,
    je voudrais savoir si il y a une méthode pour passer une chaine de caractère en nom de variable. exemple :
    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
    16
    17
    18
    19
     
    import random
     
    class Partie(object):
        def __init__(self,moi,lst_a,pot_d):
            nb_j=len(lst_a)+1
            ordre=[]
            for i in xrange(self.nb_j):
                ordre.append(i+1)
            random.shuffle(ordre)
            self.moi=Joueur(moi,pot_d)
            self.lst_a=[]
            self.nb_donne=0
     
            for i in lst_a:  
                i=Joueur(self.lst_a[i],pot_d)     #  <------- probleme ici
                self.lst_a.append(i)
    moi='moi'
    partie=Partie(moi,['Robert','Jean-Claude','Thomas'],500)
    ou si quelqu'un pense a une fonction 'maison' se serait cool aussi.

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    • self.lst_a est une liste et tu l'indexes avec une chaîne.
    • De toute façon, self.lst_a est une liste vide, donc même si tu l'indexais avec un entier ça n'irait pas.

    En fait, je ne comprends pas ce que tu veux faire. Qu'est censé être le premier argument que tu passes au constructeur de la classe Joueur ?
    Si c'est seulement le nom du joueur, ce sera i tout simplement (niveau style, c'est pas top d'appeler une variable de type chaîne i, vaut mieux la réserver pour des variables entières).

  3. #3
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Salut, j'ai pas lu ton code mais vu ta question, je dirais que le plus apprprié serait d'utiliser un dictionnaire
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dico={}
    for x in ('bla','bli'):
          dico[x]=une_valeur_ou_ce_que_tu_veux
    ...
    ...
    #pour voir ensuite la valeur de ta 'variable', par exemple 'bla':
    print dico['bla']
    Ainsi tu peux en quelque sorte centraliser autant de variables que tu veux dans un objet dictionnaire (ou une liste si telle est ta préférence). C'est pratique pour créer dynamiquement des objets avec un nombre variable de paramètres et/ou de variables... @+++

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Par défaut
    Salut, j'ai moi aussi un problème concernant la création de dictionnaires.
    Je veux créer plusieurs dictionnaires suivant une liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    li=["a","b","c","d","e"]
    x=0
    dico={}
    liste3=[]
     
    for lettre in li:
     
        dico['valeur']=x
        dico['alpha']=lettre
        liste3.append(dico)
        print liste3
    Mon problème c'est que je me retrouve avec une liste avec des dictionnaires identiques :
    liste3=[{'lettre': 'e', 'valeur': 0}, {'lettre': 'e', 'valeur': 0}, {'lettre': 'e', 'valeur': 0}, {'lettre': 'e', 'valeur': 0}, {'lettre': 'e', 'valeur': 0}]
    Au lieu d'avoir :
    liste3=[{'lettre': 'a', 'valeur': 0}, {'lettre': 'b', 'valeur': 0}, {'lettre': 'c', 'valeur': 0}, {'lettre': 'd', 'valeur': 0}, {'lettre': 'e', 'valeur': 0}]

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Oui car c'est un seul et même dico que tu modifies à chaque fois; liste3 contient cinq références au même dico. Pour corriger cela il suffit de déplacer la création du dico (la ligne dico={}) à l'intérieur de la boucle, ou plus joli avec une list comprehension:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    li=["a","b","c","d","e"]
    x=0
    liste3 = [{'valeur':x,'alpha':lettre} for lettre in li]
    Mais je m'interroge sur ce que tu vas faire avec une telle structure de données (une liste de dictionnaires). Un simple dictionnaire ne te suffit pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico3 = dict.fromkeys(li,0)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Par défaut
    Merci de ton aide
    Mais je m'interroge sur ce que tu vas faire avec une telle structure de données (une liste de dictionnaires)
    J'avais vu ici qu'il faisait une liste de dictionnaire pour faire un équivalent de base de données.
    Seulement ça ne fonctionne pas pour ce que je veux faire.

    En fait j'ai un "fichier.csv" du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a,100,45,11
    b,100,12,01
    c,20,dc,n5
    ...
    J'ai récupéré une nouvelle valeur que j'associe à chaque lettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico{'a'='0','b'='1f','c'='52'}
    Après je voudrai mettre à jour mon fichier csv comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a,0,45,11
    b,1f,12,01
    c,52,dc,n5
    ...

  7. #7
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    j'ai du crée des variables (enfin de classes ici) dynamiquenement depuis leurs nom via un importe, donc pour crée une variable depuis le nom, tu doit proceder comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locals()["mavariable"] = mavaleur
    , ici ce sont des variables locales, tu peut aussi remplacer locals par globals pour créer des variables globales, j'ai utilisé ce code la pour le faire (bon il est un peut plus complexe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    globals()[modname.capitalize()] = getattr(__import__(modname, globals(), locals()), modname.capitalize())

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

Discussions similaires

  1. passer une chaine contenu dans une variable en nom de variable
    Par spiro13 dans le forum Général Python
    Réponses: 5
    Dernier message: 25/04/2007, 12h14
  2. [VB.Net 2.0/xsd] Comment passer une chaine de connexion dynamiquement ?
    Par graphicsxp dans le forum Accès aux données
    Réponses: 4
    Dernier message: 21/07/2006, 11h20
  3. Réponses: 3
    Dernier message: 12/06/2006, 11h18
  4. Réponses: 6
    Dernier message: 29/11/2005, 16h40
  5. Réponses: 11
    Dernier message: 10/05/2004, 10h49

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