Partage
  • Partager sur Facebook
  • Partager sur Twitter

[TP zCasino] Votre avis sur mon code

    20 juillet 2013 à 1:59:53

    Bonjour !

    Je viens de finir le TP du zCasino et j'aimerais avoir votre avis sur mon code (je ne suis pas encore aller voir la correction).

    Venant du PHP/C++ j'avoue avoir un peu de mal avec la "philosophie" Pythoniènne.

    Je ne donne pas le contenu de functions.py je ne pense pas que cela soit nécessaire (il contient les fonctions isEven, isOdd et numberColor) mais si vous voulez le voir demandez.

    Voici donc mon code :

    #!/usr/bin/python3
    
    from random import randrange
    from math import ceil
    from functions import *
    from os import system
    
    money = 100
    replay = "oui"
    
    while replay == "oui":
    
        system("reset")
        print("Début de la partie :")
        print("--------------------\n")
    
        print("Vous commencez cette partie avec " + str(money) + " $\n")
        number = int(input("Numéro de mise (entre 0 et 49) : "))
        mise = money + 1
        while mise > money or mise < 10:
            mise = int(input("Somme à miser (entre 10 et " + str(money) + ") : "))
        money -= mise
    
        win_number = randrange(49)
        print("\nVous lancez la bile ...")
        print("La bille c'est arrêté sur le numéro " + str(win_number) + " et sa couleur est le " + numberColor(win_number) + ".\n")
        
        if win_number == number:
            print("Bravo, vous avez misé sur le bon numéro !")
            print("Vous ganez " + str(mise * 3) + "$")
            money += mise * 3
        elif (isEven(number) and isEven(win_number)) or (isOdd(number) and isOdd(win_number)):
            print("Bravo, vous avez misé la bonne couleur !")
            print("La moitié de votre mise vous est restitué, soit " + str(ceil(mise/2)) + " $\n")
            money += ceil(mise / 2)
        else:
            print("Vous avez perdu votre mise :(")
            print("Il vous reste maintenant " + str(money) + " $ !\n")
    
        if money < 10:
            print("Vous n'avez plus d'argent, impossible de continuer ...")
            break
        
        replay = ""
        while replay not in ["oui", "non"]:
            replay = input("Voulez-vous continuer le joue (oui, non) ? ")



    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2013 à 3:19:49

      Salut,

      Je n'ai fait que survoler ton code (car je ne me rappelle pas des détails du zCasino) mais y a juste 2 ptits trucs qui me chiffonnent :

      win_number = randrange(49)

      Si tu veux que le nombre sont compris 0 entre 49 (bornes incluses) alors il faudra mettre randrange(50) plutôt. ;)

      Si j'ai bien compris les fonctions isEven et isOdd sont là pour déterminer si un nombre est pair ou impair ? Pourquoi ne pas utiliser simplement N%2 (pour un nombre impair) ou not N%2 (pour un nombre pair) ?

      En attendant je lirais plus attentivement ton code et j'en profiterai pour jeter un coup d'oeil au TP aussi. :)

      -
      Edité par Hazzin 20 juillet 2013 à 3:26:22

      • Partager sur Facebook
      • Partager sur Twitter
        20 juillet 2013 à 16:03:42

        Merci pour tes remarques MasterSilver.

        En ce qui concerne even/odd j'ai donc choisi de supprimer mon functions.py qui finalement ne m'es pas très utile.

        Par contre j'aurais une petite question. Je suis en train d'ajouter la gestion des erreurs dans mon programme.

        J'ai donc codé ceci :

        # On demande le numéro de mise de l'utilisateur
        number = -1
        while number not in range(50):
            number = input("Numéro de mise (entre 0 et 49) : ")
            try:
                number = int(number)
            except ValueError:
                print("*** Erreur de saisie ***")
                continue

        Avec ceci j'arrive à détecter une erreur de saisie du type ValueError. Ce qui me gène c'est que quand on entre un nombre négatif aucun message n'est affiché.

        Suite à ça j'arrive au code suivant :

        # On demande le numéro de mise de l'utilisateur
        while True:
            number = input("Numéro de mise (entre 0 et 49) : ")
            try:
                number = int(number)
                assert number in range(50) 
            except ValueError:
                print("*** Erreur de saisie ***")
                continue
            except AssertionError:
                print("*** Erreur de saisie ***")
                continue
            else:
                break

        Est-ce qui l'utilisation, dans ce cas ci, de break et continue est une mauvaise idée ?


        • Partager sur Facebook
        • Partager sur Twitter
          20 juillet 2013 à 20:10:07

          Re. :)

          Pourquoi utiliser des 'continue' ? La boucle continuera automatiquement. Après quand t'es sur que l'utilisateur a bien saisi ce qui est demandé soit tu utilises un break comme ce que tu as fait, soit tu changes légèrement ton code :

          a=True
          while a:
              number = input("Numéro de mise (entre 0 et 49) : ")
              try:
                  number = int(number)
                  assert number in range(50)
              except ValueError:
                  print("*** Erreur de saisie ***")
                 
              except AssertionError:
                  print("*** Erreur de saisie ***")
                 
              else:
                  a=False

          Le résultat reste le même. :)

          -
          Edité par Hazzin 21 juillet 2013 à 3:28:41

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            21 juillet 2013 à 12:30:52

            En python les exceptions peuvent être multiples

            except (ValueError, AssertionError):
                print("*** Erreur de saisie ***")

            Source



            • Partager sur Facebook
            • Partager sur Twitter
              21 juillet 2013 à 16:15:02

              Merci pour vos remarques MasterSilver et fred1599, ça m'aide beaucoup :)
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                22 juillet 2013 à 11:50:22

                :euh: Pourquoi gérer une AssertionError ? Les assertions ne sont pas sensées être utilisées pour le débogage ?

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  22 juillet 2013 à 11:59:35

                  " Les assertions ne sont pas sensées être utilisées pour le débogage ?"

                  Tout à fait ;)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 juillet 2013 à 20:55:02

                    Lancer ma propre exception d'après une condition serait donc mieux ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      22 juillet 2013 à 21:15:59

                      Gadgeto a écrit:

                      Lancer ma propre exception d'après une condition serait donc mieux ?

                      Oui, effectivement.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      [TP zCasino] Votre avis sur mon code

                      × 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