Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comportement indéterminer

    15 janvier 2023 à 13:16:58

    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)
    


    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2023 à 17:42:46

      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

      • Partager sur Facebook
      • Partager sur Twitter

      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.
      • Editeur
      • Markdown