Vous êtes sur la page 1sur 75

Le langage Python

Fondamentaux de l’algorithmique 1 / 45
Outline

1 Plan

2 Les Bases
Types de Base
Opérateurs

3 Instructions d’entrée/sortie

4 Structures de contrôle
Expression booléenne
Instruction conditionnelle
Boucles

Fondamentaux de l’algorithmique 2 / 45
Plan

1 Plan

2 Les Bases
Types de Base
Opérateurs

3 Instructions d’entrée/sortie

4 Structures de contrôle
Expression booléenne
Instruction conditionnelle
Boucles

Fondamentaux de l’algorithmique 3 / 45
Plan

Paradigmes de Programmation
Programmation impérative : décrit les séquences exactes des
commandes à exécuter.
Programmation structurée/procédurale
FORTRAN, PASCAL, C, ...
Programmation Orientée Objet
C++, Java, C#,Python, ...

Fondamentaux de l’algorithmique 4 / 45
Plan

Paradigmes de Programmation
Programmation impérative : décrit les séquences exactes des
commandes à exécuter.
Programmation structurée/procédurale
FORTRAN, PASCAL, C, ...
Programmation Orientée Objet
C++, Java, C#,Python, ...
Programmation déclarative : décrit ce qu’il faut faire, pas
comment le faire
Programmation fonctionnelle
Lisp, ML, ...
Programmation logique
Prolog

Fondamentaux de l’algorithmique 4 / 45
Python

Développé par Guido van Rossum au début des années 1990.


A télécharger http : //www .python.org
Langage interprété : fonctionne avec un évaluateur d’expressions
du langage
Langage orienté objet : tout est un objet
Typage dynamique : les variables n’ont pas un type prédéfini
Types collection prédéfinis et riches :
Listes
Tuples
Ensembles
Dictionaires (tables de hachage)
Concis

Fondamentaux de l’algorithmique 5 / 45
Propriétés du langage

Indentation à la place des accolades


Plusieurs types de séquences
Chaines de caractères "...", ’...’ : séquence de caractères,
immutable
Listes [...] : séquence de "n’importe quoi", mutable
Tuples (...) : séquence de "n’importe quoi", immutable
Exceptions et itérateurs comme dans Java
Système objet simple

Fondamentaux de l’algorithmique 6 / 45
Ce qu’est programmer

Fondamentaux de l’algorithmique 7 / 45
Syntaxe et Sémantique

Erreur de Syntaxe : violation d’une règle du langage de


programmation (grammaire).
"Moi parle Anglais bien."
Utiliser des mots clef valides mais au mauvais endroit
Détecté par un compilateur
Erreur de Sémantique : erreur logique :
"Cette phrase est écrite en Italien"
Un programme syntaxiquement correct mais ne fournissant pas
le résultat attendu
L’utilisateur observe la sortie de l’exécution d’un programme

Fondamentaux de l’algorithmique 8 / 45
Apprendre à programmer

Syntaxe – Comme apprendre l’Anglais


Algorithmes – Comme apprendre à raconter une histoire
cohérente (pas forcément en Anglais)
Bibliothèques – Comme apprendre à réutliser un travail (code)
fait par quelqu’un d’autre
Ce sont des processus d’apprentissage différents

Fondamentaux de l’algorithmique 9 / 45
Interpréteur Python
Interface interactive pour Python
kais$ python
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Fondamentaux de l’algorithmique 10 / 45
Interpréteur Python
Interface interactive pour Python
kais$ python
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python prompts with 0 >>>0 .

Fondamentaux de l’algorithmique 10 / 45
Interpréteur Python
Interface interactive pour Python
kais$ python
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python prompts with 0 >>>0 .


L’interpréteur Python évalue l’entrée :
>>> 3*(5+6)
33
>>> 3**2
9
>>> "toto"+"gogo"
’totogogo’
>>> "do"*3
’dododo’

Fondamentaux de l’algorithmique 10 / 45
Interpréteur Python
Interface interactive pour Python
kais$ python
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python prompts with 0 >>>0 .


L’interpréteur Python évalue l’entrée :
>>> 3*(5+6)
33
>>> 3**2
9
>>> "toto"+"gogo"
’totogogo’
>>> "do"*3
’dododo’

Pour quitter Python: exit() ou ctrl-D (Unix,Mac OS), ctrl-Z


(Windows)

Fondamentaux de l’algorithmique 10 / 45
Pycharm Integrated Development Environment
(IDE)

Shell pour une évaluation


intéractive.
Editeur de texte avec
coloriage du code et une
indentation intelligente.
Menu pour changer les
paramètre du système et
exécuter des fichiers Python.

Fondamentaux de l’algorithmique 11 / 45
Pycharm Integrated Development Environment
(IDE)

Shell pour une évaluation


intéractive.
Editeur de texte avec
coloriage du code et une
indentation intelligente.
Menu pour changer les
paramètre du système et
exécuter des fichiers Python.

Fondamentaux de l’algorithmique 11 / 45
Plan

1 Plan

2 Les Bases
Types de Base
Opérateurs

3 Instructions d’entrée/sortie

4 Structures de contrôle
Expression booléenne
Instruction conditionnelle
Boucles

Fondamentaux de l’algorithmique 12 / 45
Exemple de code

Fondamentaux de l’algorithmique 13 / 45
Compréhension du Code
Indentation importe pour le sens du code:
La structure d’un bloc est déterminée par l’indentation

Fondamentaux de l’algorithmique 14 / 45
Compréhension du Code
Indentation importe pour le sens du code:
La structure d’un bloc est déterminée par l’indentation
La première affectation à une variable la crée.
Le type d’une variable n’est pas renseigné au préalable.
Python trouve le type d’une variable en fonction du contexte (le
type de l’expression qui lui est affectée).

Fondamentaux de l’algorithmique 14 / 45
Compréhension du Code
Indentation importe pour le sens du code:
La structure d’un bloc est déterminée par l’indentation
La première affectation à une variable la crée.
Le type d’une variable n’est pas renseigné au préalable.
Python trouve le type d’une variable en fonction du contexte (le
type de l’expression qui lui est affectée).
L’affectation utilise = alors que le test d’égalité utilise ==.

Fondamentaux de l’algorithmique 14 / 45
Compréhension du Code
Indentation importe pour le sens du code:
La structure d’un bloc est déterminée par l’indentation
La première affectation à une variable la crée.
Le type d’une variable n’est pas renseigné au préalable.
Python trouve le type d’une variable en fonction du contexte (le
type de l’expression qui lui est affectée).
L’affectation utilise = alors que le test d’égalité utilise ==.
Opérations sur les nombres : + - * / %.
Utilisation spéciale de l’opérateur + pour concaténer deux
chaînes de caractères .
Utilisation spéciale de l’opérateur % pour formatter une chaîne
de caractère (comme en C pour printf)

Fondamentaux de l’algorithmique 14 / 45
Compréhension du Code
Indentation importe pour le sens du code:
La structure d’un bloc est déterminée par l’indentation
La première affectation à une variable la crée.
Le type d’une variable n’est pas renseigné au préalable.
Python trouve le type d’une variable en fonction du contexte (le
type de l’expression qui lui est affectée).
L’affectation utilise = alors que le test d’égalité utilise ==.
Opérations sur les nombres : + - * / %.
Utilisation spéciale de l’opérateur + pour concaténer deux
chaînes de caractères .
Utilisation spéciale de l’opérateur % pour formatter une chaîne
de caractère (comme en C pour printf)
Opérateurs logiques sont des mots (and, or, not), et non pas des
symboles (comme en C).

Fondamentaux de l’algorithmique 14 / 45
Compréhension du Code
Indentation importe pour le sens du code:
La structure d’un bloc est déterminée par l’indentation
La première affectation à une variable la crée.
Le type d’une variable n’est pas renseigné au préalable.
Python trouve le type d’une variable en fonction du contexte (le
type de l’expression qui lui est affectée).
L’affectation utilise = alors que le test d’égalité utilise ==.
Opérations sur les nombres : + - * / %.
Utilisation spéciale de l’opérateur + pour concaténer deux
chaînes de caractères .
Utilisation spéciale de l’opérateur % pour formatter une chaîne
de caractère (comme en C pour printf)
Opérateurs logiques sont des mots (and, or, not), et non pas des
symboles (comme en C).
Simple affichage avec print (print (quelque chose,end =" ") finit
avec un espace au lieu d’un retour à la ligne).
Fondamentaux de l’algorithmique 14 / 45
Plan

2 Les Bases
Types de Base
Opérateurs

Fondamentaux de l’algorithmique 15 / 45
Types de Base

Entiers (par défaut pour les nombres)


z = 5 * 2+3

Fondamentaux de l’algorithmique 16 / 45
Types de Base

Entiers (par défaut pour les nombres)


z = 5 * 2+3
Réels
x = 3.456
z=5/2

Fondamentaux de l’algorithmique 16 / 45
Types de Base

Entiers (par défaut pour les nombres)


z = 5 * 2+3
Réels
x = 3.456
z=5/2
Chaînes de caractères
On peut utiliser "" : "abc", ou ” : ’abc’.
Apostrophes peuvent faire partie d’une chaîne de caractères :
"don’t"
Utiliser triple guillemets pour des chaînes de caractères sur
plusieurs lignes ou contenant ’ et " : """a’b"c"""

Fondamentaux de l’algorithmique 16 / 45
Commentaires et espaces

Commencer un commentaire avec # ... le reste de la ligne est


ignoré.

Fondamentaux de l’algorithmique 17 / 45
Commentaires et espaces

Commencer un commentaire avec # ... le reste de la ligne est


ignoré.
Les espaces ont un sens en Python : spécialement l’indentation
et le placement d’une nouvelle ligne.

Fondamentaux de l’algorithmique 17 / 45
Commentaires et espaces

Commencer un commentaire avec # ... le reste de la ligne est


ignoré.
Les espaces ont un sens en Python : spécialement l’indentation
et le placement d’une nouvelle ligne.
Pas d’accolades { } pour délimiter un bloc de code en Python...
Utiliser une indentation cohérente.
La première ligne avec une plus petite indentation est considérée
comme en dehors du bloc.
La première ligne avec une plus grande indentation commence
un bloc imbriqué (sous-bloc)

Fondamentaux de l’algorithmique 17 / 45
Affectation

Borner une variable en Python signifie définir un nom pour


référencer un objet.

Fondamentaux de l’algorithmique 18 / 45
Affectation

Borner une variable en Python signifie définir un nom pour


référencer un objet.
Une variable est créé la première fois qu’elle apparaît à gauche
d’une affectation :
x=3*2+5: L’expression de droite est évaluée, et sa valeur
affectée à la variable de gauche.

Fondamentaux de l’algorithmique 18 / 45
Affectation

Borner une variable en Python signifie définir un nom pour


référencer un objet.
Une variable est créé la première fois qu’elle apparaît à gauche
d’une affectation :
x=3*2+5: L’expression de droite est évaluée, et sa valeur
affectée à la variable de gauche.
Un objet est supprimé (par le ramasse miette/garbage collector)
dès qu’il n’est plus référencé.

Fondamentaux de l’algorithmique 18 / 45
Affectation

Borner une variable en Python signifie définir un nom pour


référencer un objet.
Une variable est créé la première fois qu’elle apparaît à gauche
d’une affectation :
x=3*2+5: L’expression de droite est évaluée, et sa valeur
affectée à la variable de gauche.
Un objet est supprimé (par le ramasse miette/garbage collector)
dès qu’il n’est plus référencé.
Les noms en Python n’ont pas un type intrinsèque. Les objets
ont un type.
Python détermine le type d’une variable automatiquement en
fonction de la donnée qui lui est affectée.

Fondamentaux de l’algorithmique 18 / 45
Affectation Multiple

Il est possible d’affecter des expressions à plusieurs variables en


même temps.
>>> x, y = 2, 3
>>> x
2
>>> y
3

Fondamentaux de l’algorithmique 19 / 45
Affectation Multiple

Il est possible d’affecter des expressions à plusieurs variables en


même temps.
>>> x, y = 2, 3
>>> x
2
>>> y
3
Ou affecter la même expression à plusieurs variables :
>>> y = x = 3*4 y aura la valeur 12, car (x = 3 ∗ 4) vaut 12;

Fondamentaux de l’algorithmique 19 / 45
Règles de nomage

Les noms sons sensibles à la casse et ne doivent pas commencer


par un chiffre. Ils peuvent contenir des lettres, chiffres et tirets
du bas.
bob Bob _bob _2_bob_ bob_2 BoB

Fondamentaux de l’algorithmique 20 / 45
Règles de nomage

Les noms sons sensibles à la casse et ne doivent pas commencer


par un chiffre. Ils peuvent contenir des lettres, chiffres et tirets
du bas.
bob Bob _bob _2_bob_ bob_2 BoB
Les mots clefs suivants sont réservés :
and, assert, break, class, continue, def, del, elif, else, except,
exec, finally, for, from, global, if, import, in, is, lambda, not, or,
pass, print, raise, return, try, while

Fondamentaux de l’algorithmique 20 / 45
Plan

2 Les Bases
Types de Base
Opérateurs

Fondamentaux de l’algorithmique 21 / 45
Opérateurs

Opérateur d’affectation: Change la valeur d’une variable


x=x+12
1 Evalue l’expression de droite,
2 Et affecte sa valeur à la variable de gauche.

Fondamentaux de l’algorithmique 22 / 45
Opérateurs

Opérateur d’affectation: Change la valeur d’une variable


x=x+12
1 Evalue l’expression de droite,
2 Et affecte sa valeur à la variable de gauche.
L’affectation multiples va de droite vers la gauche.
y = x = 3 =⇒ y reçoit la valeur 3, car (x = 3) vaut 3;

Fondamentaux de l’algorithmique 22 / 45
Opérateurs

Opérateur d’affectation: Change la valeur d’une variable


x=x+12
1 Evalue l’expression de droite,
2 Et affecte sa valeur à la variable de gauche.
L’affectation multiples va de droite vers la gauche.
y = x = 3 =⇒ y reçoit la valeur 3, car (x = 3) vaut 3;
Opérateurs arithmétiques
* multiplication
/ division
// division entière
+ addition
- soustraction
** puissance
% modulo

Fondamentaux de l’algorithmique 22 / 45
Opérateurs

Opérateurs binaires
~ (négation binaire)
« (décalage à gauche)
» (décalage à droite)
& (ET binaire )
^ (XOR binaire)
| (OR binaire)

Fondamentaux de l’algorithmique 23 / 45
Opérateurs

Opérateurs binaires
~ (négation binaire)
« (décalage à gauche)
» (décalage à droite)
& (ET binaire )
^ (XOR binaire)
| (OR binaire)
Opérateurs logiques
not (NON logique )
and (ET logique)
or (OU logique)

Fondamentaux de l’algorithmique 23 / 45
Opérateurs

Opérateurs relationnels
> supérieur à
>= supérieur ou égal
< inférieur à
<= inférieur ou égal
== égal
!= différent

Fondamentaux de l’algorithmique 24 / 45
Opérateurs

Opérateur spéciaux : +=, *=, etc.


x += y équivalent à x = x + y;
x -= y équivalent à x = x - y;
x *= y équivalent à x = x * y;
x /= y équivalent à x = x / y;
x %= y équivalent à x = x % y;
x &= y équivalent à x = x & y;
x |= y équivalent à x = x | y;
...

Fondamentaux de l’algorithmique 25 / 45
Plan

1 Plan

2 Les Bases
Types de Base
Opérateurs

3 Instructions d’entrée/sortie

4 Structures de contrôle
Expression booléenne
Instruction conditionnelle
Boucles

Fondamentaux de l’algorithmique 26 / 45
Instructions d’entrée/sortie

Sortie: print(expression1, expression2, ...)


print("le résultat est :", x+2)

Fondamentaux de l’algorithmique 27 / 45
Instructions d’entrée/sortie

Sortie: print(expression1, expression2, ...)


print("le résultat est :", x+2)
Entrée: input([string])
x=input("Entrez une valeur :")
affiche "Entrez une valeur " et retourne la valeur saisie au
clavier dans la variable x.
x=input()

Fondamentaux de l’algorithmique 27 / 45
Plan

1 Plan

2 Les Bases
Types de Base
Opérateurs

3 Instructions d’entrée/sortie

4 Structures de contrôle
Expression booléenne
Instruction conditionnelle
Boucles

Fondamentaux de l’algorithmique 28 / 45
Structures de contrôle

Structure conditionnelle
Décider quel code exécuter en fonction de la valeur de vérité
d’une expression booléenne.
if
if-else

Fondamentaux de l’algorithmique 29 / 45
Structures de contrôle

Structure conditionnelle
Décider quel code exécuter en fonction de la valeur de vérité
d’une expression booléenne.
if
if-else
Boucles
Exécuter un code plusieurs fois, tant qu’une expression
booléenne est vraie .
while
for

Fondamentaux de l’algorithmique 29 / 45
Plan

4 Structures de contrôle
Expression booléenne
Instruction conditionnelle
Boucles

Fondamentaux de l’algorithmique 30 / 45
Expression booléenne

True et False sont des constantes


Les autres valeurs sont traitées comme étant True ou False
quand elles sont utilisées dans des conditions :
False: zéro, None, conteneurs vides
True: tout nombre différent de zéro, objet non vide, ...

Fondamentaux de l’algorithmique 31 / 45
Expression booléenne

True et False sont des constantes


Les autres valeurs sont traitées comme étant True ou False
quand elles sont utilisées dans des conditions :
False: zéro, None, conteneurs vides
True: tout nombre différent de zéro, objet non vide, ...
Expressions booléennes
x = Val_1 if condition else Val_2
D’abord, condition est évaluée
Si True, Val_1 est évaluée et est retournée
Si False, Val_2 est évaluée et est retournée

Fondamentaux de l’algorithmique 31 / 45
Plan

4 Structures de contrôle
Expression booléenne
Instruction conditionnelle
Boucles

Fondamentaux de l’algorithmique 32 / 45
Instruction conditionnelle

If
if (condition)
action; F
based on if condition
syntaxe T
if condition :
action
bloc d’instructions

on evaluated

Condition is a C expression,
which evaluates to TRUE (non-zero) or FALSE (zero).
Action is a C statement,
which may be simple or compound (a block).
57 CSE 240 58

Fondamentaux de l’algorithmique 33 / 45
Instruction conditionnelle

If
if (condition)
action; F
based on if condition
syntaxe T
if condition :
action
bloc d’instructions

on evaluated

Condition is a C expression,
Condition est une
whichexpression booléenne,
evaluates to TRUE (non-zero) qui vaut(zero).
or FALSE True ou False.
Action is a C statement,
Bloc d’instructions est be
which may une ou orplusieurs
simple compound (ainstructions
block). en Python.
57 CSE 240 58

Fondamentaux de l’algorithmique 33 / 45
Exemples

Instruction composée
if x <= 10 :
y = x * x + 5
z = (2 * y) / 3
Les deux instructions seront exécutées si x <= 10

Fondamentaux de l’algorithmique 34 / 45
Exemples

Instruction composée
if x <= 10 :
y = x * x + 5
z = (2 * y) / 3
Les deux instructions seront exécutées si x <= 10
Utiliser l’indentation pour les blocs

Fondamentaux de l’algorithmique 34 / 45
Exemples

Instruction composée
if x <= 10 :
y = x * x + 5
z = (2 * y) / 3
Les deux instructions seront exécutées si x <= 10
Utiliser l’indentation pour les blocs
(:) après l’expression booléenne
if x <= 10 :
y = x * x + 5
z = (2 * y) / 3
Seule la première instruction sera exécutée si la condition est
vraie; la deuxième instruction sera toujours exécutée.

Fondamentaux de l’algorithmique 34 / 45
D’autres exemples

if 0 <= age and age <= 11:


kids = kids + 1
if mois==4 or mois==6 or mois==9 or mois==11:
print("Le mois contient 30 jours")

Fondamentaux de l’algorithmique 35 / 45
Instruction alternative

If-else
if-else if (condition)
syntaxe action_if; T F
condition
else
if condition :
action_else;
statements_if
else : action_if action_else
statements_else

Else allows choice between


two mutually exclusive actions without re-testing condition.

61 CSE 240 62
Fondamentaux de l’algorithmique 36 / 45
Instruction alternative

If-else
if-else if (condition)
syntaxe action_if; T F
condition
else
if condition :
action_else;
statements_if
else : action_if action_else
statements_else

else Choix entreElse allows


deux choice
blocs between
d’instructions disjoints sans retester la
two mutually exclusive actions without re-testing condition.
condition.

61 CSE 240 62
Fondamentaux de l’algorithmique 36 / 45
if-else : imbrication

Fondamentaux de l’algorithmique 37 / 45
Plan

4 Structures de contrôle
Expression booléenne
Instruction conditionnelle
Boucles

Fondamentaux de l’algorithmique 38 / 45
Boucles

While
== 9 || while (test)
while loop_body; F
test
syntaxe
while test : T
| bloc d’instructions loop_body

;
Executes loop body as long as
test evaluates to TRUE (non-zero)

Note: Test is evaluated before executing loop body


65 CSE 240 66

Fondamentaux de l’algorithmique 39 / 45
Boucles

While
== 9 || while (test)
while loop_body; F
test
syntaxe
while test : T
| bloc d’instructions loop_body

;
Exécute le corps de la boucle (bloc d’instructions) tant que le
Executes loop body as long as
test vaut True
test evaluates to TRUE (non-zero)
Test est évalué avant d’exécuter le corps de la boucle
Note: Test is evaluated before executing loop body
65Boucles imbriquées
CSE 240 : le corps de la boucle peut (bien sûr) 66
contenir une ou plusieurs autres boucles.

Fondamentaux de l’algorithmique 39 / 45
Exemple de boucle While

Fondamentaux de l’algorithmique 40 / 45
break, continue et assert

Vous pouvez utiliser le mot clef break dans le corps de la boucle


pour quitter la boucle while définitivement.
Vous pouvez utiliser le mot clef continue dans le corps de la
boucle pour arrêter l’exécution de l’itération courante et
commencer immédiatement la prochaine itération (s’il y en a).
L’instruction assert permet de vérifier qu’une condition est vraie
durant l’exécution du programme.
Si cette condition est fausse, le programme se termine
immédiatement. assert(number_of_players < 5)

Fondamentaux de l’algorithmique 41 / 45
Boucle For
La boucle for exécute un bloc d’instructions pour chaque item
appartenant à une collection ou tout autre objet "itérable"
for <item> in <collection>:
<bloc d’instructions>
Si <collection> est une liste de tuples, alors la boucle s’exécute
pour chaque élément de la séquence.
Si <collection> est une chaîne de caractère, alors la boucle
s’exécute pour chaque caractère de la chaîne.

Fondamentaux de l’algorithmique 42 / 45
Boucle For

On aimerait souvent écrire une boucle pour toutes les valeurs


d’une séquence de nombres. L’appel de fonction range(n)
retourne une liste de nombres compris entre 0 et n-1.
range(5) retourne [0,1,2,3,4]
Donc, on peut dire :

Fondamentaux de l’algorithmique 43 / 45
Boucle For

for <item> in <collection>:


<statements>
<item> peut être plus complexe qu’un simple nom d’une
variable.
Si les éléments de <collection> sont eux mêmes des collections,
alors <item> peut prendre la structure de ces éléments :
for (x, y) in [(a,1), (b,2), (c,3), (d,4)]:
print (x)

Fondamentaux de l’algorithmique 44 / 45
Exercices

1 Ecrire un programme Python qui calcule la somme des N


premiers nombres entiers. N est donné par l’utilisateur.
2 Ecrire un programme Python qui calcule X n où X et n sont
donnés par l’utilisateur.
3 Ecrire un programme Python qui calcule la somme de N valeurs
saisies au clavier.
4 Ecrire un programme Python qui calcule le minimum de N
valeurs saisies au clavier.
Pi=n i
5 Ecrire un programme Python qui calcule i=1 x.

Fondamentaux de l’algorithmique 45 / 45

Vous aimerez peut-être aussi