Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lignes de code incomprises

Sujet résolu
    24 septembre 2012 à 14:29:02

    Bonjour tout les zéros,

    Je m'appelle ramito et je suis connu sur le Site du Zero en tant que Webdesigner.

    Lycéen, j'ai subi la réforme qui propose au cursus Scientifique la spécialité ISN (Informatique et Science du Numérique)

    Le professeur nous avait donnés un exercice à faire :

    Citation

    Écrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et affiche le carré de ce nombre.



    Mon problème

    J'ai commence le python il y a peu grâce aux tutos du SDZ.

    J'avais réussi à faire ça :

    u = demande
    b = u*u 
    print ("Le carré de " + str(u) + " est " + str (b))
    


    Le professeur nous as ensuite envoyés un mail dans lequel il est écrit ça :

    def exo1():
    # tant que la variable booléenne ok est à False
    # on essaie d'obtenir un nombre de l'utilisateur...
        ok=False
        while not ok:
            try:
                u=demande("donnez un nombre réel")
            except:
                message_erreur("exemple de réel : -1.53")
            else:
                ok=True
                print("variable ="+str(u))
        return(u)
    
    # modifiez le programme pour que :
    # 1/ il n'accepte que des vrais réels (que se passe-t-il lorsque
    # l'utilisateur retourne 2,5 par exemple ?
    # 2/ il n'accepte que des entiers.
    # 3/ si on tape un code du genre "xxx" on obligera le programme à s'arrêter
    # 4/ plutôt qu'un print qui envoie dans la console,
    # faites afficher un message à l'écran.
    # On pourra compléter la bibliothèque "lycee" de manière à disposer
    # de ces fonctions.
    


    Ce que je ne comprends pas ici c'est les "True" et "False"

    J'ai regardé les tutos du sdz le concernant mais impossible de comprendre ici à quoi elles servent.

    Si quelqu'un peut me dire concrétement ici ce que signifie chaque ligne et surout les True et False, cela m'aiderait grandement.

    Merci d'avance à tout ceux qui me viendront en aide,
    Cordialement,
    ramito
    • Partager sur Facebook
    • Partager sur Twitter
    Mon Portfolio : http://crativearch.deviantart.com/gallery/
      24 septembre 2012 à 14:46:01

      Ici le not qui précede ta variable booléenne indique "Tant que ok n'a pas changé d'état, j'éxécute."
      while not ok:
      


      La variable ok étant initialisée à faux c'est lorsque ok prendra True que tu sortira de la boucle.

      • Partager sur Facebook
      • Partager sur Twitter
        24 septembre 2012 à 14:52:08

        En fait True et False nous permettent de créer une boucle ?

        Et ceux là, servent à quoi ? Que veulent-ils dire ? Le except surtout ^^
        try:
                    u=demande("donnez un nombre réel")
                except:
                    message_erreur("exemple de réel : -1.53")
        


        Merci de ton aide :)
        • Partager sur Facebook
        • Partager sur Twitter
        Mon Portfolio : http://crativearch.deviantart.com/gallery/
          24 septembre 2012 à 14:54:45

          as-tu le droit de dire à ton prof que son code est moisi ?

          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            24 septembre 2012 à 15:02:44

            Citation : josmiley

            as-tu le droit de dire à ton prof que son code est moisi ?



            Tiens je suis pas le seul à me dire ca :-°

            Try/Except n'est pas bien approprié ici. Mais c'est vaguement un if/else dans ton cas.

            Si le code situé dans le Try génére une erreur alors le code exécute ce qui se situe dans le except.

            La fonction demande c'est juste un input en fait ?
            • Partager sur Facebook
            • Partager sur Twitter
              24 septembre 2012 à 15:21:05

              # Créé par rdesplat, le 24/09/2012
              from __future__ import division
              from Tkinter import *
              from lycee import *
              
              def message_erreur(t):
              # utilisation du module messagebox de TkInter (passez la souris sur le mot
              # tkMessageBox et acédez à la bibliothèque correspondante
                  tkMessageBox.showerror("erreur",t)
              
              def message_info(t):
              # utilisation du module messagebox de TkInter (passez la souris sur le mot
              # tkMessageBox et acédez à la bibliothèque correspondante
                  tkMessageBox.showinfo("Info",t)
              
              max_termes=4
              L=["Aucune","Poussin","Pupille","Minime","Cadet"]
              Agemin=[0,6,8,10,12]
              Agemax=[6,8,10,12,1000]
              u=demande("Age de la personne")
              i=0
              trouve=False
              resultat=""
               while i<max_termes and not trouve:
               trouve=(u>=Agemin[i]) and (u<Agemin[i])
               if not trouve:
                i=i+1
               resultat=L[i]
              message_info("La personne est dans la catégorie : "+resultat)
              


              Pourquoi ce code ne marche t-il pas ? Le professeur nous as donné ce code et il dit que ça marche.
              • Partager sur Facebook
              • Partager sur Twitter
              Mon Portfolio : http://crativearch.deviantart.com/gallery/
                24 septembre 2012 à 15:22:10

                rien que l'utilisation d'un booléen pour break le while c'est moisi ^^

                sinon, l'indentation est mauvaise ...

                ensuite faut lui parler des dict() à ton prof :)
                • Partager sur Facebook
                • Partager sur Twitter

                Python c'est bon, mangez-en. 

                  24 septembre 2012 à 15:24:42

                  Pour que cela marche il faudrait que je modifie quoi ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Mon Portfolio : http://crativearch.deviantart.com/gallery/
                    24 septembre 2012 à 15:27:53

                    ça peut pas marcher avec 0,6,8,10,12,100 à cause de la comparaison:

                    trouve=(u>=Agemin[i]) and (u<Agemin[i])

                    en fait tout le bloc while est moisi ...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Python c'est bon, mangez-en. 

                    Anonyme
                      24 septembre 2012 à 15:34:54

                      Je reviens au 1er message, il y a eu des posts avant que je réponde.

                      La variable "u" n'est pas explicite pour un débutant comme pour un pro, on évite les variables à une seule lettre sauf le "n" et le "i" comme diminutif de nombre ou indice (et encore...).

                      True et False veulent dire "vrai" et "faux".

                      ok = False veut simplement dire, que c'est pas ok

                      donc while not ok : veut dire "Tant que ce n'est pas ok, on reste dans la boucle".

                      Je connais ISN, j'ai aidé un enseignant à se former dans le langage pour enseigner dans cette section.
                      Ils ne sont pas spécialisés dans un langage et sont plus là, pour vous enseigner l’algorithmique, ne lui en veut pas c'est pas le but de son programme de t'apprendre un langage.

                      Citation : PuckMan

                      Try/Except n'est pas bien approprié ici. Mais c'est vaguement un if/else dans ton cas.



                      Je ne suis pas d'accord, comment ferais-tu l'équivalent?

                      Ce que je trouve bizarre, et je pense que josmiley parlait de cela, c'est la boucle while dans une fonction, c'est pas très beau.

                      Le else semble inutile, ce bloc pourrait être placé dans le try.

                      while True: # boucle infinie
                          try: # J'essaie...
                              n = int(input("donnez un nombre réel : ")) # de transformer ma chaîne en un entier
                              print("variable = {}".format(n)) # et je l'affiche
                              break # j'interrompt la boucle
                          except ValueError: # Si une erreur de type ValueError
                              print("Erreur de type") # j'affiche "Erreur de type"
                      


                      Bonne continuation...

                      P.S Pour ton 2ème message, il nous manque le module lycee

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 septembre 2012 à 15:41:48

                        heu ...
                        en fait je crois aussi qu'un while if/else break serait mieux ...
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Python c'est bon, mangez-en. 

                          24 septembre 2012 à 15:44:27

                          Cher fred1599,

                          Merci de ton aide, pourtant mon niveau en Python étant réellement faible, je ne comprends pas ta boucle "try". Le int(input( et le ("variable = {}". format(n)) ..

                          Le module lycée, mon professeur ne me l'a pas donné mais il n'a pas l'air d'être très compliqué (comme celui TkInter).

                          Encore merci
                          ramito
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Mon Portfolio : http://crativearch.deviantart.com/gallery/
                            24 septembre 2012 à 15:49:15

                            j'ai rien dit, effectivement le test ne se fait pas dans demande() qui est un simple input() donc le bloc try/except s'impose ici.

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Python c'est bon, mangez-en. 

                            Anonyme
                              24 septembre 2012 à 15:54:22

                              Citation : josmiley

                              j'ai rien dit, effectivement le test ne se fait pas dans demande() qui est un simple input() donc le bloc try/except s'impose ici.



                              Arf tout ça par esprit de contradiction je te connais :p

                              Citation : ramito

                              Merci de ton aide, pourtant mon niveau en Python étant réellement faible, je ne comprends pas ta boucle "try". Le int(input( et le ("variable = {}". format(n))



                              variable = {}, remplacera la valeur de "n" dans l'accolade.

                              La fonction format est dans la documentation python ;)

                              Citation : ramito

                              Le module lycée, mon professeur ne me l'a pas donné mais il n'a pas l'air d'être très compliqué (comme celui TkInter).



                              Impossible de tester si tu ne l'as pas, car la fonction demande doit se trouver dans ce module. Si tu ne l'as pas tu ne pourras pas l'importer.

                              Citation : ramito

                              Pour que cela marche il faudrait que je modifie quoi ?



                              Avais-tu un message d'erreur?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 septembre 2012 à 16:00:04

                                J'ai réussi à débugger le programme. :)

                                Merci de ton aide.

                                je pense que je vais continuer mon apprentissage du python.

                                Merci à tous
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Mon Portfolio : http://crativearch.deviantart.com/gallery/
                                  24 septembre 2012 à 16:09:22

                                  ça vaut ce que ça vaut ...

                                  ages = (5,7,9,11)
                                  cats = ("Aucune","Poussin","Pupille","Minime","Cadet")
                                  while True:
                                      try:
                                          age = int(input("votre age : "))
                                          print(cats[sorted(ages+(age,)).index(age)])
                                          break
                                      except: pass
                                  
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Python c'est bon, mangez-en. 

                                    25 septembre 2012 à 7:39:56

                                    C'est original (et sympa) comme méthode, je trouve (ligne 6). :)

                                    Sinon, on peut aussi simplement utiliser bisect (ou bisect_right).

                                    print(cats[bisect(ages, age)])
                                    
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      25 septembre 2012 à 11:38:51

                                      Citation : yoch


                                      Sinon, on peut aussi simplement utiliser bisect (ou bisect_right).



                                      Bravo!
                                      j'en avais jamais entendu parlé ... voilà une doc qui va bien occuper ma journée. :)
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Python c'est bon, mangez-en. 

                                        26 septembre 2012 à 19:27:10

                                        Citation : josmiley

                                        j'en avais jamais entendu parlé ... voilà une doc qui va bien occuper ma journée. :)


                                        Bah en fait, c'est l'algo de recherche dichotomique. D'ailleurs, c'est ch***t que ça fonctionne uniquement dans un sens de tri (tout comme heapq d'ailleurs).
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Lignes de code incomprises

                                        × 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