Blocs
Les blocs python qui permettent de grouper un ensemble de lignes de codes ensemble. On verra les blocs while
, for
et les blocs if/elif/else
.
Si python ne pouvait qu'exécuter ligne à ligne un code on ne pourrait pas faire grand chose. Le principe des programmes est de pouvoir grouper les instructions en bloc.
Définition d'un bloc
En python, un bloc est toujours défini de la même manière :
- Ce qui va identifier le bloc pour son exécution (une condition, son nombre d'exécution, son nom) et se finit par un
:
- Les instructions le constituant.
Pour séparer les blocs les un des autres, et savoir ce qui le définit, le langage Python utilise l'indentation (4 espaces par défaut): un bloc est donc une suite d'instructions ayant la même indentation.
type de bloc:
instruction 1
instruction 2
...
instruction n
Ces différents blocs sont pratiques car ils vont nous permettre :
- répéter des blocs
- d'exécuter des blocs conditionnellement
Les blocs peuvent bien sur se combiner :
bloc A:
instruction 1 du bloc A
bloc B:
instruction 1 du bloc B
...
instruction m du bloc B
instruction 2 du bloc A
...
instruction n du bloc A
L'indentation permet toujours de s'y retrouver.
Blocs et interpréteur
Lorsque l'on crée un bloc avec l'interpréteur, après la première ligne qui défini le bloc (la ligne avec le :
.
), l'interpréteur passe en mode bloc (il écrit ...
en début de ligne) ce qui permet d'écrire son bloc (en n'oubliant pas l'indentation). Une fois le bloc terminé, pour faire repasser l'interpréteur en mode normal et exécuter le bloc on appuie juste sur la touche entrée pour insérer ue ligne vide.
Par exemple l'exemple suivant crée un bloc qui écrit coucou
indéfiniment directement dans l'interpréteur :
>>> while True:
... print("coucou")
...
Le même bloc écrit dans un notebook puis exécuté aurait été écrit comme ça :
while True:
print("coucou")
Répétition de blocs
Deux types de boucles existent en python : les boucles tant que (while
) et les boucles pour chaque (for
)
Bloc while : boucle tant que
while <condition logique>:
instruction 1
instruction 2
...
instruction n
Par exemple le bloc while
suivant :
b = 6
while b > 0:
print(b)
b = b - 1
qui va afficher :
6
5
4
3
2
1
Calculez la factorielle de 45.
solution
solution
factorielle = x = 45
while x >= 1:
factorielle = factorielle * x
x -= 1
print(factorielle)
Bloc for : boucle pour chaque
for <nom> in <itérable>:
instruction 1
instruction 2
...
instruction n
Le bloc sera exécuté pour chaque élément de l'itérable. A chaque exécution, l'élément courant de l'itérateur sera nommé <nom>
Beaucoup d'objet peuvent être considérés comme itérable (nous en verrons plusieurs par la suite) et nous en connaissons déjà un : les chaînes de caractères.
L'exécution du code suivant :
for c in "bonjour":
print(c)
Donnera :
b
o
n
j
o
u
r
La boucle for itère sur chaque caractère de la chaîne "bonjour"
et le place dans la variable nommée c
. La valeur de c
vaut donc successivement les caractères "b"
, "o"
, "n"
, "j"
, "o"
, "u"
et enfin "r"
.
Choisissez toujours des noms de variables explicatifs dans vos boucles for !
Il sera plus simple de s'y retrouver avec des noms de variables explicites qu'avec un tas de variables s'appelants i
, j
, i2
, j2
, etc.
Écrire un programme qui affiche la table de 9 :
1 x 9 = 9
2 x 9 = 18
...
solution
solution
for nombre in range(1, 11):
print(nombre, "x 9 = ", nombre * 9)
Écrire un programme qui calcule la somme des chiffres de 1 à 100.
solution
solution
somme = 0
for k in range(1, 101):
somme += k
print(somme)
Fonction range
Les boucles for sont souvent associée à la fonction range`{.language-}. Cette fonction crée un itérateur (quelque chose qui produit des nombres).
Par exemple :
for x in range(10):
print(x)
Affichera les 10 premiers entiers (de 0 à 9). Le résultat de range(10)
est un objet de type range, qui est fait pour être utilisé avec l'instruction for.
On peut utiliser la fonction range
de trois façons différentes qu'elle soit appelée avec un, deux ou trois paramètres :
- de
0
à juste avantparamètre
. Par exemplerange(10)
rendra un itérateur de la suite des 10 entiers allant de 0 à 9. - de
premier paramètre
à juste avantdeuxième paramètre
. Par exemplerange(4, 10)
rendra un itérateur de la suite des 6 entiers allant de 4 à 9. premier paramètre
à juste avantdeuxième paramètre
, avec un saut detroisième paramètre
. Par exemplerange(10, -1, -1)
rendra un itérateur de la suite 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0.
Afficher à l'écran les 16 premiers entiers, allant de 0 à 15
solution
solution
for i in range(16):
print(i)
Afficher à l'écran les 13 entiers, allant de 3 à 15
solution
solution
for i in range(3, 16):
print(i)
Afficher à l'écran les multiples de 3 allant de de 3 à 15
solution
solution
for multiple_trois in range(3, 16, 3):
print(multiple_trois)
Le troisième paramètre de la fonction range n'est pas obligatoirement positif. Ceci permet de compter à rebours :
Afficher à l'écran les entiers allant de 5 à 0, dans cet ordre.
solution
solution
for x in range(5, -1, -1):
print(x)
Blocs if : Exécution conditionnelle
Permet d'exécuter un bloc si une condition logique est vraie :
if <condition logique>:
instruction 1
instruction 2
...
instruction n
elif <condition logique>:
instruction 1
instruction 2
...
instruction n
else:
instruction 1
instruction 2
...
instruction n
Notez qu'il peut y avoir autant de bloc elif
que l'on veut (même 0) et qu'il n'est pas nécessaire d'avoir de else
.
Demandez à l'utilisateur de rentrer un entier au clavier (en utilisant la fonction input
) et de répondre "C'est entre 2 et 8" si le nombre rentré est entre 2 et 8 et de répondre "ce n'est pas entre 2 et 8" sinon.
solution
solution
entier = int(input("Un entier entre 2 et 8 : "))
if 2 >= entier and entier <= 8:
print("C'est entre 2 et 8")
else:
print("ce n'est pas entre 2 et 8")
Exercice final
Utilisez ce que vous avez appris pour vérifier la conjecture de Syracuse pour les 100 premiers entiers Exemple :
solution
solution
for x in range(100):
while x > 1:
if x % 2 == 0:
x /= 2
else:
x = 3 * x + 1