En C, je ferais ça :
int i;
for (i = 0;; i++)
if (thereIsAReasonToBreak(i))
break;
Comment puis-je réaliser quelque chose de similaire en Python ?
En C, je ferais ça :
int i;
for (i = 0;; i++)
if (thereIsAReasonToBreak(i))
break;
Comment puis-je réaliser quelque chose de similaire en Python ?
Si vous faites cela en C, alors votre jugement est aussi obscur qu'il le serait en Python :-)
Pour une boucle qui se termine sur une simple vérification de condition au début de chaque itération, il est plus habituel (et plus clair, à mon avis) de faire cela dans la construction de la boucle elle-même. En d'autres termes, quelque chose comme (si vous avez besoin de i
après la fin de la boucle) :
int i = 0;
while (! thereIsAReasonToBreak(i)) {
// do something
i++;
}
ou (si i
peut avoir une portée sur juste la boucle) :
for (int i = 0; ! thereIsAReasonToBreak(i); ++i) {
// do something
}
Cela se traduirait par l'équivalent en Python :
i = 0
while not there_is_a_reason_to_break(i):
# do something
i += 1
Seulement si vous devez sortir dans le moyen de la boucle quelque part (ou si votre condition est suffisamment complexe pour rendre votre déclaration de boucle beaucoup moins lisible), vous devez vous inquiéter de la rupture.
Lorsque votre sortie potentielle est une simple sortie à la commencer de la boucle (comme cela semble être le cas ici), il est généralement préférable de coder la sortie dans la boucle elle-même.
Merci, c'est ce que je cherchais. C'est l'approche la plus propre et la plus agréable, je pense.
Oui, très propre, je n'avais pas encore tout à fait compris le pouvoir du yield
autre que pour les générateurs de séquence paresseux, mais un ami l'a récemment utilisé pour fournir une pushd/popd
sans avoir à maintenir une pile explicite. C'était très astucieux.
Bien que j'aime l'approche, l'infini est maintenant une gamme. Le zéro ne fait pas partie de l'infini si vous voulez mon avis. Oh, et c'est une version mal reformulée de cette réponse .
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
5 votes
Je ne suis pas un expert en python mais
while (true): if reasonneeded(i) break i = i+1
Ça devrait marcher ?4 votes
Duplicata possible de python unbounded xrange()
0 votes
En C, cela provoquerait un débordement et n'irait pas jusqu'à "l'infini".
1 votes
Le titre de cette question ne devrait-il pas être changé en "Bouclage de 0 à l'infini en Python" ? Vous essayez simplement d'avoir une boucle "infinie".
range
", ce qui vous permet d'éviterwhile True: i += 1