2 votes

meilleure structure de boucle while en python

J'ai une fonction remove_it() qui essaie de supprimer certaines données et les données supprimées sont ajoutées à l'ensemble removed . La logique principale est que s'il y a plus à enlever, continuez à enlever et mon code ressemble à ceci :

    removed = set()
    prev_count = -1

    while prev_count != len(removed):
        prev_count = len(removed)
        remove_it()

Cela me dérange un peu que le while La condition de la boucle et la ligne suivante se ressemblent beaucoup. Est-ce normal ou existe-t-il une meilleure façon de procéder ?

La logique dans remove_it() est assez compliqué : il détecte une topologie de structure de graphe et après chaque tour de suppression, la topologie change et je ne peux pas savoir comment elle change avant que la suppression ne soit faite.

Je pensais renvoyer la valeur bool de remove_it() pour savoir si l'ensemble removed a changé. La boucle while serait alors la suivante

while remove_it():
     pass

ce qui me paraît également étrange. Existe-t-il un meilleur moyen ?

2voto

Alexey Guseynov Points 3838

Votre remove_it a des effets secondaires et cela rend le programme plus difficile à lire. Vous pouvez le réécrire de manière à ce qu'au lieu de modifier la fonction globale removed il retournera un ensemble de valeurs supprimées. Ensuite, vous pouvez réécrire la boucle :

removed = set()

while True:
    removed_batch = remove_it()
    if removed_batch:
        removed += removed_batch
    else:
        break

Prograide.com

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.

Powered by:

X