Algorithmique et Programmation 1
Répétition avecwhile
Licences Informatique et Mathématiques 1ère année
Premier semestre 2015 – 2016
Un exemple
Reprenons l’un des exemples de la semaine dernière :
note_cc1 = float(input('Note du premier contrôle : ')) note_cc2 = float(input('Note du second contrôle : ')) note_exam = float(input("Note de l'examen : "))
# On vérifie qu'aucune note n'est négative
if note_cc1 < 0 or note_cc2 < 0 or note_exam < 0:
# Remarquer l'opérateur 'or'
print('Erreur de saisie (note négative).')
Peut-on améliorer le traitement des entrées incorrectes ?
Vous pouvez répéter ?
I On peut répéter un bloc d’instructions grâce à une boucle “tant que” :
I Siune certaine condition est vraie, exécuter un certain bloc
d’instructions
I Sinonpasser directement à la suite du programme
I Après chaque exécution du bloc, réévaluer la condition
I Le bloc est appelé corpsde la boucle
I Chaque exécution du corps de la boucle est appelée itération
début
condition
bloc
suite vrai
faux
Un exemple – saisie contrôlée
Modification du programme :
# On répète la saisie de chaque note tant qu'elle est
# incorrecte (inférieure à 0 ou supérieure à 20)
note_cc1 = float(input('Note du premier contrôle : ')) while note_cc1 < 0 or note_cc1 > 20:
print('Erreur de saisie.')
note_cc1 = float(input('Note du premier contrôle : '))
I Problème : on doit refaire la même chose pour chacune des trois valeurs à saisir
I On verra comment améliorer ça dans la suite
Syntaxe de while
# début . . .
while condition:
# bloc d'instructions
# (corps de la boucle) . . .
# suite . . .
Exemple :
nombre = int(input())
print("Je sais compter jusqu'à", nombre)
i = 1
while i <= nombre:
print(i)
i = i + 1 # Ne pas oublier !
I conditionest uneexpression booléenne
I Corps exécuté uniquement si conditionévaluée àTrue
I Après chaque exécution du corps, on réévaluecondition
I Si conditionvautFalse, exécution de la suite du code Il peut n’y avoir aucune itération, ou un nombre infini
Un exemple – tortue
# On importe les fonctions du module turtle from turtle import *
# Paramètres nbCotes=4 lgCote=250 angle=90
# Tracé compteur = 0
while compteur < nbCotes:
# Tracer un côté : fonction du module turtle forward(lgCote)
# Tourner à gauche : fonction du module turtle left(angle)
# On incrémente le compteur compteur = compteur + 1
Boucles imbriquées
# début . . .
while condition 1:
# début corps 1 . . .
while condition 2:
# corps 2 . . .
# fin corps 1 . . .
# suite . . .
début
condition 1
début corps 1
condition 2
corps 2
fin corps 1
suite vrai
vrai faux
faux
Un exemple – tortue
# Paramètres nb_cotes = 4 lg_cote = 100
angle_poly = 360 / nb_cotes nb_petales = 9
angle_rosace = 360 / nb_petales
# Tracé de la rosace compteur_petales = 0
while compteur_petales < nb_petales:
compteur_petales = compteur_petales + 1
# Tracé d'un pétale compteur_cotes = 0
while compteur_cotes < nb_cotes:
compteur_cotes = compteur_cotes + 1 forward(lg_cote)
left(angle_poly) left(angle_rosace)