Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python[3.1] zCasino...

Du tutoriel sur Python

Sujet résolu
    1 juillet 2010 à 17:44:54

    Bonjour à toutes et à tous,


    Je suis entrain de réaliser le T.P de zCasino du tutoriel de Python.
    J'ai un gros soucis que je ne comprends pas...

    En effet, le message "Entrez un numéro" s'execute au moins 5 fois alors que je ne vois pas pourquoi. De plus, ma variable sommeJoueur bug 1 fois sur 2 ...

    Pourriez-vous m'aider



    ############################################
    #Programme zCasino                         #
    #Auteur: Realmagma                         #
    #Licence: Aucune                           #
    #Date: Jeudi 1 juillet 2010                #
    ############################################
    
    
    
    #Les Modules Importés
    #
    #
    from random import randrange 
    from math   import ceil 
    
    
    
    ###############################################################################
    #Les diférentes fonction
    #
    #
    def nombreAleatoire():
        "Tire un nombre aléatoire\
         entre 0 et 49"
        
        return randrange(50)
    
    
    ###############################################################################    
    def comparaison(numJoueur, numCroupier, miseJoueur, sommeJoueur):
        "Compare les nombres du croupier\
         et de l'utilisateur"
    
        if(numJoueur == numCroupier):
            print("\nBravo, vous avez triplee votre mise")
            miseJoueur *= 3
    
        elif(numJoueur != numCroupier):
            
            
            if(numJoueur % 2 == 0) and (numCroupier % 2 == 0):
                
                print("\nCool 50% de la mise car le nombre est pair")
                sommeJoueur = sommeJoueur + ceil((miseJoueur * 0.5))
                print("\n\tArgent actuel:", sommeJoueur)
                return sommeJoueur
             
            elif(numJoueur % 2 != 0) and (numCroupier % 2 != 0):
                
                print("\nCool vous gg 50% de la mise car nombre est impair")
                sommeJoueur = sommeJoueur + ceil((miseJoueur * 0.5))
                print("\n\tArgent actuel:", sommeJoueur)
                return sommeJoueur
    
        else:
            print("\nVous perdez", miseJoueur, "$")
            sommeJoueur = sommeJoueur - miseJoueur
            print("\n\tArgent actuel:", sommeJoueur)
            return sommeJoueur
        
    
    
    ###############################################################################    
    #Les diférrentes variables
    #
    #
    sommeJoueur = 300
    miseJoueur  = 0
    numJoueur   = 0
    numCroupier = 0
    
    
    ###############################################################################
    #Corps du programme
    #
    #
    print("\t\t########################\n")
    print("\t\t#       Zcasino        #\n")
    print("\t\t########################\n\n\n")
    
    print("Vous avez ", sommeJoueur, "$")
    print("Entrez une mise:\t=>")
    miseJoueur = input()
    
    try:
        miseJoueur = int(miseJoueur)
    
    except:
        print("\nErreur, entrez uniquement un nombre sans espaces")
    
        
        
    while(miseJoueur > sommeJoueur) or (miseJoueur < 1): #Tant que la somme n'est pas valide#
        print("\nEntrez une somme correcte:\n=>")
        miseJoueur = input()
    
        try:
            miseJoueur = int(miseJoueur)
    
        except:
            print("\nErreur, entrez uniquement un nombre")
    
    
    #Fin de la boucle, reprise#
    print("\nQuelle numéro choisissez-vous (0 a 49)?:\t=>")
    numJoueur = input()
    
    numJoueur = int(numJoueur)    #Convertion str en int
    
    if((numJoueur < 0) or (numJoueur > 49)):
        while(numJoueur < 0) or (numJoueur > 49): #Tant que le numJoueur n'est pas <0, 49>
        
            print("\nQuelle numéro choisissez-vous (0 a 49)?:\t=>")
            numJoueur = input()
            numJoueur = int(numJoueur)
    
    
    numCroupier = nombreAleatoire() #Appel de la fonction /nombreAléatoire/
    print("\nLa roulette est tombée sur le nombre", numCroupier)
    
    sommeJoueur = comparaison(numJoueur, numCroupier, miseJoueur, sommeJoueur) #Appel de la fonction /comparaison/#
    
    print("\n\tArgent actuel:", sommeJoueur) #Un essai
    

    Cordialement, Realmagma

    P.S: Mon code n'est pas finit hein :p
    P.P.S: Cool une nouvelle catégorie pour Python <3
    P.P.P.S: Mon identation est elle bonne ? :euh:
    • Partager sur Facebook
    • Partager sur Twitter
      1 juillet 2010 à 18:07:16

      J'ai pas de souci avec "Entrez un numéro" par contre, ça me semble normal que tes variables déconnent, tu les initialise à 0 comme en C alors que tu devrais plutôt faire quelque chose dans ce style pour éviter les conflits :


      miseJoueur = int(input())
      


      Et aussi, ne les déclare que quand tu en as besoin, je crois pas, d'après ce que j'ai compris, que ce soit utile de déclarer toutes les variables en même temps dans le programme puisque la seule variable "constante" est sommeJoueur.

      Je met mon code, si ça peut t'aider, puisque j'ai réussi à faire quelque chose de fonctionnel. :)

      #! /usr/bin/python3.1.2
      
      #TP1 SdZ : zCasino
      
      #Jeu de casino simple : on choisit une mise, une case, la roue tourne.
      #Si la case choisie tombe, on gage 3 fois sa mise.
      #Si la case qui tombe est de la même couleur (noir = Pair, rouge = Impair), on gagne 50% de sa mise.
      #Si on se plante, on perd tout.
      
      
      from random import randrange
      
      miseDepart = 100
      
      print("Mise de départ = ", miseDepart)
      
      while miseDepart > 0:
          print ("Entrez la mise :")
          try :    
              mise = int(input())
          except ValueError :
              print("Vous n'avez pas entré de mise !")        
              mise = -1
              continue
          if (mise > miseDepart):
              print("Vous ne pouvez pas miser plus d'argent que vous n'en avez !")
              mise = -1
              continue    
          if (mise <= 0):
              print("Mise nulle ou négative !")
              mise = -1
              continue
      
          print ("Choisissez une case : ")
          caseChoisie = int(input())
      
          case = (randrange(50))
      
          print ("Case : ", case)
      
          if (caseChoisie == case):
              miseDepart += mise * 3
              print("Mise : ", miseDepart)
          elif (caseChoisie % 2 == case % 2):
              miseDepart += mise / 2
              print("Mise : ", miseDepart)
          else :
              print("Vous avez perdu votre mise.")
              miseDepart -= mise
              print("Il vous reste : ", miseDepart)
      
      if (miseDepart == 0):
          print("Vous avez perdu la partie !")
      
      • Partager sur Facebook
      • Partager sur Twitter
        1 juillet 2010 à 18:31:57

        Retourne sommeJoueur une bonne fois pour toute à la fin de la fonction comparaison de façon à ce que cette portion de code soit toujours exécutée.

        Autre conseil : Recommencer à coder de façon plus propre ce T.P en réfléchissant à la structure globale du code avant de commencer à écrire.
        • Partager sur Facebook
        • Partager sur Twitter
          1 juillet 2010 à 18:51:03

          Citation : EMC1

          Autre conseil : Recommencez à coder de façon plus propre ce T.P en réfléchissant à la structure globale du code avant de commencer à écrire.



          Qu'entends -tu par "PLus propre" ? Est-ce par rapport à l'identation ?
          Ma structure globale est elle si moche que ça :o ?

          Citation : EMC1

          Retourne sommeJoueur une bonne fois pour toute à la fin de la fonction comparaison de façon à ce que cette portion de code soit toujours exécutée.



          C'est corriger merci :)

          Pour mon petit problème, et bien tout est réglé :o . Pourtant je vous assure que ça me mettais plusieurs fois "entrez un numéro" même si le numéro était compris entre 0 et 49.

          Je laisse le topic ouvert, au cas où.
          Amicalement, Realmagma



          EDIT: En faite dans ma partie principale "sommeJoueur" n'est pas modifiée :( . Pourquoi n'y a t'il pas de pointeur en python :D . Une idée ?
          • Partager sur Facebook
          • Partager sur Twitter
            1 juillet 2010 à 19:22:51

            Elle n'est pas modifiée si tu gagnes parce que c'est ce que ton code est censé faire.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              4 août 2010 à 16:00:22

              Voila j'ai voulu m'amuser à coder mon zcasino, si vous voyez des problèmes, n'hésitez pas à me le signaler.

              import random as r
              from math import ceil
              import os
              class Zcasino(object):
                  def __init__(self, numero_mise, somme_mise):
                      self.nb_machine=r.randint(0, 50)
                      self.numero_mise=numero_mise
                      self.somme_mise=somme_mise
                  def test(self, a):
                      t=cmp(self.nb_machine, a)
                      if t==0:
                          return self.somme_mise*3
                      elif self.couleur(self.numero_mise)==self.couleur(self.nb_machine) and t!=0:
                          return self.somme_mise*1.5
                      else : return -(self.somme_mise)
                  def couleur(self, nb):
                      if nb%2==0: return "good"
                      else : return "bad"
              
              if __name__=="__main__":
                  total=1500
                  while total!=0:
                      try:
                          num_PO=int(raw_input("Entrer le numero choisi: "))
                          if num_PO<0 or num_PO>50:
                              print "Entrer un nombre entre 0 et 50"
                              continue
                      except ValueError:
                          print "Entrer un nombre"
                          continue
                      while 1:
                          try:
                              mise_PO=int(raw_input("Entrer votre mise <%s: " %(total)))
                              if mise_PO>total or mise_PO<0:
                                  print "Entrer une mise <%s" %(total)
                                  continue
                              break
                          except: continue
                      z=Zcasino(num_PO, mise_PO)
                      total+=z.test(mise_PO)
                      print "votre somme est de %s" %ceil(total)
                  print "perdu"
                  os.system("pause")
              


              • Partager sur Facebook
              • Partager sur Twitter

              Python[3.1] zCasino...

              × 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