Partage
  • Partager sur Facebook
  • Partager sur Twitter

programme Zcasino

Sujet résolu
    8 août 2018 à 14:17:00

    Bonjour

    Je suis bloqué avec mon programme Zcasino et je ne comprends pas l'erreur.

    S'il y a une bonne âme 

    merci

    # -*-coding:UTF-8 -*

    import os
    from random import randrange
    from math import ceil

            # on demande a l utilisateur el montant qu il souhaite miser

    montantMise = 0
    while   montantMise <= 0:    # tant que le montant est negatif ou nul on lui redemande combien il souhaite miser
            montantMise = input("Entrer votre mise: ")



    try:
            montantMise = int(montantMise)
            assert montantMise > 0

    except TypeError:
                   print("le montant misé doit etre une entier")
    except AssertionError:
                   print("le montant misé doit etre positif")
             
    numeroMise = 0         
    while   numeroMise <= 0 or numeroMise > 2:    #tant que le nyumero entrer par l utilisateur n est pas compris
                                                   #entre 0 et 2 on lui redemande le numero sur lequel il souhaite miser
            numeroMise = input("entrer le numéro entre 0 et 2 que vous souhaitez miser: ")



    try:
            numeroMise = int(numeroMise)
           

    except TypeError:
              print("Le type n est pas bon")
    except NameError:
              print("la variable n'a pas ete defini")

             


    # on se sert de la  fonction randrange pour tirer au sort un numéro



    x = randrange(3)
             
    if x == numeroMise :
                        print("Vous avez gagné: ",3*montantMise," euros, Votre nouvelle cagnotte est de: ",montantMise + 3*montantMise," euros")
             
    elif x % 2 == 0 and (numeroMise % 2 ==0) :
                        print("Vous avez gagné: ",ceil(montantMise/2)," euros, Votre nouvelle cagnotte est de: ", montantMise + ceil(montantMise/2))
                       
                   
    elif (x % 2 == 1 or x ==1 or x == 0) and (montantMise == 0 or montantMise == 1 or montantMise % 2 == 1):
                        print("Vous avez gagnéeee: ",ceil(montantMise/2), " euros, votre nouvelle cagnotte est de : ",montantMise + ceil(montantMise/2)," euros")
                             
                       
                       
    else:
            
              print("vous avez perdu votre mise")


    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      8 août 2018 à 14:33:06

      Commence par mettre l'erreur, ça sera un bon début (copier coller de ce qu'indique l'interpréteur python) ;)
      • Partager sur Facebook
      • Partager sur Twitter
        8 août 2018 à 16:02:17

        Bonjour,

        Merci d'utiliser la mise en forme de code Image

        Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Image de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.

        • Partager sur Facebook
        • Partager sur Twitter
          9 août 2018 à 10:43:04

          l'erreur est la suivante

          Mon programme

          <pre class="brush: python;">

          # -*-coding:UTF-8 -*
          
          import os
          from random import randrange
          from math import ceil
          
                  # on demande a l utilisateur el montant qu il souhaite miser
          
          montantMise = 0
          while   montantMise <= 0:    # tant que le montant est negatif ou nul on lui redemande combien il souhaite miser
                  montantMise = input("Entrer votre mise: ")
          
          
          
          try:
                  montantMise = int(montantMise)
                  assert montantMise > 0
          
          except TypeError:
                         print("le montant misé doit etre une entier")
          except AssertionError:
                         print("le montant misé doit etre positif")
                    
          numeroMise = 0          
          while   numeroMise <= 0 or numeroMise > 2:    #tant que le nyumero entrer par l utilisateur n est pas compris
                                                         #entre 0 et 2 on lui redemande le numero sur lequel il souhaite miser 
                  numeroMise = input("entrer le numéro entre 0 et 2 que vous souhaitez miser: ") 
          
          
          
          try:
                  numeroMise = int(numeroMise)
                  
          
          except TypeError:
                    print("Le type n est pas bon")
          except NameError:
                    print("la variable n'a pas ete defini")
          
                    
          
          
          # on se sert de la  fonction randrange pour tirer au sort un numéro
          
          
          
          x = randrange(3)
                    
          if x == numeroMise :
                              print("Vous avez gagné: ",3*montantMise," euros, Votre nouvelle cagnotte est de: ",montantMise + 3*montantMise," euros")
                    
          elif x % 2 == 0 and (numeroMise % 2 ==0) :
                              print("Vous avez gagné: ",ceil(montantMise/2)," euros, Votre nouvelle cagnotte est de: ", montantMise + ceil(montantMise/2))
                              
                          
          elif (x % 2 == 1 or x ==1 or x == 0) and (montantMise == 0 or montantMise == 1 or montantMise % 2 == 1):
                              print("Vous avez gagnéeee: ",ceil(montantMise/2), " euros, votre nouvelle cagnotte est de : ",montantMise + ceil(montantMise/2)," euros")
                                    
                              
                              
          else:
                   
                    print("vous avez perdu votre mise")
          
          


          </pre>

          -
          Edité par JlCro 9 août 2018 à 10:46:14

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            9 août 2018 à 11:20:43

            Pourtant l'erreur est bien explicite, on te dit qu'on ne peut pas utiliser l'opérateur <= entre une chaîne de caractère type str et un entier type int.

            Il faut donc ligne 11 ne pas oublier de caster ta chaîne en entier avec int(input(...)).

            • Partager sur Facebook
            • Partager sur Twitter
              10 août 2018 à 11:38:22

              J ai toujours le même probleme
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                10 août 2018 à 12:36:31

                À la même ligne ?
                • Partager sur Facebook
                • Partager sur Twitter
                  10 août 2018 à 13:57:22

                  Autant pour moi c'etait ligne 25 . maintenant ça marche merci

                  Par contre je ne comprends pas dans le corrigé de l'exercice il n 'y a pas de int(input(...))  mais juste input.

                  De plus le int je l avais mis juste en dessous dans le try   mais apparemment c'est pas bon

                  try:
                  montantMise = int(montantMise)
                  assert montantMise > 0
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    10 août 2018 à 14:45:34

                    Un programme se lit de haut en bas, donc quand tu dis l'avoir signalé en dessous, c'est problématique.

                    Je pense que tu vas trop vite dans ton apprentissage et que tu manques plein de petits détails très importants. Tu utilises des blocs try-except alors que tu ne comprends pas les erreurs signalées par ton interpréteur. Dans la logique, on apprend à lire et comprendre les erreurs afin de mieux gérer les exceptions.

                    L'utilisation de assert est complètement inutile, ça va surtout compliquer ton code, et cela pour rien ! Surtout que assert ne sert pas à faire ce que tu fais, comme par exemple contrôler si une valeur entrée par l'utilisateur est positive. On préférera plutôt,

                    if montantMise <= 0:
                        raise ValueError(...)

                    car son but est purement utilisé lors de test unitaire basique. Si tu l'utilises lors d'un fonctionnement réel de ton programme, tu ne peux plus utiliser l'option -O de la commande python, car tu risques un dysfonctionnement de ton programme imprévu.

                    Laisse donc tomber assert pour l'instant, tu verras que tu en auras très peu besoin, et si c'est le cas, tu auras un niveau de compétences bien au-dessus de celui que tu as actuellement.

                    Qui puis est pour un exercice aussi simple, ne te préoccupe pas des erreurs entrées par l'utilisateur, ça nuit beaucoup à la lisibilité du code. Donc les blocs try-except je ne les placerai pas, à moins que cela te soit imposé dans ton exercice.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 août 2018 à 10:29:08

                      ok merci

                      finalement ça fonctionnait bien sans mettre int(input(...)) il suffisait de mettre le try en retrait par rapport au while situé au dessus

                      -
                      Edité par JlCro 11 août 2018 à 14:22:42

                      • Partager sur Facebook
                      • Partager sur Twitter

                      programme 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