break dans une boucle for
On peut stopper l'exécution d'une boucle sous condition grâce à l'instruction break
.
Un premier exemple
Un jeu se joue en cent coups maximum. Si après cent lancers, on n'a pas obtenu cinq fois la face 6, on a perdu. Si au cours des lancers, on a obtenu cinq fois la face 6, on a gagné. On arrête la partie soit lorsqu'on a gagné, soit après les cent lancers.
from random import randint # on importe la fonction randint
cpt = 0 # compteur pour la face 6
nb_lancers = 0 # compteur pour le nombre de lancers
for k in range(100) :
de = randint(1,6) # lancer d'un dé
nb_lancers += 1 # on incrémente le compteur de lancers
if de == 6 : cpt += 1 # si on a obtenu 6, on incrémente le compteur de face 6
if cpt == 5 : # si on a obtenu cinq fois la face 6
print("Gagné en {} lancers.".format(nb_lancers) )
break # on arrête l'exécution de la boucle
print("Nombre total de lancers : ", nb_lancers)
Un essai :
Gagné en 38 lancers. Nombre total de lancers : 38
Un autre essai :
Gagné en 52 lancers. Nombre total de lancers : 52
On voit sur ces exemples qu'en sortie de boucle (second affichage) le nombre de lancers n'est pas égal à 100 : la boucle a été arrêtée par l'instruction break dès que cinq faces 6 ont été obtenues.
Une boucle 'tant que' serait bien adaptée également à ce type de situation, mais l'utilisation de l'instruction break peut parfois rendre le programme plus facile à comprendre en évitant des tests d'arrêt aux expressions trop complexes.
Un second exemple
Un entier naturel n>1 est dit premier lorsqu'il ne possède pas d'autre diviseur que 1 et lui-même.
Pour tester si un entier n est premier, on va donc tester pour chaque entier k, compris entre 2 et n-1, si k divise n. Dès qu'on trouve un tel diviseur, on peut stopper nos tests puisqu'on est certain que l'entier n proposé n'est pas premier.
n = eval(input("Entrez un entier n>2 : "))
premier = True
for k in range(2,n) :
if n%k == 0 :
premier = False
print("{} est diviseur de {}.".format(k,n))
break
if premier : print("{} est premier.".format(n))
else : print("{} n'est pas premier.".format(n))
Un essai :
Entrez un entier n>2 : 17*11 11 est diviseur de 187. 187 n'est pas premier.
Remarque : la fonction eval(...)
utilisée permet d'évaluer la chaîne de caractères.
Par exemple, eval('17*11')
renvoie la valeur du produit 17*11.
Tandis que int('17*11')
renverrait une erreur.