Python avancé
- Navigation:
- Boucles
- Types composites
- Algorithmes de tri
- La dichotomie
publié le mer. 14 février 2018
Jusqu'à maintenant nous avons réalisé des programmes simples que l'interpréteur Python
lisait éxecuté ligne par ligne.
Nous avions également vu les structures conditionnelles if elif else
qui permettent d'éxecuter certains blocs de programmes et pas d'autres en fonction de conditions, mais cependant chaque ligne du programme pouvait être exécutée au maximum une fois.
Maintenant nous allons introduire les boucles qui permettent d'éxecuter plusieurs fois un bloc du programme en utilisant les structures de contrôle:
-
while
qui peut se traduire par tant que,p.ex: tant que cette condition est vrai éxecuter ce bloc d'instructions
-
for
qui peut se traduire par pour.p.ex: pour telles valeurs de la variable i éxecuter ce bloc d'instructions
Remarque: Comme toujours, en Python, les blocs d'instructions sont indentés avec quatre espaces pour être séparés du reste du programme.
La boucle for
¶
La syntaxe est de la forme:
for i in range(début, fin):
instruction 1
instruction 2
...
Voici quelques exemples:
for i in range(1, 12):
print(i)
ATTENTION Comme vous le voyez l'indice de fin n'est pas inclus dans la boucle.
for i in range(1, 4):
print("Bonjour")
Par défaut l'indice de départ et 0, si l'indice de début n'est pas précisé.
for i in range(5):
print(i)
On peut également choisir le pas de l'incrémentation grâce à la syntaxe:
for i in range(début, fin, pas):
instruction 1
instruction 2
...
for i in range(1, 12, 2):
print(i)
for i in range(365, 300, -5):
print(i)
Remarque: par défaut chaque instruction print se termine par un retour à la ligne, mais on peut suprimer ce retour en choisissant une fin de print vide avec l'attribut end.
for i in range(1, 32):
print(i, end="")
print(" janvier")
Boucles imbriquées¶
Il est possible d'éxecuter une boucle à l'intérieur d'une autre boucle, elles sont alors dites imbriquées.
for mois in range(1, 13):
for jour in range(1,31):
print(jour, end="/")
print(mois)
La boucle while
¶
La syntaxe est de la forme:
while condition:
instruction 1
instruction 2
...
Contrairement à la boucle for
, le nombre d'itérations n'est pas fixé à l'avance, mais il est fait dynamiquement:
avant chaque éxecution du bloc d'instructions de la boucle, on test une condition, si cette condition est vérifiée, on éxecute le bloc d'instructiuons de la boucle, sinon, l'éxecution de la boucle est arrétée.
Souvent il faut initialiser une variable d'itération avant de commencer la boucle/
Exemples:
n = 0
while n < 10:
print(n)
n = n + 1
Cette boucle est tout à fait identique à la boucle:
for n in range(10):
print(n)
Cependant une des deux formes est souvent plus adaptée qu'une autre:
for
si on connait les itérations à parcourir à l'avance,while
sinon.
En fait, la boucle for
est un cas particulier de la boucle while
. On peut toujours remplacer une boucle for
par une boucle while
, mais l'inverse n'est pas toujours vrai.
La boucle while
est un outil plus puissant que la boucle for
.
# calcul du logarithme entier (en base 10) d'un nombre x
# Par exemple prenons x = 100
# log(100) = 2 car 10^2 = 100
x = 100
# boucle avec initialisation
n = 0
while x > 1.0:
x = x / 10.0
n = n + 1
print(n)
La non terminaison¶
Avec la boucle while
, il est possible de créer un programme qui ne s'arrête jamais.
C'est très utile, et me indispensable si l'on considère par exemple les programmes des serveurs de document html
, qui doivent envoyer les pages html
indéfiniment à un nombre très important d'utilisateurs.
Cependant, cela peut rendre le debuguage du programme compliqué surtout si on pensait que notre boucle allait s'arrêter mais qu'en fait notre condition d'arrêt était mal implémentée.
En cas de non terminaison involontaire, il faut forcer l'arrêt de l'éxecution du programme.
- dans un notebook sélectionner
Kernel Interrupt
ouKernel Restart
- dans un terminal python la combinaison de touches
ou permet souvent d'appliquer un KeyboardInterrupt
Par exemple:
n = 3
while n > 0:
print(n, end="")