lors de la boucle et inférieure ou égale à signer (en Python)
Si je le faisais, tandis que les boucles, et j'ai remarqué quelque chose d'étrange.
count = 0
while count <= 5:
count += 1
print(count)
de sortie:
1
2
3
4
5
6
ce n'est pas que je ne comprends pas tout en boucles. C'est que comment se fait le décompte est imprimé jusqu'à six? quand il est censé imprimer count
seulement si count
est inférieur ou égal à 5?
et bien 6 est au-delà de 5. pourquoi est-ce?
Je sais que je pourrais faire
count = 0
while count != 5:
count += 1
print(count)
mais je veux juste comprendre pourquoi ne mettre en <=
se comporter de manière bizarre?
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien d'étrange à propos de
<=
; votre condition de boucle permet pour les nombres jusqu'à et notamment5
. Mais vous incrémentcount
et puis de l'imprimer, de sorte que vous aurez l'impression6
dernier.C'est parce que
count = 5
satisfait de votre condition de boucle, puis vous ajoutez un à faire6
et d'impression. La prochaine fois par la bouclecount <= 5
n'est plus vrai, et seulement puis la boucle se termine.De sorte que votre code ne ce:
count = 0
,count <= 5
->True
,count += 1
faitcount = 1
, imprimer1
.count = 1
,count <= 5
->True
,count += 1
faitcount = 2
, imprimer2
.count = 2
,count <= 5
->True
,count += 1
faitcount = 3
, imprimer3
.count = 3
,count <= 5
->True
,count += 1
faitcount = 4
, imprimer4
.count = 4
,count <= 5
->True
,count += 1
faitcount = 5
, imprimer5
.count = 5
,count <= 5
->True
,count += 1
faitcount = 6
, imprimer6
.count = 6
,count <= 5
->False
à la fin de la boucle.Vous pourriez incrémenter le compteur après impression:
ou vous pouvez utiliser
<
pour autoriser uniquement les numéros de petits que5
:<=
c'est pourquoi 6 a été imprimée aussi parce que j'ai miscount += 1
première donc, quand le comte a 5 ont été ajoutés, puis il vérifié la boucle encore, il devient faux, de sorte qu'il se casse. merci pour la visualisation de ce qui se passe!C'est simple, quand le comte est égal à cinq, vous ajoutez 1 et il devient de 6 puis de l'imprimer et de vous sortir de la boucle.
Votre problème n'est pas sur la façon
<=
œuvres.Vous ajoutez 1 à
count
avant de l'imprimer, de sorte que lorsque le compteur est égal à 5, vous ajoutez ensuite 1 et donc imprimer 6.Parcourons le code et voir ce qui se passe.
Remarque: Si votre code est en train de faire quelque chose que vous ne vous attendez pas à faire, c'est une bonne pratique à suivre.
La
count
commence à 0Incrémenter le compteur de sorte qu'il est maintenant égale à 1. L'imprimer.
Incrément. D'impression. Répétez.
Passons sur le cas intéressant qui est à l'origine du problème.
Dans ce cas, le
count
encore satisfait à l'inégalité, de sorte que le code s'exécute.Ce qui se passe?
La
count
, qui est de 5, est incrémenté et donc imprime 6.Maintenant que j'espère que vous comprenez pourquoi le problème existe, nous allons explorer les alternatives et leurs avantages, leurs inconvénients, et les sorties.
Nous allons commencer avec votre code.
Avantages: Ne pas imprimer 0
Inconvénients: Imprime 6
Que faire si nous avons supprimé la
=
signe?De sortie:
Avantages: Est-ce que vous voulez
Inconvénients: Vous devez commencer à 0 au lieu de 1
Que faire si nous avons fait comme vous l'avez suggéré, et remplacé le
<
signe avec l'!
signe?De sortie:
Avantages: Est-ce que vous voulez
Inconvénients: Fragile. Si vous avez déjà modifié votre incrément alors qu'il a augmenté par un nombre, comme, par exemple, 3, le point final sera sauté dessus accidentellement et le code marcherait jamais. Mieux vaut utiliser une inégalité
Que si nous voulions où nous commençons à être le premier nombre qui est affiché? Eh bien, pour ce faire, nous devrions avoir à imprimer le nombre actuel avant de nous changer, de sorte que les moyens que nous avons pour inverser l'ordre des événements.
De sortie:
Avantages: Est-ce que vous voulez et commence le premier numéro affiché à la place de dessous.
Inconvénients: Si vous voulez coller avec
while
boucles, c'est le chemin à parcourir, mais il ya une meilleure façon dans ce cas.Dans des situations de ce genre, où vous incrémenter les numéros et ensuite effectuer des opérations avec eux, c'est beaucoup plus logique de simplement utiliser un
for
de la boucle, qui a été conçu pour des cas comme celui-ci.De sortie:
Avantages: Est-ce que vous voulez, plus facile à lire, plus facile à écrire, moins susceptible de provoquer des bugs basé sur le placement.
Inconvénients: La limite supérieure doit être connu, contrairement à un
while
boucle.Pour rendre les choses claires, je vais montrer les deux scénarios avec explication concrète:
sortie serait 1,2,3,4
Variable a=0 doit satisfaire à la condition(a<4) de la boucle while continuer l'exécution.
un=un+1 est calculé et enregistré dans la mémoire de la boucle qui est maintenant de 1.
Par conséquent, le nombre 1 serait sorti pas 0 comme un résultat de l'impression(un).
Pour effectuer une itération de nouveau à l'intérieur de la boucle; le nombre 1(qui a été enregistré dans la mémoire de la première boucle est vérifiée à l'encontre de l'un<4 condition). Ce qui est Vrai; poursuivre l'exécution comme précédente.
un=un+1 calculé et enregistré dans la mémoire de la boucle qui est maintenant de 2.
Ensuite, le numéro 2 est sorti
et est enregistré dans la mémoire de la deuxième boucle et de les vérifier à l'encontre de l'un<4). Ce qui est Vrai; poursuivre l'exécution comme précédente.
un=un+1 calculé et enregistré dans la mémoire de la boucle qui a maintenant 3 ans.
Ensuite, le nombre 3 est sortie
et est enregistré dans la mémoire de la troisième boucle qui est vérifié par la suite contre l'un<4). Ce qui est Vrai; poursuivre l'exécution comme précédente.
un=un+1 calculé et enregistré dans la mémoire de la boucle qui est maintenant de 4.
Ensuite, le nombre 4 est sortie, même si la condition a<4 devrait être satisfaite. La raison en est que, j'ai coincé à l'intérieur de la boucle après la satisfaction de la condition précédente 3<4 et maintenant, après je suis à l'intérieur de la boucle, l'exécution des instructions est inévitable qui s'en tiendront à la sortie 4. Le nombre 4 est maintenant enregistré dans la mémoire de la quatrième boucle qui est vérifié à l'encontre de l'un<4). Qui est Fausse, l'exécution de l'arrêt ici.
Ce scénario serait prête et compréhensible pour le cas du scénario inverse
Sortie serait 0,1,2,3
Variable a=0 doit satisfaire à la condition(a<4) de la boucle while continuer l'exécution.
Première impression instruction est exécutée, et la première valeur inventé par un dans la mémoire de la première boucle est de 0. Donc 0 est retournée.
Par la suite un=un+1 est calculé et enregistré dans la mémoire de la boucle qui va changer pour être à 1 et pas à 0.
Pour effectuer une itération de nouveau à l'intérieur de la boucle; le nombre 1(qui a été enregistré dans la mémoire de la première boucle est vérifiée à l'encontre de l'un<4 condition). Ce qui est Vrai; poursuivre l'exécution comme précédente.
L'impression instruction est exécutée, et la valeur créée par un dans la mémoire de la deuxième boucle est maintenant de 1. Donc 1 est sortie.
Par la suite un=un+1 est calculé et enregistré dans la mémoire de la boucle qui est maintenant de 2.
Pour effectuer une itération de nouveau à l'intérieur de la boucle; le numéro 2(qui a été enregistré dans la mémoire de la deuxième boucle est vérifiée à l'encontre de l'un<4 condition). Ce qui est Vrai; poursuivre l'exécution comme précédente.
L'impression instruction est exécutée, et la valeur créée par un dans la mémoire de la troisième boucle est maintenant de 2. Donc 2 est sortie.
Par la suite un=un+1 est calculé et enregistré dans la mémoire de la boucle qui a maintenant 3 ans.
Pour effectuer une itération de nouveau à l'intérieur de la boucle; le nombre 3(qui a été enregistré dans la mémoire de la troisième boucle est vérifiée à l'encontre de l'un<4 condition). Ce qui est Vrai; poursuivre l'exécution comme précédente.
Première impression instruction est exécutée, et la valeur créée par un dans la mémoire de la quatrième boucle a maintenant 3 ans. Donc 3 est sortie.
Par la suite un=un+1 est calculé et enregistré dans la mémoire de la boucle qui est maintenant de 4.
Pour effectuer une itération de nouveau à l'intérieur de la boucle; le numéro 4(qui a été enregistré dans la mémoire de la quatrième boucle est vérifiée à l'encontre de l'un<4 condition). Ce qui est Faux; l'exécution s'arrête.