Partage
  • Partager sur Facebook
  • Partager sur Twitter

[exercices] Instruction itérative et nombres

Anonyme
    4 juillet 2010 à 11:21:54

    Bonjour,

    Un petit exercice, pas de critiques, vous faites ou vous ne faites pas!

    Ecrivez un programme avec la boucle while et un avec la boucle for.

    Ecrire un programme qui compte de 0 à 10 (10 inclus) en utilisant la boucle while

    Ecrire un programme qui compte de 0 à 10 (10 inclus) en utilisant la boucle for et la fonction intégrée range().
    avec while :
    >>> n=0
    >>> while n<11:
    	print n
    	n+=1 # equivalent à n=n+1
    


    avec for :
    for n in range(11):
        print n
    


    Merci de votre participation.

    Remarque : Comme NoHar, mettez votre code en secret. L'intérêt n'est pas de regarder la réponse des posteurs, faites le vous-même, un peu de fierté, jouez le jeu!



    Réponse : Ce soir!
    • Partager sur Facebook
    • Partager sur Twitter
      4 juillet 2010 à 11:27:30

      Facile (peut-être un peu trop ?). :p
      Voilà ma solution:

      Python 3.1.2 (r312:79147, Apr 15 2010, 12:35:07) 
      [GCC 4.4.3] on linux2
      Type "help", "copyright", "credits" or "license" for more information.
      >>> i = 0
      >>> while i < 11:
      ...     print(i)
      ...     i += 1
      ... 
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      >>> for i in range(11):
      ...     print(i)
      ... 
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      >>>
      


      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
        4 juillet 2010 à 11:55:41

        Non non, moi je trouve que c'est une très bonne idée pour les débutants ;);) Alors ma solution :

        Exercice 1 :
        compteur = 0
        
        while compteur < 11:
            print(compteur)
            compteur += 1
        


        Exercice 2 :
        compteur = 0
        
        for compteur in range(11):
            print(compteur)
        
        • Partager sur Facebook
        • Partager sur Twitter
          4 juillet 2010 à 12:17:36

          C'est cool qu'il y ai enfin des exercices à faire :) Moi j'en cherche depuis longtemps mais j'en trouve pas . . . Je cherche surement mal ^^
          Enfn bref, c'est assez simple :

          Premier exercice :

          >>> i = 0
          >>> while i<=10:
          ...     print(i)
          ...     i += 1
          


          Second exercice :

          # Edit : J'ai enlevé le i = 0 comme dit par NoHar
          >>> for i in range(11):
          ...     print(i)
          
          • Partager sur Facebook
          • Partager sur Twitter
            4 juillet 2010 à 12:22:55

            Plug'n'play :
            Dans ton second programme, tu n'as pas besoin de déclarer i = 0 avant d'utiliser ta boucle for
            • Partager sur Facebook
            • Partager sur Twitter
            Zeste de Savoir, le site qui en a dans le citron !
              4 juillet 2010 à 12:24:29

              Gryfalo :
              Puisque de toute façon, tu incrémentes compteur juste après l'affichage de (compteur + 1) , pourquoi ne pas déplacer l'incrémentation avant l'affichage et afficher simplement compteur ?
              • Partager sur Facebook
              • Partager sur Twitter
                4 juillet 2010 à 12:42:57

                BOnjour,

                Voici mon code source:

                ############################################
                #Programme Exercice avec Python            #
                #Auteur: Realmagma                         #
                #Licence: Aucune                           #
                #Date:  04/07/2010                         #
                ############################################
                
                
                
                #Les Modules Importés
                #
                #
                
                
                #Les diférentes fonction
                #
                #
                
                
                #Les diférrentes variables
                #
                #
                i = 0
                
                #Corps du programme
                #
                #
                print("\n Exercice numero 1:\n")
                
                while(i < 10):
                        i = i + 1
                        print(i)
                
                
                
                print("\n Exercice numero 2:\n")
                
                for i in range(10):
                        print(i+1)
                
                • Partager sur Facebook
                • Partager sur Twitter
                  4 juillet 2010 à 12:47:13

                  RealMagma :

                  Il faut que tu incrémentes après avoir affiché le i car sinon ça commence à 1 or il est demandé dans l'énoncé de commencer à 0
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    4 juillet 2010 à 12:48:03

                    Plug'n'Play 512 à raison, merci d'éditer
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 juillet 2010 à 12:54:58

                      Citation : Plug'n'Play 512

                      RealMagma :

                      Il faut que tu incrémentes après avoir affiché le i car sinon ça commence à 1 or il est demandé dans l'énoncé de commencer à 0


                      Oups désolé:

                      ############################################
                      #Programme Exercice avec Python            #
                      #Auteur: Realmagma                         #
                      #Licence: Aucune                           #
                      #Date:  04/07/2010                         #
                      ############################################
                      
                      
                      
                      #Les Modules Importés
                      #
                      #
                      
                      
                      #Les diférentes fonction
                      #
                      #
                      
                      
                      #Les diférrentes variables
                      #
                      #
                      i = 0
                      
                      #Corps du programme
                      #
                      #
                      print("\n Exercice numero 1:\n")
                      
                      while(i < 11):
                              print(i)
                              i = i + 1
                              
                      
                      print("\n Exercice numero 2:\n")
                      
                      for i in range(11):
                              print(i)
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 juillet 2010 à 13:04:04

                        Tout le baratin sur l'auteur et la licence est-il vraiment nécessaire pour un code de ce type ? :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 juillet 2010 à 13:14:40

                          Citation : Maxibolt

                          Tout le baratin sur l'auteur et la licence est-il vraiment nécessaire pour un code de ce type ? :)



                          J'avoue, là ça fait un peu 'too much'. :lol:

                          Mais puisqu'on en parle.
                          Realmagma : en Python, lorsque tu veux documenter un module, fais-le commencer par ce que l'on appelle un docstring, c'est-à-dire qu'au lieu de faire des commentaires commençant par un #, tu l'écris dans une chaine multiligne entouré de triples double-quotes.

                          Exemple :

                          """
                          Module contenant des fonctions qui font des trucs trop bien
                          Auteur: NoHaR
                          ... etc ...
                          """
                          
                          # import inutile
                          import sys
                          
                          def mafonction(argument1, argument2):
                              """
                              Fonction qui fait des trucs trop bien.
                              * argument1: premier argument, il sert à rien mais il est obligatoire
                              * argument2: pareil
                              
                              retourne: 42
                          
                              """
                              return 42
                          


                          De cette manière, lorsque dans la console tu appelleras help(monmodule) l'aide qui te sera affichée sera générée en fonction de ce que tu as mis dans tes docstrings : si ton module est bien documenté, plus besoin de lire ton code pour savoir ce qu'il fait. ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Zeste de Savoir, le site qui en a dans le citron !
                            4 juillet 2010 à 13:22:55

                            Citation : NoHaR

                            Citation : Maxibolt

                            Tout le baratin sur l'auteur et la licence est-il vraiment nécessaire pour un code de ce type ? :)



                            J'avoue, là ça fait un peu 'too much'. :lol:

                            Mais puisqu'on en parle.
                            Realmagma : en Python, lorsque tu veux documenter un module, fais-le commencer par ce que l'on appelle un docstring, c'est-à-dire qu'au lieu de faire des commentaires commençant par un #, tu l'écris dans une chaine multiligne entouré de triples double-quotes.

                            Exemple :

                            """
                            Module contenant des fonctions qui font des trucs trop bien
                            Auteur: NoHaR
                            ... etc ...
                            """
                            
                            # import inutile
                            import sys
                            
                            def mafonction(argument1, argument2):
                                """
                                Fonction qui fait des trucs trop bien.
                                * argument1: premier argument, il sert à rien mais il est obligatoire
                                * argument2: pareil
                                
                                retourne: 42
                            
                                """
                                return 42
                            



                            De cette manière, lorsque dans la console tu appelleras help(monmodule) l'aide qui te sera affichée sera générée en fonction de ce que tu as mis dans tes docstrings : si ton module est bien documenté, plus besoin de lire ton code pour savoir ce qu'il fait. ;)



                            En faite, c'est un "code type" que je copie/colle pour chaque code source que j'écrit. J'ai juste à copier/coller les commentaire et je me lance dans mes projets :D

                            Les triples quotes sans print et en dehors des fonctions, je n'avais jamais essayé. Merci pour l'astuce :p

                            Mon "code type" fait si c*n que ça :lol: ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 juillet 2010 à 13:25:20

                              C'est pas juste une astuce, c'est une feature de Python : ça permet de générer la documentation du module automatiquement, et c'est ce que les programmeurs python sont habitués à lire.

                              C'est pas que ton code type fait c*n, au contraire on sent l'enthousiasme et l'envie de bien faire, c'est une bonne chose. Je t'ai simplement montré comment on fait ça, par convention, "à-la-python". ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Zeste de Savoir, le site qui en a dans le citron !
                                4 juillet 2010 à 13:31:48

                                Et l'option d'optimisation -O0 les vire lors de la compilation vers bytecode, de sorte que ça n'affecte pas les performances ;)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 juillet 2010 à 13:43:33

                                  Citation : fred1599


                                  Un petit exercice, pas de critiques, vous faites ou vous ne faites pas!



                                  C'est quoi ces manières ?

                                  Citation : fred1599


                                  Ecrivez un programme avec la boucle while et un avec la boucle for.

                                  Ecrire un programme qui compte de 0 à 10 (10 inclus) en utilisant la boucle while



                                  Mauvaise idée que de proposer cela à des débutants sans mise-en-garde, c'est pas du tout pythonique de compter le contenu d'un itérable avec while. Un langage a ses idiomatismes et il faut les respecter. Rappel :

                                  There should be one-- and preferably only one --obvious way to do it.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    4 juillet 2010 à 13:48:14

                                    Les triple quotes ne servent pas juste à ça, realmagma : ils permettent juste de définir une chaîne de caractères telle qu'elle est écrite (y compris les retours à la ligne).

                                    Essaie :
                                    a = """Bonjour, je suis
                                    une chaîne de caractère entourée
                                    de triples guillemets
                                    
                                    """
                                    print(a)
                                    print("Et voila")
                                    


                                    Tu peux utiliser des """blabla""" ailleurs que dans une docstring (en fait, dès que tu as besoin de retours à la ligne, c'est plus simple), et tu peux utiliser des "blabla" dans une docstring (mais une aide détaillée se fait rarement sur une ligne).
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 juillet 2010 à 14:28:03

                                      Citation : Maxibolt

                                      ils permettent juste de définir une chaîne de caractères telle qu'elle est écrite (y compris les retours à la ligne).




                                      En pratique, les chaînes triples servent aussi à désactiver du code dans un fichier source en construction quand on veut que des portions de code soient inactives pendant l'exécution mais sans les faire disparaître au cas où on en aurait encore besoin par exemple (en anglais, c'est du comment out).


                                      Les chaînes triples servent aussi parfois à éviter les caractères d'échappement, en particulier les apostrophes et le guillemets. Par exemple, si on veut placer dans une chaîne littérale Python le texte suivant :


                                      La fable "Le Loup et l'Agneau" de La Fontaine



                                      on ne pourra placer ce texte ni entre des simples quotes ni entre des doubles quotes. Par contre, on pourra l'écrire entre des triples quotes (ci-dessous j'utilise Python 2.6 pas python 3):


                                      >>> print """La fable "Le Loup et l'Agneau" de La Fontaine"""
                                      La fable "Le Loup et l'Agneau" de La Fontaine
                                      >>>
                                      


                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 juillet 2010 à 23:26:06

                                        Scala permet d'écrire un code étonnamment court pour répondre à l'exercice :
                                        0 to 10 foreach println
                                        


                                        Edit : Haskell aussi :
                                        main = mapM_ print [0 .. 10]
                                        
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          5 juillet 2010 à 0:03:54

                                          On peut également le faire en une ligne avec python 3:
                                          list(map(print, range(11)))
                                          

                                          ou,
                                          [print(i) for i in range(11)]
                                          


                                          Je t'accorde que c'est plus clair en Scala ^^
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            5 juillet 2010 à 0:18:27

                                            Avec une boucle for en passant par un générateur

                                            >>> compteur=(i for i in range(11))
                                            >>> for element in compteur: print element
                                            


                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              5 juillet 2010 à 0:28:14

                                              range(11) renvoie déjà un générateur en Python 3.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                5 juillet 2010 à 0:39:24

                                                Et celui-ci aussi

                                                >>> def compteur():
                                                	for i in range(11): yield i
                                                
                                                	
                                                >>> for gen in compteur():
                                                	print gen
                                                


                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  5 juillet 2010 à 1:14:45

                                                  Citation : fred1599

                                                  Et celui-ci aussi

                                                  >>> def compteur():
                                                  	for i in range(11): yield i
                                                  
                                                  	
                                                  >>> for gen in compteur():
                                                  	print gen
                                                  





                                                  T'aurais dû prévenir que le but était de faire le code le plus compliqué possible. Cet exo tourne complètement à vide.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    5 juillet 2010 à 1:23:51

                                                    Citation

                                                    T'aurais dû prévenir que le but était de faire le code le plus compliqué possible. Cet exo tourne complètement à vide.



                                                    Ta ...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      5 juillet 2010 à 7:34:17

                                                      ...rentule ? ...misage ?

                                                      Tu devrais être plus explicite, un peu plus et on penserait que tu essaies d'être impoli !
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        5 juillet 2010 à 11:04:06

                                                        Non mais il a raison, cet exo est de toute façon banal. C'est complètement idiot de rester sur "oh ben on va faire simple juste avec for et while pour pas perdre les débutants". Donc si on a des solutions un peu plus amusantes/intéressants à montrer, on ne va pas s'en priver sous prétexte que le but n'est pas de faire un code compliqué. Justement, ça permet de s'améliorer (un peu, parce que les codes restent très simples). Et puis à part ça, si candide n'est pas content, qu'il aille voir ailleurs. Personne ne veut le forcer à rester sur un exo qui "tourne à vide" (ce qui de un ne veut rien dire, de deux, s'il signifie qu'on a fait le tour du sujet, est vrai depuis le premier post, ce qui ne l'a pas empêché de poster - y compris pour non-critiquer, ce qui est assez exceptionnel).

                                                        Sinon, fred1599, transformer les listes en générateur n'a pas d'intérêt (en 2.6, puisqu'en 3.1 range retourne déjà un générateur, et ce que tu fais n'a aucune effet). Recoder un générateur, pourquoi pas, mais si tu le codes à partir de la liste correspondante, tu perds tout ce qui fait sa force. Tu pourrais écrire :

                                                        def compteur(debut, fin=None, pas=1):
                                                            #si on ne précise qu'un argument, ça sera "fin", et on commencera à zéro
                                                            if fin is None:
                                                                fin = debut
                                                                debut = 0
                                                            n = debut
                                                            while n < fin:
                                                                yield n
                                                                n += pas
                                                        


                                                        Bon, on ne peut pas compter en sens inverse avec celui-là. À vous de le modifier pour.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          5 juillet 2010 à 11:12:40

                                                          Citation

                                                          Sinon, fred1599, transformer les listes en générateur n'a pas d'intérêt



                                                          En effet, merci pour l'explication
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          [exercices] Instruction itérative et nombres

                                                          × 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