TP n°5 T. STI2D SIN : Les boucles en python |
||
Noms : | ||
Centre d'intérêt : | CI 4 Gestion de l’information | |
Classe : | Term Sti2d Sin | |
Id programme : | sin15, sin31 | |
Conditions : | Seul , durée 3 heures. | |
Matériel : | - un ordinateur; |
|
Logiciel : | - le logiciel Python IDLE; - Utiliser le navigateur chrome; |
|
Document : |
Une boucle permet d'exécuter une portion de code plusieurs fois de suite.
L'instruction while
Syntaxe
while expression: # ne pas oublier le signe de ponctuation ':' bloc d'instructions # attention à l'indentation # suite du programme
Si l'expression est vraie (True
) le bloc d'instructions est exécuté, puis l'expression est à nouveau évaluée.
Le cycle continue jusqu'à ce que l'expression soit fausse (False
) : on passe alors à la suite du programme.
Exemple : un script qui compte de 1 à 4
# script Boucle1.py # initialisation de la variable de comptage compteur = 1 while compteur < 5: # ce bloc est exécuté tant que la condition (compteur < 5) est vraie print(compteur, compteur < 5) compteur += 1 # incrémentation du compteur, compteur = compteur + 1 print(compteur < 5) print("Fin de la boucle")
>>> 1 True 2 True 3 True 4 True False Fin de la boucle
Table de multiplication par 8
# script Boucle2.py compteur = 1 # initialisation de la variable de comptage while compteur <= 10: # ce bloc est exécuté tant que la condition (compteur <= 10) est vraie print(compteur, '* 8 =', compteur*8) compteur += 1 # incrémentation du compteur, compteur = compteur + 1 print("Et voilà !")
>>> 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 9 * 8 = 72 10 * 8 = 80 Et voilà !
Affichage de l'heure courante
# script Boucle3.py import time # importation du module time quitter = 'n' # initialisation while quitter != 'o': # ce bloc est exécuté tant que la condition est vraie # strftime() est une fonction du module time print('Heure courante ', time.strftime('%H:%M:%S')) quitter = input("Voulez-vous quitter le programme (o/n) ? ") print("A bientôt")
>>> Heure courante 09:48:54 Voulez-vous quitter le programme (o/n) ? n Heure courante 09:48:58 Voulez-vous quitter le programme (o/n) ? o A bientôt
L'instruction for
Syntaxe
for élément in séquence : bloc d'instructions # suite du programme
Les éléments de la séquence sont issus d'une chaîne de caractères ou bien d'une liste.
Exemple avec une séquence de caractères
# script Boucle4.py chaine = 'Bonsoir' for lettre in chaine: # lettre est la variable d'itération print(lettre) print("Fin de la boucle")
La variable lettre
est initialisée avec le premier élément de la séquence ('B'
).
Le bloc d'instructions est alors exécuté.
Puis la variable lettre
est mise à jour avec le second élément de la séquence ('o'
) et le bloc d'instructions à nouveau exécuté...
Le bloc d'instructions est exécuté une dernière fois lorsqu'on arrive au dernier élément de la séquence ('r'
) :
>>> B o n s o i r Fin de la boucle
Exemple avec les éléments d'une liste
# script Boucle5.py maliste = ['Pierre', 67.5, 18] for element in maliste: print(element) print("Fin de la boucle")
Là, on affiche dans l'ordre les éléments de la liste :
>>> Pierre 67.5 18 Fin de la boucle
Fonction range()
L'association avec la fonction range()
est très utile pour créer des séquences automatiques de nombres entiers :
# script Boucle6.py print(list(range(1,5))) for i in range(1,5): print(i) print("Fin de la boucle")
>>> [1, 2, 3, 4] 1 2 3 4 Fin de la boucle
Table de multiplication
La création d'une table de multiplication paraît plus simple avec une boucle for
qu'avec une bouclewhile
:
# script Boucle7.py for compteur in range(1,11): print(compteur, '* 9 =', compteur*9) print("Et voilà !")
>>> 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81 10 * 9 = 90 Et voilà !
L'instruction break
L'instruction break
provoque une sortie immédiate d'une boucle while
ou d'une boucle for
.
Dans l'exemple suivant, l'expression True
est toujours ... vraie : on a une boucle sans fin.
L'instruction break
est donc le seul moyen de sortir de la boucle.
Affichage de l'heure courante
# script Boucle8.py import time # importation du module time while True: # strftime() est une fonction du module time print('Heure courante ', time.strftime('%H:%M:%S')) quitter = input('Voulez-vous quitter le programme (o/n) ? ') if quitter == 'o': break print("A bientôt")
>>> Heure courante 14:25:12 Voulez-vous quitter le programme (o/n) ? n Heure courante 14:25:20 Voulez-vous quitter le programme (o/n) ? o A bientôt
Astuce
Si vous connaissez le nombre de boucles à effectuer, utiliser une boucle for
.
Autrement, utiliser une boucle while
(notamment pour faire des boucles sans fin).
Exercices
Exercice 3.1 ★ Ecrire un script qui affiche toutes les tables de multiplication (de 1 à 10).
Exercice 3.2 ★ Ecrire un script qui calcule la moyenne d'une série de notes.
On pourra utiliser une variable qui contient la somme intermédiaire des notes.
>>> Nombre de notes ? 3 --> 15 --> 11.5 --> 14 Moyenne : 13.5 >>>
Exercice 3.3 ★
1) Avec une boucle for
, écrire un script qui compte le nombre de lettres z dans une chaîne de caractères.
Par exemple :
>>> Entrer la chaîne : Zinedine Zidane Résultat : 2
2) Faire la même chose, directement avec la méthode count()
de la classe str
.
Pour obtenir de l'aide sur cette méthode :
>>> help(str.count)
Exercice 3.4 ★ Avec une boucle while
, écrire un script qui affiche l'heure courante avec une actualisation chaque seconde.
On utilisera la fonction sleep()
du module time
.
Pour obtenir de l'aide sur cette fonction :
>>> import time >>> help(time.sleep)
Par exemple :
>>> # Taper CTRL + C pour arrêter le programme. >>> Heure courante 12:40:59 Heure courante 12:41:00 Heure courante 12:41:01 Heure courante 12:41:02 KeyboardInterrupt >>>
Remarque : il est vilain de forcer l'arrêt d'un programme avec CTRL + C
Nous verrons comment interrompre proprement un programme dans le chapitre Gestion des exceptions.
Exercice 3.5 ★☆
1) Ecrire le script du jeu de devinette suivant :
>>> Le jeu consiste à deviner un nombre entre 1 et 100 : ---> 50 trop petit ! ---> 75 trop petit ! ---> 87 trop grand ! ---> 81 trop petit ! ---> 84 trop petit ! ---> 85 Gagné en 6 coups !
2) Quelle est la stratégie la plus efficace ?
3) Montrer que l'on peut deviner un nombre en 7 coups maximum.
Bibliographie : La dichotomie
Remarque : pour créer un nombre entier aléatoire entre 1 et 100 :
import random
nombre = random.randint(1,100)
Exercice 3.6 ★★ Code de César
En cryptographie, le code de César est une technique de chiffrement élémentaire qui consiste à décaler une lettre de 3 rangs vers la droite :
A → D
B → E
...
Z → C
1) Ecrire le script de ce codage.
Par exemple :
>>> Message à coder ? abcdefghijklmnopqrstuvwxyz defghijklmnopqrstuvwxyzabc
>>> Message à coder ? Monty Python's Flying Circus prqwb sbwkrq'v ioblqj flufxv
On pourra utiliser la chaîne 'abcdefghijklmnopqrstuvwxyz'
et la méthode find()
de la classestr
.
Pour obtenir de l'aide sur cette méthode :
>>> help(str.find)
2) Ecrire le script du décodage.
Par exemple :
>>> Message à décoder ? prqwb sbwkrq'v ioblqj flufxv monty python's flying circus
Exercice 3.7 ★★ Ecrire un script qui donne l'évolution de la suite convergente : un+1 = un/2 + 1/un
Par exemple :
>>> Valeur initiale ? 20 Jusqu'à quel rang ? 10 0 20.0 1 10.05 2 5.12450248756 3 2.75739213842 4 1.74135758045 5 1.44494338196 6 1.41454033013 7 1.41421360012 8 1.41421356237 9 1.41421356237 10 1.41421356237 >>>