Vous êtes sur la page 1sur 23

Chapitre 5 - Structures de contrôle

INF1007 : Introduction à la
programmation
Chapitre 5 – Structures de contrôle

Génie informatique et genie logiciel Benjamin De Leener 1 H2022


Chapitre 5 - Structures de contrôle

Plan du cours
1. Structures conditionnelles
1. if, elif, else
2. Indentation
3. Instructions composées (imbriquées)
2. Structures de répétition
1. Boucle for et Boucle while
2. Else
3. Instructions break, continue et pass
4. Itérateurs et gestion de la mémoire

Génie informatique et genie logiciel Benjamin De Leener 2 H2022


Chapitre 5 - Structures de contrôle

Structures de contrôle
Les structures de contrôle sont les groupes d'instructions
qui déterminent l'ordre dans lequel les actions sont
effectuées. En programmation moderne, il en existe
seulement trois :
1. la séquence (ex : chaînes de caractères, tuples et
listes) ;
2. la sélection (ex : instructions de condition) ;
3. la répétition (ex : boucles).

Génie informatique et genie logiciel Benjamin De Leener 3 H2022


Chapitre 5 - Structures de contrôle

Instructions conditionnelles
1 if condition_booléenne:
2 bloc d’instructions

1 if condition_booléenne:
2 bloc d’instructions 1
3 else:
4 bloc d’instructions 2

Génie informatique et genie logiciel Benjamin De Leener 4 H2022


Chapitre 5 - Structures de contrôle

Instructions composées - exemple


1 a = float(input('Veuillez entrer un premier nombre:'))
2 b = float(input('Veuillez entrer un deuxième nombre:'))
3
4 if a == b:
5 print(f'{a} est égal à {b}')
6 else:
7 if a < b:
8 print(f'{a} est plus petit que {b}')
9 else:
10 print(f'{a} est plus grand que {b}')

Génie informatique et genie logiciel Benjamin De Leener 5 H2022


Chapitre 5 - Structures de contrôle

Instructions conditionnelles 1 if condition1:


L’instruction « elif » permet 2 bloc d’instructions 1
d’ajouter des conditions 3 elif condition2:
4 bloc d’instructions 2

8 else:
9 bloc d’instructions N

Génie informatique et genie logiciel Benjamin De Leener 6 H2022


Chapitre 5 - Structures de contrôle

Instructions conditionnelles - exemple


1 note = int(input('Veuillez entrer une note sur 100:'))
2 if note >= 90:
3 print("A")
4 elif note >= 70:
5 print("B")
6 elif note >= 60:
7 print("C")
8 elif note >= 50:
Règles de syntaxe des structures
9 print("D") conditionnelles:
10 else:
1. Respecter la ponctuation (:)
2. Respecter l’indentation pour définir les blocs
11 print("F") d’instructions
Génie informatique et genie logiciel Benjamin De Leener 7 H2022
Chapitre 5 - Structures de contrôle

Nouveau avec Python 3.10 !!


Switch-Case : match-case
1 note = int(input('Veuillez entrer une note sur 100:'))
2 match note: De manière plus générale, match-case
3 case n if n >= 90: est capable de réaliser une
4 print("A") reconnaissance structurelle en plus
d’une reconnaissance des valeurs
5 case n if 70 <= n < 90:
6 print("B") match variable:
7 case n if 60 <= n < 70: case valeur:
8 print("C") bloc 1
9 case n if 50 <= n < 60: .
10 print("D") case autre_valeur [guard]:
11 case _: bloc 2
12 print("F") case _:
bloc n

Génie informatique et genie logiciel Benjamin De Leener 8 H2022


Chapitre 5 - Structures de contrôle

Match-case : reconnaissance de structures


La reconnaissance de la structure des données permet spécifier des actions en
fonction de règles plus complexes que de simples instructions if, elif, else

1 actions = input('Que voulez-vous faire : ')


2 # quitter, avancer int, reculer int, tourner (gauche ou droite)
3 match actions.split():
4 case ["quitter"]: ...
5 case ["avancer", nombre]: ...
6 case ["reculer", nombre]: ...
7 case ["tourner", direction]: ...
8 case _: ...

Génie informatique et genie logiciel Benjamin De Leener 9 H2022


Chapitre 5 - Structures de contrôle

Structures de répétition - while


1 while condition_booléenne:
2 bloc d’instructions

Points importants:
• Le bloc d’instructions se répète
jusqu’à ce que la condition retourne
False ; c’est ce qu’on appelle un
critère d’arrêt.
• Le bloc d’instructions doit contenir
un mécanisme pour déclencher ce
critère d’arrêt.

Génie informatique et genie logiciel Benjamin De Leener 10 H2022


Chapitre 5 - Structures de contrôle

Exemple: construction d’une suite mathématique

1 a, b, c = 1, 1, 1
2 # a & b servent au calcul des termes successifs
3 # c est un simple compteur
4
5 print(b) # affichage du premier terme
6 while c<15: # nous afficherons 15 termes au total
7 a, b, c = b, a+b, c+1
8 print(b)

Génie informatique et genie logiciel Benjamin De Leener 11 H2022


Chapitre 5 - Structures de contrôle

Exemple: moyenne d’une suite de nombres


1 reponse = input("Voulez-vous entrer un nombre? (o/n)")
2
3 somme = nb = 0
4 while reponse != 'n':
5 nouveau_nombre = float(input("Veuillez entrer un nombre:"))
6 nb += 1
7 somme += nouveau_nombre
8
9 reponse = input("Voulez-vous entrer un nombre? (o/n)")
10 moyenne = somme / nb
11 print(f'La moyenne de la suite de nombres est {moyenne}')
Génie informatique et genie logiciel Benjamin De Leener 12 H2022
Chapitre 5 - Structures de contrôle

Structures de répétition - for


1 for élément in itérable:
2 bloc d’instructions

De manière générale, l’itérable est une séquence (par exemple une


chaîne de caractères). La boucle de répétition va itérer sur chacun
des éléments de la séquence. À chaque itération de la boucle, la
variable élément contient un des éléments de la séquence, qui peut
être utilisé dans le bloc d’instructions.
Par exemple:
1 nom = "Cléopâtre"
2 for car in nom:
3 print(car + ' *', end =' ')

Génie informatique et genie logiciel Benjamin De Leener 13 H2022


Chapitre 5 - Structures de contrôle

Utilisation de séquences d’entiers dans les boucles


Il est souvent nécessaire d’itérer sur une séquence de nombres, afin de
traverser un ensemble d’éléments, par exemple.
Le fonction range() permet de construire un générateur de nombre
suivant une logique arithmétique. Par exemple:

1 for i in range(5):
Autres utilisations de range:
2 print(i)
range(2, 10)
range(1, 10, 2)
1 a = 'INF1007'
range(100, 10, -5)
2 for i in range(len(a)):
range(start, stop[, step])
3 print(i, a[i])

Génie informatique et genie logiciel Benjamin De Leener 14 H2022


Chapitre 5 - Structures de contrôle

Que faire lorsqu’il n’y a rien à faire?


Problème: afficher chaque lettre d’une chaîne de caractère sauf les « h ».

1 print("Bonjour!")
2 for lettre in 'Python':
Permet de passer
3 if lettre == 'h':
à l’itération suivante
4 continue
5 print('Ceci est le bloc "continue".')
6 print('Lettre lue :', lettre)
7
8 print("Aurevoir!")

Génie informatique et genie logiciel Benjamin De Leener 15 H2022


Chapitre 5 - Structures de contrôle

Contrôle du flux d’exécution


1 for num in range(2, 10):
2 if num % 2 == 0:
3 print("J'ai trouvé un nombre pair:", num)
4 continue
5 print("J'ai trouvé un nombre quelconque", num)

Passe directement à l’itération


suivant de la boucle

Génie informatique et genie logiciel Benjamin De Leener 16 H2022


Chapitre 5 - Structures de contrôle

Contrôle du flux d’exécution


1 for n in range(2, 10):
2 for x in range(2, n):
3 if n % x == 0:
4 print(n, 'est égal à', x, '*', n//x)
5 break Permet d’arrêter
6 else: une boucle
7 # la boucle n'a rien trouvé, le chiffre est
8 # donc un nombre premier
9 print(n, 'est un nombre premier')

Génie informatique et genie logiciel Benjamin De Leener 17 H2022


Chapitre 5 - Structures de contrôle

Je ne sais pas encore quoi écrire !?


Problème: afficher chaque lettre d’une chaîne de caractère sauf les « h ».

1 print("Bonjour!")
2 for lettre in 'Python':
3 if lettre == 'h': Permet de ne rien faire
4 pass
dans le « if »

5 else:
6 print('Lettre lue :', lettre)
7
8 print("Aurevoir!")

Génie informatique et genie logiciel Benjamin De Leener 18 H2022


Chapitre 5 - Structures de contrôle

Itérateurs, générateurs et gestion de la mémoire


Un itérateur est un objet qui implémente un protocole d’itérateur.
Un protocole d’itérateur requiert d’une classe d’objet d’implémenter la
fonction __next()__, qui permet de fournir la valeur de l’élément suivant
dans une séquence.
Un itérable est un objet (ou une structure de données) qui permet de
retourner un itérateur.
Un générateur est un type de fonction qui retourne un itérateur.
Typiquement, les itérateurs et générateurs vont utiliser une méthodologie
de programmation de type « évaluation par nécessité » ou « évaluation
paresseuse » permettant une gestion efficace de la mémoire. De cette
manière, l’évaluation d’un élément de l’itérable n’est réalisée qu’au
moment où il est nécessaire, optimisant de ce fait la gestion de la
mémoire.
Génie informatique et genie logiciel Benjamin De Leener 19 H2022
Chapitre 5 - Structures de contrôle

Exemple : génération d’une séquence d’entiers


Générer une séquence d’entiers très grande peut être très demandant
en ressources pour l’ordinateur (processeur et mémoire).

1 for i in range(30, 300, 18):


2 print(i)
3
4 # Que se passe-t-il derrière la fonction range?
5 def range(start, stop, step):
6 # Fonctionne uniquement avec des entiers positifs
7 while stop > start:
8 yield start
9 start += step
Génie informatique et genie logiciel Benjamin De Leener 20 H2022
Chapitre 5 - Structures de contrôle

Itertools
Le module itertools implémente de nombreuses briques d’itérateurs.
Voici quelques exemples :
Itérateurs infinis

Itérateur Arguments Résultats Exemple

count() start, [step] start, start+step, start+2*step, ... count(10) à 10 11 12 13 14 ...


cycle() p p0, p1, ... plast, p0, p1, ... cycle('ABCD’) à A B C D A B C D ...
elem, elem, elem, ... à l'infini ou jusqu'à
repeat() elem [,n] repeat(10, 3) à 10 10 10
n fois
Itérateurs combinatoires
product('ABCD', repeat=2) à
p, q, ... produit cartésien, équivalent à une
product() AA AB AC AD BA BB BC BD CA CB
[repeat=1] boucle for imbriquée
CC CD DA DB DC DD
n-uplets de longueur r, tous les ré- permutations('ABCD', 2) à
permutations() p[, r] arrangements possibles, sans répétition AB AC AD BA BC BD CA CB CD DA
d'éléments DB DC
Autres itérateurs
accumulate() p [,func] p0, p0+p1, p0+p1+p2, ... accumulate([1,2,3,4,5]) à 1 3 6 10 15
seq, [start,] islice('ABCDEFG', 2, None) à C D E F
islice() éléments de seq[start:stop:step]
stop [, step] G
seq[0], seq[1], jusqu'à ce takewhile(lambda x: x<5, [1,4,6,4,1]) àH2022
takewhile() pred,Génie
seq informatique et genie logiciel Benjamin De Leener 21
que pred échoue 14
Chapitre 5 - Structures de contrôle

Itertools - exemple
1 from itertools import count, cycle
2 sequence = count(start=0, step=1)
3 while(next(sequence) <= 10):
4 print(next(sequence))
5
6 dessert = cycle(['Glace', 'Gateau'])
7 count = 0
8 while(count != 4):
9 print('Que mange-t-on aujourd\'hui? ' + next(dessert))
10 count += 1

Génie informatique et genie logiciel Benjamin De Leener 22 H2022


Chapitre 5 - Structures de contrôle

Exercices
1. Écrire un programme qui lit un nombre et affiche sa valeur absolue.
2. Dans un conte américain, huit petits canetons s'appellent
respectivement : Jack, Kack, Lack, Mack, Nack, Oack, Pack et
Qack. Écrivez un petit script qui génère tous ces noms à partir des
deux chaînes suivantes : prefixes = 'JKLMNOP' et suffixe = 'ack’
3. Écrire un programme qui affiche la somme des 100 premiers
nombres entiers premiers.
4. Écrire un programme qui calcule le factoriel d’un nombre demandé
à l’utilisateur.
5. Utilisez l’instruction continue pour modifier une boucle for
d’affichage de tous les entiers de 1 à 10 compris, sauf lorsque la
variable de boucle vaut 5.

Génie informatique et genie logiciel Benjamin De Leener 23 H2022

Vous aimerez peut-être aussi