← Retour
Apprendre Python en 1 heure - Cours Complet Débutant (4K)
Transcription horodatee
00:00:01
Bienvenue dans ce cours de Junior pour
00:00:02
apprendre à coder en Python. Ce cours
00:00:03
est destiné aux débutants, donc vous
00:00:04
n'avez besoin de rien savoir pour
00:00:06
pouvoir le suivre. Pas besoin de
00:00:07
connaissances en programmation, ni même
00:00:09
en Python, et pas besoin non plus d'être
00:00:10
fort en maths. On va partir de la base
00:00:12
en commençant par installer tout ce dont
00:00:13
vous avez besoin pour commencer à coder
00:00:14
en Python. Ensuite, on voit tous les
00:00:16
concepts de base de la programmation qui
00:00:17
vous donneront des fondations solides
00:00:19
pour continuer votre apprentissage en
00:00:20
Python. En plus, on va faire plusieurs
00:00:22
projets et exercices concrets ensemble
00:00:24
pour assimiler la théorie de manière
00:00:25
durable avec de la pratique. À la fin de
00:00:27
ce cours, vous serez capable de vous
00:00:28
orienter dans la direction où vous
00:00:29
voulez avec Python. Vous pourrez par
00:00:31
exemple apprendre à faire des sites web
00:00:33
avec le développement web back-end, vous
00:00:35
orienter vers la data science ou bien
00:00:36
vers l'apprentissage machine, faire de
00:00:38
l'automatisation ou même coder des jeux
00:00:39
vidéo. Python vous permettra de faire
00:00:42
bien plus que ça. Il est utilisé partout
00:00:43
et c'est le langage le plus populaire en
00:00:45
2024 et ce depuis des années d'après
00:00:46
plusieurs classements. Et même si vous
00:00:48
décidez de passer à un autre langage de
00:00:50
programmation après, Python est parfait
00:00:51
pour commencer à apprendre à coder et
00:00:53
comprendre les bases. Donc démarrons
00:00:54
sans plus tarder. Mais avant de
00:00:55
commencer et comme d'habitude, je vais
00:00:57
vous demander de liker cette vidéo et
00:00:58
vous abonner à cette chaîne si vous
00:01:01
voulez plus de tutoriels de ce genre.
00:01:02
Pour pouvoir coder en Python, on va
00:01:04
devoir installer Python sur votre
00:01:06
machine et un éditeur de texte pour
00:01:09
Pour Python, rendez-vous sur le site
00:01:12
officiel de Python python.org ou suivez
00:01:18
appuyez sur downloads et téléchargez la
00:01:22
Une fois le téléchargement fini,
00:01:23
rendez-vous dans votre explorateur de
00:01:25
fichiers et double-cliquez sur le
00:01:27
fichier que vous venez de télécharger.
00:01:29
Si vous êtes sur Windows, faites bien
00:01:32
attention à ajouter python.exe au passe.
00:01:33
Ça permettra à votre ordinateur de
00:01:42
et suivez le processus d'installation.
00:01:44
Après quelques secondes, Python a fini
00:01:46
de s'installer et vous pouvez fermer la
00:01:50
Ensuite, on va avoir besoin d'un éditeur
00:01:53
de texte. Pour ça, on va choisir Visual
00:01:54
Studio Code. Pour installer Visual
00:01:58
Encore une fois, je vous mets le lien en
00:02:01
Une fois sur le site, vous pouvez
00:02:03
télécharger l'installateur pour Mac,
00:02:06
Windows ou Linux. Nous, on va prendre
00:02:08
celui pour Windows. Le téléchargement se
00:02:10
Quand le téléchargement est fini,
00:02:12
rendez-vous dans l'explorateur de
00:02:13
fichiers et double-cliquez sur ce que
00:02:18
L'installateur se lance. Acceptez les
00:02:22
Appuyez sur suivant, suivant, suivant,
00:02:24
installer. Et si tout s'est bien passé,
00:02:26
vous devriez voir cet écran. Appuyez sur
00:02:30
terminer et Visual Studio Code se lance.
00:02:32
Visual Studio Code est un environnement
00:02:33
de développement intégré complet qui
00:02:34
permet de développer dans à peu près
00:02:36
tous les langages et pour ça, il
00:02:38
fonctionne avec des extensions. Comme on
00:02:42
on va devoir installer l'extension
00:02:44
Rendez-vous dans la partie extension à
00:02:49
Choisissez la première extension
00:02:51
développée par Microsoft et appuyez sur
00:02:53
installer. Une fois l'installation de
00:03:02
On va sauver ce fichier en allant dans
00:03:04
file et puis save ou en appuyant sur
00:03:06
contrôle S. Et je vais appeler mon
00:03:09
fichier hello barre en bas world suivi
00:03:12
de l'extension point py, l'extension
00:03:14
point py étant celle réservée aux
00:03:15
fichiers Python. Le hello world est le
00:03:16
programme typique qu'on fait à chaque
00:03:18
fois qu'on apprend un nouveau langage.
00:03:20
En Python, on peut coder un hello world
00:03:22
avec la fonction print. La fonction
00:03:23
print est une fonction qu'on va utiliser
00:03:25
très souvent et qui permet d'afficher
00:03:28
des valeurs. C'est le mot print suivi de
00:03:31
Dans ces parenthèses, on va mettre des
00:03:34
simples ou des doubles guillemets
00:03:37
avec une phrase ici hello, {virgule}
00:03:39
Une fois que vous avez écrit ça, vous
00:03:41
pouvez appuyer sur le bouton play pour
00:03:46
Si tout s'est bien passé, en bas de
00:03:47
votre écran, vous devriez voir la phrase
00:03:51
Et voilà, c'est tout ce dont vous avez
00:03:53
besoin pour commencer à créer des
00:03:55
programmes en Python et suivre ce
00:03:58
On a vu comment afficher du texte en
00:04:00
Python avec la fonction print et
00:04:01
maintenant on va voir comment afficher
00:04:03
d'autres types de valeurs, à savoir des
00:04:05
On peut afficher des entiers en Python
00:04:07
en fournissant la valeur du nombre
00:04:09
directement à la fonction print. En
00:04:10
lançant notre programme, on voit que la
00:04:12
valeur 3 a été affichée dans le
00:04:16
Ces entiers sont sujets aux mêmes règles
00:04:18
qu'en maths. Ça veut dire qu'on peut
00:04:21
effectuer dessus des additions,
00:04:37
faire la division entière. Donc ici, la
00:04:39
division entière de 3 par 2, ça sera pas
00:04:42
1,5 mais 1 car on garde juste l'entier.
00:04:44
On peut avoir le reste de la division
00:04:46
entière avec le signe modulo qui est
00:04:48
représenté par le signe pourcentage. Ces
00:04:50
opérations arithmétiques ont le même
00:04:56
Ça veut dire que si on a 4 x 3 + 2,
00:05:03
auquel on va ajouter 2 pour faire 14. Et
00:05:08
ça sera pas 4 x 3 + 2, ça veut dire 4 x
00:05:12
Donc on a bien 4 x 3, 12, auquel on va
00:05:22
on devrait mettre ces 3 + 2 entre
00:05:25
parenthèses et là, on aurait bien 4 x 5,
00:05:27
ça veut dire 20. Ça c'est pour les
00:05:28
nombres entiers, mais on a aussi les
00:05:29
nombres décimaux qui ne sont pas du même
00:05:33
Pour voir le type d'une valeur, on
00:05:35
utilise une autre fonction qui est la
00:05:38
fonction type. Comme print, elle s'écrit
00:05:41
avec le mot type suivi de parenthèses et
00:05:42
puis la valeur pour laquelle on veut
00:05:44
savoir quel est le type. On voit que
00:05:49
ils sont du type int pour integer,
00:05:50
entier en anglais. Et pour les nombres
00:05:54
ils sont du type float pour nombre
00:05:59
Tant qu'on y est, on peut voir que notre
00:06:04
était de type str pour string ou chaîne
00:06:06
de caractères en français. On a vu
00:06:08
ensemble comment afficher des valeurs en
00:06:10
Python. On a vu les trois premiers types
00:06:12
de chaînes de caractères, d'entiers et
00:06:14
de nombres décimaux. On a aussi vu les
00:06:16
différents opérateurs arithmétiques et
00:06:18
l'ordre de priorité des opérations. On a
00:06:20
vu la fonction type qui permet de savoir
00:06:21
quel est le type d'une valeur. On va
00:06:23
maintenant voir un concept important qui
00:06:27
Pour le moment, on a juste écrit nos
00:06:29
valeurs en dur en les fournissant
00:06:31
directement à la fonction print ou type.
00:06:32
Ce serait quand même pratique de pouvoir
00:06:34
sauver ces valeurs pour les réutiliser
00:06:40
Vous pouvez voir les variables comme des
00:06:42
boîtes dans lesquelles on met des
00:06:43
valeurs pour pouvoir les réutiliser
00:06:45
après. Donc pour déclarer des variables
00:06:48
en Python, on utilise une typologie qui
00:06:50
s'appelle le snake case qui est
00:06:52
simplement un ou plusieurs mots séparés
00:06:55
par des barres en bas. Donc par exemple,
00:06:56
on peut déclarer notre première variable
00:07:00
en écrivant ma barre en bas variable. On
00:07:01
peut donner n'importe quelle valeur à
00:07:04
cette variable. Disons par exemple 42.
00:07:06
On peut ensuite afficher le contenu de
00:07:08
cette variable en faisant print de ma
00:07:10
variable. Si on lance le programme
00:07:11
Python, on voit bien qu'on a la valeur
00:07:13
42 d'affichée. Écrire le nom d'une
00:07:16
variable s'appelle déclarer une variable
00:07:18
et lui donner une valeur s'appelle lui
00:07:20
assigner une valeur. Ici, on a déclaré
00:07:22
la variable ma variable et on lui a
00:07:25
assigné la valeur 42. On peut réassigner
00:07:27
une valeur à une variable en lui donnant
00:07:30
une nouvelle valeur. Par exemple, ma
00:07:32
variable ne va plus être égale à 42,
00:07:34
mais elle va être égale à hello world
00:07:38
Si on lance le programme, on voit bien
00:07:39
que maintenant ma variable contient la
00:07:43
On a vu les types nombre entier, nombre
00:07:45
flottant et chaîne de caractères. Et ça
00:07:47
va nous être utile maintenant parce
00:07:48
qu'en Python, on ne peut pas mélanger
00:07:50
n'importe quel type de variable. Prenons
00:07:51
par exemple deux types de variables, la
00:07:53
première variable qu'on va appeler mon
00:07:56
et la deuxième variable qu'on va appeler
00:08:00
Imaginons qu'on veuille écrire hello
00:08:05
On peut se dire qu'on peut écrire ma
00:08:10
Mais si on lance le programme en Python,
00:08:11
on voit qu'on a une erreur qui nous dit
00:08:13
qu'on peut concaténer que des strings
00:08:15
avec des strings. Et là, on a essayé de
00:08:19
concaténer une string avec un entier.
00:08:21
Pour ça, on peut faire ce qu'on appelle
00:08:23
un cast. On peut caster mon entier en
00:08:27
en utilisant une autre fonction qui est
00:08:29
la fonction str. Tout ce qu'on fournit à
00:08:32
la fonction str sera transformé en
00:08:34
string. Et donc dans notre exemple, on
00:08:36
se retrouve avec deux strings, la string
00:08:38
hello world et 42 qui n'est plus un
00:08:39
entier, mais bien une chaîne de
00:08:42
Si on lance le programme, on voit qu'on
00:08:44
a hello world suivi de 42 et on a plus
00:08:46
d'erreur. On peut aussi transformer 42
00:08:50
dans la déclaration de variable en lui
00:08:52
assignant le résultat de la fonction
00:08:56
Il faut faire cependant attention parce
00:08:58
que maintenant, disons qu'on veuille
00:09:03
Maintenant que ce n'est plus un entier,
00:09:07
on va avoir une nouvelle erreur qui est
00:09:09
qu'on ne peut pas ajouter un entier à
00:09:12
une string. Si on caste 1 en string,
00:09:16
et on se retrouve avec 421 parce qu'en
00:09:23
42 à laquelle on a ajouté 1, 421.
00:09:25
Les mêmes règles s'appliquent sur les
00:09:28
flottants. Donc si je déclare mon float
00:09:32
et que je lui assigne la valeur 1,2,
00:09:35
on va ici de nouveau avoir un entier. On
00:09:36
peut facilement effectuer des opérations
00:09:39
arithmétiques entre des entiers et des
00:09:41
À savoir que le résultat d'une opération
00:09:43
arithmétique entre un entier et un
00:09:45
flottant donnera toujours un flottant.
00:09:53
Mais en ce qui concerne les chaînes de
00:09:56
c'est la même chose que pour les
00:09:59
entiers, à savoir que ma string plus
00:10:01
float va nous renvoyer une erreur qui
00:10:02
dit qu'on ne peut pas concaténer des
00:10:06
Pour ça, encore une fois, la fonction
00:10:11
transformant notre float en string, on
00:10:15
En Python, il existe des fonctions pour
00:10:18
transformer des types en un autre, pour
00:10:21
chaque type. Donc, on a vu le type STR
00:10:23
string, mais il existe aussi la fonction
00:10:26
int pour transformer des floats en
00:10:28
entiers. Donc là, on a transformé notre
00:10:31
float en 1,2 en entier 1, et on peut
00:10:32
aussi transformer un entier en nombre
00:10:34
décimal avec la fonction float. On va
00:10:37
ici lui fournir mon entier 42 et on voit
00:10:46
car notre entier est devenu un float.
00:10:47
Si ça vous semble complexe, je vous
00:10:49
conseille d'expérimenter avec ce que
00:10:51
vous savez déjà, c'est-à-dire les trois
00:10:56
la fonction print et la fonction type
00:10:58
qui permet de savoir de quel type est
00:11:02
Maintenant qu'on sait manipuler les
00:11:04
types de base entier, float et string,
00:11:06
qu'on sait aussi les écrire sur la
00:11:07
sortie standard, on va apprendre comment
00:11:09
lire les valeurs que l'utilisateur nous
00:11:12
fournit avec une nouvelle fonction qui
00:11:16
La fonction input prend en paramètre, ça
00:11:18
veut dire qu'on peut lui mettre dedans
00:11:21
une chaîne de caractères qui représente
00:11:23
ce qui va s'afficher dans le terminal,
00:11:24
par exemple la question qu'on veut poser
00:11:26
à l'utilisateur. Si on lui demande quel
00:11:35
on voit que Python nous demande quel est
00:11:41
Voilà, là il s'est rien passé, parce
00:11:42
qu'en fait, pour récupérer le résultat
00:11:45
de la fonction input, on doit déclarer
00:11:47
une variable âge dans laquelle on met la
00:11:51
On a aussi vu qu'on avait pas d'espace
00:11:53
entre la question et la valeur. Pour ça,
00:11:55
il suffit de rajouter un espace à la fin
00:11:57
de notre question dans la chaîne de
00:12:01
On va afficher le contenu de la variable
00:12:02
âge, et si tout va bien, on devrait
00:12:04
récupérer la valeur qu'on vient de
00:12:08
Donc, quel est votre ? On va mettre 20.
00:12:10
Et on voit que Python affiche bien la
00:12:12
valeur 20 avec la fonction print.
00:12:15
Maintenant, on sait lire et écrire. Il y
00:12:16
a cependant une chose à laquelle on doit
00:12:17
faire attention, et c'est le type de la
00:12:19
variable âge. Donc là, on a un âge, on
00:12:21
peut se dire qu'on a un entier, mais en
00:12:30
est de type string, car tout ce que
00:12:32
Python lit dans l'entrée standard est
00:12:34
par définition une string. Si quand
00:12:35
Python nous demande "Quel est votre ?"
00:12:38
et qu'on lui dit "Je ne sais pas.",
00:12:40
eh ben, pas de problème, âge contiendra
00:12:42
"Je ne sais pas." D'ailleurs, la
00:12:43
fonction print permet d'afficher
00:12:45
plusieurs choses. Pour que ce soit plus
00:12:47
clair, on va afficher le contenu de la
00:12:49
variable âge suivi de son type. Donc,
00:12:51
recommençons. Quel est votre ? Je ne
00:12:55
On voit qu'on a la chaîne de caractères
00:12:56
"Je ne sais pas." et qu'elle est bien du
00:13:00
Pour que âge soit considéré comme un
00:13:02
entier et non pas comme une string, on a
00:13:04
déjà vu la fonction pour transformer un
00:13:11
On peut l'utiliser sur la fonction input
00:13:13
pour que âge soit directement transformé
00:13:18
ou casté de string vers entier.
00:13:20
Vérifions ça. Donc, on lance le
00:13:22
programme. Maintenant, si on tape "Je ne
00:13:27
car Python n'arrive pas à transformer la
00:13:30
phrase "Je ne sais pas." en un entier.
00:13:32
Donc, en relançant notre programme, on
00:13:34
va lui dire "Quel est votre ?" On va lui
00:13:37
et là on a bien 20 qui est de type
00:13:40
Ça veut dire que maintenant, on peut lui
00:13:48
auquel on ajoute 1 deviendra bien 21.
00:13:49
Maintenant qu'on sait tout ça, on va
00:13:52
créer notre premier projet en Python qui
00:13:53
est un convertisseur de degrés Celsius
00:13:55
vers les degrés Fahrenheit qui sont
00:13:57
utilisés aux États-Unis par exemple.
00:13:58
L'énoncé du projet est simple, on va
00:14:00
demander à l'utilisateur de rentrer des
00:14:03
degrés Celsius et on va lui afficher des
00:14:05
degrés en Fahrenheit. Pour ça, on va
00:14:09
devoir utiliser la fonction input
00:14:11
et la fonction print, et je vous invite
00:14:13
à trouver la formule pour transformer
00:14:15
des degrés Celsius en Fahrenheit sur
00:14:17
Google. Voilà, donc vous pouvez mettre
00:14:19
la vidéo en pause et on se retrouve une
00:14:21
fois que vous avez terminé. J'espère que
00:14:23
vous avez vraiment mis la vidéo en pause
00:14:24
et que vous avez au moins essayé de
00:14:27
Maintenant, on va faire la solution
00:14:30
ensemble. Ces degrés seront des nombres,
00:14:32
on peut décider de ne prendre que des
00:14:33
entiers, mais pour avoir un programme
00:14:35
plus complet, on va utiliser des
00:14:39
Donc, on caste le résultat de la
00:14:41
fonction input en float pour avoir des
00:14:44
Et la question qu'on va poser à
00:14:52
Maintenant qu'on a nos degrés Celsius,
00:14:55
on va les transformer en Fahrenheit.
00:14:56
Donc, on va déclarer une nouvelle
00:14:57
variable qui s'appelle Fahrenheit, et
00:15:00
donc j'ai chargé la formule sur Google,
00:15:01
et la formule pour transformer des
00:15:05
Celsius en Fahrenheit est Celsius
00:15:11
+ 32. On va ensuite afficher le contenu
00:15:13
de notre valeur Fahrenheit et lancer le
00:15:16
Notre programme nous demande d'entrer
00:15:19
des degrés Celsius, on va entrer 36,
00:15:21
et notre programme nous renvoie 96,8.
00:15:23
Pour vérifier que c'est correct, on va
00:15:35
en ?" On voit que 96,8 degrés Fahrenheit
00:15:37
équivalent bien à 36 degrés Celsius. On
00:15:39
peut un peu améliorer notre programme en
00:15:40
voyant qu'on a oublié de mettre un
00:15:44
Il nous manque aussi un espace avant les
00:15:47
Et puis là, notre programme est très
00:15:49
brut, il nous renvoie juste la valeur de
00:15:52
Pour rendre ça un peu plus sympa, on va
00:15:54
mettre On va utiliser la fonction print
00:15:56
de manière un peu plus avancée en lui
00:15:57
passant plusieurs paramètres et en
00:16:28
On peut lancer notre programme.
00:16:31
On va reprendre 36, on voit que 36
00:16:34
degrés Celsius équivalent bien à 96,8
00:16:38
Et on va juste retirer l'espace ici, car
00:16:39
quand on sépare des valeurs par des
00:16:41
virgules dans la fonction print, Python
00:16:43
ajoute automatiquement des espaces.
00:16:46
Donc, relançons pour vérifier. 36,
00:16:48
et on voit que 36 degrés Celsius
00:16:52
Fahrenheit. Félicitations, vous avez
00:16:56
fini votre premier projet en Python.
00:16:57
On a vu comment représenter le type
00:16:59
chaîne de caractères, nombres décimaux
00:17:00
et nombres entiers. Maintenant, on va
00:17:02
voir un nouveau type qui est le type
00:17:03
booléen. Le type booléen permet
00:17:05
d'afficher des valeurs qui sont soit de
00:17:06
vraies, soit de fausses. Il peut prendre
00:17:09
deux valeurs possibles, soit le mot-clé
00:17:11
réservé true, soit false. Comme le reste
00:17:13
des types en Python, il a une fonction
00:17:14
qui permet de transformer d'autres types
00:17:16
d'objets en booléen, c'est la fonction
00:17:18
bool. Dans la logique booléenne, tout
00:17:21
type d'objet qui est égal à zéro, nul ou
00:17:23
un ensemble vide sera considéré comme
00:17:24
fausse, et tout le reste sera considéré
00:17:26
comme vrai. Prenons quelques exemples
00:17:32
qui en booléen sera considéré comme
00:17:34
vrai. On peut aussi prendre la valeur
00:17:37
42.0, un nombre décimal qui lui aussi
00:17:39
sera considéré comme vrai, ou bien une
00:17:41
chaîne de caractères non nulle, comme
00:17:45
qui elle aussi sera évaluée à vrai.
00:17:46
Maintenant, si on prend une chaîne de
00:17:50
elle sera évaluée à fausse, car c'est un
00:17:55
ainsi que zéro, le nombre entier,
00:17:59
et 0.0 pour avoir un float qui lui aussi
00:18:00
est faux. En programmation, quand on
00:18:01
parle de valeurs qui peuvent être
00:18:03
interprétées comme vraies ou fausses,
00:18:05
bien qu'elles ne soient pas les valeurs
00:18:07
booléennes directes true et false,
00:18:12
on parle de valeurs truthy ou falsy.
00:18:14
On a vu les opérateurs arithmétiques,
00:18:16
voyons maintenant les opérateurs de
00:18:18
comparaison. Il existe six opérateurs de
00:18:20
comparaison qui permettent de comparer
00:18:26
strictement plus petit que, plus petit
00:18:29
ou égal à, strictement plus grand que,
00:18:36
À noter que l'opérateur de comparaison
00:18:38
égal est composé de deux signes égal, il
00:18:40
n'est pas à confondre avec un égal
00:18:42
simple qui est réservé à l'assignation
00:18:43
de variable. Voyons quelques exemples
00:18:45
ensemble pour mettre ça en pratique. Si
00:18:47
on fait print 2 est strictement plus
00:18:49
petit que 3, Python nous dit que la
00:18:51
comparaison est vraie. Maintenant, si on
00:18:54
dit 2 est strictement plus petit que 1,
00:18:55
là, Python nous dit que c'est faux. Pour
00:18:58
voir si 2 est différent de 1, c'est
00:18:59
pareil, Python nous dit que c'est vrai,
00:19:03
Par contre, si on essaie de voir si 2
00:19:05
est égal à 1, Python nous dit que c'est
00:19:08
Est-ce que 2 est plus grand ou égal à ?
00:19:11
Est-ce qu'il est strictement plus grand
00:19:13
que ? Oui. Par contre, est-ce qu'il est
00:19:15
plus petit ou égal à ? Non. En Python,
00:19:19
opérateurs de comparaison les uns à la
00:19:20
suite de l'autre. Par exemple, on peut
00:19:23
dire 1 est strictement plus petit que 2,
00:19:25
qui lui-même est strictement plus petit
00:19:29
et tout ça sera interprété comme vrai.
00:19:31
En Python, on a aussi deux opérateurs
00:19:34
logiques qui sont and et or qui
00:19:35
permettent d'associer plusieurs
00:19:37
conditions entre elles, les unes à la
00:19:39
suite des autres. Avec le mot or qui
00:19:42
il faudra que ou bien la condition
00:19:45
gauche, ou bien la condition droite soit
00:19:46
vraie pour que l'ensemble soit vrai. Et
00:19:49
pour le mot and qui veut dire et, il
00:19:50
faut que les deux conditions, celle de
00:19:52
gauche et celle de droite, s'avère pour
00:19:54
que l'ensemble soit considéré comme
00:19:57
Maintenant qu'on a vu le type booléen,
00:20:01
opérateurs de comparaison, on va pouvoir
00:20:02
rentrer dans le vif du sujet avec notre
00:20:04
première structure de contrôle qui est
00:20:07
la condition if. If permet d'exécuter du
00:20:09
code si et seulement si la condition est
00:20:12
On va évaluer une condition et exécuter
00:20:15
un bloc de code si la condition est
00:20:17
vraie. Ce bloc de code est indenté, ça
00:20:19
veut dire qu'il commence pas à la ligne
00:20:21
directement, il y a des espaces, ça peut
00:20:22
être autant d'espaces que vous voulez ou
00:20:24
autant de tabulation que vous voulez,
00:20:25
mais il faut juste que ce nombre
00:20:26
d'espaces ou de tabulation soit
00:20:29
consistant dans tout votre code. Ici,
00:20:30
j'ai deux espaces, ça fonctionne,
00:20:32
j'aurais pu en avoir quatre. Mais si
00:20:34
j'en ai quatre ici, il faut que j'en ai
00:20:35
quatre tout le long de mon bloc et des
00:20:37
autres blocs en Python. Donc par
00:20:40
exemple, si la condition 2 est plus
00:20:47
Et si je lance mon code, on voit qu'on a
00:20:49
bien affiché "C'est vrai." Par contre,
00:20:51
si la condition devient fausse, 4 est
00:20:53
plus petit que 3, c'est faux, et donc on
00:20:54
va jamais passer dans ce bloc. Pour
00:20:56
illustrer tout ça, prenons l'exemple
00:21:07
Une fois qu'il a entré son mot de passe,
00:21:08
on va tester si son mot de passe est
00:21:10
bien le mot de passe qu'on sait qu'il a,
00:21:16
mot de passe est bien égal à 1 2 3 4 5
00:21:26
Quel est votre mot de ? 1 2 3 4 5 6.
00:21:27
Notre programme affiche bien que c'est
00:21:40
Si on lance et que cette fois-ci on met
00:21:43
on voit qu'il a bien affiché "Le
00:21:45
programme est terminé." mais qu'il est
00:21:47
pas rentré dans le bloc qui dit que
00:21:51
Par contre, si on met 1 2 3 4 5 6,
00:21:53
il rentre dans le bloc et il affiche
00:21:55
quoi qu'il arrive cette cette ligne-là
00:21:57
qui n'est pas indentée et qui sera donc
00:21:58
exécutée parce qu'elle n'est pas dans le
00:22:00
code dans lequel on rentre seulement si
00:22:01
la condition est validée. Maintenant,
00:22:03
que faire si le mot de passe n'est pas ?
00:22:04
Lui dire simplement que le programme est
00:22:06
terminé sans lui dire que son mot de
00:22:07
passe est mauvais ne suffit pas. On
00:22:09
pourrait lui dire que si c'est pas le
00:22:11
cas, on lui affiche "Le mot de passe
00:22:16
Pour ça, on met un autre mot qui est le
00:22:18
mot-clé else. Else ne prend pas de
00:22:21
condition, c'est simplement un bloc de
00:22:23
code qui va être exécuté si aucune autre
00:22:25
condition n'a été remplie. Donc là, on
00:22:33
copier-coller, j'ai pris un espace en
00:22:35
trop, je vais le retirer pour garder la
00:22:36
cohérence et avoir deux espaces à chaque
00:22:39
Donc relançons notre programme. Quel est
00:22:43
et là, on voit qu'on est pas rentré dans
00:22:44
la première condition, mais on est
00:22:47
rentré dans le else et notre programme
00:22:48
affiche "Le mot de passe n'est pas bon."
00:22:49
Maintenant, disons qu'on veut afficher
00:22:51
un message "Le mot de passe entré est
00:22:53
trop court." Pour ça, on peut faire un
00:22:56
qui regarde la longueur de la chaîne de
00:22:58
caractères, ici de notre mot de passe,
00:23:01
et on peut faire ça avec la fonction len
00:23:02
dans laquelle on passe notre mot de
00:23:08
ce que vaut la longueur, la length de
00:23:13
on voit qu'ici si on met 1 2 3, on a 3
00:23:14
parce que la chaîne de caractères est
00:23:15
composée de trois lettres. Maintenant
00:23:17
qu'on a ça, on peut lui dire que si la
00:23:19
longueur de 3 est strictement inférieure
00:23:23
à 6, on peut afficher "Le mot de passe
00:23:30
et là, on voit que le programme nous a
00:23:32
dit "Le mot de passe est trop court, le
00:23:33
mot de passe n'est pas bon." et puis le
00:23:35
programme est terminé. Et c'est un peu
00:23:37
c'est un peu redondant d'avoir la phrase
00:23:38
"Et le mot de passe est trop court et le
00:23:40
mot de passe n'est pas bon." Ça serait
00:23:41
mieux que notre programme nous dise l'un
00:23:42
ou l'autre, mais là, si on regarde ce
00:23:44
qui se passe, on rentre notre notre mot
00:23:47
de passe qui est 1 2 3 de longueur 3.
00:23:49
En évaluant cette première condition, le
00:23:51
mot la longueur du mot de passe est bien
00:23:53
inférieure à 6, donc il va rentrer ici,
00:23:54
puis il va tester cette condition qui
00:23:56
sera fausse et il va donc passer dans le
00:23:59
else et aussi nous afficher ça. Pour
00:24:01
éviter d'avoir plein de if comme ça, il
00:24:03
y a un troisième et dernier mot-clé qui
00:24:07
qui est la contraction de else et if et
00:24:08
qui nous permet de tester plusieurs
00:24:11
conditions dans un bloc de if elif else.
00:24:13
Dans notre cas, je vais transformer ce
00:24:17
qui nous permettra de ne rentrer que
00:24:19
dans une de ces conditions. Donc
00:24:21
recommençons. Si je lance mon programme,
00:24:25
on voit qu'il nous a juste écrit "Notre
00:24:26
programme est trop court." parce qu'il
00:24:28
est rentré dans ce bloc. On voit qu'il a
00:24:29
été satisfait par cette première
00:24:31
condition et il nous a donc exécuté ce
00:24:34
Et comme else veut dire sinon, il n'a
00:24:36
pas eu besoin de faire quelque chose
00:24:37
d'autre vu qu'il a été déjà satisfait
00:24:39
par cette condition. Dans les exemples
00:24:40
qu'on a vu ensemble, on avait toujours
00:24:42
des blocs d'une seule ligne, on n'est
00:24:43
pas limité à une seule ligne. Si
00:24:54
Si je rentre le mot de passe, je mets 1
00:24:58
on a les deux phrases, tout le bloc va
00:25:00
être exécuté ici et pas seulement une
00:25:02
seule ligne. En plus, on peut mettre des
00:25:05
if dans des if. Donc disons ici
00:25:08
que un des deux cas, on est le cas où le
00:25:16
est égale à 0, on va lui afficher "Il
00:25:26
on va lui afficher "Le mot de passe est
00:25:27
trop court." Donc là, si on exécute
00:25:29
notre programme et qu'on ne rentre rien,
00:25:31
la longueur de notre de notre chaîne de
00:25:34
caractères, de notre mot de passe sera 0
00:25:35
et le programme nous dit "Il faut écrire
00:25:36
quelque chose." Maintenant, si on
00:25:38
relance notre programme et qu'on tape un
00:25:40
mot de passe d'une longueur strictement
00:25:42
inférieure à 6 mais qui n'est pas 0,
00:25:44
comme par exemple 1 2 3 4 qui sera de
00:25:48
il va rentrer ici, il va se dire "OK, la
00:25:49
longueur du mot de passe est inférieure
00:25:51
à 6." Puis dans ce bloc, il va voir que
00:25:52
la longueur du mot de passe n'est pas
00:25:54
égale à 0, donc cette condition n'est
00:25:56
pas satisfaite, alors il va rentrer dans
00:25:58
le else, le sinon, et afficher "Le mot
00:26:00
de passe est trop court." Et c'est ce
00:26:01
qu'il a fait ici. Comme la longueur
00:26:04
était de 4, il est rentré ici, il n'est
00:26:05
pas rentré là, mais il est bien rentré
00:26:08
ici. Il n'est pas rentré dans ceux-là
00:26:09
parce que la condition ici était déjà
00:26:12
On va maintenant pouvoir passer au
00:26:14
deuxième projet de ce tutoriel en Python
00:26:15
qui est un programme qui donne une
00:26:18
mention à l'utilisateur à partir d'une
00:26:20
note moyenne qu'il nous fournit. Prenons
00:26:21
par exemple la moyenne du bac. On va
00:26:23
demander à l'utilisateur de rentrer la
00:26:25
moyenne qu'il a eu au bac sur 20. On va
00:26:27
lui donner la mention assez bien si sa
00:26:29
moyenne est supérieure ou égale à 12 et
00:26:31
inférieure à 14, la mention bien si sa
00:26:33
moyenne est supérieure ou égale à 14 et
00:26:35
strictement inférieure à 16, la mention
00:26:36
très bien si sa moyenne est supérieure
00:26:38
ou égale à 16 et strictement inférieure
00:26:40
à 18 et les félicitations du jury si sa
00:26:42
note est supérieure à 18. Je vous laisse
00:26:44
mettre la vidéo en pause et penser à
00:26:45
comment vous pourriez réaliser ce
00:26:47
programme et on se retrouve juste après
00:26:52
Voilà, j'espère que vous avez fini, que
00:26:53
vous avez au moins essayé de réaliser ce
00:26:55
programme par vous-même. Donc on va
00:26:56
résoudre le problème ensemble. On va
00:26:58
commencer par déclarer une variable
00:27:02
et on va demander à notre utilisateur
00:27:09
On sait que la fonction input nous
00:27:11
renvoie des chaînes de caractères et
00:27:12
nous on va travailler avec des nombres
00:27:15
donc on peut déjà transformer cette
00:27:17
chaîne de caractères en float pour avoir
00:27:18
une moyenne qui est un nombre décimal.
00:27:21
conditions dans lesquelles on va rentrer
00:27:24
l'utilisateur. Donc si sa moyenne est
00:27:26
supérieure ou égale à 12 et inférieure à
00:27:28
14, on va afficher la mention assez
00:27:41
et 16, on va afficher la mention bien.
00:28:02
on va afficher "Les félicitations du
00:28:22
Avec une moyenne de 19, on a les
00:28:24
félicitations du jury et avec une
00:28:28
de 11,1, on a pas de mention. Voici une
00:28:30
version minimale du projet. On pourrait
00:28:31
aller plus loin en m'ajoutant de la
00:28:34
gestion d'erreur au cas où l'utilisateur
00:28:36
nous rentre une note supérieure à 20 ou
00:28:38
inférieure à 0. Imaginons qu'il entre 21
00:28:39
de moyenne, on va lui donner les
00:28:41
félicitations du jury alors que c'est
00:28:43
pas possible d'avoir 21 sur 20. Si
00:28:45
l'utilisateur n'entre pas de nombre mais
00:28:46
entre une chaîne de caractères par
00:28:47
exemple, on va avoir une erreur sur la
00:28:49
fonction float. Ça serait bien de gérer
00:28:51
float différemment et de rajouter une
00:28:52
autre condition pour la gestion
00:28:54
d'erreur. Mais sinon, c'est tout pour ce
00:28:55
projet. Et voilà, vous savez maintenant
00:28:56
comment utiliser la première structure
00:28:59
de contrôle, les conditions avec if,
00:29:00
elif et else. On va maintenant voir une
00:29:02
autre structure de contrôle, les
00:29:03
boucles, mais avant ça, on va voir
00:29:04
comment mettre plusieurs éléments dans
00:29:09
En Python, les listes sont des tableaux
00:29:11
ou ensembles qui peuvent contenir tout
00:29:12
type d'objets. On peut déclarer une
00:29:15
liste en utilisant les symboles crochets
00:29:17
ou bien avec la fonction list. Une fois
00:29:19
qu'on a une liste, on peut mettre un ou
00:29:22
plusieurs objets dedans. On sépare les
00:29:24
éléments d'une liste avec des virgules
00:29:25
et on peut afficher une liste avec la
00:29:29
fonction print. Donc faisons print de ma
00:29:31
liste et on voit que Python affiche
00:29:33
notre liste exactement comme on l'a
00:29:34
déclarée. On peut aussi obtenir un
00:29:36
élément spécifique de la liste en
00:29:38
utilisant son indice entre crochets.
00:29:40
Disons qu'on veut le premier élément de
00:29:41
notre liste. En informatique, on
00:29:43
commence toujours à compter à 0, donc on
00:29:45
peut accéder au premier élément de notre
00:29:47
liste en tapant le nom de notre variable
00:29:50
ma liste puis par exemple zéro entre
00:29:51
crochets. Et Python nous affiche bien le
00:29:53
premier élément de la liste. On peut
00:29:54
aussi changer un élément de la liste et
00:29:56
écraser sa valeur en lui assignant une
00:29:58
nouvelle valeur à l'indice qu'on veut.
00:30:01
Par exemple ma liste de zéro égale un.
00:30:02
Si on affiche la liste, on voit que
00:30:04
l'élément zéro a bien été modifié avec
00:30:06
notre nouvelle valeur un. En plus d'un
00:30:07
élément individuel, on peut aussi
00:30:09
accéder à un sous-ensemble de notre
00:30:11
liste en utilisant les crochets
00:30:13
dans lesquels on met l'indice de début
00:30:15
deux points et puis l'indice de fin. Par
00:30:16
exemple pour avoir les trois premiers
00:30:19
éléments d'une liste, on peut faire
00:30:22
crochet de zéro jusqu'à trois non
00:30:25
Et Python nous renvoie bien les trois
00:30:26
premiers éléments de la liste. Les
00:30:28
listes sont des objets en Python qui ont
00:30:30
une série d'attributs et de méthodes
00:30:31
qu'on peut utiliser. Reprenons notre
00:30:34
liste et ajoutons-lui un point à la fin
00:30:35
et on voit une liste avec plein
00:30:37
d'attributs et de méthodes. Pour ajouter
00:30:38
un élément à une liste, on a par exemple
00:30:40
la méthode append. On peut l'utiliser en
00:30:42
prenant notre liste et en tapant point
00:30:44
append et puis en lui passant l'élément
00:30:46
qu'on veut rajouter entre parenthèses.
00:30:48
On peut par exemple ajouter le nombre
00:30:53
On voit que la liste contient maintenant
00:30:55
cinq éléments et que 1337 s'est ajouté
00:30:57
en fin de la liste. On a aussi la
00:30:59
méthode remove qui permet de supprimer
00:31:02
On peut l'utiliser en faisant point
00:31:04
remove sur une liste avec l'élément
00:31:06
qu'on veut supprimer entre parenthèses.
00:31:08
Pour voir si un élément se trouve dans
00:31:09
une liste, on peut utiliser le mot clé
00:31:17
une liste qui contient les éléments A, B
00:31:19
et C, on verra true car la lettre B se
00:31:23
Voyons maintenant une nouvelle structure
00:31:25
de contrôle avec les boucles. Une boucle
00:31:27
permet de répéter un bloc de code
00:31:30
Le premier type de boucle qu'on va voir
00:31:32
est ce qu'on appelle une boucle while.
00:31:35
Elle est composée du mot while suivi
00:31:38
puis deux points et un bloc qu'on veut
00:31:40
répéter. C'est un peu comme un if sauf
00:31:41
qu'on va répéter ce qui est dans notre
00:31:43
boucle tant que la condition est vraie.
00:31:45
Prenons par exemple une variable I pour
00:31:47
indice à laquelle on va assigner la
00:31:49
valeur zéro. On peut avoir une boucle
00:31:53
while qui va boucler tant que I est plus
00:31:55
petit que cinq. Dans notre boucle, on va
00:31:58
afficher I avec print et puis surtout ne
00:32:01
pas oublier d'incrémenter ou ajouter un
00:32:03
à chaque passage de la boucle. Pour
00:32:05
incrémenter de un à notre variable I, on
00:32:12
qu'on peut aussi écrire plus simplement
00:32:16
avec I plus égale un. Attention, si on
00:32:18
oublie d'ajouter un à chaque passage
00:32:19
dans la boucle, on va se retrouver avec
00:32:21
ce qu'on appelle une boucle infinie.
00:32:22
Comme son nom l'indique, c'est une
00:32:23
boucle qui ne se finit jamais et on va
00:32:25
devoir fermer notre programme de force
00:32:27
pour pouvoir en sortir. Par exemple, je
00:32:28
vais retirer l'incrément et vous allez
00:32:30
voir ce qui se passe. On a la valeur
00:32:32
initiale de I qui est zéro qui s'affiche
00:32:34
à l'infini. Pour fermer un programme qui
00:32:35
est parti en boucle infinie, pas de
00:32:37
panique, il suffit simplement de lui
00:32:39
envoyer un signal d'interruption. On
00:32:40
peut lui envoyer ce signal avec le
00:32:44
raccourci contrôle suivi de la lettre C.
00:32:45
Revenons maintenant à notre code et
00:32:47
ajoutons la ligne I plus égale un. Quand
00:32:49
on exécute notre code, on voit bien
00:32:51
qu'il affiche zéro, un, deux, trois,
00:32:53
quatre puis qu'il s'arrête normalement.
00:32:59
Voyons maintenant les boucles for.
00:33:01
Les boucles for permettent de répéter un
00:33:04
bloc de code ou itérer pour chaque
00:33:06
élément d'un objet itérable comme par
00:33:08
exemple une string ou une liste.
00:33:10
Concrètement, on peut avoir une boucle
00:33:15
for lettre in et puis une liste composée
00:33:18
des lettres A, B et C. Quand on affiche
00:33:21
notre lettre avec print de lettre, on
00:33:23
voit que Python nous a affiché l'élément
00:33:24
pour chaque passage dans la boucle. Mais
00:33:26
que faire si on veut passer un certain
00:33:27
nombre de fois dans une ? On ne doit
00:33:30
faire for I in cinq car cinq n'est pas
00:33:31
un objet itérable, c'est juste un
00:33:33
nombre, pas un ensemble d'éléments. Pour
00:33:35
ça, on doit utiliser une fonction qui
00:33:37
est la fonction range. J'ai une vidéo
00:33:38
complète sur la fonction range que je
00:33:40
vous invite à consulter en suivant le
00:33:41
lien en description. Mais dans son
00:33:43
utilisation la plus simple, on peut
00:33:46
utiliser une boucle for range en faisant
00:33:49
for I in range de cinq et en faisant
00:33:51
print de I. Python nous affiche bien
00:33:53
zéro, un, deux, trois, quatre sans qu'on
00:33:54
doive incrémenter quoi que ce soit
00:33:56
manuellement comme dans la boucle while
00:33:57
qu'on a vu juste avant. Et voilà, vous
00:33:58
savez maintenant comment utiliser les
00:34:01
On peut donc voir notre troisième
00:34:03
projet. On va faire une version super
00:34:05
simple uniquement avec les concepts
00:34:06
qu'on a vu dans cette vidéo et les deux
00:34:08
vidéos précédentes. L'énoncé du jeu du
00:34:09
pendu est le suivant. On a un mot
00:34:11
mystère que l'utilisateur doit deviner.
00:34:13
Le joueur possède sept vies. À chaque
00:34:15
tour, on lui demande d'entrer une
00:34:16
lettre. Si la lettre se trouve dans le
00:34:18
mot, alors on affiche le mot avec cette
00:34:20
lettre en clair. Si cette lettre ne se
00:34:21
trouve pas dans le mot, le joueur perd
00:34:23
une vie et la partie s'arrête soit quand
00:34:25
le joueur n'a plus de vie, soit quand il
00:34:27
d'habitude, c'est le moment de mettre la
00:34:29
vidéo en pause et d'essayer de faire ce
00:34:32
et on se retrouve juste après avec ma
00:34:36
OK, j'espère que vous avez réussi à
00:34:37
faire votre propre version du jeu du
00:34:39
pendu. Sinon, je vous propose la mienne.
00:34:40
Je vais commencer par déclarer une
00:34:43
variable qui contient un nombre entier,
00:34:44
le nombre de vies de l'utilisateur.
00:34:46
Ensuite, on a le mot mystère. On va
00:34:48
choisir le mot Python et puis on a une
00:34:50
chaîne de caractères pour le mot que
00:34:52
l'utilisateur va voir à l'écran. Au
00:34:54
début, il sera composé uniquement de
00:34:56
barres en bas de la même taille que le
00:34:59
Pour ça, on peut faire le symbole barre
00:35:02
en bas multiplié par la longueur du mot
00:35:04
mystère. On va ensuite avoir une boucle.
00:35:06
Cette boucle sera une boucle while qui
00:35:08
va continuer tant que le nombre de vies
00:35:11
de l'utilisateur sera supérieur à zéro
00:35:13
et que le mot mystère ne sera pas égal à
00:35:15
notre mot public. À chaque passage dans
00:35:16
la boucle, on demande une lettre à
00:35:19
l'utilisateur avec la fonction input à
00:35:22
caractères "Entrer une lettre". Ensuite,
00:35:25
l'utilisateur vient d'entrer se trouve
00:35:32
in mot mystère. Si c'est le cas, on va
00:35:34
boucler sur le mot mystère en récupérant
00:35:39
ses indices avec for I in range de len
00:35:41
du mot mystère. Et si la lettre du mot
00:35:43
mystère de I est égale à la lettre que
00:35:45
l'utilisateur a entrée, alors on la
00:35:51
en faisant mot public égale mot public
00:35:58
plus mot public de I plus un deux
00:36:00
points. Ça nous permet de conserver la
00:36:04
d'ajouter la lettre et puis d'avoir la
00:36:06
suite du mot public. Si à l'inverse la
00:36:08
lettre n'était pas dans le mot mystère,
00:36:10
alors l'utilisateur perd une vie, on
00:36:13
fait nombre de vies moins égale un. Et
00:36:14
en fonction de ce qui s'est passé, on va
00:36:16
avoir un if, elif, else. Donc on va
00:36:19
faire if mot public est égal à mot
00:36:27
et puis soit mot mystère, soit mot
00:36:29
public car à ce moment-là, ils sont
00:36:34
elif le nombre de vies de l'utilisateur
00:36:37
alors on lui affiche un message pour
00:36:40
dire qu'il a perdu. Sinon, ça veut dire
00:36:43
que le jeu continue. Donc sinon else, on
00:36:45
affiche le nombre de vies que euh qu'il
00:36:50
et l'état du mot avec les lettres en
00:36:52
clair qu'il a déjà trouvé. Donc on peut
00:36:54
maintenant essayer notre jeu du pendu.
00:36:55
On va se tromper sept fois pour voir si
00:36:59
On va réussir 100 % du temps pour voir
00:37:01
si on peut gagner une partie. Puis on va
00:37:04
jouer normalement, parfois se tromper,
00:37:05
parfois trouver des lettres pour
00:37:09
Si vous voulez améliorer votre jeu du
00:37:11
pendu, je vous donne quelques pistes
00:37:12
d'amélioration. Vous pouvez utiliser la
00:37:15
fonction native enumerate pour notre
00:37:16
boucle for. Vous pouvez aussi vous
00:37:18
renseigner sur l'instruction break qui
00:37:20
permet de sortir d'une boucle. On peut
00:37:22
donc remplacer la condition de sortie de
00:37:24
notre while par true et boucler en
00:37:27
permanence et puis avoir des breaks dans
00:37:29
nos ifs en fin de bloc pour éviter
00:37:31
d'avoir les mêmes conditions dans while
00:37:33
et dans nos ifs. On peut aussi vérifier
00:37:36
les lettres que l'utilisateur entre en
00:37:37
vérifiant que ce soit bien une lettre
00:37:40
déjà, qu'elles soient en minuscule
00:37:41
et puis on pourrait aussi avoir une
00:37:43
liste qui contient les lettres que
00:37:46
contre laquelle on pourrait tester la
00:37:48
nouvelle lettre, voir si la nouvelle
00:37:51
lettre se trouve dans la liste ou pas et
00:37:52
éventuellement boucler tant que la
00:37:54
lettre qu'il rentre ne répond pas à
00:37:55
toutes ces conditions. Puis finalement,
00:37:57
vous pouvez aller bien plus loin en
00:37:59
améliorant l'aspect visuel du programme
00:38:01
en affichant par exemple un bonhomme en
00:38:03
caractère ASCII ou bien carrément une
00:38:05
interface graphique de votre choix. Mais
00:38:06
quoi qu'il en soit, bravo, vous avez
00:38:08
codé votre premier jeu. Et maintenant,
00:38:09
on va voir un concept clé de la
00:38:13
Quand on code des programmes plus
00:38:15
complexes, on se retrouve vite avec des
00:38:16
centaines ou des milliers de lignes de
00:38:18
code. On va avoir besoin de segmenter ce
00:38:19
code en sous-programmes pour pouvoir s'y
00:38:20
retrouver. On va donc utiliser les
00:38:22
fonctions pour séparer la logique de
00:38:24
notre code, mieux les maintenir et
00:38:25
pouvoir les réutiliser à plusieurs
00:38:26
endroits. On a déjà utilisé des
00:38:28
fonctions natives fournies par Python
00:38:29
comme print et input par exemple.
00:38:31
Maintenant, on va coder des fonctions
00:38:32
par nous-mêmes. On peut déclarer une
00:38:35
fonction en utilisant le mot def pour
00:38:37
define. On va ensuite donner un nom à
00:38:38
notre fonction comme on le fait avec les
00:38:40
variables. Donc créons une fonction qui
00:38:42
s'appelle ma barre en bas fonction.
00:38:44
Après le nom, on va ajouter des
00:38:46
parenthèses pour pouvoir passer ce qu'on
00:38:47
appelle des paramètres. On verra ça plus
00:38:49
en détail juste après mais pour vous
00:38:50
expliquer rapidement, c'est des
00:38:52
variables qu'on va passer à la fonction
00:38:54
qu'on va pouvoir utiliser à l'intérieur
00:38:55
de notre fonction comme quand on passait
00:38:56
une chaîne de caractères à la fonction
00:38:58
print. On a ensuite les symboles deux
00:39:00
points, un retour à la ligne et on va
00:39:02
indenter notre code comme on le faisait
00:39:05
avec if, while et for qu'on a déjà vu
00:39:06
ensemble. Tout le code qu'on va taper là
00:39:08
et qui sera indenté appartiendra donc à
00:39:09
la fonction. Maintenant, on va écrire du
00:39:11
code dans le corps de notre fonction. On
00:39:14
peut déclarer une variable ma variable
00:39:16
égale un et puis faire un print par
00:39:20
exemple print de ma variable est et puis
00:39:22
on ajoute ma variable. Pour sortir de
00:39:23
notre fonction et continuer d'écrire
00:39:24
notre programme, on fait deux retours à
00:39:26
la ligne et on sort de l'indentation. On
00:39:27
peut maintenant appeler notre fonction
00:39:29
en tapant son nom suivi de parenthèses.
00:39:32
Donc tapons ma fonction parenthèse
00:39:33
ouvrante parenthèse fermante. Lançons
00:39:35
notre programme et Python nous affiche
00:39:39
Maintenant, ça serait bien qu'on puisse
00:39:40
changer la valeur de de variable ma
00:39:42
variable en passant une autre valeur
00:39:44
quand on appelle notre fonction. C'est
00:39:45
ce qu'on appelle les paramètres. Pour
00:39:47
ça, on doit modifier notre fonction en
00:39:50
parenthèses. On peut maintenant retirer
00:39:51
la ligne où on déclarait la variable. On
00:39:53
relance notre programme et là, on voit
00:39:54
qu'on a une erreur. C'est parce que
00:39:56
Python s'attend à recevoir un paramètre
00:39:57
entre parenthèses quand on appelle notre
00:39:59
fonction, alors qu'on ne lui en a pas
00:40:01
donné. Pour régler ça, on va lui passer
00:40:03
une valeur, disons 42, qu'on met entre
00:40:05
parenthèses quand on l'appelle. Si on
00:40:06
relance notre programme, on voit
00:40:08
maintenant qu'on a la phrase "ma
00:40:12
correctement. Ici, on passe un seul
00:40:13
paramètre à la fonction. Mais une
00:40:15
fonction peut recevoir zéro paramètre
00:40:17
comme on avait vu juste avant, ou bien
00:40:18
autant de paramètres qu'on veut. Elle
00:40:19
peut aussi avoir des paramètres
00:40:21
optionnels et pour ça, on assigne une
00:40:23
valeur par défaut au paramètre qu'on
00:40:26
déclaration de fonction. Disons qu'on
00:40:28
voulait que ma variable soit égale à 5
00:40:29
par défaut si on ne lui passe pas de
00:40:31
valeur. On peut l'appeler en lui passant
00:40:34
un paramètre, gardons 42, mais on peut
00:40:35
aussi l'appeler sans paramètre et elle
00:40:38
prendra la valeur 5 par défaut. Si on
00:40:39
lance notre programme, on voit qu'on a
00:40:40
plus d'erreur car Python comprend que
00:40:42
cette fonction peut recevoir soit zéro,
00:40:44
soit un paramètre. Et on a bien
00:40:47
d'afficher "ma variable est 42" dans le
00:40:49
premier cas, et on a "ma variable est 5"
00:40:50
quand on a rien passé en paramètre dans
00:40:54
Une fonction peut aussi recevoir un
00:40:55
nombre indéfini de paramètres avec le
00:40:58
symbole étoile et le mot args, ou même
00:41:00
deux symboles étoile et le mot kwargs
00:41:02
pour keyword arguments. Si on ne sait
00:41:03
pas combien de paramètres on va avoir,
00:41:05
on peut ajouter le symbole étoile avant
00:41:07
le nom de la variable qu'on a entre
00:41:08
parenthèses dans la définition de
00:41:09
fonction. Maintenant, si on appelle
00:41:10
notre fonction en lui passant les
00:41:14
valeurs 4, 3, 2 et 1, on voit qu'on a
00:41:15
pas d'erreur. Notre fonction affiche
00:41:17
bien les quatre paramètres. Vous pouvez
00:41:19
voir args comme une liste. D'ailleurs,
00:41:21
si on print le type de args avec la
00:41:24
fonction print de type de args, Python
00:41:26
nous dit que args est de type tuple. Les
00:41:28
tuples sont des types d'ensembles qui
00:41:30
sont un peu différents des listes et on
00:41:32
verra ça plus tard dans ce tutoriel. On
00:41:33
peut aussi avoir des arguments nommés
00:41:36
avec deux étoiles suivies du mot kwargs.
00:41:38
Pour ça, on va ajouter un nom à chaque
00:41:40
paramètre qu'on passe à notre fonction.
00:41:43
Ajoutons donc 4 en toutes lettres et
00:41:46
puis égale la valeur 4, 3 en toutes
00:41:50
lettres égale 3, 2 égale 2 et 1 égale 1.
00:41:51
On voit qu'on a un nouveau type d'objet
00:41:53
de type dict pour dictionnaire. C'est
00:41:54
aussi un nouveau type d'objet qui nous
00:41:56
permet d'avoir des paires clé-valeur et
00:41:58
on voit ça ensemble juste après dans
00:42:00
Les fonctions qu'on a codé jusqu'à
00:42:02
maintenant ne renvoient pas de valeur.
00:42:03
Si vous vous souvenez, avec la fonction
00:42:05
input, on pouvait récupérer la valeur en
00:42:07
l'assignant à une variable. On avait par
00:42:10
exemple âge égale input et puis la
00:42:11
question qu'on lui posait entre
00:42:12
parenthèses, et on pouvait assigner la
00:42:14
valeur qu'on récupérait à âge. Pour
00:42:15
pouvoir récupérer une ou plusieurs
00:42:17
valeurs dans notre fonction, on utilise
00:42:19
le mot return. On va donc créer une
00:42:21
nouvelle fonction qui fait la somme de
00:42:22
deux nombres qu'on lui passe. On va donc
00:42:24
faire def suivi du nom de notre
00:42:28
parenthèses dans lesquelles on met deux
00:42:31
paramètres A et B. Dans le corps de
00:42:32
notre fonction, on va taper le mot
00:42:35
return suivi de A plus B. On peut
00:42:37
maintenant appeler notre fonction et
00:42:39
récupérer la somme en l'assignant à une
00:42:43
variable en faisant S égale somme
00:42:45
et puis en lui passant 4 et 5 entre
00:42:46
parenthèses. On peut donc faire print de
00:42:48
S pour afficher le contenu de la
00:42:50
variable S. Si on lance notre programme,
00:42:52
on voit bien qu'on a la valeur 9 qui
00:42:53
s'affiche. On peut aussi appeler notre
00:42:55
fonction directement dans le print avec
00:42:57
print entre parenthèses somme entre
00:43:00
parenthèses 5, 4 puis on ferme les
00:43:01
parenthèses. Relançons le programme et
00:43:03
on voit que rien n'a changé, on a
00:43:04
toujours la valeur 9 qui s'affiche. En
00:43:06
Python, on peut retourner plusieurs
00:43:07
valeurs, donc on peut modifier notre
00:43:08
fonction somme qu'on avait fait juste
00:43:10
avant. Et en plus de l'addition, on va
00:43:12
lui renvoyer les deux paramètres. Donc
00:43:16
on a return A plus B, virgule A, virgule
00:43:17
B. Maintenant, si on relance notre
00:43:18
programme, on voit que print nous
00:43:21
affiche bien les trois valeurs.
00:43:22
Une notion importante quand on travaille
00:43:24
avec des fonctions, elle a notion de
00:43:26
scope. On peut traduire scope par portée
00:43:28
et c'est des endroits dans notre code où
00:43:29
certaines variables seront connues
00:43:31
seulement localement. Voyons ça
00:43:34
fonctions, fonction une et fonction
00:43:35
deux. Dans le corps de ces fonctions, on
00:43:37
va avoir des blocs similaires. Dans les
00:43:38
deux fonctions, on va avoir une
00:43:40
assignation de variable A et puis on va
00:43:42
afficher le contenu de la variable A.
00:43:44
Dans la fonction une, on assigne 1 à la
00:43:47
variable A et puis on fait print
00:43:49
fonction une A égale suivi de la
00:43:51
variable A. Dans la fonction deux, on
00:43:54
fait pareil sauf qu'on a A égale 2 et on
00:43:57
fait print fonction deux A égale A.
00:43:58
Maintenant, on va essayer d'afficher le
00:44:00
contenu de la variable A dans le
00:44:01
programme principal. Si on lance notre
00:44:03
programme, on voit que Python nous dit
00:44:04
que la variable A n'est pas définie.
00:44:06
C'est parce que lorsqu'on déclare ces
00:44:08
variables dans notre fonction, seules
00:44:09
les fonctions ont accès à cette
00:44:10
variable. La portée de la variable est
00:44:12
limitée localement à la fonction dans
00:44:13
laquelle elle est définie. On peut aussi
00:44:14
déclarer des variables de manière
00:44:16
globale, ce qu'on peut faire en
00:44:18
déclarant une autre variable A tout en
00:44:20
haut de notre programme dans laquelle on
00:44:21
met la valeur zéro. Si maintenant on
00:44:23
relance notre programme, on voit que
00:44:26
chaque fonction a sa valeur locale de A,
00:44:27
mais il y a aussi une valeur globale de
00:44:29
A qui est zéro et là, notre programme
00:44:31
principal la connaît aussi. Vu que A est
00:44:33
maintenant globale, on peut supprimer
00:44:35
l'assignation dans la première fonction
00:44:37
par exemple et là, même s'il y a pas
00:44:40
d'assignation de A dans la fonction,
00:44:42
notre fonction va se reposer sur la
00:44:44
variable globale A et l'utiliser par
00:44:45
défaut. Si on relance notre programme,
00:44:47
on voit que dans la fonction un, A est
00:44:49
maintenant égale à zéro. Donc revoyons
00:44:50
tous les éléments qui composent une
00:44:52
fonction avant de passer à notre
00:44:53
quatrième projet qu'on va faire
00:44:56
On a le mot def qui permet de définir
00:44:59
une fonction. On a ensuite le nom de la
00:45:00
fonction qui respecte les mêmes règles
00:45:02
que pour les variables, à savoir le
00:45:04
snake case, des mots en minuscules
00:45:06
séparés par de underscore, barre en bas.
00:45:07
Puis on a des parenthèses dans laquelle
00:45:09
on peut passer des paramètres autant
00:45:10
qu'on veut, soit zéro, soit une infinité
00:45:12
de paramètres. On a les symboles deux
00:45:14
points, un retour à la ligne avec une
00:45:16
indentation d'espace ou de tabulation.
00:45:17
Puis le corps de notre fonction qui
00:45:19
possède son propre scope et qui est la
00:45:22
Voilà, on peut maintenant passer au
00:45:24
quatrième projet de cette formation. On
00:45:26
va coder une version simplifiée de la
00:45:27
fonction range. Recoder les fonctions
00:45:28
standard d'un langage est une bonne
00:45:30
pratique car ça nous permet de mieux le
00:45:31
comprendre. Dans la vidéo précédente, on
00:45:33
a utilisé la fonction range pour pouvoir
00:45:34
boucler un certain nombre de fois avec
00:45:36
la boucle for. On va donc coder une
00:45:39
fonction simple range qui ne prend qu'un
00:45:41
paramètre N et qui renvoie une liste qui
00:45:44
contient N éléments de zéro à N moins 1.
00:45:46
En réalité, la fonction range est plus
00:45:47
complexe, elle prend plus de paramètres
00:45:49
que ça et elle ne renvoie pas exactement
00:45:50
une liste. C'est pour ça qu'on fait la
00:45:52
version simplifiée de range, la fonction
00:45:54
simple range. Donc je vous laisse
00:45:55
essayer de faire votre propre fonction
00:45:57
range. Je vous invite encore une fois à
00:45:58
mettre la vidéo en pause et on se
00:46:00
retrouve dans quelques secondes pour la
00:46:03
Pour coder une fonction simple range, on
00:46:04
utilise le mot def pour définir notre
00:46:07
fonction, puis le nom simple barre en
00:46:09
bas range, des parenthèses dans laquelle
00:46:11
on va fournir le seul paramètre qu'on va
00:46:13
avoir, N. Dans le corps de notre
00:46:15
fonction, on va déclarer deux variables.
00:46:17
La première, ça serait une liste vide
00:46:19
avec L égale et puis des crochets. Puis
00:46:21
on va aussi avoir une variable I qui va
00:46:23
nous servir d'indice dans laquelle on va
00:46:25
mettre la valeur zéro. On aura une
00:46:27
boucle while qui va boucler tant que I
00:46:29
est plus petit que N. Et dans le corps
00:46:31
de notre boucle while, on va ajouter
00:46:33
l'élément I à notre liste à chaque
00:46:35
passage dans la boucle. On doit ensuite
00:46:36
incrémenter I de 1 pour ne pas partir en
00:46:38
boucle infinie. Et à la fin de notre
00:46:40
fonction, on renvoie notre liste L qui
00:46:43
devrait contenir N éléments de zéro à N
00:46:45
moins 1. Testons notre fonction en
00:46:47
l'appelant avec print de simple range à
00:46:48
laquelle on passe la valeur 5 en
00:46:50
paramètre. Quand on lance notre
00:46:51
programme, on voit bien qu'on a une
00:46:54
liste qui contient 5 nombres de zéro à
00:46:56
4. Comme je vous dis, la vraie fonction
00:46:58
native range est plus compliquée que ça.
00:46:59
Vous pouvez aller voir sa définition de
00:47:01
fonction et éventuellement lui rajouter
00:47:02
plus de fonctionnalités pour qu'elle
00:47:05
On a vu les listes qui permettent
00:47:07
d'avoir plusieurs objets dans un seul
00:47:08
ensemble. Maintenant, on va voir
00:47:10
d'autres types de collections ensemble,
00:47:12
dictionnaires. Donc commençons avec les
00:47:14
tuples. On peut déclarer un tuple en
00:47:16
utilisant des parenthèses. Les tuples
00:47:17
sont immutables, ça veut dire que
00:47:18
contrairement aux listes, on ne peut pas
00:47:20
les modifier. Si on fait nombre à la
00:47:23
position 5 égale 6, on aura une erreur.
00:47:24
On peut utiliser des fonctions comme len
00:47:27
sur un tuple et on peut aussi voir si un
00:47:29
élément se trouve dans un tuple avec le
00:47:31
mot-clé in. Tuple nous donne accès à
00:47:33
deux méthodes, index et count. Index
00:47:35
permet de connaître l'indice d'un
00:47:37
parenthèses s'il se trouve dans le
00:47:39
tuple. Et count nous permet de compter
00:47:40
combien de fois un élément se trouve
00:47:42
dans le tuple. Les différences entre une
00:47:44
liste et un tuple sont donc que les
00:47:45
tuples sont plus rapides que les listes
00:47:47
car ils sont immutables contrairement
00:47:50
facilement. Mais on va aussi avoir
00:47:51
tendance à mettre des éléments de même
00:47:53
type dans une liste, alors qu'on va
00:47:54
souvent utiliser les tuples comme des
00:47:56
structures avec des types d'objets
00:47:57
différents. Par exemple, si on veut
00:47:59
déclarer un ensemble de nombres, on aura
00:48:00
le réflexe de faire une liste. Mais si
00:48:02
on veut un ensemble qui n'est pas un
00:48:03
dictionnaire et dans lequel on a
00:48:05
plusieurs types de variables différentes
00:48:07
comme les détails d'un étudiant par
00:48:09
exemple, on aura tendance à utiliser un
00:48:12
Voyons maintenant les sets. Les sets
00:48:13
sont des ensembles qu'on déclare avec
00:48:15
des accolades. Ils n'ont pas d'ordre
00:48:17
précis et on ne peut pas les modifier
00:48:19
car ils sont immutables. On a donc pas
00:48:20
de doublons dans un set et on ne peut
00:48:21
pas les modifier avec une simple
00:48:23
assignation comme on le ferait avec une
00:48:24
liste par exemple. Prenons un set de
00:48:26
nombres avec plusieurs nombres dans le
00:48:28
désordre et avec des doublons. En
00:48:29
l'affichant avec print, on voit que
00:48:31
Python a changé l'ordre de notre set en
00:48:34
0 1 2 3 4 et qu'il a retiré les doublons
00:48:35
2 et 3. Avec les sets, comme avec les
00:48:37
listes, on peut utiliser la fonction len
00:48:39
qui fonctionne également, ainsi que le
00:48:40
mot in pour vérifier si un élément se
00:48:41
trouve dans notre set. La différence
00:48:43
avec les listes, c'est que comme les
00:48:44
sets n'ont pas d'ordre, on ne peut pas
00:48:46
accéder à un élément précis en lui
00:48:48
passant un indice. Si on fait nombre de
00:48:50
2, Python va nous renvoyer une erreur.
00:48:51
On ne peut pas non plus changer les
00:48:52
valeurs d'un set comme on le fait avec
00:48:54
les listes en assignant une valeur à un
00:48:55
indice. Mais heureusement, on a les
00:48:57
méthodes add et remove pour faire plus
00:48:59
ou moins la même chose. Nombre add de 5
00:49:01
ajoutera bien l'entier 5 à notre set de
00:49:03
nombres et on peut aussi retirer un
00:49:05
élément précis avec nombre.remove et
00:49:07
puis lui passer un élément en paramètre.
00:49:09
La méthode pop sur un set permet aussi
00:49:11
de retirer le premier élément du set.
00:49:13
des méthodes de comparer deux sets entre
00:49:15
eux, union, intersection et différence.
00:49:17
L'union est ce qui sera contenu dans les
00:49:19
deux sets. Donc si on fait set 1 union
00:49:22
set 2, on a tous les éléments qui se
00:49:24
trouvent dans set 1 ou dans set 2.
00:49:25
L'intersection est ce qui se trouve en
00:49:28
commun dans les deux sets. Set 1
00:49:30
intersection set 2 nous donnera que les
00:49:32
éléments qui sont et dans set 1 et dans
00:49:34
set 2. Et différence est ce qu'on trouve
00:49:36
dans le set 1 mais pas dans le set 2.
00:49:38
Set 1 différence set 2 nous donnera que
00:49:41
les éléments qui sont exclusifs à 71.
00:49:42
Pour voir les autres méthodes de 7 et en
00:49:44
Python en général, on peut utiliser la
00:49:46
fonction dire à laquelle on passe notre
00:49:47
objet pour voir toutes les méthodes et
00:49:49
attributs d'un objet. La fonction help
00:49:51
permet aussi d'avoir l'aide de base de
00:49:55
Finalement, voyons les dictionnaires.
00:49:56
Les dictionnaires sont des types
00:49:58
d'ensemble clé valeur. Ils ont un ordre
00:49:59
précis et on peut les modifier avec une
00:50:01
simple assignation mais ils ne peuvent
00:50:02
pas avoir de clé en doublon. On peut
00:50:03
déclarer un dictionnaire avec des
00:50:05
accolades comme un 7 sauf qu'on va lui
00:50:07
passer un ensemble clé deux points
00:50:09
valeur. Donc déclarons un dictionnaire
00:50:11
de nombre. Pour accéder à une valeur, on
00:50:12
utilise la clé comme on le ferait avec
00:50:14
l'indice numérique dans une liste sauf
00:50:16
que là on l'a nommé avec une clé. Donc
00:50:18
si on fait nombre crochet et puis qu'on
00:50:20
lui passe la clé un entre guillemets, on
00:50:22
aura bien l'entier un. Pour voir toutes
00:50:24
dictionnaire, on peut utiliser la
00:50:25
fonction dire. Donc faisons dire de
00:50:26
nombre et on voit par exemple qu'on a la
00:50:29
fonction get. On utilise la fonction get
00:50:30
pour obtenir un élément dans un
00:50:31
dictionnaire. C'est comme utiliser la
00:50:33
clé entre crochets sauf que si on donne
00:50:35
une mauvaise clé entre crochets, Python
00:50:37
va nous renvoyer une erreur et crasher
00:50:38
violemment avec key error, erreur de
00:50:40
clé. Alors qu'avec get, Python va
00:50:41
essayer de récupérer la valeur pour la
00:50:43
clé donnée et il renverra none s'il ne
00:50:45
trouve pas la valeur pour la clé. On
00:50:46
peut aussi lui passer une valeur en
00:50:48
deuxième position en paramètre. Ça
00:50:49
deviendra la valeur qu'il renverra par
00:50:50
défaut s'il ne trouve pas la clé dans le
00:50:51
dictionnaire. C'est donc une bonne
00:50:53
pratique d'utiliser get plutôt que faire
00:50:55
des try except par exemple. On peut
00:50:57
aussi modifier ou ajouter une nouvelle
00:50:59
paire de clés avec la méthode update ce
00:51:01
qui revient à utiliser l'assignation.
00:51:04
Par exemple, nombre 5 égale 5 est
00:51:07
équivalent à nombre update 6 égale 6. On
00:51:08
peut aussi utiliser la méthode pop pour
00:51:10
retirer un élément d'un dictionnaire en
00:51:12
lui passant une clé. Par exemple, nombre
00:51:14
pop de 3 retirera notre paire clé valeur
00:51:16
qui a la clé 3. On peut aussi récupérer
00:51:18
toutes les clés d'un dictionnaire avec
00:51:19
la méthode keys. Donc si on fait nombre
00:51:21
point keys, on récupère toutes les clés.
00:51:23
Pareil pour les valeurs avec la méthode
00:51:25
values. Si on fait nombre point values,
00:51:26
on a toutes les valeurs de notre
00:51:28
dictionnaire. Et items nous renvoie une
00:51:30
sorte de liste qui contient des tuples
00:51:32
qui eux-mêmes contiennent les clés et
00:51:33
les valeurs pour chaque élément de notre
00:51:38
représentation d'un objet dans le monde
00:51:40
réel. D'ailleurs en programmation, on
00:51:41
utilise souvent le mot objet pour parler
00:51:43
d'une classe. Les classes en Python
00:51:45
permettent de regrouper des données et
00:51:47
des fonctions dans une structure facile
00:51:49
à réutiliser. C'est comme un moule, un
00:51:50
modèle ou un plan qui va nous permettre
00:51:52
de créer des versions d'un objet. Et les
00:51:54
objets qu'on crée avec des classes sont
00:51:56
appelés des instances. Donc le concept
00:52:00
programmation orientée objet ou POO et
00:52:01
faire de la programmation orientée
00:52:03
objet, ça veut dire utiliser des classes
00:52:04
dans notre code. Et on s'est déjà servi
00:52:06
de la POO et des méthodes sur des objets
00:52:08
quand on a utilisé point append ou point
00:52:10
remove sur des collections par exemple.
00:52:11
Mais maintenant on va faire notre propre
00:52:13
classe. Disons qu'on va lui faire un
00:52:16
Cybertrucks de la marque Tesla. On va
00:52:18
donc avoir une classe comme ça. On
00:52:19
commence avec le mot classe qui permet
00:52:21
de créer une classe. C'est comme le mot
00:52:22
def qui permet de créer des fonctions
00:52:24
mais pour les classes. Cybertruck est le
00:52:26
nom de notre classe. La convention de
00:52:28
nommage veut qu'on utilise le Pascal
00:52:30
case donc des mots qui commencent par
00:52:31
des majuscules. Par exemple, on peut
00:52:34
écrire mon Cybertruck ou ma voiture.
00:52:35
Ensuite, on a trois attributs de classe
00:52:37
qui définissent les instances qu'on va
00:52:39
créer. On a l'attribut marque, on va
00:52:41
mettre Tesla. Dans modèle, on va mettre
00:52:43
Cybertruck et dans l'année, on va mettre
00:52:44
2023. Et voilà, maintenant on peut créer
00:52:47
des Cybertrucks. Donc faisons Cybertruck
00:52:49
égale Cybertruck avec un C majuscule et
00:52:51
des parenthèses et on peut accéder aux
00:52:52
attributs de la classe avec le nom de la
00:52:55
variable et puis point marque, modèle ou
00:52:56
année. Donc pour afficher la marque de
00:52:58
notre Cybertruck, on fait print
00:53:00
Cybertruck.marque. Mais maintenant ça
00:53:01
serait bien que notre Cybertruck soit
00:53:03
capable de faire quelque chose. Donc on
00:53:04
va lui ajouter la capacité de klaxonner
00:53:06
avec une fonction ou une méthode de
00:53:08
classe qu'on va appeler klaxonner. Dans
00:53:09
notre classe, on crée une fonction
00:53:12
klaxonner qui fait print "Tut tut".
00:53:13
Maintenant, pour que la méthode soit
00:53:14
valide, on doit lui passer une variable
00:53:16
en paramètre. Cette variable est une
00:53:18
référence vers l'instance en cours et
00:53:20
par convention, on l'appelle self. On
00:53:21
reparle du mot self juste après. Donc
00:53:24
Cybertruck.klaxonner et on a bien "Tut
00:53:26
tut" qui s'affiche. On peut aussi
00:53:27
ajouter ou modifier des attributs et des
00:53:29
méthodes à nos objets après leur
00:53:30
instanciation en lui assignant des
00:53:32
choses. Reprenons notre Cybertruck. Si
00:53:34
c'est un Cybertruck qui date en fait de
00:53:36
2024 plutôt que 2023, on peut faire
00:53:39
Cybertruck.année égale 2024 et à partir
00:53:43
Cybertruck.année, on aura 2024 et plus
00:53:46
2023. On peut aussi utiliser la fonction
00:53:47
dire sur notre Cybertruck et sur tous
00:53:49
les objets en Python d'ailleurs pour
00:53:50
avoir tous les attributs de classe. Donc
00:53:53
print dire de Cybertruck affichera tous
00:53:54
les attributs auxquels on a accès avec
00:53:57
Mais donc c'est bien de pouvoir créer
00:53:59
des Cybertrucks mais ça serait mieux de
00:54:00
pouvoir créer différents types de
00:54:02
voitures de manière modulaire en leur
00:54:03
passant les paramètres qu'on veut. Et
00:54:05
pour ça, on utilise ce qu'on appelle un
00:54:06
constructeur. Donc changeons le nom de
00:54:08
notre classe de Cybertruck en voiture
00:54:10
puis on va déclarer le constructeur avec
00:54:12
une méthode spéciale init. Init permet
00:54:14
de déclarer un constructeur. C'est une
00:54:15
méthode spéciale qui est appelée
00:54:16
lorsqu'on crée une nouvelle instance de
00:54:18
la classe. Elle initialise l'instance de
00:54:19
l'objet et les attributs de la classe
00:54:20
qu'on lui passe en paramètre. Et donc
00:54:22
pour créer d'autres types de voitures en
00:54:23
passant les attributs marque, modèle et
00:54:25
année comme on veut, on va utiliser des
00:54:27
paramètres. On commence par self comme
00:54:28
pour notre méthode klaxonner et puis on
00:54:30
va lui passer marque, modèle et année.
00:54:32
Et plutôt que de les avoir en dur, on va
00:54:33
changer les trois attributs qu'on avait
00:54:36
en self.marque égale marque, self.modèle
00:54:39
égale modèle et self.année égale année.
00:54:40
Et grâce à ce constructeur, on peut
00:54:41
maintenant créer des instances de la
00:54:43
classe voiture en lui passant des
00:54:44
paramètres nommés. Donc changeons la
00:54:46
classe de notre Cybertruck en voiture et
00:54:48
on va lui passer marque Tesla, modèle
00:54:49
Cybertruck et dans l'année, on va mettre
00:54:51
2023. Mais on peut aussi créer des
00:54:52
voitures totalement différentes. Faisons
00:54:54
par exemple une Toyota Corolla avec
00:54:56
Corolla égale voiture, marque Toyota,
00:54:58
modèle Corolla, année 2022. On peut
00:55:00
faire klaxonner nos voitures ou afficher
00:55:02
leurs attributs. Ce sont deux instances
00:55:03
indépendantes qui viennent de la même
00:55:05
classe avec des attributs différents. On
00:55:07
fonctionnalités à notre classe voiture
00:55:08
comme une vitesse et puis des méthodes
00:55:11
pour accélérer, décélérer et freiner. Et
00:55:12
avec ça, on aurait la base pour une
00:55:14
voiture dans un jeu vidéo de course par
00:55:15
exemple. Mais pour le moment, reparlons
00:55:16
du paramètre self qu'on a passé dans le
00:55:18
constructeur, dans notre méthode de
00:55:19
classe et qu'on doit passer dans toutes
00:55:20
les méthodes de classe en Python. Cette
00:55:22
variable self sert de référence à
00:55:25
d'utiliser. Et donc Python aura besoin
00:55:26
d'avoir cette valeur en premier
00:55:27
paramètre de ses méthodes pour savoir de
00:55:29
quelle instance on parle. D'ailleurs, on
00:55:30
peut aussi appeler une méthode de classe
00:55:32
avec une version plus explicite en
00:55:36
et puis en lui passant notre instance
00:55:37
Cybertruck par exemple. Et là ça
00:55:38
correspond mieux à la déclaration de
00:55:39
méthode qu'on avait dans notre classe
00:55:41
voiture et ça permet de mieux comprendre
00:55:42
pourquoi on a besoin de la variable
00:55:45
Comme exercice, je vais vous proposer de
00:55:47
faire votre propre machine à pizza. Donc
00:55:49
on va faire une classe pizza et vous
00:55:50
pouvez faire ce que vous voulez avec.
00:55:51
Par exemple, dans le constructeur, on
00:55:53
peut prendre une base qui est blanche ou
00:55:55
rouge. On peut prendre un diamètre pour
00:55:57
la taille de la pizza et puis un type de
00:55:58
pizza comme calzone par exemple. Puis on
00:56:00
peut avoir une méthode pour ajouter des
00:56:02
ingrédients, une méthode pour l'amener à
00:56:04
une certaine table ou bien une méthode
00:56:06
pour la livrer à un client. Donc voilà,
00:56:07
n'hésitez pas à être créatif, il y a pas
00:56:08
vraiment de bonnes ou mauvaises
00:56:10
réponses. Le but c'est d'implémenter un
00:56:12
constructeur avec des attributs et au
00:56:14
moins une méthode de classe. Je vous
00:56:16
laisse mettre cette vidéo en pause et on
00:56:17
se retrouve en quelques secondes pour
00:56:19
une implémentation de la classe pizza.
00:56:20
Donc voilà, j'espère que vous avez mis
00:56:22
la vidéo en pause. Maintenant, je vais
00:56:23
vous proposer une implémentation de la
00:56:25
classe pizza. Donc on commence avec le
00:56:27
mot clé classe. On appelle notre classe
00:56:29
pizza. Puis dans le constructeur, on va
00:56:31
avoir self, la base de la pizza qui sera
00:56:34
blanche ou tomatée, le prix, le
00:56:37
diamètre, son style classique, calzone,
00:56:39
stromboli ou autre et les ingrédients
00:56:43
Donc pour chaque attribut, on fait self.
00:56:45
Donc on a self.base égale base,
00:56:47
self.prix égale prix, self.diamètre
00:56:49
égale diamètre, self.style égale style
00:56:51
et self.ingrédient égale ingrédient. On
00:56:53
va faire une première méthode qui sert à
00:56:54
ajouter des ingrédients qu'on va appeler
00:56:56
ajouter ingrédient qui prend en
00:56:58
paramètre self et le nouvel ingrédient
00:56:59
qu'on va ajouter. Avant d'ajouter
00:57:00
l'ingrédient, on va vérifier que
00:57:02
l'ingrédient n'est pas ananas parce que
00:57:03
si c'est des ananas, on va lever une
00:57:05
erreur qui dit "Les ananas ne vont pas
00:57:07
sur les pizzas." Sinon, on prend notre
00:57:08
attribut ingrédient et on ajoute le
00:57:10
nouvel ingrédient. Aussi, à chaque
00:57:11
nouvel ingrédient ajouté, on va
00:57:13
augmenter le prix d'un euro. Donc on
00:57:15
fait self.prix égale self.prix plus un.
00:57:17
Ensuite, on a une méthode pour servir
00:57:18
une pizza à une table qui prend en
00:57:20
paramètre l'instance de la pizza avec
00:57:22
self et puis la table et qui affiche
00:57:24
avec la fonction print "J'amène la pizza
00:57:25
à la table" et puis le numéro de la
00:57:27
table. Pareil pour la livraison, on a
00:57:28
une méthode qui permet de livrer qui
00:57:30
prend la pizza avec l'objet self et
00:57:32
l'adresse à laquelle on va livrer et qui
00:57:34
affiche "Je livre la pizza à l'adresse"
00:57:35
et puis l'adresse. Maintenant, on va
00:57:37
demander à l'utilisateur quelle base il
00:57:39
veut. Pour ça, on crée une variable base
00:57:41
et on utilise la fonction input pour
00:57:43
demander "Quelle base ? Tomate ou ?"
00:57:45
Pareil pour la taille, on crée une
00:57:46
variable taille et puis on demande
00:57:48
"Quelle taille ? Moyenne ou ?" Pour le
00:57:50
style, on demande "Quel style ?" et on
00:57:52
lui propose classique, calzone,
00:57:54
ingrédients, il devra taper ses
00:57:56
ingrédients séparés par des virgules.
00:57:57
Donc on a la taille moyenne ou grande.
00:57:59
Par défaut, on va partir du principe que
00:58:01
la taille sera moyenne donc 30 cm. Mais
00:58:02
si la personne veut une pizza qui est
00:58:05
grande, on fait passer le diamètre à 34.
00:58:06
Pour les ingrédients, on prend les
00:58:08
ingrédients et on split, ça veut dire on
00:58:10
sépare sur les virgules. Comme ça, la
00:58:12
liste d'ingrédients qu'il a mis séparés
00:58:13
par des virgules donnera une liste
00:58:15
d'ingrédients individuels. Pour le prix,
00:58:17
on part d'une base de 5 euros et puis on
00:58:19
ajoute un euro par ingrédient ce qu'on
00:58:20
peut faire en utilisant la taille de la
00:58:22
liste d'ingrédients. Donc on peut créer
00:58:23
notre instance de pizza en faisant pizza
00:58:26
égale pizza en lui passant la base, le
00:58:28
diamètre, le style, les ingrédients et
00:58:29
le prix. Maintenant, on va tester notre
00:58:31
fonction pour ajouter des ingrédients.
00:58:33
On va ajouter des olives. Donc on va
00:58:34
regarder le la liste d'ingrédients et le
00:58:36
prix de la pizza avant et après l'ajout.
00:58:38
Puis on va essayer de livrer la pizza au
00:58:40
9 rue du Bois. On va servir la pizza à
00:58:42
la table 13. Puis on va demander si la
00:58:44
personne veut ajouter des ananas pour
00:58:45
tester notre erreur. Donc on lui demande
00:58:47
oui ou non. Et si la personne répond
00:58:49
oui, on va ajouter l'ananas ce qui
00:58:51
devrait lever une erreur. Lançons notre
00:58:52
programme pour tester tout ça. "Quelle
00:58:54
base ?" On va mettre tomate. "Quelle
00:58:57
taille ?" On va mettre moyenne. "Quel
00:58:59
style ?" On va choisir classique. "Quels
00:59:00
ingrédients ?" Je vais mettre tomate,
00:59:02
ail et aubergine séparés par des
00:59:04
virgules et des espaces. Quand j'appuie
00:59:05
sur entrée, le reste de mon programme
00:59:07
s'exécute. Donc on voit que avant
00:59:08
d'ajouter des olives, j'avais trois
00:59:10
ingrédients sur ma pizza et elle coûtait
00:59:12
8 euros. Et en ajoutant des olives, j'en
00:59:13
ai quatre et elle coûte maintenant 9
00:59:14
euros. On voit que la fonction pour
00:59:16
livrer fonctionne bien car ça affiche
00:59:18
"Je livre la pizza à l'adresse 9 rue du
00:59:20
Bois." Pareil pour la méthode servir qui
00:59:22
permet d'amener une pizza à une table.
00:59:23
"J'amène la pizza à la table 13." Et
00:59:24
puis maintenant le programme nous
00:59:26
demande si on veut ajouter des ananas.
00:59:27
On va répondre oui. Et là on a bien une
00:59:29
erreur de type TypeError. "Les ananas ne
00:59:31
vont pas sur les pizzas." Et voilà,
00:59:32
c'est tout pour la base des classes.
00:59:33
mais il y a plein d'autres concepts de
00:59:35
POO que je vous invite à découvrir avec
00:59:37
Et voilà, c'est tout pour cette
00:59:39
formation d'une heure en Python. Vous
00:59:40
avez maintenant les bases qui vont vous
00:59:41
permettre de vous lancer dans la
00:59:43
programmation, mais il y a encore plein
00:59:44
de concepts importants à apprendre en
00:59:45
Python avec lesquels vous pourrez
00:59:47
améliorer vos connaissances. Et pour ça,
00:59:49
vous trouverez des vidéos sur Python au
00:59:51
format long ainsi que des shorts sur
00:59:52
cette chaîne. Je vous invite donc à vous
00:59:54
abonner pour ne rien rater et de me dire
00:59:55
en commentaire les sujets pour lesquels