Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un jeu du plus ou du moins (encore toi ?!)

    24 février 2013 à 15:54:43

    C'est encore moi :-°... Peut-être que je demande un peu trop en faisant un sujet chaque jour... ou presque. Là, il s'agit bien de juger (gentiment, je vous en prie) et de me dire si je suis ou non sur un bonne voie.

    Après ce très court paragraphe, passons au code...  Ne soyez pas trop méchant, c'est un jeu du plus ou du moins (plus ou moins :euh: ?) :

    """ Un jeu du plus  ou du moins"""
    from random import randint
    
    niveau = 0
    essaies = 30
    score = 0
    
    def Jeu (nombre_secret) :
        gagne = 0
        global essaies, score, niveau
        while True :
            nombre = input("Saissisez un nombre : ")
            try :
                nombre = int(nombre)
            except :
                print("Une erreur semble avoir été detecté (lettres,...) !")
                continue
    
            if essaies == 1 :
                break
    
            if nombre == nombre_secret :
                print("Vous avez gagné !")
                score += 1
                gagne = 1
                niveau += 1
                break
                
            elif nombre < nombre_secret :
                print("Ce nombre est trop petit.")
                essaies -= 1
    
            elif nombre > nombre_secret :
                print("Ce nombre est trop grand.")
                essaies -= 1
    
            if essaies == 0 :
                break
                
        
    while True :
        print("Bienvenue dans le niveau {} !".format(niveau))
        if essaies == 0 :
            print("Vous n'avez plus d'essaies !")
            break
        
        if niveau == 0:
            print("Le nombre est entre 1 et 10.")
            Jeu(randint(1,10))
            
        elif niveau == 1 :
            print("Le nombre est entre 1 et 25.")
            Jeu(randint(1,25))
            
        elif niveau == 2 :
            print("Le nombre est entre 1 et 50.")
            Jeu(randint(1,50))
            
        elif niveau == 3:
            print("Le nombre est entre 1 et 75.")
            Jeu(randint(1,75))
            
        elif niveau == 4:
            print("Le nombre est entre 1 et 100.")
            Jeu(randint(1,100))
            
        elif niveau == 5:
            print("Le nombre est entre 1 et 150.")
            Jeu(randint(1,150))
            
        elif niveau == 6:
            print("Le nombre est entre 1 et 200.")
            Jeu(randint(1,200))
            
        elif niveau == 7:
            print("Vous avez gagné le jeu !")
    
        quitter = input("Vouslez-vous quitter (oui pour quitter) ? ")
        quitter = quitter.strip().lower()
        if quitter == "oui" :
            break
        else :
            print("Il est considéré que vous restez !")
            
    if essaies > 0:
        print("Il vous restait encore {} essaies.".format(essaies))
    print("Vous avez fini avec un score de {}. ".format(score))
    input("Appuyer sur ENTREE pour quitter...")

    -
    Edité par Rh4ck 24 février 2013 à 15:59:47

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      24 février 2013 à 17:36:16

      Si tu arrives à supprimer le mot clé global, je lis ton code ;)
      • Partager sur Facebook
      • Partager sur Twitter
        24 février 2013 à 17:40:20

        Ligne 16 : except :. NON. Je t'ai déjà dit qu'il fallait absolument préciser le type d'erreur que tu t'attends à rattraper, sinon tu risques d'engendrer des bugs parmi les plus chiants possibles à résoudre.

        • Partager sur Facebook
        • Partager sur Twitter
        Zeste de Savoir, le site qui en a dans le citron !
          24 février 2013 à 18:10:47

          nohar a écrit:

          Ligne 16 : except :. NON. Je t'ai déjà dit qu'il fallait absolument préciser le type d'erreur que tu t'attends à rattraper, sinon tu risques d'engendrer des bugs parmi les plus chiants possibles à résoudre.


          D'ailleurs il me semble qu'il y a eu un topic qui l'illustrait tres bien il y a peu de temps :p
          • Partager sur Facebook
          • Partager sur Twitter
            24 février 2013 à 18:25:09

            ... Bon je reconnais que tu l'a déjà dit avec except mais je ne vois absolument pas quel erreur pourrait provoquer notre pauvre utilisateur : Il doit entrer un nombre, si il n'entre pas un nombre il recommence. C'est tout, je vois pas pourquoi je mettrais 10 lignes d'except juste pour convertir un nombre en entier.

            Fred1599, je vois pas comment retirer le mot global, ça marche très bien. J'ai dû légèrement le modifier pour que ça marche mais ça marche.

            Je crois que je vais cherche le sujet sur except.

            • Partager sur Facebook
            • Partager sur Twitter
              24 février 2013 à 18:25:40

              Dans le 'while True', je pense qu'il y a moyen de remplacer les tests sur le niveau par un dictionnaire :
              niveau -> texte à afficher et valeur max du tirage (il faudrait traiter différemment le niveau 7 qui n'appelle pas Jeu).

              Au lieu de définir des variables globales, pourquoi ne pas faire une classe avec les paramètres ?

              • Partager sur Facebook
              • Partager sur Twitter
                24 février 2013 à 18:45:37

                Rh4ck a écrit:

                ... Bon je reconnais que tu l'a déjà dit avec except mais je ne vois absolument pas quel erreur pourrait provoquer notre pauvre utilisateur : Il doit entrer un nombre, si il n'entre pas un nombre il recommence. C'est tout, je vois pas pourquoi je mettrais 10 lignes d'except juste pour convertir un nombre en entier.

                Explicit is better than implicit. (Zen de Python)

                Quel que soit le contexte, il FAUT prendre cette habitude. Le sujet en question est ici. C'est justement parce que tu ne vois pas tout ce qu'il pourrait se passer qu'il ne faut pas prendre le risque que ca se passe en silence.

                Fred1599, je vois pas comment retirer le mot global, ça marche très bien. J'ai dû légèrement le modifier pour que ça marche mais ça marche.

                Ca marche mais c'est crade.

                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                  24 février 2013 à 18:50:39

                  Rh4ck a écrit:

                  ... Bon je reconnais que tu l'a déjà dit avec except mais je ne vois absolument pas quel erreur pourrait provoquer notre pauvre utilisateur

                  voici l'une des raisons: parfois on quitte le programme en utilisant la combinaison CTRL+C (surtout les utilisateurs de linux). Python quant à lui 'raise' une exception dans ce cas ! et dans ton code tu rattrappe toutes les exceptions d'ou on peut pas quitter l'application simplement en faisant CTRL+C

                  -
                  Edité par xGeek 24 février 2013 à 18:57:04

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    24 février 2013 à 18:58:29

                    Rh4ck a écrit:

                    ... Bon je reconnais que tu l'a déjà dit avec except mais je ne vois absolument pas quel erreur pourrait provoquer notre pauvre utilisateur : Il doit entrer un nombre, si il n'entre pas un nombre il recommence. C'est tout, je vois pas pourquoi je mettrais 10 lignes d'except juste pour convertir un nombre en entier.

                    Fred1599, je vois pas comment retirer le mot global, ça marche très bien. J'ai dû légèrement le modifier pour que ça marche mais ça marche.

                    Je crois que je vais cherche le sujet sur except.


                    Dans 99% des cas on peut faire sans le mot clé global, et tu es dans ces 99%, c'est à toi de chercher la solution et à moi de me retenir pour ne pas te la donner :)

                    Tu as la chance de voir cela dans un exercice simple, profites-en pour comprendre son inutilité et surtout pourquoi nohar dis que c'est crade, google t'aideras beaucoup...

                    Edit: Une façon de faire qui va te faire économiser des lignes

                    MAX = [10, 25, 50, 75, 100, 150, 200]
                    
                    for i, val in enumerate(MAX):
                        print("niveau {0}, le nombre est entre 1 et {1}.".format(i, val))



                    -
                    Edité par Anonyme 24 février 2013 à 20:45:36

                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 février 2013 à 11:46:58

                      Tiens d'ailleurs, puisqu'on en était à citer le zen de Python :

                      Python 3.3.0+ (3.3:944e86223d1f, Feb 12 2013, 17:57:48) 
                      [GCC 4.6.3] on linux
                      Type "help", "copyright", "credits" or "license" for more information.
                      >>> import this
                      The Zen of Python, by Tim Peters
                      
                      Beautiful is better than ugly.
                      Explicit is better than implicit.
                      Simple is better than complex.
                      Complex is better than complicated.
                      Flat is better than nested.
                      Sparse is better than dense.
                      Readability counts.
                      Special cases aren't special enough to break the rules.
                      Although practicality beats purity.
                      Errors should never pass silently.
                      Unless explicitly silenced.
                      In the face of ambiguity, refuse the temptation to guess.
                      There should be one-- and preferably only one --obvious way to do it.
                      Although that way may not be obvious at first unless you're Dutch.
                      Now is better than never.
                      Although never is often better than *right* now.
                      If the implementation is hard to explain, it's a bad idea.
                      If the implementation is easy to explain, it may be a good idea.
                      Namespaces are one honking great idea -- let's do more of those!
                      

                      « Special cases aren't special enough to break the rules. »

                      Ton cas particulier de conversion d'une string en int n'est pas assez spécial pour te permettre de le gérer avec un except: super-large.

                      « Errors should never pass silently. Unless explicitly silenced. »

                      Ça se passe d'interprétation.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Zeste de Savoir, le site qui en a dans le citron !

                      Un jeu du plus ou du moins (encore toi ?!)

                      × 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