Salut tout le monde, j'ai un petit souci avec un de mes exos.
Voilà, je fais un un mini simulateur de jeux de roulette et j'ai un leger soucis avec ma fonction qui gère les calculs, en gros, si mon mon montant initial est de 1000 et que je mise 200 par exemple sur la couleur, j'aurai 1200, mais au prochain tour, si je mise encore 200 et que je gagne, j'aurai toujours 1200. Par contre si je perd, au lieu de me retrouver avec 1000 je me retrouve plutôt avec 800. parait que quand je perd, le programme multiplie ma mise par 2 avant de me la déduire. Voici mon code, c'est pa tout à fait terminer.
from random import randint
"""Programe simulant le fonctionement d'un mini casino.
- Jeu de roulette (simplifié)
- Blackjack (simplifié)
- Machine à sous (simplifié)
Principe :
* Roulette :
- Le joueur devra choisir ente la parité, les couleurs, une suite de
nombres
- ou parié sur un nombre directement
* Blackjack :
- Le joueur devra avoir la somme de ses deux cartes supérieures à celui
du croupier
- Si la somme dépasse 21, le croupier gagne
* Machine à sous :
- Le joueur devra avoir au moins une parité pour obtenir des gains.
- Il raffle tout s'il fait un full
"""
def verification_entrer_numerique(valeur_a_verifier, chaine):
"""Vérifie les entrées numériques"""
age_int = 0
while age_int == 0:
valeur_a_verifier = input(chaine)
try:
age_int = int(valeur_a_verifier)
except ValueError:
print("ERREUR: Veuillez entrer une valeur valide svp")
return age_int
def verification_chaine_vide(valeur_a_verifier):
"""Vérifie si une chaine est vide"""
while valeur_a_verifier == "":
print("Saisie invalide. Veuillez entrer un nom valide SVP")
valeur_a_verifier = input("> : ")
# Cette fonction doit être retravaillez, elle n'a pas le comportement attendue
def faire_un_choix(valeur):
"""Vérifie la saisie de l'utilisateur et s'assure qu'il n'a pas entrer
un nombre supérieure à 4 et inférieure à 1. Dans le cas d'une erreur,
on demande à l'utilisateur de resaisir le nombre"""
while not valeur.isdigit() or int(valeur) > 4 or int(valeur) < 1:
print("Saisie invalide. Veuillez entrer un nombre valide SVP")
valeur = input("> : ")
return valeur
# valeur = int(valeur)
def verifie_si_mise_superieure_montant(la_mise, le_montant):
"""Vérifi si la mise est supérieure au montant et si la mise n'est pas
inférieure à la mise minimal"""
while la_mise > le_montant or la_mise <= MISE_MINIMAL:
if la_mise > montant:
print("Votre mise est au dessus de votre montant, réessayer SVP")
la_mise = verification_entrer_numerique(mise_str, "Entrez votre mise "
": ")
if la_mise <= MISE_MINIMAL:
print("Votre mise est inférieure à la mise minimal")
la_mise = verification_entrer_numerique(mise_str, "Entrez votre "
"mise : ")
# Je crois que c'est cette fonction qui a un problème
def verification_resultat(le_choix, le_montant, la_mise, le_trie):
"""Vérifie si la reponse est bonne ou pas et agis en conséquence"""
if le_choix == le_trie:
print("Félicitation, vous avez la bonne couleur")
le_montant -= la_mise
le_gain = la_mise * 2
le_montant += le_gain
print(f"Votre nouveau solde est {le_montant}")
else:
print("Vous avez perdu")
le_montant -= la_mise
print(f"Votre nouveau solde est {le_montant}")
"""
print("Bienvenue au pycasino, jeu de roulette simplifier")
print("Veuillez remlir ce mini formulaire pour vou enregistrer")
nom = input("Quel est votre nom ? : ")
verification_chaine_vide(nom)
age_str = ""
age = verification_entrer_numerique(age_str, "Quel est votre âge ? : ")
if age < 18:
print("Vous n'êtes pas majeur, vous ne pouvez pas entrer dans le casino")
exit()
"""
MISE_MINIMAL = 100
NOMBRE_ALEATOIRE = randint(1, 71)
montant_str = 0
montant = verification_entrer_numerique(montant_str, "Votre droit d'entré : ")
if montant < MISE_MINIMAL:
print("Votre mise est en dessous de la mise minimal.")
print("Vous poouvez pas acceder au casino")
exit()
# Liste des différents jeux
LISTE_TABLE = ["Parie-Direct", "Couleur", "Paritee", "Tranche"]
LISTE_COULEUR = ["R", "N"]
mise = 0
while montant >= MISE_MINIMAL:
print("Veuillez choisi votre table : ")
# On affiche les éléments de la liste table
i = 1
for element in LISTE_TABLE:
print(f"{i} - {element}")
i += 1
# Cette ligne à un comportement indéterminé
choix = input("Faites un choix : ")
t = faire_un_choix(choix)
if choix == "1":
print("Vous avez choisi le Parie-Direct")
choix_parie = input("Choisissez un nombre sur le quel parier : ")
while not choix_parie.isdigit() or int(choix_parie) > 71 or int(
choix_parie) < 0:
print("Le nombre doit être compris entre 0 et 70")
choix_parie = input("> : ")
choix_parie = int(choix_parie)
# Demander à l'utilisateur d'entrer sa mise et vérifier la saisie
mise_str = 0
mise = verification_entrer_numerique(mise_str, "Entrez votre mise : ")
verifie_si_mise_superieure_montant(mise, montant)
while mise <= MISE_MINIMAL:
print("Veuillez saisir une mise supérieure ou égale à 100")
mise = verification_entrer_numerique(mise_str, "Entrez votre mise : ")
if choix_parie == NOMBRE_ALEATOIRE:
print("Bravo, vous avez le bon numéro")
gain = mise * 2
montant += gain
print(f"Votre nouveau solde est {montant}")
else:
print("Vous avez perdu ", NOMBRE_ALEATOIRE)
montant = montant - mise
print(f"Votre nouveau solde est {montant}")
if choix == "2":
print("Vous avez choisi la couleur. Tapez 'R' pour rouge et 'N' Pour"
" noir")
choix_couleur = input("Saisiser votre reponse : ").capitalize()
while choix_couleur != "R" and choix_couleur != 'N':
print("Veuillez saisir 'R' pour rouge et 'N' pour noir")
choix_couleur = input("> : ").capitalize()
mise_str = 0
mise = verification_entrer_numerique(mise_str, "Entrez votre mise : ")
verifie_si_mise_superieure_montant(mise, montant)
index = randint(0, 1)
trie = LISTE_COULEUR[index]
verification_resultat(choix_couleur, montant, mise, trie)
C'est bien dans cette fonction: verification_resultat(choix_couleur, montant, mise, trie) Quand on passe des valeurs simples à une fonction, les valeurs calculées restent locales à la fonction. Tu dois retourner au programme principal le nouveau montant de tes gains ou pertes.
La ligne suivante est dans les deux parties du if:
print(f"Votre nouveau solde est {le_montant}")
Tu pourrais la placer à la fin juste avant le return du montant.
Tu as le même problème dans: verification_chaine_vide(valeur_a_verifier)
- Edité par PierrotLeFou 15 janvier 2023 à 17:55:28
Le Tout est souvent plus grand que la somme de ses parties.
Comportement indéterminer
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.