Jeu de casino
Résolu/Fermémamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 6 janv. 2023 à 19:03
- Jeu de casino
- 94 jeu - Télécharger - Puzzle & Réflexion
- Jeu zuma - Télécharger - Jeux vidéo
- Le braqueur de casino telegram - Forum Vos droits sur internet
- Cresus casino compte bloqué ✓ - Forum Consommation & Internet
- Jeu shazam comment scanner ✓ - Forum Jeux vidéos smartphones
6 réponses
6 janv. 2023 à 16:00
bonjour, pour quel couple ne fonctionne-t-il pas?
Bonjour,
Merci d'avoir pris le temps de me repondre.
En effet je pense que c'est sur la priorité des opérateurs logiques que je peche.
mon code marche sur les couples suivants : (7et 7: ok) (7 et 9 :ok) et (16 et 4 : ok).
Pensez vous pouvoir améliorer le code?
Modifié le 6 janv. 2023 à 16:12
quand tu écris
a == 15 or a == 16 and b % 2 == 0
cela fait ceci
(a == 15) or (a == 16 and b % 2 == 0)
si tu veux une autre évaluation, ajoute des parenthèses
6 janv. 2023 à 16:25
Voici le nouveau code en insérant les parenthèses :
a = int(input()) b = int(input()) if b == a: print(10 * 12) elif (a == 0) or (a == 13) or (a == 14) and b % 2 == 0: print(10 * 2) elif (a == 15) or (a == 16) and b % 2 == 0: print(10 * 2) else : print(10 * 0)
Mais ça ne fonctionne pas. Par exemple en rentrant le couple 13 et 1 doit renvoyer 0 me renvoie 20. je pense que c'est la ligne 2 (Pair et impair) qui pose problème.
Qu'en pensez vous?
Merci pour l'aide
6 janv. 2023 à 17:43
Je pense que tu n'as pas compris où mettre des parenthèses.
6 janv. 2023 à 16:37
Bonjour,
Plusieurs recommandations :
- Plutôt qu'utiliser a et b, tu pourrais utiliser des noms de variables plus parlant (par exemple pari et mise). Il est également recommandé de contrôler si les paramètres saisis sont corrects.
pari = int(input("Pari [0-16] ?")) if not 0 <= pari <= 16: raise ValueError(f"Pari invalide: {pari}") tirage = int(input("Tirage [0-16] ?")) if not 0 <= tirage <= 16: raise ValueError(f"Tirage invalide: {tirage}")
- Afin d'améliorer la lisibilité de ton programme tu peux définir des "constantes" (en fait il n'y a pas de constante en python mais bref c'est l'idée) qui permettent d'abstraire les paris spéciaux :
PARI_PAIR = 13 PARI_IMPAIR = 14 PARI_ROUGE = 15 PARI_NOIR = 16
... ou de manière plus concise :
(PARI_PAIR, PARI_IMPAIR, PARI_ROUGE, PARI_NOIR) = range(13, 17)
- Tu peux écrire une fonction qui étant donné un pari, détermine si le tirage correspond à une case rouge (respectivement à une case noire, respectivement à un nombre pair, respectivement à nombre impair).
def est_pair(tirage): return tirage % 2 == 0 def est_rouge(tirage): return tirage in {1, 3, 5, 7, 9, 12} # etc...
- Les tests appliqués permettront de déterminer le multiplicateur de gain (*2, *12, *0) selon la nature du pari et si celui-ci est réussi.
if pari == PARI_ROUGE and est_rouge(tirage): multiplicateur = 2 elif pari == PARI_PAIR and est_pair(tirage): multiplicateur = 2 ...
- Tu peux factoriser les tests qui conduisent au même multiplicateur, mais attention car l'opérateur logique ET est prioritaire sur l'opérateur logique OU :
if ( (pari == PARI_ROUGE and est_rouge(tirage)) or (pari == PARI_PAIR and est_pair(tirage)) or ... ): multiplicateur = 2 elif ...: ... ...
- Tu peux définir une variable gain qui est calculée en fonction de mise et de multiplicateur.
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question6 janv. 2023 à 16:53
Bonjour @mamiemando StatutModérateur
D'abord merci pour ton retour très complet et très riche par les détails apportés. Je note que vous avez un niveau beaucoup trop avancé pour moi. Malheureusement je ne comprends pas tout.
Je suis d'accord sur l'effet de nommer directement le nom de variable que a et b. et j'en prends bonne note.
Pour être totalement transparent, je suis un MOOC Apprendre à coder avec Python pour débutant. Je découvre la matière étape par étape et sur chaque exercice j'ai des contraintes d'appliquer les notions abordées jusqu'alors. C'est pourquoi j'ai dit que je ne comprenais pas tous les détails dans ta raponse bien que j'ai saisi certaines nuances par exemple sur la priorité des opérateurs logique.
Ainsi j'ai amélioré mon code. Mais ca ne fonctionne toujours pas. Peux tu stp le corrigé avec les notions simples ?
a = int(input()) b = int(input()) if b == a: print(10 * 12) elif (a == 0 and b % 2 == 0) or (a == 14 and b % 2 == 0) or (a == 14 and b % 2 == 1): print(10 * 2) elif (a == 13) and b % 2 == 0: print(10 * 2) elif (a == 15) or (a == 16) and b % 2 == 0: print(10 * 2) else : print(10 * 0)
Comment exprimer la parité sur impair avec le modulo %, soit pour impair peut on écrire : b % 2 == 1 pour exprimer lMPAIR?
Encore merci pour ton aide
6 janv. 2023 à 17:14
- l1 à l5 : ok
- l6 : je suppose que a désigne le pari et que b désigne le tirage ?
- Le test parait faux car b est forcément pair ou impair, donc le test se simplifie en :
if (a == 0 and b % 2 == 0) or (a == 14)
... soit "le joueur parie sur 0 est tire un numéro pair, ou bien le joueur parie impair". En particulier, si le joueur parie impair, il rentre dans ce test peu importe la valeur du tirage. Je doute que c'est ce que tu veux écrire.
- Le test parait faux car b est forcément pair ou impair, donc le test se simplifie en :
-
l8 : le test signifie "le joueur pari pair" et obtient un nombre pair, donc ça semble correct
-
l10 : le test signiifie "le joueur parie rouge, ou il parie noir et le tirage est pair". Là aussi c'est douteux, car on entre dans ce test dès que le pari est rouge, peut importe le tirage. Ensuite la couleur et la parité ne correspondent pas, donc la deuxième partie du test semble également incorrecte.
Comment exprimer la parité sur impair avec le modulo %, soit pour impair peut on écrire : b % 2 == 1 pour exprimer lMPAIR?
Oui. L'opérateur x % y retourne le reste de la division euclidienne x / y et est toujours compris entre 0 et y - 1.
Pour écrire ton programme, je te recommande de faire un test par situation (les pairs, les impairs, les rouges, les noirs) quitte à rassembler certains tests dans un second temps.
Bonne chance
6 janv. 2023 à 17:56
@mamiemando StatutModérateur
Mon code fonctionne avec persistance et surtout votre aide qui a été très précieux. vraiment un grand merci pour votre gentillesse, aide et patience, voici le code :
a = int(input()) b = int(input()) if b == a: print(10 * 12) elif (a == 14) and b % 2 == 1: print(10 * 2) elif (a == 13 and b % 2 == 0): print(10 * 2) elif (a == 15) and (b == 1 or b == 3 or b == 5 or b == 7 or b == 9 or b == 12): print(10 * 2) elif (a == 16) and (b == 2 or b == 4 or b == 8 or b == 11 or b == 10): print(10 * 2) else : print(10 * 0)
En effet il fallait comparer à chaque valeur. Dans l'état je sais que ce code peut encore être amélioré et être plus concis avec les notions évoquées précédemment dans vos explications. A ce jour je ne suis pas encore en mesure de comprendre toutes ces subtilités et ne maitrise pas tout ça.
Je tenais vraiment à vous remercier pour votre pédagogie démontrée ici.
Aussi j'aimerai vous demander si vous même vous étiez développeur (se) informatique ou vous travaillez dans ce domaine?
Puis je vous demander votre carte de visite ?(mail?)
Par avance merci.
6 janv. 2023 à 19:03
Bonjour,
Tout d'abord toutes mes félicitations, le code semble désormais correct.
Quelques parenthèses peuvent être omises (notamment celles l6, l8 + celles concernant l'opérande gauche du and des lignes 10 et 12).
Voici à quoi pourrait ressembler le programme une fois remis en forme selon les recommandations que je t'ai faites :
#!/usr/bin/env python3 PARI_PAIR = 13 PARI_IMPAIR = 14 PARI_ROUGE = 15 PARI_NOIR = 16 def est_pair(n: int) -> bool: return n % 2 == 0 def est_impair(n: int) -> bool: return n % 2 == 1 def est_rouge(n: int) -> bool: return n in {1, 3, 5, 7, 9, 12} def est_noir(n: int) -> bool: return n in {2, 4, 5, 6, 8, 10, 11} def saisie(): pari = int(input("Pari [0-16] ?")) if not 0 <= pari <= 16: raise ValueError(f"Pari invalide: {pari}") tirage = int(input("Tirage [0-12] ?")) if not 0 <= tirage <= 12: raise ValueError(f"Tirage invalide: {tirage}") return (pari, tirage) def calculer_multiplicateur(pari: int, tirage: int) -> int: if ( (pari == PARI_PAIR and est_pair(tirage)) or (pari == PARI_IMPAIR and est_impair(tirage)) or (pari == PARI_ROUGE and est_rouge(tirage)) or (pari == PARI_NOIR and est_noir(tirage)) ): return 2 elif pari == tirage: return 12 else: return 0 return 69 def main(): (pari, tirage) = saisie() multiplicateur = calculer_multiplicateur(pari, tirage) mise = 10 gains = multiplicateur * mise print(f"Pari: {pari} tirage: {tirage} --> Gains = {multiplicateur} * {mise}€ = {gains}€") def test(): for pari in range(0, 17): for tirage in range(0, 13): multiplicateur = calculer_multiplicateur(pari, tirage) print(f"Pari: {pari}, tirage: {tirage} --> multiplicateur: {multiplicateur}") main()
Je tenais vraiment à vous remercier pour votre pédagogie démontrée ici.
Merci, ça fait toujours plaisir d'avoir des compliments et une part de la pédagogie revient aussi à yg_be.
Aussi j'aimerai vous demander si vous même vous étiez développeur (se) informatique ou vous travaillez dans ce domaine?
Oui je travaille dans le domaine.
Puis je vous demander votre carte de visite ?(mail?)
Pardonne-moi mais je ne communique jamais d'informations personnelles par le biais du forum. Tu peux cependant m'écrire par message privé ou poser d'autres questions sur le forum si le besoin s'en fait sentir.
Je te souhaite une excellente continuation et un bon apprentissage du python ;-)
6 janv. 2023 à 16:01
connais-tu la priorité d'évaluation des opérateurs logiques?