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 :

Comment trier une main dans un jeu de cartes ?


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut Comment trier une main dans un jeu de cartes ?
    Bonjour,

    Comment fait-on pour trier une main sous sens prédéfini ?
    Par exemple j'ai : main=[('Valet', 'Carreau'), (8, 'trefle'), (10, 'Coeur'), ('Dame', 'Coeur'), (5, 'Pique'), (7, 'Coeur'), ('Roi', 'Carreau')]
    et je voudrai la trier sous ce sens là 2<3<4<5<6<7<8<9<10< Valet < Dame < Roi < As et Trèfle < Carreau < Coeur < Pique

    ça donnerai donc : main =[(8,trefle), ('Valet','Carreau'), ('Roi', 'Carreau'), ('10','Coeur'), ('Dame','Coeur') ...
    Je pense que vous avez compris l'idée
    J'ai tout essayer et rien ne fonctionne, je sais plus trop quoi faire pour tenter de trouver..
    Bref je vous en serai très reconnaissant Merci d'avance !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par nearomatic Voir le message
    J'ai tout essayer et rien ne fonctionne, je sais plus trop quoi faire pour tenter de trouver..
    Un truc comme "2<3<4<5<6<7<8<9<10< Valet < Dame < Roi < As", c'est ranger par ordre croissant i.e. pouvoir comparer deux élément x, y et sortir x < y, x = y ou x > y.
    Quand ce sont des entiers, c'est facile mais pour ce qui est de Valet, Dame, Roi, As çà se complique sauf àen faire des entiers via des variables Valet = 11, Dame=12, Roi=13, As=14.
    Pareil pour Trèfle=0, Carreau=1, Coeur=2 , Pique=3
    Et comme ce sont des tuples, sort s'en débrouillera très bien mais vous pouvez aussi lire le tuto. sur comment trier avec Python (sorti tout droit de la documentation officielle et traduit en français).

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Par défaut
    Bonjour,

    Personnellement, je ferais une différence entre l'affichage et la valeur. J'attribuerais un poids couleur - valeur à chaque carte selon l'ordre d'affichage souhaité.
    Cela donnerait un couple poids, poids pour chaque carte.

    Pour la couleur : Trèfle = 1, Carreau = 2, Coeur = 3, Pique = 4
    Pour la valeur : 2 = 2 ..... 10 = 10, Valet = 11, Dame = 12, Roi = 13, 1 = 14

    Le Valet de trèfle est donc le couple (11, 1) et tu affiches (Valet, trèfles)
    Tu effectues ton travail de tri sur les poids couleur et valeur.

    Bon courage

  4. #4
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut
    Salut,
    Merci de vos réponse rapide, j'avais tenté de faire comme a dit wiztricks en associant des entier aux valeurs mais j'avais eu une erreur comme quoi on pouvait pas associer des entier à des litteral je vais quand même retenter pour le coup c'est surement moi qui a du mal faire
    Ca à l'air plus compliqué ta façon Tonivege non ? je tenterai de faire les deux merci !

    Je reviens si y'a du nouveau
    Merci encore !

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut
    Je suis bloqué, je pense que ce qui me bloque c'est le fait que ce soit des tuples ..
    Je n'arrive pas à modifier la valeur (Valet p.e) en 11 j'ai fait :

    def TrieDeMain(a1):
    [Valet if Valet in a1 else 11 for Valet in a1]
    [Dame if Dame in a1 else 12 for Dame in a1]
    [Roi if Roi in a1 else 13 for Roi in a1]
    [As if As in a1 else 14 for As in a1]
    return a1


    mais lorsque je fais un return de la liste il n'y a pas la modification ..

    Au niveau du tri avec sorted je pense que ca devrait être bon j'ai tenté de l'utiliser avec une key sur une liste que j'avais fais normalement je pense que c'est bon, à voir avec les cartes

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    Comme ton jeu de carte est fini, une solution simple, serait de créer un dictionnaire qui ressemblerait à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dicart = { 'pique_2' : 1 , 'pique_3' : 2 , .... 'as_trefle' : 54 }
    Et ensuite, tu n'as plus qu'à créer une fonction get_poids qui utilise ce dictionnaire via la paire de tuple pour déterminer l'ordre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def get_poids(tval):
        return dicart[tval[0]+"_"+str(tval[1])]
    Et pour trier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main_triee=sorted(main,key=get_poids)

  7. #7
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Comme ton jeu de carte est fini, une solution simple, serait de créer un dictionnaire qui ressemblerait à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dicart = { 'pique_2' : 1 , 'pique_3' : 2 , .... 'as_trefle' : 54 }
    Et ensuite, tu n'as plus qu'à créer une fonction get_poids qui utilise ce dictionnaire via la paire de tuple pour déterminer l'ordre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def get_poids(tval):
        return dicart[tval[0]+"_"+str(tval[1])]
    Et pour trier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main_triee=sorted(main,key=get_poids)
    Voici le code que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dicart = { '2_pique' : 1 , '3_pique' : 2 , '4_pique':3, '5_pique':4, '6_pique':5, '7_pique':6, '8_pique':7, '8_pique':8, '10_pique':9, 'valet_pique':10, 'dame_pique':11, 'roi_pique':12, 'as_pique':13, '2_carreau' : 14 , '3_carreau' : 15 , '4_carreau':16, '5_carreau':17, '6_carreau':18, '7_carreau':19, '8_carreau':20, '8_carreau':21, '10_carreau':22, 'valet_carreau':23, 'dame_carreau':24, 'roi_carreau':25, 'as_carreau':26, '2_coeur' : 27 , '3_coeur' : 28 , '4_coeur':29, '5_coeur':30, '6_coeur':31, '7_coeur':32, '8_coeur':33, '8_coeur':34, '10_coeur':35, 'valet_coeur':36, 'dame_coeur':37, 'roi_coeur':38, 'as_carreau':39, '2_trefle' :40, '3_trefle' : 41,'4_trefle':42, '5_trefle':43, '6_trefle':44, '7_trefle':45, '8_trefle':46, '8_trefle':47, '10_trefle':48, 'valet_trefle':49, 'dame_trefle':50, 'roi_trefle':51, 'as_trefle':52 }  
     
    def get_poids(tval):
        return dicart[tval[0]+"_"+str(tval[1])]
     
    def TriDeLaMain(main):
        main_triee=sorted(main,key=get_poids)
    Mais il y'a une erreur quand je l'execute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TriDeLaMain([('Valet', 'Carreau'), (8, 'trefle'), (10, 'Coeur'), ('Dame', 'Coeur'), (5, 'Pique'), (7, 'Coeur'), ('Roi', 'Carreau'), (4, 'Coeur'), ('As', 'trefle'), (3, 'trefle'), (9, 'Carreau'), (4, 'trefle'), (6, 'Carreau'), (8, 'Coeur'), (6, 'Pique'), (7, 'Pique'), (7, 'Carreau'), (2, 'Carreau'), (10, 'Carreau'), (7, 'trefle'), (5, 'Coeur'), (3, 'Carreau'), ('Valet', 'Coeur'), ('As', 'Pique'), (2, 'Coeur'), (9, 'Pique'), ('Dame', 'trefle'), (5, 'trefle'), ('Dame', 'Pique'), (5, 'Carreau'), (10, 'trefle'), ('Roi', 'Coeur'), ('Dame', 'Carreau'), ('As', 'Coeur'), ('Valet', 'trefle'), ('Roi', 'trefle'), (9, 'trefle'), (8, 'Pique'), (2, 'trefle'), (3, 'Pique'), (3, 'Coeur'), (10, 'Pique'), ('Roi', 'Pique'), (9, 'Coeur'), ('As', 'Carreau'), (4, 'Pique'), ('Valet', 'Pique'), (6, 'Coeur'), (6, 'trefle'), (2, 'Pique'), (4, 'Carreau'), (8, 'Carreau')])
    
    KeyError: 'Valet_Carreau'
    Je débute en python ( au cas où j'ai fais des erreurs bêtes )

  8. #8
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Alors, déjà, dans ton dictionnaire, il manque pas mal de cartes, donc à contrôler.

    Ensuite, il faut respecter la casse, ici dans le dico, tu n'utilises que des minuscules et dans ton tableau à trier tu mets des majuscules, donc python ne trouve pas le hash en question dans le dico, d'où l'erreur.
    Donc, continu de n'utiliser que des minuscules dans ton dico et modifie la fonction get_poids comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def get_poids(tval):
        return dicart[str.lower(str(tval[0])+"_"+tval[1])]
    ensuite ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def TriDeLaMain(main):
        main_triee=sorted(main,key=get_poids)
    devrait être plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def TriDeLaMain(main):
        return sorted(main,key=get_poids)
    et quand tu l'appelles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main_triee=TrieDeLaMain(...........)

  9. #9
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut
    C'est niquel merci beaucoup !!!
    J'ai juste encore une derniere question, alors j'ai un code appliqué à un seul tuple(dans cette liste) et j'aimerai savoir comment je peux amené le code pour qu'il sois appliqué à chacun des tuples ?

Discussions similaires

  1. Comment mettre une pause dans un jeu
    Par Pulsar360 dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 06/05/2013, 13h02
  2. Comment trier une liste dans un DBLoukupComboBox
    Par soror dans le forum Bases de données
    Réponses: 6
    Dernier message: 17/07/2007, 20h13
  3. Comment trier une table paradox dans un Ttable sur un Dbgrid
    Par amireve dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/12/2005, 19h28
  4. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 09h40
  5. Réponses: 2
    Dernier message: 28/08/2003, 00h00

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