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 :

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 :

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

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


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


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 :

Afficher à l'écran les 16 premiers entiers, allant de 0 à 15

solution

for i in range(16):
    print(i)

Afficher à l'écran les 13 entiers, allant de 3 à 15

solution

for i in range(3, 16):
    print(i)

Afficher à l'écran les multiples de 3 allant de de 3 à 15

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

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


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


for x in range(100):
    while x > 1:
        if x % 2  == 0:
            x /= 2
        else:
            x = 3 * x + 1