CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[python]Tester les combinaisons du poker ?

MrFuuuuman
MrFuuuuman
Niveau 10
01 octobre 2017 à 19:53:26

Yo :)
Je fais du python depuis septembre a la fac et on a un projet a rendre d'ici une ou deux semaine, c'est de créer un programme qui fait appel a Turtle :oui:
Du coup je me suis dit que j'allais faire un dé poker, c'est plus que demandé mais bon au moins c'est marant :oui:

Les règles du jeu si vous ne connaissez pas:
Chaque joueur roule 5 dé puis mise. Ensuite on peut rejouer autant de dés qu'on veut et on compare les combinaisons comme au poker, si il y a des suites, des paires etc... donc ici on a: 5 fois la meme valeur. La suite. 4x la meme valeur. 3x la meme valeur et une paire. 1 triple. 2 paire. 1 paire.

Et je ne sais pas comment tester les combinaisons :(
Je peux a peut pres hiérarchiser les dés en utilisant des listes mais dans les cas ou il y a plusieurs combinaires, genre une paire et un triple, je sais pas comment ça se code :(
Je pensais faire une liste dans laquelle on met les valeurs qui se répete et on regarde la taille je sais pas trop comment faire :(

Apres l'idées c'est de dessiner les 10 dés sur python en écrivant leur valeur dedans, rien de tres complexe mais c'est sympa :oui:

:merci:

ouimaisquoi
ouimaisquoi
Niveau 8
01 octobre 2017 à 21:15:59

Tu peux faire du "brute force" en mettant toutes les combinaisons en data et en faisant que des comparaisons; mais pas sûr que le prof apprécie la méthode. Lol!

MrFuuuuman
MrFuuuuman
Niveau 10
01 octobre 2017 à 21:18:04

Le 01 octobre 2017 à 21:15:59 ouimaisquoi a écrit :
Tu peux faire du "brute force" en mettant toutes les combinaisons en data et en faisant que des comparaisons; mais pas sûr que le prof apprécie la méthode. Lol!

Oui, meme moi ca me saoule de faire comme ça :rire:

ouimaisquoi
ouimaisquoi
Niveau 8
01 octobre 2017 à 21:30:26

Le 01 octobre 2017 à 21:18:04 MrFuuuuman a écrit :

Le 01 octobre 2017 à 21:15:59 ouimaisquoi a écrit :
Tu peux faire du "brute force" en mettant toutes les combinaisons en data et en faisant que des comparaisons; mais pas sûr que le prof apprécie la méthode. Lol!

Oui, meme moi ca me saoule de faire comme ça :rire:

De toutes façons les comparaisons tu n'y échappera pas; tu peux hiérarchiser en partant du "full" mais je doute qu'on puisse rejouer des dés autant de fois qu'on veut car il n'y a pas de raison d'arrêter

Grimmys
Grimmys
Niveau 19
01 octobre 2017 à 21:47:05

J'imagine un traitement avec un dictionnaire perso.

Un exemple du rendu du dictionnaire, pour une situation donnée.

Supposons les valeurs de dés 5 / 5 / 2 / 2 / 3.
Mon dictionnaire serait ainsi :

{"5" : 2, "2" : 2, "3" : 1}

En gros, une fonction parcoure l'ensemble des dés une fois que les joueurs ont décidé d'arrêter d'en relancer, et pour chaque valeur analysée, si celle ci n'est pas déjà dans le dictionnaire, va créer une clé correspondant à cette dite valeur, et y associer " 1 " (valeur présente une fois), si elle est déjà dedans, alors on ajoute simplement + 1 à la valeur associée à la dite clé. La méthode has_key peut t'aider pour ça. [[sticker:p/1lm9]]

Après bah t'appelles une autre fonction qui va s'occuper de gérer toutes les situations possibles pour le nombre de points, là je pense que le bruteforce est obligé (en faisant une structure " Si 5 occurrences Alors .... Sinon Si 3 occurrences + 2 occurrences Alors ... etc.).
Mais tu l'évites au moins pour le décomptage du nombre d’occurrences de chaque dé. :)

Azmurael
Azmurael
Niveau 10
01 octobre 2017 à 21:51:41

Je pense que je m'y prendrais comme ça :

  • tri de la liste
  • Comparaison 1er et 5e élément (check si 5 identiques) (Si oui, STOP)
  • Comparaison 1er et 4e, et 2e et 5e (check si 4 identiques) (Si oui, STOP)
  • Comparaison 1er et 3e, 2e et 4e, 3e et 5e (check si trois identiques) (Si oui, STOP)
    • Si 1 et 3, check 4-5 (pour le full)
    • Si 3-5, check 1-2 (idem)
  • Comparaison 2 à 2 (pour les paires, avec un compteur pour savoir cb de paire tu as) (Si oui, STOP)
  • Si tout au dessus est faux, et si 1er=1 et 5e=5, ou si 1er=2 et 5e=6, alors suite.

A raffiner, bien sûr.

Grimmys
Grimmys
Niveau 19
01 octobre 2017 à 21:54:48

Le 01 octobre 2017 à 21:51:41 Azmurael a écrit :
Je pense que je m'y prendrais comme ça :

  • tri de la liste
  • Comparaison 1er et 5e élément (check si 5 identiques) (Si oui, STOP)
  • Comparaison 1er et 4e, et 2e et 5e (check si 4 identiques) (Si oui, STOP)
  • Comparaison 1er et 3e, 2e et 4e, 3e et 5e (check si trois identiques) (Si oui, STOP)
    • Si 1 et 3, check 4-5 (pour le full)
    • Si 3-5, check 1-2 (idem)
  • Comparaison 2 à 2 (pour les paires, avec un compteur pour savoir cb de paire tu as) (Si oui, STOP)
  • Si tout au dessus est faux, et si 1er=1 et 5e=5, ou si 1er=2 et 5e=6, alors suite.

A raffiner, bien sûr.

Ah oui... Pas mal. :hap:

C'est assez peu intuitif et difficile à lire au niveau de l'implémentation j'imagine, mais ça fait le job. :noel:

Azmurael
Azmurael
Niveau 10
01 octobre 2017 à 21:57:11

Le 01 octobre 2017 à 21:54:48 Grimmys a écrit :

Le 01 octobre 2017 à 21:51:41 Azmurael a écrit :
Je pense que je m'y prendrais comme ça :

  • tri de la liste
  • Comparaison 1er et 5e élément (check si 5 identiques) (Si oui, STOP)
  • Comparaison 1er et 4e, et 2e et 5e (check si 4 identiques) (Si oui, STOP)
  • Comparaison 1er et 3e, 2e et 4e, 3e et 5e (check si trois identiques) (Si oui, STOP)
    • Si 1 et 3, check 4-5 (pour le full)
    • Si 3-5, check 1-2 (idem)
  • Comparaison 2 à 2 (pour les paires, avec un compteur pour savoir cb de paire tu as) (Si oui, STOP)
  • Si tout au dessus est faux, et si 1er=1 et 5e=5, ou si 1er=2 et 5e=6, alors suite.

A raffiner, bien sûr.

Ah oui... Pas mal. :hap:

C'est assez peu intuitif et difficile à lire au niveau de l'implémentation j'imagine, mais ça fait le job. :noel:

Avec de belles fonctions de wrapping, je suis sûr que le code n'est pas si moche. :hap:

Message édité le 01 octobre 2017 à 21:57:46 par Azmurael
MrFuuuuman
MrFuuuuman
Niveau 10
01 octobre 2017 à 21:58:52

Le 01 octobre 2017 à 21:30:26 ouimaisquoi a écrit :

Le 01 octobre 2017 à 21:18:04 MrFuuuuman a écrit :

Le 01 octobre 2017 à 21:15:59 ouimaisquoi a écrit :
Tu peux faire du "brute force" en mettant toutes les combinaisons en data et en faisant que des comparaisons; mais pas sûr que le prof apprécie la méthode. Lol!

Oui, meme moi ca me saoule de faire comme ça :rire:

De toutes façons les comparaisons tu n'y échappera pas; tu peux hiérarchiser en partant du "full" mais je doute qu'on puisse rejouer des dés autant de fois qu'on veut car il n'y a pas de raison d'arrêter

En faite dans le traitement tu as tes dés. Tu choisis le nombre de dés que tu rejoues et ensuite c'est fini tu peux fois si t'as gagné ou perdu.

MrFuuuuman
MrFuuuuman
Niveau 10
01 octobre 2017 à 22:03:03

J'essayerai vos méthodes quand j'aurai le temps :oui:
Pour l'instant j'ai fait une fonction qui a créer 6 listes, qui se remplissent avec les nombres qui sortent.
Par exemple si j'ai 2 4 6 1 4 3, ça fait:
list1=[1]
list4=[4, 4]
Du coup apres je teste la longueur des listes pour attribuer des points :ok:

J'avoue que les dictionnaires j'ai pas encore vu et je vois pas encore comment mettre la 2eme solution sur les rails mais je vais me renseigner :oui:

Grimmys
Grimmys
Niveau 19
01 octobre 2017 à 22:08:18

6 listes. :ouch2:
6 listes qui se basent exactement sur le même principe, c'est dégueulasse.

C'est un peu comme si tu faisais 6 variables différentes pour représenter les 6 dés... Tu reconnaitras que c'est complètement ridicule ; une liste est bien plus appropriée pour représenter ce genre de situations.... :)

Hé bien là c'est pareil. Si tu connais pas les dictionnaires, tu peux au moins transformer tes 6 listes en une seule liste à deux dimensions (une liste de listes). :ok:

MrFuuuuman
MrFuuuuman
Niveau 10
01 octobre 2017 à 22:09:43

Et du coup j'ai cette erreur : https://image.noelshack.com/fichiers/2017/39/7/1506888543-erreur.png

tant pis je résoudrai demain si vous avez pas envie de vous taper mon vieux code :rire:

MrFuuuuman
MrFuuuuman
Niveau 10
01 octobre 2017 à 22:11:49

Le 01 octobre 2017 à 22:08:18 Grimmys a écrit :
6 listes. :ouch2:
6 listes qui se basent exactement sur le même principe, c'est dégueulasse.

C'est un peu comme si tu faisais 6 variables différentes pour représenter les 6 dés... Tu reconnaitras que c'est complètement ridicule ; une liste est bien plus appropriée pour représenter ce genre de situations.... :)

Hé bien là c'est pareil. Si tu connais pas les dictionnaires, tu peux au moins transformer tes 6 listes en une seule liste à deux dimensions (une liste de listes). :ok:

j'ai fait une variable par dé.. :rire:

Grimmys
Grimmys
Niveau 19
01 octobre 2017 à 22:23:01

Le 01 octobre 2017 à 22:11:49 MrFuuuuman a écrit :

Le 01 octobre 2017 à 22:08:18 Grimmys a écrit :
6 listes. :ouch2:
6 listes qui se basent exactement sur le même principe, c'est dégueulasse.

C'est un peu comme si tu faisais 6 variables différentes pour représenter les 6 dés... Tu reconnaitras que c'est complètement ridicule ; une liste est bien plus appropriée pour représenter ce genre de situations.... :)

Hé bien là c'est pareil. Si tu connais pas les dictionnaires, tu peux au moins transformer tes 6 listes en une seule liste à deux dimensions (une liste de listes). :ok:

j'ai fait une variable par dé.. :rire:

Ah.

Bon bah du coup, ceci explique cela.... :hap:

Azmurael
Azmurael
Niveau 10
01 octobre 2017 à 22:24:39

T'as un problème de portée de variable.
val1 existe dans le scope de la fonction listegale(), mais elle est libérée quand tu sors de la fonction.
Pour pouvoir la manipuler ensuite, il faut que tu la retournes à la fin de ta fonction.

Grimmys
Grimmys
Niveau 19
01 octobre 2017 à 22:26:18

Le 01 octobre 2017 à 22:09:43 MrFuuuuman a écrit :
Et du coup j'ai cette erreur : https://image.noelshack.com/fichiers/2017/39/7/1506888543-erreur.png

tant pis je résoudrai demain si vous avez pas envie de vous taper mon vieux code :rire:

Ton problème est un problème de portée des variables.

Pour faire simple, c'est un mécanisme commun à de très nombreux langages, dont Python :
Les variables déclarées dans une fonction sont locales à cette fonction.
C'est à dire qu'elles sont détruites après la fin de l'exécution de la fonction.
C'est à dire que val1, val2, val3 etc. n'existent que dans le corps de ta fonction listeegale.
Tu ne peux donc pas les appeler depuis ta fonction points. :ok:
Il faut jouer avec les valeurs de retour.

EDIT : Ah, outspeed by Azmurael, désolé. :hap:

Message édité le 01 octobre 2017 à 22:27:18 par Grimmys
ouimaisquoi
ouimaisquoi
Niveau 8
01 octobre 2017 à 23:10:07

Le 01 octobre 2017 à 21:18:04 MrFuuuuman a écrit :

Le 01 octobre 2017 à 21:15:59 ouimaisquoi a écrit :
Tu peux faire du "brute force" en mettant toutes les combinaisons en data et en faisant que des comparaisons; mais pas sûr que le prof apprécie la méthode. Lol!

Oui, meme moi ca me saoule de faire comme ça :rire:

Si tu crée un joli algo pour générer les combinaisons tu peux après te permettre de faire passer un code bâtard pour le jeu
La créativité vaut autant que le travail laborieux

MrFuuuuman
MrFuuuuman
Niveau 10
01 octobre 2017 à 23:35:46

Merci les gars je vais essayer de comprendre comment ça marche ces valeurs de retour :)

Jeufroid
Jeufroid
Niveau 7
02 octobre 2017 à 10:27:35

Commence par les bases c'est mieux. Cela ne sert à rien de se précipiter et de vouloir faire quelque chose de "grand" dès le début :-)))

Fuligule
Fuligule
Niveau 10
02 octobre 2017 à 15:40:27

Le 01 octobre 2017 à 22:03:03 MrFuuuuman a écrit :
J'essayerai vos méthodes quand j'aurai le temps :oui:
Pour l'instant j'ai fait une fonction qui a créer 6 listes, qui se remplissent avec les nombres qui sortent.
Par exemple si j'ai 2 4 6 1 4 3, ça fait:
list1=[1]
list4=[4, 4]
Du coup apres je teste la longueur des listes pour attribuer des points :ok:

J'avoue que les dictionnaires j'ai pas encore vu et je vois pas encore comment mettre la 2eme solution sur les rails mais je vais me renseigner :oui:

Pourquoi faire des listes si tout ce qui t'intéresse c'est leur longueur et non les éléments dedans ?
Ce que tu veux c'est plutôt 6 entiers, qui correspondent au nombre d'occurrence de chaque chiffre : 2 4 6 1 4 3 donne
nombre_de_1 = 1
nombre_de_2 = 1
nombre_de_3 = 1
nombre_de_4 = 2
nombre_de_5 = 0
nombre_de_6 = 1

Et plutôt que de stocker 6 variables, tu peux stocker ça dans une liste :
nombre_occurrences[1] = 1
nombre_occurrences[4] = 2
etc

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment