Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fibonacci question

Sujet résolu
    30 mai 2011 à 15:32:04

    Bonjour

    je suis débutant en programmation, depuis quelque semaine j’apprends python avec différents cours.
    j'ai pas énormément de temps à consacré pour la programmation, mais j'ai envie d'avancer rapidement.
    Donc je viens vous poser une question assez simple surement, mais que je ne comprend pas.

    Je comprend pas comment cette boucle:
    a, b, c = 1, 1, 1
    >>> while c < 11 :
    ... print b,
    ... a, b, c = b, a+b, c+1

    Affiche ce resulta :
    1 2 3 5 8 13 21 34 55 89



    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      30 mai 2011 à 15:43:20

      Citation

      j'ai pas énormément de temps à consacré pour la programmation, mais j'ai envie d'avancer rapidement.



      Euhhh... o_O , t'as pas l'impression que c'est un peu en contradiction ce que tu dis là?

      Tu devrais voir du côté des affectations de variables.

      Plutôt que de reprendre un code, mieux vaut dans l'autre sens, voir l'algorithme pour Fibonacci et refaire le code toi même.

      • Partager sur Facebook
      • Partager sur Twitter
        30 mai 2011 à 16:06:56

        Je me reprend, j'ai pas énormément de temps à consacré pour la programmation, mais je suis motivé . ;)

        Merci de votre conseille, je vais essayer, mais j'ai déja passer un temps précieux sur sa, et si je passe se temps sur chaque petit problème, il va me falloir 10 ans pour apprendre python, donc si vous avez une explication claire je suis prenant.

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 mai 2011 à 19:02:37

          b = 1
          a =  1
          b =  2
          c =  2
          b = 2
          a =  2
          b =  3
          c =  3
          b = 3
          a =  3
          b =  5
          c =  4
          b = 5
          a =  5
          b =  8
          c =  5
          b = 8
          a =  8
          b =  13
          c =  6
          b = 13
          a =  13
          b =  21
          c =  7
          b = 21
          a =  21
          b =  34
          c =  8
          b = 34
          a =  34
          b =  55
          c =  9
          b = 55
          a =  55
          b =  89
          c =  10
          b = 89
          a =  89
          b =  144
          c =  11
          • Partager sur Facebook
          • Partager sur Twitter
            30 mai 2011 à 21:40:03

            b = 1
            a = 1
            donc a + b = 2 ( je comprend)
            b = 2
            a = 2
            a + b = 3 je comprend pas sa devrait être 4

            Merci pour ton aide fred
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              30 mai 2011 à 22:25:48

              a, b, c = 1, 1, 1
              while c < 11:
                  a, b, c = b, a + b, c + 1
              
                  # ... #
              
                  # premier tour :
                  a, b, c = 1, 1 + 1, 1 + 1
                  # soit : a = 1, b = 2, c = 2
              
                  # deuxième tour :
                  a, b, c = 2, 1 + 2, 2 + 1
                  # soit : a = 2, b = 3, c = 3
              
                  # troisième tour :
                  a, b, c = 3, 2 + 3, 3 + 1
                  # soit : a = 3, b = 5, c = 4
              
                  # etc...
              


              Relis le chapitre 4 du livre de Swinnen, tout y est expliquer !

              [edit] Je viens de voir ce qui te gène.
              Il faut bien comprendre que les expressions (ici les calculs) qui sont à droite du égale (opérateur d'affectation) sont toutes traitées avant d'être affectées aux variables qui sont à gauche.
              • Partager sur Facebook
              • Partager sur Twitter
                30 mai 2011 à 22:42:07

                Merci Psycopy !!
                j'ai du relire 10 foi avant de comprendre !!
                je doit être lent je pense ..
                • Partager sur Facebook
                • Partager sur Twitter
                  31 mai 2011 à 0:34:35

                  Citation : PsycoPy



                  [edit] Je viens de voir ce qui te gène.
                  Il faut bien comprendre que les expressions (ici les calculs) qui sont à droite du égale (opérateur d'affectation) sont toutes traitées avant d'être affectées aux variables qui sont à gauche.




                  Oui, c'est le vrai problème de compréhension que pose ce genre d'affectation en Python, mais apparemment certains n'ont pas suffisamment d'empathie pour le comprendre ...


                  Citation : bigginer


                  j'ai du relire 10 foi avant de comprendre !!
                  je doit être lent je pense ..



                  Non, c'est tout à fait normal, j'ai moi-même mis un certain temps à comprendre ces affectations multiples alors que je n'étais pas un débutant en programmation.


                  Sinon, ton code est inutilement compliqué :




                  a = b = 1
                  
                  while b <= 100:
                      print b
                      a, b = b, b + a
                  


                  1                                                                                                              
                  2                                                                                                              
                  3                                                                                                              
                  5
                  8
                  13                                                                                                             
                  21                                                                                                             
                  34                                                                                                             
                  55
                  89
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 juin 2011 à 3:56:00

                    Fais tout de même attention : si la boucle de Candide conduit au même résultat, elle n'a pas exactement le même sens. Elle affiche les termes de la suite « jusqu'à 100 », alors que tu toi tu « affiches les 11 premiers termes ».

                    Si tu sais par avance à quel point tu vas t'arrêter, la sienne est meilleure. Si tu cherches seulement le n-ème terme, sans idée a priori dessus, elle ne fonctionnera pas. Il est important que tu voies la différence.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 juin 2011 à 6:30:19

                      Citation : Ermin

                      Si tu cherches seulement le n-ème terme, sans idée a priori dessus, elle ne fonctionnera pas.



                      Quand on cherche le n-ième terme, en Python, on utilise typiquement une boucle for et pas une boucle while, ce qui donne ici :


                      a = b = 1
                      
                      for _ in range(20):
                          print a,
                          a, b = b, b + a
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 juin 2011 à 9:41:59

                        Effectivement (sauf que là l'affichage sera bizarre).
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 juin 2011 à 15:12:08

                          Citation : Ermin

                          sauf que là l'affichage sera bizarre



                          qu'est-qu'il y a de bizarre ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 juin 2011 à 19:45:19

                            Au temps pour moi, j'étais pas réveillé.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Fibonacci question

                            × 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