Comment arrêter boucle for en python

Résolu/Fermé
ClaraLau25 Messages postés 4 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 19 décembre 2022 - Modifié le 19 déc. 2022 à 11:47
ClaraLau25 Messages postés 4 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 19 décembre 2022 - 19 déc. 2022 à 13:24

Bonjour, je souhaiterai arrêter ma boucle for pour stopper mon animation. J'ai essayé avec break mais cela ne fonctionne pas sur mon programme. Pouvez-vous m'aider ? 

programme : 

for g in range (4):
    pg2=np.zeros([l,c]) 
    for i in range(l):
        for j in range (c):
            nbv=nb_voisins(pg,i,j)
            if pg[1,3]==1 and pg[2,3]==1 and (nbv>=1):
                pg2[i,j]=1 #arrondissement ayant des habitants malades
                pg2[0,3]=0 #arrondissement mer
                pg2[0,0]=0 #arrondissment sans habitant
                pg2[2,1]=0 #arrondissement mer
                pg2[1,1]=0 #arrondissement mer
                pg2[0,1]=0 #arrondissement mer                                  
    affichage (pg2)
    pg=pg2


Macintosh / Safari 15.2

A voir également:

2 réponses

jee pee Messages postés 39611 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 230
Modifié le 19 déc. 2022 à 12:08

Bonjour,

D'abord il doit y avoir la logique de ton programme. Est-ce qu'avec les paramètres il existe une situation où il s'arrête seul ?

Après break fonctionne. Mais seulement pour un niveau. Où voulais-tu le placer ? Il n'y a pas de break pour n niveaux imbriqués.

Il faut alors pratiquer autrement. Comme mettre tout ton code dans une fonction, et remplacer break par return. Ou gérer un flag avec une boucle while.

def maFonction():
   for g in range (4):
       pg2=np.zeros([l,c]) 
       for i in range(l):
           for j in range (c):
               nbv=nb_voisins(pg,i,j)
               if pg[1,3]==1 and pg[2,3]==1 and (nbv>=1):
                  pg2[i,j]=1 #arrondissement ayant des habitants malades
                  pg2[0,3]=0 #arrondissement mer
                  pg2[0,0]=0 #arrondissment sans habitant
                  pg2[2,1]=0 #arrondissement mer
                  pg2[1,1]=0 #arrondissement mer
                pg2[0,1]=0 #arrondissement mer   
                if ......
                   return                               
       affichage (pg2)
       pg=pg2


flag = True
while flag:
   for g in range (4):
       pg2=np.zeros([l,c]) 
       for i in range(l):
           for j in range (c):
               nbv=nb_voisins(pg,i,j)
               if pg[1,3]==1 and pg[2,3]==1 and (nbv>=1):
                  pg2[i,j]=1 #arrondissement ayant des habitants malades
                  pg2[0,3]=0 #arrondissement mer
                  pg2[0,0]=0 #arrondissment sans habitant
                  pg2[2,1]=0 #arrondissement mer
                  pg2[1,1]=0 #arrondissement mer
                pg2[0,1]=0 #arrondissement mer   
                if ......
                   flag = False                            
       affichage (pg2)
       pg=pg2
PS : pour afficher du code, il faut utiliser l’icône spécialisée <>, et donner le langage, Python, pour la coloration syntaxique. 

0
ClaraLau25 Messages postés 4 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 19 décembre 2022
19 déc. 2022 à 12:23

Bonjour, merci pour votre retour rapide

Effectivement il existe un paramètre ou il s'arrête seul : quand toutes les cases sont égales à 1. 

Pour break j'ai voulu le placer dans la boucle, c'est surement pour cela que ça ne marchait pas.

J'ai essayé avec les méthodes que vous m'avez donnés mais je n'y arrive toujours pas, il doit y avoir un problème dans mon raisonnement ..

l=5
c=4
pg=initialisation_arrondissement(l,c)
affichage(pg)
def maFonction():
    for g in range (4):
        pg2=np.zeros([l,c])
        for i in range(l):
            for j in range (c):
                nbv=nb_voisins(pg,i,j)
                if pg[1,3]==1 and pg[2,3]==1 and (nbv>=1):
                    pg2[i,j]=1 #arrondissement ayant des habitants malades
                    pg2[0,3]=0 #arrondissement mer
                    pg2[0,0]=0 #arrondissment sans habitant
                    pg2[2,1]=0 #arrondissement mer
                    pg2[1,1]=0 #arrondissement mer
                    pg2[0,1]=0 #arrondissement mer
                if pg2[i,j]==1 and pg2[0,3]==0 and pg2[0,0]==0 and pg2[2,1]==0 and pg2[1,1]==0 and pg2[0,1]==0:
                    return
    affichage (pg2)
    pg=pg2

0
jee pee Messages postés 39611 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 230 > ClaraLau25 Messages postés 4 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 19 décembre 2022
19 déc. 2022 à 12:49

Il te manque juste l'appel de la fonction ;-) la déclaration d'une fonction ne l'exécute pas. Et surtout pour une présentation claire, on ne déclare pas une fonction au milieu du corps principal du programme, mais tout au début.



PS BIS : pour afficher du code, il faut utiliser l’icône spécialisée <>, et donner le langage, Python, pour la coloration syntaxique. 
0
ClaraLau25 Messages postés 4 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 19 décembre 2022 > jee pee Messages postés 39611 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024
19 déc. 2022 à 13:24

Merci j'ai trouvé comment faire :-)

Bonne journée !

0

Salut, une manière très élégante de sortir de boucles imbriquées est d'utiliser le else du for (ou while).

Exemple simple :

.

for i in range(10):
    print(i)
    for j in range(10):
        if i * j == 21:
            print('ok', i, j)
            break
    else:
        continue
    break

.

On peut le faire autant de fois qu'il n'y a de profondeurs.

.

for i in range(10):
    for j in range(10):
        print(i, j)
        for k in range(10):
            if i * j * k == 105:
                print('ok', i, j, k)
                break
        else:
            continue
        break
    else:
        continue
    break
0
ClaraLau25 Messages postés 4 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 19 décembre 2022
19 déc. 2022 à 13:24

merci pour votre réponse, j'ai réussis à faire le code, 

bonne journée!

0