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 :

générer des variables


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut générer des variables
    Bonsoir , je me demandais comment on faisait pour générer des variables préalablement définies . Je veux créer environ 35 variables de type character et je veux ensuite en appuyant juste sur entrée avoir une des variables aléatoirement . J'aimerais répéter cette opération à l'infini . Merci d'avance .

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Cà commence par fabriquer des noms de variables qui sont des chaînes de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> names = []
    >>> for x in range(10):
    ...     names.append('v_%d' % x)
    ...
    >>> names
    ['v_0', 'v_1', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6', 'v_7', 'v_8', 'v_9']
    >>>
    Après si on veut associer un objet/valeur à chaque chaine de caractère, on va utiliser un dict plutôt qu'une simple liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> kv = {}
    >>> for x in range(10):
    ...     kv['v_%d' % x] = x
    ...
    >>> kv
    {'v_7': 7, 'v_6': 6, 'v_5': 5, 'v_4': 4, 'v_3': 3, 'v_2': 2, 'v_1': 1, 'v_0
     'v_9': 9, 'v_8': 8}
    >>> kv['v_0']
    0
    >>>
    Normalement, çà suffit: pas besoin de créer de variables globales.
    Si vous y tenez, il faut remplacer kv par "globals()":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> for x in range(10):
    ...      globals()['v_%d' % x] = x
    ...
    >>> globals()
    {'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 'v_9':
    9, '__package__': None, 'x': 9, 'v_2': 2, 'v_3': 3, 'v_0': 0, 'v_1': 1, 'v_6': 6
    , 'v_7': 7, 'v_4': 4, 'v_5': 5, '__loader__': <class '_frozen_importlib.BuiltinI
    mporter'>, 'v_8': 8, '__doc__': None}
    >>>
    Mais çà pollue l'espace de noms pour avoir juste la facilité de taper:
    plutôt que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> globals()['v_0']
    0
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    D'accord merci beaucoup . Je vois que c'est plus long que je ne le pensais . En tout cas merci beaucoup encore une fois pour avoir pris le temps de répondre .

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Hirakles Voir le message
    D'accord merci beaucoup . Je vois que c'est plus long que je ne le pensais . En tout cas merci beaucoup encore une fois pour avoir pris le temps de répondre .
    Pas nécessairement, "variable" est un terme technique.
    Vous vouliez peut être un truc qui fasse çà:
    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
    >>> import random
    >>> choices = [ 'v_%d' % _ for _ in range(10) ]
    >>> while 1:
    ...     input('? ')
    ...     print (random.choice(choices))
    ...
    ?
    ''
    v_8
    ?
    ''
    v_5
    ?
    ''
    v_3
    ?
    Mais c'est le genre de code qu'on apprend à faire en travaillant avec les tutos.
    Nous faisons ici de la publicité pour le Swinnen.
    Acquérir les bases du langage permet d'apprendre à mieux formuler ce qu'on veut.

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

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Salut,
    Encore plus court:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    from random import randint
    for v in range(0,10) :
      exec("var_n_{0}=\'valeurs numéro {0}\'".format(v))
     
    rand_value=randint(0,1000)
    exec("var_random=\'value random {0}\'".format(rand_value))
    cela consiste a généré des variables en formatant un string (je sais je suis toujours sous python 2.7.3)
    et a exécuter celui-ci avec la directive exec().

    Ou le placeholder ( {0} ) dans le string est remplacer par la valeur de l'argument de la méthode format() d'index zéro mais on peut formater tant que l'on veut le string.

    Bon python a toi :).
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 830
    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 830
    Points : 7 132
    Points
    7 132
    Par défaut
    je me demandais comment on faisait pour générer des variables préalablement définies
    On peut placer ces variables dans une liste, puis les afficher en contrôlant que cette liste n'est pas vide.

    je veux ensuite en appuyant juste sur entrée avoir une des variables aléatoirement
    Tout l'intérêt de la liste est là, il existe la méthode pop

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from random import choice
     
    maListe = [..., ..., ] # mes 35 caractères prédéfinis, pas besoin de variables
    while maListe:
        input('Appuyer sur une touche ! ')
        item = choice(maListe)
        print(maListe.pop(item))
    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)

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 050
    Points : 1 381
    Points
    1 381
    Par défaut
    Citation Envoyé par Hirakles Voir le message
    Bonsoir , je me demandais comment on faisait pour générer des variables préalablement définies . Je veux créer environ 35 variables de type character ...
    déjà c'est contradictoire. Je pense que "variables" n'est pas le terme approprié dans cette question.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Il n'y a pas de différence "fonctionnelle" entre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for v in range(0,10) :
      exec("var_n_{0}=\'valeurs numéro {0}\'".format(v))
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for v in range(0,10) :
      globals()["var_n_%d" % v]= 'valeurs numéro %d' % v
    Par contre "l'intention" de créer une variable "globale" dynamiquement sera bien plus claire qu'en passant une chaîne de caractère à exec.

    Pour comprendre ce que fait exec, il faut imaginer la chaîne de caractère qui sera construite puis exécuter le code correspondant dans sa tête.
    C'est une gymnastique intéressante pour faire travailler ses neurones... mais en programmation on évite!
    Le but étant de comprendre rapidement ce que çà fait pour pouvoir relire facilement ce code dans quelques mois et le ré-utiliser.

    Et écrire du code "plus difficile à lire" compliquera aussi la tache de ceux que vous pourriez solliciter "à l'aide".
    En plus les différents outils IDE, debugger, optimiseurs ne pourront pas non plus lire et comprendre ce genre de code.

    In fine, si vous avez envie de vous mettre une balle dans le pied, c'est votre problème mais c'est loin d'être une "bonne pratique".

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

  9. #9
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Salut,
    simplement pour précision:

    Bonsoir , je me demandais comment on faisait pour générer des variables préalablement définies . Je veux créer environ 35 variables de type character ...
    En faîtes en python le type de base est object, c.a.d l'objet ; Tout est objet.

    les strings, listes, tuples, dict etc... sont des objets.

    Tout les types de base comme <type 'str'>, <type 'list'>, <type 'tuple'> ont des méthodes et attributs et sont dérivé d'object (corriger moi si je me trompe) .

    Même un simple <type 'int'> est un objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> a=1
    >>> type(a)
    <type 'int'>
    >>> dir(a)
    ['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
     
    # Ont voit bien que la variable a possède des attributs et des méthodes surtout des privées dans ce cas.
    python est un langage a typage dynamique et je pense que la dynamique, utile pour l'affection a transtypage opérationnel (a mes souhait), est issue du faite que ces types sont dérivé de l'objet.

    D'ailleurs quand ont crée une classe on peut la dérivé de object.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Maclass(object) :
      def __init_(self) :
        pass
    PS: l'affection a transtypage opérationnel signifie affecter une variable en effectuant des opérations selon le type, a la chaîne (beaucoup), dont le résultat est une simple valeur résultant des opérations effectuées sur d'autres variables précédemment.
    Autrement dit une variable issue d'une ligne spaghetti.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/12/2009, 19h59
  2. Générer des variables Kettle à partir d'une table
    Par FBSVG dans le forum kettle/PDI
    Réponses: 10
    Dernier message: 17/07/2009, 16h07
  3. générer des variables
    Par juju44 dans le forum Macro
    Réponses: 8
    Dernier message: 19/03/2009, 12h11
  4. générer des variables gaussiennes
    Par deubelte dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/05/2007, 10h41
  5. Générer des variables avec une boucle
    Par Anamelech dans le forum Delphi
    Réponses: 15
    Dernier message: 03/11/2006, 12h33

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