11
votes

Boucle avec conditions en python

Considérez le code suivant en C:

for i in range(10):
    if not some_condition: break
    do_something()


4 commentaires

Je pense que c'est une question de préférence personnelle.


Quelle version de Python?


Je pense que Python devrait avoir une construction comme do fois: , pour vous permettre de préciser que vous n'utilisez pas réellement le compteur de boucle.


Karl: pour _ dans la plage (10) semble être un moyen courant de noter cela, mais c'est bien sûr, c'est une idée horrible si vous utilisez GetText.


3 Réponses :


7
votes

En général, la plage " code> + breakfe code>" est préférable - mais dans Python 2.x, utilisez xrange code> au lieu de plage code> pour l'itération (cela crée les valeurs à la demande au lieu de faire une liste de chiffres).

mais cela dépend toujours. Qu'est-ce qui est spécial sur le numéro 10 dans ce contexte? Quel est exactement quelque_condition code>? Etc. P>

réponse à la mise à jour: p>

Il sonne comme si Certain_condition code> est une "boucle invariante", c'est-à-dire ne changera pas pendant la boucle. Dans ce cas, nous devrions simplement le tester: P>

if some_condition:
  for i in xrange(10):
    do_something()


2 commentaires

10 et la gamme ne sont que des exemples que cela aurait pu être pour i dans mon_array . Comme clarifié dans la question, quelque_condition contrôle si le programme doit effectuer la boucle ou la sauter du tout


Votre version est simple et fonctionne. Je voulais juste épargner une indentation supplémentaire. Merci



3
votes

pour code> Les boucles avec une limite supérieure constante sont un peu rares dans Python. Si vous êtes itération sur SOMARRAY code>, vous pouvez faire:

for i, item in enumerate(somearray):
    if not some_condition:
        break
    do_sth_with(i, item)


0 commentaires

9
votes

Ceci pourrait ne pas être associé, mais il y a ce que j'ai l'habitude de faire ... Si Certain_condition est assez simple, mettez-le dans une fonction et filtre éléments itérer sur: xxx

Vous pouvez également utiliser cette approche également lorsque vous ithétiez sur une liste d'éléments. xxx

encore, cela pourrait ne pas être Votre cas, vous devez choisir la méthode de filtrage des éléments en fonction de votre problème.


1 commentaires

Ou, la rendre encore plus courte et moins lisible: pour i dans le filtre (Lambda x: true, plage (10)): Do_Qomething ()