Partage
  • Partager sur Facebook
  • Partager sur Twitter

bissextile en boucle

Sujet résolu
    10 février 2013 à 15:40:20

    Bonjour,

    Voici mon problème, je n'arrive pas à mettre en boucle un programme qui me dit si une année saisie par utilisateur est bissextile ou pas.

    Mon code ressemble à ça :

    year = input("veuillez saisir une annee : ")
    year = int(year)
    bissextile = True
    while bissextile == True :
    	if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0) :
    		bissextile = True
    		print("l'annee saisie est bissextile")
    	else :
    		bissextile = False
    		print("Veuillez saisir une annee : ")

    Quand je lance le programme en saisissant une année bissextile, le programme tourne en boucle, et lorsque je saisie une année non bissextile, l'interpréteur m'envoie la question veuillez saisir une année avec retour direct sur le prompt.

     Si quelqu'un pouvait help me ! :waw:

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      10 février 2013 à 15:43:48

      quelle est la condition d'arrêt de la boucle ?
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        10 février 2013 à 15:48:52

        quelle est la condition d'arrêt de la boucle ?
        • Partager sur Facebook
        • Partager sur Twitter

        Python c'est bon, mangez-en. 

          10 février 2013 à 15:52:24

          L'objectif est que tant que l'utilisateur ne saisie pas d'année bissextile, alors le programme affiche le message d'afficher une année, et lorsqu'une fois une fois l'année saisie est bissextile, le programme se ferme.

          Donc j'ai crée une variable de type booléenne : bissextile == True.

          • Partager sur Facebook
          • Partager sur Twitter
            10 février 2013 à 15:54:39

            j'en ai pas, cette condition d'arrêt je dois la mettre au même niveau d'indentation, que le while ?
            • Partager sur Facebook
            • Partager sur Twitter
              10 février 2013 à 16:48:38

              si j'ai bien compris, tant que l'année n'est pas bissextile le programme tourne en boucle ?

              suffit de traduire ça en python ...

              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

              Anonyme
                10 février 2013 à 16:57:33

                Salut,

                Il y a une anomalie dans ton programme...

                Voici ce que tu lui demandes, dans l'ordre :

                • Demander l'année à l'utilisateur et le convertir en nombre entier (on imagine que l'utilisateur a entré 2012)
                • La variable bissextile est mise à vraie
                • On vérifie que la variable bissextile est vraie. C'est le cas, on continue...
                • On vérifie que l'année entrée est divisible par 400 ou par 4 et,dans ce cas uniquement, non divisible par 100. C'est le cas, on exécute les instruction dans la condition...
                • On met la variable bissextile à vraie
                • On vérifie que la variable bissextile est vraie. C'est le cas, on continue...
                • On vérifie que l'année entrée est divisible par 400 ou par 4 et,dans ce cas uniquement, non divisible par 100. C'est le cas, on exécute les instruction dans la condition...
                • On met la variable bissextile à vraie
                • On vérifie que la variable bissextile est vraie. C'est le cas, on continue...
                • On vérifie que l'année entrée est divisible par 400 ou par 4 et,dans ce cas uniquement, non divisible par 100. C'est le cas, on exécute les instruction dans la condition...
                • On met la variable bissextile à vraie
                • ...

                Comme tu peux le voir, dans ce cas, tu entres dans une boucle infinie due au fait que bissextile est toujours vraie, et que tu ne redemandes jamais une valeur.

                Dans le cas où l'année n'est pas bissextile, voici ce qui se passe :

                • Demander l'année à l'utilisateur et le convertir en nombre entier (on imagine que l'utilisateur a entré 2013)
                • La variable bissextile est mise à vraie
                • On vérifie que la variable bissextile est vraie. C'est le cas, on continue...
                • On vérifie que l'année entrée est divisible par 400 ou par 4 et, dans ce cas uniquement, non divisible par 100. Ce n'est pas le cas, on passe au else...
                • On met la variable bissextile à faux
                • On affiche (mais sans demander de valeur) : "Veuillez saisir une annee :"
                • On vérifie que la variable bissextile est vraie. Ce n'est pas le cas, on sort de la boucle
                • Fin du programme.

                Ici, tu n'appelles pas la bonne fonction pour la demande de valeur, et la variable bissextile n'est pas bien utilisée. Si tu souhaites, comme tu le dis, ne pas sortir de la boucle, il faut utiliser while True (qui permet de ne jamais sortir de la boucle).

                • Partager sur Facebook
                • Partager sur Twitter
                  10 février 2013 à 17:32:33

                  A mon avis, il vaudrait mieux mettre en tant que condition :

                  i = 0
                  while i == 0:

                  Tant que i = 0, la boucle continue et lorsque tu veux que la boucle se finisse, tu mettras i = 1 donc le code donnera :

                  year = input("veuillez saisir une annee : ")
                  year = int(year)
                  i = 0
                  while i = 0 :
                      if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0) :
                          print("L'année est bissetile.")
                  		i = 1 # Ou 0 si on veux que la boucle se répète
                          
                      else :
                  		print("L'année n'est pas bissextile")
                  		i = 1 # Ou 0 si on veut que la boucle se répète

                  D'autres parts, si tu veux que l'utilisateur ait le choix, tu peux lui donner ce code :

                  quitter = input("Voulez-vous quitter le programme (Q pour quitter") :
                  quitter = quitter.strip().lower()
                  if quitter == 'q' :
                  	("Fin du programme")
                  	i = 1

                  Bien sûr, on peut rajouter des try et except ou autres choses pour ce programme.




                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 février 2013 à 18:00:06

                    Ça fait très longtemps que je n'ai pas fait de Python et je n'ai jamais été très fort mais bon je verrais bien un code comme celui-ci :

                    year = input("veuillez saisir une annee : ")
                    year = int(year)
                    while year % 400 == 0 or (year % 4 == 0 and year % 100 != 0) :
                            print("Veuillez saisir une année bissextile : ")
                            year = int(year)
                    print("L'année entrée est bissextile")


                    Que quelqu'un me corrige s'il voit une erreur ^^ Merci ...

                    -
                    Edité par @che 10 février 2013 à 18:36:07

                    • Partager sur Facebook
                    • Partager sur Twitter

                    🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                    Anonyme
                      10 février 2013 à 18:26:01

                      En effet, @che, il y a un soucis dans ton programme : la fonction printf est une fonction en C, pas en Python :lol:

                      -
                      Edité par Anonyme 10 février 2013 à 18:26:35

                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 février 2013 à 18:36:45

                        Merci ^^
                        Inutile de te dire quel langage je maîtrise le plus ^^" ...

                        • Partager sur Facebook
                        • Partager sur Twitter

                        🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                        Anonyme
                          10 février 2013 à 19:00:36

                          @che, il y a une autre erreur dans ta proposition. La boucle whileest infini puisqu'à aucun moment la valeur de year ne change... Tu oublis de demander la saisie d'un nouveau nombre avec input(...).

                          À part ça, en Python on aime les boucles infinies avec pour seule porte de sortie un break, un truc dans ce genre quoi :

                          while True:
                              try:
                                  year = int(input("Entrer une année : "))
                              except ValueError:
                                  print("Depuis quand une année peut-être autre chose qu'un nombre entier !? o_O")
                                  continue
                              if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
                                  break
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            10 février 2013 à 19:11:42

                            @che a écrit:

                            Merci ^^
                            Inutile de te dire quel langage je maîtrise le plus ^^" ...


                            L'Assembleur ? :lol:

                            -
                            Edité par Anonyme 10 février 2013 à 19:13:27

                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 février 2013 à 21:19:30

                              @PsycoPy: Oh désolé, je suis vraiment nul en Python -_-" Je pensais que c'était le rôle de int(year) de demander là valeur de year -_-" Mais enfait, c'est juste évident ce que tu dis ... input() -_-" J'aurais put deviner -_-" Et puis int(year) ça ressemble beaucoup à un changement de type -_-"
                              Je me sens bête, d'avoir confondu input() et un changement de type ... -_-"

                              • Partager sur Facebook
                              • Partager sur Twitter

                              🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                                10 février 2013 à 21:37:03

                                Enfin je suis de retour, merci de vos contributions à mon problème.

                                Vu que la soluce de Psycop était bonne, mais étant donné que j'ai pas encore vu les exceptions. 

                                J'ai réfléchis de mon côté, pour penser à un truc plus simple pour mon pauvre esprit. :(

                                Le plus simple au lieu de penser à affecter immédiatement une valeur à une variable de type booléenne avant un while, j'ai fait en sorte d'indiquer sur ma première ligne un while qui soit vrai, puis insérer mon bloc d'instructions et sur la fin mettre un break pour sortir de la boucle. A vous de me dire ce que vous en penser.

                                Voici mon nouveau code qui marche : :magicien:

                                while 1 :
                                	year = int(input("saisir une année : "))
                                	bissextile = year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)
                                	if bissextile :
                                		print ("l'année saisie est bissextile")
                                	else :
                                		print ("l'année saisie n'est pas bissextile")
                                		break


                                J'ai cru que j'allais perdre ma tête à ne pas trouver.

                                Allez,

                                @+:soleil:

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  10 février 2013 à 21:46:21

                                  petite modif de mon code :

                                  while 1 :
                                  	year = int(input("saisir une année : "))
                                  	bissextile = year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)
                                  	if bissextile :
                                  		print ("l'année saisie est bissextile")
                                  		break
                                  	else :
                                  		print ("l'année saisie n'est pas bissextile")

                                  En testant mon code, je me suis aperçu que le programme me redemandait de saisir une année quand j'indiquais une année bissextile, il suffisait que j'indique break à la fin du printf qui dit que l'année saisie est bissextile. OUF

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  bissextile en boucle

                                  × 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