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.
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.
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).
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.
Ç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
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
@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
@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 ... -_-"
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
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 :
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.
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
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.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.