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 :

Récupérer un rang random dans une liste


Sujet :

Python

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Récupérer un rang random dans une liste
    Bonsoir à tous.

    Sous ce titre ma foi peu explicite se cache un sushi, sûrement tout bête, mais qui m'ennuie.
    Donc plutôt que de parler pendant 107 ans, je mets directement un morceau de code que j'essayerai d'expliquer aussi bien que possible après, avec mon problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def musique():
        x = 40
        for n in range (20):
            y = choice(ordonneesAlea)    # on choisit aleatoirement une note via son ordonnee
            part.create_oval(x,y-5,x+10,y+5,width=2,outline=)    # on trace la note correspondante
            x = x + 20    # on cree l'ecart entre 2 notes en incrementant la valeur de x
    Donc voilà un début d'esquisse.
    Pour expliquer un peu le truc, on nous a demandé de gérer une partition avec l'affichage aléatoire de notes, lesdites notes pouvant être en noires, ou colorées.
    Je suis ici parti d'un dico regroupant tout : la note ("do", "re", etc...) en clef, et un tuple (ordonnée,couleur) en valeur. N'arrivant pas trop à gérer ça comme je l'entendais, j'ai soutiré deux listes du dico : une pour les ordonnées, l'autre pour les couleurs. (ordonneesAlea correspondant ici à celle des ordonnées)
    Donc le traçage des 20 notes aléatoires ne pose pas de problèmes. Cependant, la partie "colorées" en pose un peu plus. Comme j'ai pas trop réussi à gérer mon dictionnaire, je cherche à connaître le rang de mon 'y' dans la liste, afin de pouvoir soutirer la couleur correspondante via un c0uleurs['rangDeY'], vu que les rang se correspondent entre les deux listes, sachant que le passage en coloré ne doit pas modifier les randoms valeurs de y pour l'affichage en cours. (Vous suivez ? ^^)

    Donc voilà, si vous pouviez m'aiguiller sur la manière de faire avec mes doubles listes, voir avec la façon de faire directement sur le dictionnaire (j'ai pas réussi à choisir l'ordonnée aléatoire de chaque note directement dans le dictionnaire, je dois mal m'y prendre je pense, ça doit se faire), ça m'enlèverait une épine du pied

    PS : pour info, je vous mets la tête de mon dico, si c'est possible, je préfère autant bosser avec le dico qu'avec mes listes, ça fait plus propre et plus sérieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dicoNotesGlobal = {"do":(75,"green"),"re":(70,"orange"),"mi":(65,"red"),"fa":(60,"blue"),"sol":(55,"light blue"),"la":(50,"purple"),"si":(45,"pink"),"doh":(40,"green"),"reh":(35,"orange"),"mih":(30,"red"),"fah":(25,"blue"),"solh":(20,"light blue"),"lah":(15,"purple")}

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Bienvenue sur le forum,



    je préfère autant bosser avec le dico qu'avec mes listes
    Eh oui, t’as raison, il ne faut pas baisser les bras, on va bien y arriver





    Mais d’abord sur les listes.

    J’aimerais bien voir la façon dont tu tires les deux listes du dico. Pour vérifier que le parallélisme des index est bien effectif, et aussi voir comment tu as écrit ça.


    Mais la liste des ordonnées étant constituée d’éléments uniques, il suffit de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    y = choice(ordonnees)
    coul = couleurs[ordonnees.index(y)]




    En travaillant à partir du dictionnaire, ceci devrait faire l’affaire aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ord,coul = choice(dicoNotesGlobal.values())
    choice(dicoNotesGlobal.values()) renvoie un couple (ordonnée, couleur) et il y a dépaquetage du couple dans deux objets référencés par ord et coul.

    Mais une question me vient:
    à quoi sert d’avoir un dictionnaire avec des clés qui sont les noms des notes ? Au lieu de devoir extraire la liste des clés avec dicoNotesGlobal.values() , il vaudrait mieux avoir directement la liste, non ?




    Pour résumer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dicoNotesGlobal = {"do":(75,"green"),"re":(70,"orange"),"mi":(65,"red"),"fa":(60,"blue"),
                       "sol":(55,"light blue"),"la":(50,"purple"),"si":(45,"pink"),
                       "doh":(40,"green"),"reh":(35,"orange"),"mih":(30,"red"),"fah":(25,"blue"),
                       "solh":(20,"light blue"),"lah":(15,"purple")}
     
    def musique(couples):
        for x in xrange(40,440,20):
            y,coul = choice(couples)    # on choisit aleatoirement un couple (ordonee,couleur)
            part.create_oval(x,y-5,x+10,y+5,width=2,outline=)    # on trace la note correspondante
     
    musique(dicoNotesGlobal.values())

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Bienvenue sur le forum,
    Tout d'abord, merci


    Citation Envoyé par eyquem Voir le message
    J’aimerais bien voir la façon dont tu tires les deux listes du dico. Pour vérifier que le parallélisme des index est bien effectif, et aussi voir comment tu as écrit ça.
    Je me suis également posé plusieurs fois la question dudit parallélisme entre les deux listes, je suis parti de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    c0uleurs = []
    ordonneesAlea = []
    for p in dicoNotesGlobal:
        ordonneesAlea = ordonneesAlea + [dicoNotesGlobal[p][0]]
        c0uleurs = c0uleurs + [dicoNotesGlobal[p][1]]
    print ordonneesAlea
    print c0uleurs
    Les deux print étaient justement là pour m'assurer que les couples allaient bien ensemble. J'ai eu peur la première fois vu qu'il ne me donnait pas les liste dans le même ordre que celui du dictionnaire, mais après vérifications, les ordonnées des notes étaient bien en accord avec leurs couleurs respectives.

    Dans ta continuation sur les listes, le .index() servirait donc à récupérer le rang dans une liste si j'ai bien suivi ? En ce qui concerne ces dernières, c'est donc bon à savoir

    Je me suis un peu plus attardé sur ce que tu as développé quant aux dictionnaires, c'est plus pratique que les listes, et plus sympa à utiliser.
    L'utilisation du dictionnaire.values() me disait quelque chose et, en effet, nous l'avions de référencé parmi les fonctions. Mais sans qu'ils nous donnent de définition, j'ai eu un peu de mal à faire le rapprochement. De ce fait, je te remercie de la définition que tu en donnes, je comprends mieux son utilité, même si 'values' en soit aurait dû me mettre la puce à l'oreille.

    Citation Envoyé par eyquem Voir le message
    Mais une question me vient:
    à quoi sert d’avoir un dictionnaire avec des clés qui sont les noms des notes ? Au lieu de devoir extraire la liste des clés avec dicoNotesGlobal.values() , il vaudrait mieux avoir directement la liste, non ?
    Le fait de passer par un dictionnaire nous est imposé. Autant l'absence de précision laisse libre cours à son imagination, autant les façons de faire que l'on nous impose, on va éviter de les mixer chacun à notre sauce, si j'ose dire.



    Citation Envoyé par eyquem Voir le message
    Pour résumer:
    [...]
    Je m'empresse de mettre ça en pratique, et surtout voir le fonctionnement, histoire de pouvoir réutiliser ceci à un moment où il y en aura besoin.

    Je te remercie bien,
    Bonne fin de soirée.

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,
    Même si le titre n'est plus correct, je me permet d'up le sujet afin de vous demander une autre explication –sûrement toute bête elle aussi–, plutôt que d'ouvrir une nouvelle discussion (Étant donné que le sujet concerne le même petit programme)

    Donc voilà.
    Tout marche nickel, sur un sacré moreau grâce à eyquem, –que je remercie encore une fois–, sauf un petit détail. J'ai un bouton qui doit modifier son texte à chaque fois que j'appuie dessus (changement du texte entre 'couleur' ´& 'En noir', selon que l'on veuille afficher les notes en noir ou en couleur ^^)

    J'ai donc ce morceau-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def couleur():
        global couleur
        if couleur == 0:  #1
            couleur = 1   #0
            bCol['text'] = "En noir"
        else:
            couleur = 0   #1
            bCol['text'] = "Couleur"
    Et mon problème vient de fait que l'affichage ne change pas au premier appui, mais est malgré tout pris en compte. Je m'explique :
    À l'état original, le bouton affiche le texte "Couleur", et les notes sont par défaut affichées en noires. Donc l'appui sur le bouton "Couleur" fait passer l'affichage des notes en couleurs; cependant, le text du bouton ne change pas au premier appui, mais seulement au second. Ce qui engendre un décalage (quand les notes sont en noires, le bouton affiche 'En noir' au lieu de 'Couleur', et vice-versa)
    J'ai grugé un peu en inversant les valeurs (mises en commentaires dans le bout de code) afin de ne pas avoir de décalage entre le texte du bouton et la couleur des notes. Le côté négatif de ceci est que j'ai un second affichage en noir, malgré le premier appui sur le bouton (son texte ne changeant pas la première fois, il est synchrone après.

    Donc voilà, en espérant ne pas vous faire trop souffrir avec mes pavés de texte, en espérant avoir été compréhensible (?). C'est un petit détail, mais vu que c'est justement petit, ça doit être tout simple à régler.

    Je vous en remercie d'avance,
    Bonne soirée à vous.

    Him'

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/10/2012, 14h51
  2. Réponses: 17
    Dernier message: 23/07/2007, 11h31
  3. Réponses: 2
    Dernier message: 29/12/2006, 15h56
  4. Réponses: 4
    Dernier message: 01/10/2006, 15h37
  5. Réponses: 1
    Dernier message: 28/07/2006, 09h17

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