Retour à la bibliothèque

Cours sur: Introduction au Codage Python pour Débutants

Copier ce cours dans Summry
Transcription complète

Bienvenue dans ce cours de Python pour apprendre à coder en Python. Ce cours est destiné aux débutants, donc vous n'avez besoin de rien savoir pour pouvoir le suivre. Pas besoin de connaissances en programmation, ni même en Python, et pas besoin d'être fort en maths. On va partir de la base, en commençant par installer tout ce dont vous avez besoin pour commencer à coder en Python. Ensuite, on voit tous les concepts de base de la programmation qui vous donneront des fondations solides pour continuer votre apprentissage en Python. En plus, on va faire plusieurs projets et exercices concrets ensemble pour assimiler la théorie de manière durable avec de la pratique. À la fin de ce cours, vous serez capable de vous orienter dans la direction que vous voulez avec Python. Vous pourrez par exemple apprendre à faire des sites web avec le développement web backend, vous orienter vers la data science ou bien vers l'apprentissage machine, faire de l'automatisation ou même coder des jeux vidéo. Python vous permettra de faire bien plus que ça, il est utilisé partout, et c'est le langage le plus populaire en 2024 et ce depuis des années d'après plusieurs classements. Et même si vous décidez de passer à un autre langage de programmation après, Python est parfait pour commencer à apprendre à coder et comprendre les bases. Donc, démarrons sans plus tarder. Mais avant de commencer, et comme d'habitude, je vais vous demander de liker cette vidéo et vous abonner à cette chaîne si vous voulez plus de tutoriels de ce genre.

Pour pouvoir coder en Python, on va devoir installer Python sur votre machine et un éditeur de texte pour pouvoir écrire du code. Pour Python, rendez-vous sur le site officiel de Python Python.org ou suivez le lien en description. Une fois sur le site, appuyez sur Download et téléchargez la dernière version de Python. Une fois le téléchargement fini, rendez-vous dans votre explorateur de fichiers et double cliquez sur le fichier que vous venez de télécharger. Si vous êtes sur Windows, faites bien attention à ajouter Python.exe au PATH, ça permettra à votre ordinateur de savoir où se trouve Python. Ensuite, cliquez sur Install Now et suivez le processus d'installation. Après quelques secondes, Python a fini de s'installer et vous pouvez fermer la fenêtre.

Ensuite, on va avoir besoin d'un éditeur de texte. Pour ça, on va choisir Visual Studio Code. Pour installer Visual Studio Code, rendez-vous sur code.visualstudio.com. Encore une fois, je vous mets le lien en description. Une fois sur le site, vous pouvez télécharger l'installeur pour Mac, Windows ou Linux. Nous, on va prendre celui pour Windows. Le téléchargement se lance. Quand le téléchargement est fini, rendez-vous dans l'explorateur de fichiers et double cliquez sur ce que vous venez de télécharger. L'installeur se lance. Acceptez les conditions d'utilisation. Appuyez sur suivant, suivant, suivant, installer. Et si tout s'est bien passé, vous devriez voir cet écran. Appuyez sur terminer et Visual Studio Code se lance.

Visual Studio Code est un environnement de développement intégré complet qui permet de développer dans à peu près tous les langages et pour ça, il fonctionne avec des extensions. Comme on veut interagir avec Python, on va devoir installer l'extension Python. Rendez-vous dans la partie extensions à gauche de Visual Studio Code et tapez Python. Choisissez la première extension développée par Microsoft et appuyez sur Installer. Une fois l'installation de l'extension Python terminée.

Allez dans fichier, faites nouveau fichier et choisissez c. Pour sauvegarder ce fichier, on va en allant dans file et puis save ou en appuyant sur contre l'AS et je vais appeler mon fichier helloworld suivi de l'extension .py. L'extension .py étant celle réservée aux fichiers Python. Le Hello World est le programme typique qu'on fait à chaque fois qu'on apprend un nouveau langage. En Python, on peut coder un Hello World avec la fonction print. La fonction print est une fonction qu'on va utiliser très souvent et qui permet d'afficher des valeurs. C'est le mot print suivi de parenthèses. Dans ces parenthèses, on va mettre des simples ou des doubles guillemets avec une phrase. Ici, hello, World. Une fois que vous avez ça, vous pouvez appuyer sur le bouton play pour lancer votre programme Python. Si tout s'est bien passé en bas de votre écran, vous devriez voir la phrase Hello World s'afficher. Et voilà, c'est tout ce dont vous avez besoin pour commencer à créer des programmes en Python et suivre ce tutoriel.

On a vu comment afficher du texte en Python avec la fonction print et maintenant on va voir comment afficher d'autres types de valeurs, à savoir des entiers. On peut afficher des entiers en Python en fournissant la valeur du nombre directement à la fonction print. En lançant notre programme, on voit que la valeur 3 a été affichée dans le terminal.

Ces entiers sont sujets aux mêmes règles qu'en maths, ça veut dire qu'on peut effectuer dessus des additions, des soustractions on peut aussi les multiplier et diviser faire l'exposant faire la division entière, donc ici la division entière de 3 par 2 ça sera pas 1,5 mais 1 car on garde juste l'entier. On peut avoir le reste de la division entière avec le signe modulo, qui est représenté par le signe pourcentage. Ces opérations arithmétiques ont le même ordre de priorité qu'en maths. Ça veut dire que si on a 4 fois 3 plus 2, on va d'abord faire 4 fois 3 12 au quel on va ajouter 2 pour faire 14. Et ça sera pas 4 fois 3 plus 2, ça veut dire 4 fois 5 20. Donc, on a bien 4 fois 3 12 auquel on va ajouter 2 pour avoir 14. Si on voulait avoir 4 fois 3 plus 2, on devrait mettre ces 3 plus 2 entre parenthèses et là on aurait bien 4 fois 5 ça veut dire 20. Ça c'est pour les nombres entiers, mais on a aussi les nombres décimaux qui ne sont pas du même type que les entiers.

Pour voir le type d'une valeur, on utilise une autre fonction qui est la fonction type. Comme print, elle s'écrit avec le mot type, suivi de parenthèses, et puis la valeur pour laquelle on veut savoir quel est le type. On voit que pour les entiers, ils sont du type int pour integer, entier en anglais, et pour les nombres décimaux, ils sont du type float pour nombre flottant. Tant qu'on y est, on peut voir que notre phrase hello world était du type STR pour string ou chaîne de caractères en français. On a vu ensemble comment afficher des valeurs en Python. On a vu les trois premiers types : chaîne de caractères, entier et nombres décimaux. On a aussi vu les différents opérateurs arithmétiques et l'ordre de priorité des opérations. On a vu la fonction type qui permet de savoir quel est le type d'une valeur. On va maintenant voir un concept important qui est les variables.

Pour le moment, on a juste écrit nos valeurs en dur en les fournissant directement à la fonction print ou type. Ce serait quand même pratique de pouvoir sauvegarder ces valeurs pour les réutiliser plus tard et les manipuler. Et c'est ce à quoi servent les variables. Vous pouvez voir la variable comme des boîtes dans lesquelles on met des valeurs pour pouvoir les réutiliser après. Pour déclarer des variables en Python, on utilise une typologie qui s'appelle le snake case, qui est simplement un ou plusieurs mots séparés par des barres en bas. Donc, par exemple, on peut déclarer notre première variable en écrivant ma_variable. On peut donner n'importe quelle valeur à cette variable. Disons par exemple 42. On peut ensuite afficher le contenu de cette variable en faisant print de ma variable. Si on lance le programme Python, on voit bien qu'on a la valeur 42 d'afficher. Écrire le nom d'une variable s'appelle déclarer une variable et lui donner une valeur s'appelle lui assigner une valeur. Ici, on a déclaré la variable ma_variable et on lui a assigné la valeur 42. On peut réassigner une valeur à une variable en lui donnant une nouvelle valeur. Par exemple, ma_variable ne va plus être égal à 42 mais va être égal à Hello World, qui est même d'un autre type. Si on lance le programme, on voit bien qu'à présent, ma_variable contient la valeur Hello World.

On a vu les types nombres entiers, nombres flottants et chaînes de caractères, et ça va nous être utile maintenant parce qu'en Python, on peut pas mélanger n'importe quel type de variables. Prenons par exemple deux types de variables : la première variable qu'on va appeler mon_entier et la deuxième variable qu'on va appeler ma_string. Imaginons qu'on veuille écrire Hello World suivi de la valeur 42. On peut se dire qu'on peut écrire ma_string plus mon_entier. Mais si on lance le programme en Python, on voit qu'on a une erreur qui nous dit qu'on peut concaténer que des strings avec des strings. et là, on a essayé de concaténer une string avec un entier. Pour ça, on peut faire ce qu'on appelle un cast. On peut caster mon entier en string. en disant une autre fonction qui est la fonction STR. Tout ce qu'on fournit à la fonction STR, sera transformé en string. et donc, dans notre exemple, on se retrouve avec deux strings : la string Hello World et 42 qui n'est plus un entier mais bien une chaîne de caractères. Si on lance le programme, on voit qu'on a Hello World suivi de 42, et on n'a plus d'erreur. On peut aussi transformer 42 en string directement dans la déclaration de variable en lui assignant le résultat de la fonction string qu'on a appliqué à 42. Il faut faire cependant attention, parce que maintenant, disons qu'on veuille ajouter 1 à 42 pour avoir 43. Maintenant que ce n'est plus un entier mais une string, on va avoir une nouvelle erreur qui dit qu'on ne peut pas ajouter un entier à une string. Si on caste 1 en string, donc en lançant le programme, on se retrouve avec 421 parce qu'en fait, on a la string 42, à laquelle on a ajouté 1, 421. Les mêmes règles s'appliquent sur les flottants. Donc, si je déclare mon float et que je lui assigne la valeur 1,2, on va ici de nouveau avoir un entier. On peut facilement effectuer des opérations arithmétiques entre des entiers et des flottants. à savoir que le résultat d'une opération arithmétique entre un entier et un flottant donnera toujours un flottant. Ici, on a 43,2, qui est de type float. Mais en ce qui concerne les chaînes de caractères, c'est la même chose que pour les entiers, à savoir que ma string plus float va nous renvoyer une erreur qui dit qu'on ne peut pas concaténer de strings avec des floats. Pour ça, encore une fois, la fonction STR vient à la rescousse et en transformant notre float en string, on voit qu'on a Hello World 1,2. En Python, il existe des fonctions pour transformer des types en un autre pour chaque type. Donc, on a vu le type STR string, mais il existe aussi la fonction int pour transformer des floats en entier. Donc là, on a transformé notre flottant 1,2 en entier 1, et on peut aussi transformer un entier en nombre décimal avec la fonction float. On va ici lui fournir mon entier 42 et on voit qu'on a 42,0 et non pas 42 simplement, car notre entier est devenu un float. Si ça vous semble complexe, je vous conseille d'expérimenter avec ce que vous savez déjà, c'est-à-dire les trois types : entier, string et float, la fonction print et la fonction type qui permet de savoir de quel type est une valeur.

Maintenant qu'on sait manipuler les types de base : entier, float et string, qu'on sait aussi les écrire sur la sortie standard, on va apprendre comment lire des valeurs que l'utilisateur nous fournit avec une nouvelle fonction qui est la fonction input. La fonction input prend en paramètre, ça veut dire qu'on peut lui mettre dedans une chaîne de caractères qui représente ce qui va s'afficher dans le terminal, par exemple la question qu'on veut poser à l'utilisateur. Si on lui demande quel est votre âge et qu'on lance le programme, on voit que Python nous demande quel est votre âge, disons 20 ans. Voilà, là, il s'est rien passé parce qu'en fait, pour récupérer le résultat de la fonction input, on doit déclarer une variable dans laquelle on met la fonction input. On a aussi vu qu'on avait pas d'espace entre la question et la valeur, pour ça, il suffit de rajouter un espace à la fin de notre question dans la chaîne de caractères. On va afficher le contenu de la variable âge et si tout va bien, on devrait récupérer la valeur qu'on vient de fournir. Donc, quelle est votre âge, on va mettre 20 et Python affiche bien la valeur 20, avec la fonction print. Maintenant, on sait lire et écrire. Et cependant, une chose à laquelle on va faire attention, et c'est le type de la variable âge. Donc là, on a un âge, on peut se dire qu'on a un entier, mais en fait, si on regarde, notre variable âge est de type string, car tout ce que Python lit dans l'entrée standard est par définition une string. Si quand Python demande quel est votre âge et qu'on lui dit, je ne sais pas et ben pas de problème, âge contiendra je ne sais pas. D'ailleurs, la fonction print permet d'afficher plusieurs choses, pour que ce soit plus clair, on va afficher le contenu de la variable âge suivi de son type. Donc, recommençons, quel est votre âge, je ne sais pas. On voit qu'on a la chaîne de caractères je ne sais pas, et qu'elle est bien du type string. Pour que âge soit considéré comme un entier et non pas comme une string, on a déjà vu la fonction pour transformer un type en un entier, et c'est la fonction int. On peut l'utiliser sur la fonction input pour que âge soit directement transformé en type entier. Vérifions ça. Donc, on lance le programme, maintenant si on tape je ne sais pas, on va avoir une erreur, car Python n'arrive pas à transformer la phrase je ne sais pas en entier. Donc, en relançant notre programme, on va lui dire quelle est votre âge, on va lui fournir 20, et là, on a bien 20 qui est de type entier. Ça veut dire que maintenant, on peut lui ajouter par exemple 1 et que 20 auquel on ajoute 1 deviendra bien 21.

Maintenant qu'on sait tout ça, on va créer notre premier projet en Python, qui est un convertisseur de degrés Celsius vers les degrés Fahrenheit, qui sont utilisés aux États-Unis par exemple. L'énoncé du projet est simple, on va demander à l'utilisateur de rentrer les degrés Celsius et on va lui afficher des degrés en Fahrenheit. Pour ça, on va devoir utiliser la fonction input et la fonction print, et je vous invite à trouver la formule pour transformer des degrés Celsius en Fahrenheit sur Google. Voilà, donc vous pouvez mettre la vidéo en pause et on se retrouve une fois que vous avez terminé. J'espère que vous avez vraiment mis la vidéo en pause et que vous avez au moins essayé de faire ce projet. Maintenant, on va faire la solution ensemble. Ces degrés seront des nombres, on peut décider de ne prendre que des entiers, mais pour avoir un programme plus complet, on va utiliser des flottants. Donc, on caste le résultat de la fonction input en float pour avoir des nombres décimaux. Et la question qu'on va poser à l'utilisateur, c'est entrée les degrés Celsius. Maintenant qu'on a nos degrés Celsius, on va les transformer en Fahrenheit. Donc, on va déclarer une nouvelle variable qui s'appelle Fahrenheit et donc j'ai cherché la formule sur Google.La formule pourtant de transformer des Celsius en Fahrenheit est Celsius fois 9 divisé par 5 plus 32. On va ensuite afficher le contenu de notre valeur Fahrenheit et lancer le programme. Notre programme nous demande d'entrer des degrés Celsius. On va entrer 36 et notre programme nous renvoie 96,8. Pour vérifier que c'est correct, on va se rendre sur Google et on va taper combien font 36 degrés Celsius en Fahrenheit. On voit que 96,8 degrés Fahrenheit équivalent bien à 36 degrés Celsius. On peut un peu améliorer notre programme en voyant qu'on a oublié de mettre un accent à degré. Il nous manque aussi un espace avant les deux points. Et puis là, notre programme est très brut. Il nous renvoie juste la valeur de la variable Fahrenheit. Pour rendre ça un peu plus sympa, on va mettre on va utiliser la fonction de print de manière un peu plus avancée en lui passant plusieurs paramètres et en disant que Celsius degrés Celsius équivalent à Fahrenheit degrés Fahrenheit. On peut lancer notre programme. On va reprendre 36, on voit que 36 degrés Celsius équivalent bien à 96,8 degrés Fahrenheit. Et on a juste retiré l'espace ici car quand on sépare des valeurs par des virgules dans la fonction de print, Python ajoute automatiquement des espaces. Donc relançons pour vérifier 36 et on voit que 36 degrés Celsius équivalent bien à 96,8 degrés Fahrenheit. Félicitations, vous avez fini votre premier projet en Python. On a vu comment représenter le type chaîne de caractères, nombre décimaux et nombre entier. Maintenant, on va avoir un nouveau type qui est le type booléen. Le type booléen permet d'afficher des valeurs qui sont soit vrai, soit fausse. Il peut prendre deux valeurs possibles, soit le mot-clé réservé true, soit false. Comme le reste des types en Python, il a une fonction qui permet de transformer d'autres types d'objets en booléen, c'est la fonction bool. Dans la logique booléenne, tout type d'objet qui est égal à zéro, nul ou à un ensemble vide sera considéré comme fausse et tout le reste sera considéré comme vrai. Prenons quelques exemples avec la valeur moins 20 qui en booléen sera considérée comme vraie. On peut aussi prendre la valeur 42,0, un nombre décimal qui lui aussi sera considéré comme vraie ou bien une chaîne de caractères non nulle comme par exemple ABC qui elle aussi sera évaluée à vrai. Maintenant si on prend une chaîne de caractères vide, elle sera évaluée à fausse car c'est un ensemble vide, ainsi que zéro, le nombre entier et 0,0 pour avoir un float qui lui aussi est faux. En programmation quand on parle de valeurs qui peuvent être interprétées comme vrai ou fausse bien qu'elles ne soient pas les valeurs booléennes directes true et false, on parle de valeurs truthy ou falsy. On a vu les opérateurs arithmétiques, voyons maintenant les opérateurs de comparaison. Il existe six opérateurs de comparaison qui permettent de comparer tout type d'objets en Python. On a l'opérateur strictement plus petit que, plus petit ou égal à strictement plus grand que, plus grand ou égal à différent ou égal. À noter que l'opérateur de comparaison égal est composé de deux signes égal. Il n'est pas à confondre avec un égal simple qui est réservé à l'assignation de variable. Voyons quelques exemples ensemble pour mettre ça en pratique. Si on fait print de 2 strictement plus petit que 3, Python nous dit que la comparaison est vraie. Maintenant si on dit 2 est strictement plus petit que 1, là Python nous dit que c'est faux. Pour voir si 2 est différent de 1, c'est pareil. Python nous dit que c'est vrai, 2 n'est pas égal à 1. Par contre si on essaie de voir si 2 est égal à 1, Python nous dit que c'est faux. Est-ce que 2 est plus grand ou égal à 1 ? Oui. Est-ce qu'il est strictement plus grand que 1 ? Oui. Par contre est-ce qu'il est plus petit ou égal à 1 ? Non. En Python, on peut aussi mettre plusieurs opérateurs de comparaison, les uns à la suite des autres. Par exemple, on peut dire 1 est strictement plus petit que 2, qui lui-même est strictement plus petit que 3, et tout ça sera interprété comme vrai. En Python, on a aussi deux opérateurs logiques qui sont end et or, qui permettent d'associer plusieurs conditions entre elles, les unes à la suite des autres. Avec le mot or qui veut dire ou, il faudra que ou bien la condition de gauche ou bien la condition de droite soit vraie pour que l'ensemble soit vrai. Et pour le mot end qui veut dire et, il faut que les deux conditions, celle de gauche et celle de droite soient vraies pour que l'ensemble soit considéré comme vrai. Maintenant qu'on a vu le type booléen, les opérateurs logiques et les opérateurs de comparaison, on va pouvoir rentrer dans le vif du sujet avec notre première structure de contrôle qui est la condition If. If permet d'exécuter du code si et seulement si la condition est validée. On va évaluer une condition et exécuter un bloc de code si la condition est vraie. Ce bloc de code est indenté, c'est à dire qu'il commence pas à la ligne directement mais il y a des espaces. Ça peut être autant d'espaces que vous voulez ou autant de tabulation que vous voulez, mais il faut juste que ce nombre d'espaces ou de tabulation soit constant dans tout votre code. Ici, j'ai deux espaces. Ça fonctionne, j'aurais pu en avoir quatre. Mais si j'en ai quatre ici, il faut que j'en ai quatre tout le long de mon bloc et des autres blocs en Python. Donc par exemple, si la condition de et plus petit que 3, on affiche c'est vrai. Et si je lance mon code, on voit qu'on a bien affiché c'est vrai. Par contre si la condition devient fausse. 4 est plus petit que 3, c'est faux. Et donc on va jamais passer dans ce bloc. Pour illustrer tout ça, prenons l'exemple d'un programme qui demande à l'utilisateur d'entrer un mot de passe. Une fois qu'il a rentré son mot de passe, on va tester si son mot de passe est bien le mot de passe qu'on sait qu'il a, ici 1 2 3 4 5 6. Donc si mot de passe est bien égal à 1 2 3 4 5 6, alors on lui affiche, c'est bon. Testons notre programme. Quel est votre mot de passe ? 1 2 3 4 5 6. Notre programme affiche bien que c'est bon. Ensuite, on va lui dire que le programme est terminé. Si on le lance et que cette fois-ci, on met un autre mot de passe, on voit qu'il a bien afficher le programme est terminé, mais qu'il n'est pas rentré dans le bloc qui dit que c'est bon. Par contre, si on met 1 2 3 4 5 6, il rentre dans le bloc et il affiche quoi qu'il arrive cette ligne là qui n'est pas indentée et qui sera donc exécutée parce qu'elle n'est pas dans le code dans lequel on rentre seulement si la condition est validée. Maintenant, que faire si le mot de passe n'est pas bon ? Lui dire simplement que le programme est terminé sans lui dire que son mot de passe est mauvais ne suffit pas. On pourrait lui dire que si ce n'est pas le cas, on lui affiche le mot de passe n'est pas bon. Pour ça, on met un autre mot qui est le mot clé else. Else ne prend pas de condition, c'est simplement un bloc de code qui va être exécuté si aucune autre condition n'a été remplie. Donc là, on va lui dire le mot de passe mais pas bon. Ici, je vois qu'en faisant mon copier-coller, j'ai pris un espace en trop. Je vais le retirer pour garder la cohérence et avoir deux espaces à chaque fois. Donc relançons notre programme. Quel est votre mot de passe ? Je mets 1 2 3 et là, on voit qu'on n'est pas rentré dans la première condition, mais on est rentré dans le else et notre programme affiche le mot de passe n'est pas bon. Maintenant disons qu'on veuille afficher un message, le mot de passe entré est trop court. Pour ça, on peut faire un if qui regarde la longueur de la chaîne de caractères, ici de notre mot de passe, et on peut faire ça avec la fonction len, dans laquelle on passe notre mot de passe. Si d'abord, on affiche ce que vaut la longueur, la length de passe avec cette fonction len. On voit que si on met 1 2 3, on a trois, parce que la chaîne de caractères est composée de trois lettres. Maintenant qu'on a ça, on peut lui dire que si la longueur de trois est strictement inférieure à six, on peut afficher le mot de passe est trop court. Réessayons. Je tape 1 2 3 et là, on voit que notre programme nous a dit le mot de passe est trop court, le mot de passe n'est pas bon, et puis le programme est terminé. Et c'est un peu c'est un peu redondant d'avoir la phrase et le mot de passe est trop court et le mot de passe n'est pas bon. Ça serait mieux que notre programme nous dise l'un ou l'autre. Mais là, si on regarde ce qui se passe, on rentre notre mot de passe qui est 1 2 3, de longueur trois. En évaluant cette première condition, la longueur du mot de passe est bien inférieure à six. Donc il va rentrer ici. Puis il va tester cette condition qui sera fausse. Et il va donc passer dans le else et aussi nous afficher ça. Pour éviter d'avoir plein de if comme ça, il y a un troisième et dernier mot-clé qui est le mot clé Elif, qui est la contraction de Else If, et qui nous permet de tester plusieurs conditions dans un bloc de If, Elif, Else. Dans notre cas, je vais transformer ce if là en Elif, ce qui nous permettra de ne rentrer que dans une de ces conditions. Donc recommençons. Si je lance mon programme, je mets 1 2 3, on voit qu'il nous a juste écrit notre programme est trop court parce qu'il est rentré dans ce bloc. On voit qu'il a été satisfait par cette première condition. Et il nous a donc exécuté ce bloc là, et comme else veut dire sinon, il n'a pas eu besoin de faire quelque chose d'autre, vu qu'il a été déjà satisfait par cette condition. Dans les exemples qu'on avait ensemble, on avait toujours des blocs d'une seule ligne. On n'est pas limité à une seule ligne. Si maintenant, je mets mais il n'est pas très sécurisé. Si je rentre le mot de passe, je mets 1 2 3 4 5 6. On a les deux phrases, tout le bloc va être exécuté ici et pas seulement une seule ligne. En plus, on peut mettre des if dans des if. Donc disons ici que dans le cas où un et deux cas, on a le cas où le mot de passe la longueur du mot de passe est égale à zéro. On va lui afficher il faut écrire quelque chose. Et sinon on va lui afficher le mot de passe est trop court. Donc là, si on exécute notre programme et qu'on ne rentre rien, la longueur de notre chaîne de caractères de notre mot de passe sera zéro et le programme nous dit il faut écrire quelque chose. Maintenant, si on relance notre programme et qu'on tape un mot de passe d'une longueur strictement inférieure à six, mais qui n'est pas zéro, comme par exemple 1 2 3 4, qui sera de longueur quatre. Il va rentrer ici. Il va se dire OK, la longueur du mot de passe est inférieure à six. Puis dans ce bloc, il va voir que la longueur du mot de passe n'est pas égale à zéro. Donc cette condition n'est pas satisfaite. Alors il va rentrer dans le else et afficher le mot de passe est trop court. Et c'est ce qu'il a fait ici. Comme la longueur était de quatre, il est rentré ici. Il n'est pas rentré là, mais il est bien rentré ici. Et il n'est pas rentré dans cela parce que la condition ici était déjà satisfaite. On va maintenant pouvoir passer au deuxième projet de ce tutoriel en Python, qui est un programme qui donne une mention à l'utilisateur à partir d'une note moyenne qu'il nous fournit. Prenons par exemple la moyenne du bac. On va demander à l'utilisateur de rentrer la moyenne qu'il a eu au bac sur 20 et on va lui donner la mention assez bien si sa moyenne est supérieure ou égale à 12 et inférieure à 14. La mention bien si sa moyenne est supérieure ou égale à 14 et strictement inférieure à 16. La mention très bien si sa moyenne est supérieure ou égale à 16 et strictement inférieure à 18 et les félicitations du jury si sa note est supérieure à 18. Je vous laisse mettre la vidéo en pause et penser à comment vous pourriez réaliser ce programme et on se retrouve juste après, une fois que vous avez fini. Voilà, j'espère que vous avez fini et que vous avez au moins essayé de réaliser ce programme par vous-même. Donc, on va résoudre le programme ensemble. On va commencer par déclarer une variable moyenne et on va demander à notre utilisateur d'entrer sa moyenne. On sait que la fonction input nous renvoie des chaînes de caractères et nous on va travailler avec des nombres décimaux. Donc on peut déjà transformer cette chaîne de caractères en float, pour avoir une moyenne qui est un nombre décimal. Ensuite, on va avoir plusieurs conditions dans lesquelles on va rentrer en fonction de la moyenne de l'utilisateur. Donc si sa moyenne est supérieure ou égale à 12 et inférieur à 14, on va afficher la mention assez bien. Si sa moyenne est comprise entre 14 inclus et 16, on va afficher la mention bien. Si elle est comprise entre 16 inclus et 18, on va afficher très bien. Et si la moyenne est de 18 ou plus, on va afficher les félicitations du jury. Et sinon, elle m'affiche pas de mention. Essayons notre programme avec une moyenne de 14, on a bien la mention bien. Avec une moyenne de 19, on a les félicitations du jury. Et avec une moyenne de 11,1, on n'a pas de mention. Voici une version minimale du projet. On pourrait aller plus loin en ajoutant de la gestion d'erreurs au cas où l'utilisateur ne rentre une note supérieure à 20 ou inférieure à zéro. Imaginons qu'il rentre 21 de moyenne, on va lui donner les félicitations du jury, alors que c'est pas possible d'avoir 21 sur 20. Si l'utilisateur n'entre pas de nombre, mais entre une chaîne de caractères, par exemple, on va avoir une erreur sur la fonction float. Ça serait bien de gérer float différemment et de rajouter une autre condition pour la gestion d'erreur. Mais sinon c'est tout pour ce projet. Et voilà, vous savez maintenant comment utiliser la première structure de contrôle, les conditions avec If, Elif et Else. On va maintenant voir une autre structure de contrôle, les boucles, mais avant ça, on va voir comment mettre plusieurs éléments dans une séquence avec les listes. En Python, les listes sont des tableaux où ensemble, qui peuvent contenir tout type d'objets. On peut déclarer une liste en utilisant les symboles crochets ou bien avec la fonction liste. Une fois qu'on a une liste, on peut mettre un ou plusieurs objets dedans. On sépare les éléments d'une liste avec des virgules et on peut afficher une liste avec la fonction print. Donc faisons print de ma liste et on voit que Python affiche notre liste exactement comme on l'a déclaré. On peut aussi obtenir un élément spécifique de la liste en utilisant son indice entre crochets. Disons qu'on veuille le premier élément de notre liste. En informatique, on commence toujours à compter à zéro. Donc on peut accéder au premier élément de notre liste en tapant le nom de notre variable, ma liste, puis par exemple zéro entre crochets. Et Python nous affiche bien le premier élément de la liste. On peut aussi changer un élément de la liste et écraser sa valeur en lui assignant une nouvelle valeur à l'indice qu'on veut. Par exemple, ma liste de 2.L'audio est en français.

0 égal 1 "si on affiche la liste, on voit que l'élément 0 a bien été modifié avec notre nouvelle valeur 1. En plus d'un élément individuel, on peut aussi accéder à un sous-ensemble de notre liste en utilisant les crochets dans lesquels on met l'indice de début , deux points, et puis l'indice de fin. Par exemple pour avoir les trois premiers éléments d'une liste, on peut faire crochet 0 jusqu'à 3 non inclu et puis ton nous renvoie bien les trois premiers éléments de la liste. Les listes sont des objets en python qui ont une série d'attributs et de méthodes qu'on peut utiliser. Reprenant notre liste et ajoutant lui un point à la fin et on voit une liste avec plein d'attributs et de méthodes. Pour ajouter un élément à une liste, on a par exemple la méthode append. On peut l'utiliser en prenant notre liste et en tapant point append et puis en lui passant l'élément qu'on veut rajouter entre parenthèses. On peut par exemple ajouter le nombre 1337 à notre liste. On voit que la liste contient maintenant 5 éléments et que 1337 s'est ajouté en fin de liste. On a aussi la méthode remove qui permet de supprimer un élément d'une liste. On peut l'utiliser en faisant point remove sur une liste avec l'élément qu'on veut supprimer entre parenthèses. Pour voir si un élément se trouve dans une liste, on peut utiliser le mot-clé in. Par exemple print de B in une liste qui contient les éléments A, B et C renverra true car la lettre B se trouve bien dans notre liste. Voyons maintenant une nouvelle structure de contrôle avec les boucles. Une boucle permet de répéter un bloc de code plusieurs fois. Le premier type de boucle qu'on va avoir est ce qu'on appelle une boucle while. Elle est composée du mot while, suivi d'une condition, puis deux points et un bloc qu'on veut répéter. C'est un peu comme un if, sauf qu'on va répéter ce qui est dans notre boucle tant que la condition est vraie. Prenons par exemple une variable I pour indice, à laquelle on va assigner la valeur 0. On peut avoir une boucle while qui va boucler tant que I est plus petit que 5. Dans notre boucle, on va afficher I avec print, et puis surtout ne pas oublier d'incrémenter ou ajouter un à chaque passage de la loop. Pour incrémenter de 1 notre variable I, on va faire I égal I plus 1, qu'on peut aussi écrire plus simplement avec I plus égal 1. Attention si on n'oublie d'ajouter un à chaque passage dans la loop, on va se retrouver avec ce qu'on appelle une boucle infinie. Comme son nom l'indique, c'est une boucle qui ne se finit jamais et on va devoir fermer notre programme de force pour pouvoir en sortir. Par exemple, je vais retirer l'incrément et vous allez voir ce qui se passe. On a la valeur initiale de I qui est 0 qui s'affiche à l'infini. Pour fermer un programme qui est parti en boucle infinie, pas de panique, il suffit simplement de lui envoyer un signal d'interruption. On peut lui envoyer ce signal avec le raccourci contrôle suivi de la lettre C. Revenons maintenant à notre code et rajoutons la ligne I plus égal 1. Quand on exécute notre code, on voit bien qu'il affiche 0, 1, 2, 3, 4, puis qu'il s'arrête normalement. Donc voici globalement comment fonctionne une boucle while. Voyons maintenant les boucles for. Les boucles for permettent de répéter un bloc de code ou itérer pour chaque élément d'un objet itérable, comme par exemple une string ou une liste. Concrètement, on peut avoir une boucle for en tapant for let in et puis une liste composée des lettres A, B et C. Quand on affiche notre lettre avec print de lettre, on voit que Python nous a affiché l'élément pour chaque passage dans la boucle. Mais que faire si on veut passer un certain nombre de fois dans une boucle ? On ne peut pas faire for I in 5 car 5 n'est pas un objet itérable, c'est juste un nombre, pas un ensemble d'éléments. Pour ça, on doit utiliser une fonction qui est la fonction range. J'ai une vidéo complète sur la fonction range que je vous invite à consulter en suivant le lien en description. Mais dans son utilisation la plus simple, on peut utiliser une boucle for range en faisant for I in range de 5 et en faisant print de I. Python nous affiche bien 0, 1, 2, 3, 4, sans qu'on doive incrémenter quoi que ce soit manuellement comme dans la boucle while qu'on a vu juste avant. Et voilà, vous savez maintenant comment utiliser les boucles en python. On peut donc voir notre troisième projet, on va faire une version super simple, uniquement avec les concepts qu'on a vu dans cette vidéo et les deux vidéos précédentes. L'énoncé du jeu du pendu est le suivant. On a un mot mystère que l'utilisateur doit deviner. Le joueur possède 7 vies. À chaque tour, on lui demande d'entrer une lettre. Si la lettre se trouve dans le mot, alors on affiche le mot avec cette lettre en clair. Si la lettre ne se trouve pas dans le mot, le joueur perd une vie, et la partie s'arrête soit quand le joueur n'a plus de vie, soit quand il a trouvé le mot. Voilà, comme d'habitude, c'est le moment de mettre la vidéo en pause et d'essayer de faire ce projet par vous-même et on se retrouve juste après avec ma solution. OK, j'espère que vous avez réussi à faire votre propre version du jeu du pendu. Sinon, je vous propose la mienne. Je vais commencer par déclarer une variable qui contient un nombre entier, le nombre de vies de l'utilisateur. Ensuite, on a le mot mystère, on va choisir le mot python et puis on a une chaîne de caractères pour le mot que l'utilisateur va voir à l'écran. Au début, il sera composé uniquement de barres en bas, de la même taille que le mot mystère. Pour ça, on peut faire le symbole barre en bas multiplier par la longueur du mot mystère. On va ensuite avoir une boucle. Cette boucle sera une boucle while qui va continuer tant que le nombre de vies de l'utilisateur sera supérieur à 0 et que le mot mystère ne sera pas égal à notre mot public. À chaque passage dans la boucle, on demande une lettre à l'utilisateur avec la fonction input, à laquelle on passe la chaîne de caractères "entrer une lettre". Ensuite, on peut voir si la lettre que l'utilisateur vient d'entrer se trouve dans notre mot mystère en faisant if lettre in mot mystère. Si c'est le cas, on va boucler sur le mot mystère en récupérant ses indices avec for I in range de len du mot mystère. Et si la lettre du mot mystère de I est égale à la lettre que l'utilisateur a entré, alors on la remplace dans notre mot public en faisant mot public égal mot public deux points I plus la lettre plus mot public de I plus 1 deux points. Ça nous permet de conserver la première partie du mot public d'ajouter la lettre et puis d'avoir la suite du mot public. Si à l'inverse, la lettre n'était pas dans le mot mystère, alors l'utilisateur perd une vie, on fait nombre de vies moins égal 1. Et en fonction de ce qui s'est passé, on va avoir un if, elle if, elle. Donc on va faire if mot public égal mot mystère. Alors on affiche print "Le mot est" et puis soit mot mystère, soit mot public car à ce moment-là, ils sont égaux. Sinon, si elle if le nombre de vies de l'utilisateur est égal à 0, alors on lui affiche un message pour dire qu'il a perdu. Sinon, ça veut dire que le jeu continue, donc sinon else, on affiche le nombre de vies que qu'il reste à l'utilisateur et l'état du mot avec les lettres en clair qu'il a déjà trouvé. Donc on peut maintenant essayer notre jeu du pendu. On va se tromper 7 fois pour voir si on peut perdre une partie. On va réussir 100% du temps pour voir si on peut gagner une partie, puis on va jouer normalement, parfois se tromper, parfois trouver des lettres pour finalement gagner. Si vous voulez améliorer votre jeu du pendu, je vous donne quelques pistes d'amélioration. Vous pouvez utiliser la fonction native énumérer pour notre boucle for. Vous pouvez aussi vous renseigner sur l'instruction break qui permet de sortir d'une boucle, on peut donc remplacer la condition de sortie de notre while par true et boucler en permanence, et puis avoir des breaks dans nos if en fin de bloc pour éviter d'avoir les mêmes conditions dans while et dans nos if. On peut aussi vérifier les lettres que l'utilisateur entre, en vérifiant que ce soit bien une lettre, qu'elles soient en minuscules. Et puis on pourrait aussi avoir une liste qui contient les lettres que l'utilisateur a déjà rentrées, contre laquelle on pourrait tester la nouvelle lettre, voir si la nouvelle lettre se trouve dans la liste ou pas, et éventuellement boucler tant que la lettre qu'il rentre ne répond pas à toutes ces conditions. Puis finalement, vous pouvez aller bien plus loin en améliorant l'aspect visuel du programme en affichant par exemple un bonhomme en caractère ASCII ou bien carrément une interface graphique de votre choix, mais quoi qu'il en soit bravo, vous avez codé votre premier jeu. Et maintenant, on va voir un concept clé de la programmation, les fonctions. Quand on code des programmes plus complexes, on se retrouve vite avec des centaines ou des milliers de lignes de code. On va avoir besoin de segmenter ce code en sous-programmes pour pouvoir s'y retrouver. On va donc utiliser les fonctions pour séparer la logique de notre code, mieux les maintenir et pouvoir les réutiliser à plusieurs endroits. On a déjà utilisé des fonctions natives fournies par Python comme print et input par exemple. Maintenant, on va coder des fonctions par nous-mêmes. On peut déclarer une fonction en utilisant le mot def pour define. On va ensuite donner un nom à notre fonction, comme on le fait avec les variables. Donc, créant une fonction qui s'appelle ma_fonction. Après le nom, on va ajouter des parenthèses pour pouvoir passer ce qu'on appelle des paramètres. On verra ça plus en détail juste après, mais pour vous expliquer rapidement, c'est des variables qu'on va passer à la fonction qu'on va pouvoir utiliser à l'intérieur de notre fonction, comme quand on passait une chaîne de caractères à la fonction print. On a ensuite les symboles deux points, un retour à la ligne et on va indenter notre code, comme on le faisait avec if, while et for, qu'on a déjà vu ensemble. Tout le code qu'on va taper là et qui sera indenté, appartiendra donc à la fonction. Maintenant, on va écrire du code dans le corps de notre fonction. On peut déclarer une variable ma_variable égal 1, et puis faire un print, par exemple, print de ma_variable est, et puis on ajoute ma_variable. Pour sortir de notre fonction et continuer d'écrire notre programme, on fait deux retours à la ligne et on sort de l'indentation. On peut maintenant appeler notre fonction, en tapant son nom suivi de parenthèses. Donc, tapons ma_fonction parenthèses ouvrant, parenthèses fermante. Lançons notre programme et Python vous affiche bien ma variable est 1. Maintenant, ça serait bien qu'on puisse changer la valeur de la variable ma_variable en passant une autre valeur quand on appelle notre fonction. C'est ce qu'on appelle les paramètres. Pour ça, on doit modifier notre fonction en y ajoutant ma_variable dans les parenthèses. On peut maintenant retirer la ligne où on déclarait la variable, on relance notre programme et là, on voit qu'on a une erreur. C'est parce que Python s'attend à recevoir un paramètre entre parenthèses quand on appelle notre fonction, alors qu'on lui en a pas donné. Pour régler ça, on va lui passer une valeur, disons 42, qu'on met entre parenthèses quand on l'appelle. Si on relance notre programme, on voit maintenant qu'on a la phrase ma variable est 42, qui s'affiche correctement. Ici, on passe un seul paramètre à la fonction, mais une fonction peut recevoir zéro paramètre, comme on l'avait juste avant, ou bien autant de paramètres qu'on veut. Elle peut aussi avoir des paramètres optionnels et pour ça, on assigne une valeur par défaut au paramètre qu'on veut rendre optionnel dans la déclaration de fonction. Disons qu'on veut que ma variable soit égal à 5 par défaut, si on ne lui passe pas de valeur. On peut l'appeler en lui passant un paramètre, gardant 42, mais on peut aussi l'appeler sans paramètre, et elle prendra la valeur 5 par défaut. Si on lance notre programme, on voit qu'on a plus d'erreurs, car Python comprend que cette fonction peut recevoir soit zéro, soit un paramètre. Et on a bien l'affichage ma variable est 42 dans le premier cas, et on a ma variable est 5, quand on n'a rien passé en paramètres dans le deuxième cas. Une fonction peut aussi recevoir un nombre indéfini de paramètres avec le symbole étoile et le mot args, ou même deux symboles étoiles et le mot kwargs pour Keyword arguments. Si on ne sait pas combien de paramètres on va avoir ? On peut ajouter le symbole étoile avant le nom de la variable qu'on a entre parenthèses dans la définition de fonction. Maintenant, si on rappelle notre fonction en lui passant les valeurs 4, 3, 2 et 1, on voit qu'on n'a pas d'erreur, notre fonction affiche bien les quatre paramètres. Vous pouvez voir args comme une liste. D'ailleurs, si on print le type de args, Python nous dit que args est de type tuple. Les tuples sont des types d'ensembles qui sont un peu différents des listes et on verra ça plus tard dans ce tutoriel. On peut aussi avoir des arguments nommés avec deux étoiles suivi du mot kwargs pour keyword arguments. Pour ça, on va ajouter un nom à chaque paramètre qu'on passe à notre fonction. Ajoutons donc 4 en toute lettre et puis égal la valeur 4, 3 en toute lettre égal 3, 2 égal 2 et 1 égal 1. On voit qu'on a un nouveau type d'objet de type dict pour dictionnaire, c'est aussi un nouveau type d'objet qui nous permet d'avoir des paires clé valeur, et on voit ça ensemble juste après dans cette vidéo. Les fonctions qu'on a codé jusqu'à maintenant ne renvoient pas de valeur. Si vous vous souvenez avec la fonction input, on pouvait récupérer la valeur en l'assignant à une variable. On avait par exemple age égal input et puis la question qu'on lui posait entre parenthèses et on pouvait assigner la valeur qu'on récupérait add. Pour pouvoir récupérer une ou plusieurs valeurs dans notre fonction, on utilise le mot return. On va donc créer une nouvelle fonction qui fait la somme de deux nombres qu'on lui passe. On va donc faire def, suivi du nom de notre fonction, ici somme, suivi de parenthèses dans lesquelles on met deux paramètres A et B. Dans le corps de notre fonction, on va taper le mot return suivi de A plus B. On peut maintenant appeler notre fonction et récupérer la somme en l'assignant à une variable, en faisant S égal somme et puis en lui passant 4 et 5 entre parenthèses. On peut donc faire print de S pour afficher le contenu de la variable S. Si on lance notre programme, on voit bien qu'on a la valeur 9 qui s'affiche. On peut aussi appeler notre fonction directement dans le print avec print entre parenthèses, somme entre parenthèses, 5 virgule 4, puis on ferme les parenthèses. Relançant le programme et on voit que rien n'a changé, on a toujours la valeur 9 qui s'affiche. En Python, on peut retourner plusieurs valeurs. Donc on peut modifier notre fonction somme qu'on avait fait juste avant, et en plus de l'addition, on va lui renvoyer les deux paramètres. Donc on a return A plus B, A, B. Maintenant, si on relance un programme, on voit que print nous affiche bien les trois valeurs. Une notion importante quand on travaille avec des fonctions est la notion de scope. On peut traduire scope par portée et c'est des endroits dans notre code où certaines variables seront connues seulement localement. Voyons ça concrètement en déclarant deux fonctions, fonction une et fonction deux. Dans le corps de ces fonctions, on va avoir des blocs similaires, dans les deux fonctions, on va avoir une assignation de variable A, et puis on va afficher le contenu de la variable A. Dans la fonction une, on assigne 1 à la variable A, et puis on fait print fonction une A égal suivi de la variable A. Dans la fonction deux, on fait pareil, sauf qu'on assigne 2 à la variable A, et on fait print fonction deux A égal A. Maintenant, on va essayer d'afficher le contenu de la variable A dans le programme principal. Si on lance notre programme, on voit que Python nous dit que la variable A n'est pas définie. C'est parce que lorsqu'on déclare ces variables dans notre fonction, seules les fonctions ont accès à cette variable. La portée de la variable est limitée localement à la fonction dans laquelle elle est définie. On peut aussi déclarer des variables de manière globale, ce qu'on peut faire en déclarant une autre variable A tout en haut de notre programme, dans laquelle on met la valeur 0. C'est maintenant qu'on relance notre programme, on voit que chaque fonction a sa valeur locale de A, mais il y a aussi une valeur globale de A qui est 0, et là notre programme principal la connaît aussi. Vu que A est maintenant globale, on peut supprimer l'assignation dans la première fonction par exemple, et là même s'il n'y a pas d'assignation de A dans la fonction, notre fonction va se reposer sur la variable globale A et l'utiliser par défaut. Si on relance un programme, on voit que dans la fonction une, A est maintenant égal à 0. Donc, revoyons tous les éléments qui composent une fonction avant de passer à notre quatrième projet qu'on va faire ensemble."les mêmes règles que pour les variables à savoir le snake case, des mots en minuscules séparés par des underscore, barre en bas. puis on a des parenthèses dans laquelle on peut passer des paramètres, autant qu'on veut, soit zéro, soit une infinité de paramètres, on a les symboles deux points, un retour à la ligne avec une indentation d'espace ou de tabulation. puis le corps de notre fonction qui possède son propre scope et qui est la logique de notre fonction. voilà, on peut maintenant passer au 4e projet de cette formation. on va coder une version simplifiée de la fonction range. recoder les fonctions standard d'un langage est une bonne pratique car ça rend une meilleure compréhension. dans la vidéo précédente, on a utilisé la fonction range pour pouvoir boucler un certain nombre de fois avec la boucle for. on va donc coder une fonction simple range, qui ne prend qu'un paramètre N, et qui renvoie une liste qui contient N éléments de zéro à N moins 1. en réalité la fonction range est plus complexe, elle prend plus de paramètres que ça et elle ne renvoie pas exactement une liste. c'est pour ça qu'on fait la version simplifiée de range, la fonction simple range. donc je vous laisse essayer de faire votre propre fonction range, je vous invite encore une fois à mettre la vidéo en pause et on se retrouve dans quelques secondes pour la faire ensemble. pour coder une fonction simple range, on utilise le mot def pour définir notre fonction, puis le nom simple underscore range, des parenthèses dans laquelle on va fournir le seul paramètre qu'on va avoir N. dans le corps de notre fonction, on va déclarer deux variables. la première ça serait une liste vide avec L égal et puis des crochets. puis on a aussi avoir une variable I qui va nous servir d'indice, dans laquelle on va mettre la valeur zéro. on aura une boucle while qui va boucler tant que I est plus petit que N. et dans le corps de notre boucle while, on va ajouter l'élément I à notre liste à chaque passage dans la boucle. on doit ensuite incrémenter I de un pour ne pas partir en boucle infinie. et à la fin de notre fonction, on renvoie notre liste L qui devrait contenir N éléments de zéro à N moins 1. testons notre fonction en l'appelant avec print de simple range à laquelle on passe la valeur 5 en paramètre. quand on lance notre programme, on voit bien qu'on a une liste qui contient 5 nombres, de zéro à 4. comme je vous dis la vraie fonction native range est plus compliquée que ça. vous pouvez aller voir sa définition de fonction et éventuellement lui rajouter plus de fonctionnalités pour qu'elle soit plus utile. on a vu les listes qui permettent d'avoir plusieurs objets dans un seul ensemble. maintenant on va avoir d'autres types de collection ensemble, les tuples, les sets et les dictionnaires. donc commençons avec les tuples. on peut déclarer un tuple en utilisant des parenthèses. les tuples sont immuables, ça veut dire que contrairement aux listes, on ne peut pas les modifier. si on fait nombre à la position 5 égal 6, on aura une erreur. on peut utiliser les fonctions comme len sur un tuple et on peut aussi voir si un élément se trouve dans un tuple avec le mot-clé in. tuples nous donne accès à deux méthodes, index et count. index permet de connaître l'indice d'un élément qu'on lui passe entre parenthèses, s'il se trouve dans le tuple. et count nous permet de compter combien de fois un élément se trouve dans le tuple. les différences entre une liste et un tuple sont donc que les tuples sont plus rapides que les listes car ils sont immuables, contrairement aux listes qu'on peut modifier facilement. mais on va aussi avoir tendance à mettre des éléments de même type dans une liste, alors qu'on va souvent utiliser les tuples comme des structures avec des types d'objets différents. par exemple, si on veut déclarer un ensemble de nombres, on aura réflexe de faire une liste. mais si on veut un ensemble qui n'est pas un dictionnaire et dans lequel on a plusieurs types de variables différentes, comme les détails d'un étudiant par exemple, on aura tendance à utiliser un tuple. voyons maintenant les sets. les sets sont des ensembles qu'on déclare avec des accolades. ils n'ont pas d'ordre précis et on ne peut pas les modifier, car ils sont immuables. on n'a donc pas de doublons dans un set et on ne peut pas les modifier avec une simple assignation comme on le ferait avec une liste par exemple. prenons un set de nombres avec plusieurs nombres dans le désordre et avec des doublons. en l'affichant avec print, on voit que python a changé l'ordre dans notre set, en 0 1 2 3 4, et qu'il a retiré les doublons, deux et trois. avec les sets comme avec les listes, on peut utiliser la fonction len qui fonctionne également, ainsi que le mot in pour vérifier si un élément se trouve dans notre set. la différence avec les listes, c'est que comme les sets n'ont pas d'ordre, on ne peut pas accéder à un élément précis en lui passant un indice. si on fait nombre de deux, python va nous renvoyer une erreur. on ne peut pas non plus changer les valeurs d'un set comme on le fait avec les listes, en assignant une valeur à un indice. mais heureusement, on a les méthodes add et remove pour faire plus ou moins la même chose. nombre add de cinq ajouera bien l'entier cinq à notre set de nombres. et on peut aussi retirer un élément précis avec nombre, remove et puis lui passer un élément en paramètre. la méthode pop sur un set permet aussi de retirer le premier élément du set. on a aussi des méthodes qui permettent de comparer deux sets entre eux, union, intersection et différence. l'union est ce qui sera contenu dans les deux sets. donc si on fait cet un union cet deux, on a tous les éléments qui se trouvent dans cet un ou dans cet deux. l'intersection est ce qui se trouve en commun dans les deux sets. cet un intersection cet deux nous donnera que les éléments qui sont et dans cet un et dans cet deux. et différence est ce qu'on trouve dans le set un mais pas dans le set deux. cet un différence cet deux nous donnera que les éléments qui sont exclusifs à cet un. pour voir les autres méthodes de set et en plus en général, on peut utiliser la fonction dir à laquelle on passe notre objet pour voir toutes les méthodes et attributs d'un objet et la fonction help permet aussi d'avoir de l'aide de base de python pour un type d'objet. finalement, voyons les dictionnaires. les dictionnaires sont des types d'ensemble clé valeur. ils ont un ordre précis et on peut les modifier avec une simple assignation, mais ils ne peuvent pas avoir de clés en doublon. on peut déclarer un dictionnaire avec des accolades comme un set, sauf qu'on va lui passer un ensemble clé deux points valeur. donc déclarons un dictionnaire de nombres. pour accéder à une valeur, on utilise la clé comme on le ferait avec l'indice numérique dans une liste, sauf que là on l'a nommé avec une clé. donc si on fait nombre crochet et puis qu'on lui passe la clé un entre guillemets, on aura bien l'entier un. pour voir toutes les méthodes et attributs d'un dictionnaire, on peut utiliser la fonction dir. donc faisons dir de nombre et on va par exemple qu'on a la fonction get. on utilise la fonction get pour obtenir un élément dans un dictionnaire. c'est comme utiliser la clé entre crochets, sauf que si on donne une mauvaise clé entre crochets, python va nous renvoyer une erreur et cracher violemment avec une key error. alors qu'avec get, python va essayer de récupérer la valeur pour la clé donnée et il renverra none s'il ne trouve pas la valeur pour la clé. on peut aussi lui passer une valeur en deuxième position en paramètre. ça deviendra la valeur qu'il renverra par défaut s'il trouve pas la clé dans le dictionnaire. c'est donc une bonne pratique d'utiliser get plutôt que faire des try accept par exemple. on peut aussi modifier ou ajouter une nouvelle paire clé valeur avec la méthode update ce qui revient à utiliser l'assignation. par exemple, nombre 5 égal 5 est équivalent à nombre update 6 égal 6. on peut aussi utiliser la méthode pop pour retirer un élément d'un dictionnaire en lui passant une clé. par exemple, nombre pop de trois retirera notre paire clé valeur qui a la clé trois. on peut aussi récupérer toutes les clés d'un dictionnaire avec la méthode keys. donc si on fait nombre point keys, on récupère toutes les clés. pareil pour les valeurs avec la méthode values. si on fait nombre point values, on a toutes les valeurs. et items nous renvoie une sorte de liste qui contient des tuples qui eux mêmes contiennent les clés et les valeurs pour chaque élément de notre dictionnaire. une classe, c'est comme la représentation d'un objet dans le monde réel. d'ailleurs en programmation, on utilise souvent le mot objet pour parler d'une classe. les classes en python permettent de regrouper des données et des fonctions dans une structure facile à réutiliser. c'est comme un moule, un modèle ou un plan qui va nous permettre de créer des versions d'un objet. et les objets qu'on crée avec des classes sont appelés des instances. donc le concept de classe est central dans la programmation orientée objet ou POO. et faire de la programmation orientée objet, ça veut dire utiliser des classes dans notre code. et on s'est déjà servi de la POO et des méthodes sur des objets quand on a utilisé point append ou point remove sur des collections par exemple. mais maintenant, on va faire notre propre classe. disons qu'on veut faire un modèle pour créer des voitures, des cyber trucks de la marque Tesla. on va donc avoir une classe comme ça. on commence avec le mot class qui permet de créer une classe, c'est comme le mot def qui permet de créer des fonctions, mais pour les classes. cyber truck est le nom de notre classe. la convention de nommage veut qu'on utilise le pascal case, donc des mots qui commencent par des majuscules. par exemple, on peut écrire mon cyber truck ou ma voiture. ensuite, on a trois attributs de classe qui définissent les instances qu'on va créer. on a l'attribut marque, on va mettre Tesla. dans modèle, on va mettre cyber truck, et dans l'année, on va mettre 2023. et voilà, maintenant on peut créer des cyber trucks. donc faisons cyber truck égal cyber truck avec un C majuscule et des parenthèses. et on peut accéder aux attributs de la classe avec le nom de la variable et puis point marque, modèle ou année. donc pour afficher la marque de notre cyber truck, on fait print cyber truck point marque. mais maintenant, ça serait bien que notre cyber truck soit capable de faire quelque chose. donc on va y ajouter la capacité de klaxonner avec une fonction, ou une méthode de classe qu'on va appeler klaxonner. dans notre classe, on crée une fonction klaxonner qui fait print tut tut. maintenant, pour que la méthode soit valide, on doit lui passer une variable en paramètre. cette variable est une référence vers l'instance en cours et par convention, on l'appelle self. on reparle du mot self juste après. donc maintenant, on peut faire cyber truck point klaxonner et on a bien tut tut qui s'affiche. on peut aussi ajouter ou modifier les attributs et des méthodes à nos objets après leur instanciation, en lui assignant des choses. reprenons notre cyber truck. si c'est un cyber truck qui date en fait de 2024 plutôt que 2023. on peut faire cyber truck point année égal 2024. et à partir de maintenant, quand on fait print cyber truck point année, on aura 2024 et plus 2023. on peut aussi utiliser la fonction dir sur notre cyber truck et sur tous les objets en python d'ailleurs pour avoir tous les attributs de classe. donc print dir de cyber truck affichera tous les attributs auxquels on a accès avec l'instance de cyber truck. mais donc c'est bien de pouvoir créer des cyber trucks, mais ça serait mieux de pouvoir créer différents types de voitures de manière modulaire, en leur passant les paramètres qu'on veut. et pour ça, on utilise ce qu'on appelle un constructeur. donc changeons le nom de notre classe de cyber truck en voiture. puis on va déclarer le constructeur avec une méthode spéciale, init. init permet de déclarer un constructeur, c'est une méthode spéciale qui est appelée lorsqu'on crée une nouvelle instance de la classe. elle initialise l'instance de l'objet et les attributs de classe qu'on lui passe en paramètres. et donc pour créer d'autres types de voitures en passant des attributs marque, modèle et année comme on veut, on va utiliser des paramètres. on commence par self, comme pour notre méthode klaxonner. et puis on va lui passer marque, modèle et année. et plutôt que de les avoir en dur, on va changer les trois attributs qu'on avait en self point marque égal marque, self point modèle égal modèle et self point année égal année. et grâce à ce constructeur, on peut maintenant créer des instances de la classe voiture en lui passant des paramètres nommés. donc changeons la classe notre cyber truck en voiture. et on va lui passer marque Tesla, modèle cyber truck et dans l'année, on va mettre 2023. mais on peut aussi créer des voitures totalement différentes. faisons par exemple une Toyota Corolla avec Corolla égal voiture, marque Toyota, modèle Corolla, année 2022. on peut faire klaxonner nos voitures ou afficher leurs attributs. ce sont deux instances indépendantes qui viennent de la même classe avec des attributs différents. on pourrait ajouter plein de fonctionnalités à notre classe voiture comme une vitesse, et puis des méthodes pour accélérer, décélérer et freiner. et avec ça, on aurait la base pour une voiture dans un jeu vidéo de course par exemple. mais pour le moment, reparlons du paramètre self qu'on a passé dans le constructeur dans notre méthode de classe et qu'on doit passer dans toutes les méthodes de classe en python. cette variable self sert de référence à l'instance qu'on est en train d'utiliser. et donc python aura besoin d'avoir cette valeur en premier paramètre de ses méthodes pour savoir de quelle instance on parle. d'ailleurs, on peut aussi appeler une méthode de classe avec une version plus explicite en faisant voiture point klaxonner et puis en lui passant notre instance cyber truck par exemple. et là ça correspond mieux à la déclaration de méthode qu'on avait dans notre classe voiture, et ça permet de mieux comprendre pourquoi on a besoin de la variable self. comme exercice, je vais vous proposer de faire votre propre machine à pizza. donc on va faire une classe pizza et vous pouvez faire ce que vous voulez avec. par exemple, dans le constructeur, on peut prendre une base qui est blanche ou rouge. on peut prendre un diamètre pour la taille de la pizza et puis un type de pizza comme calzone par exemple. puis on peut avoir une méthode pour ajouter des ingrédients, une méthode pour l'amener à une certaine table ou bien une méthode pour la livrer à un client. donc voilà, n'hésitez pas à être créatif. il n'y a pas vraiment de bonne ou mauvaise réponse. le but c'est d'implémenter un constructeur avec des attributs et au moins une méthode de classe. je vous laisse mettre cette vidéo en pause et on se retrouve dans quelques secondes pour une implémentation de la classe pizza. donc voilà, j'espère que vous avez mis la vidéo en pause. maintenant, j'ai vous proposer une implémentation de la classe pizza. donc on commence avec le mot clé class, on appelle notre classe pizza. puis dans le constructeur, on va avoir self, la base de la pizza qui sera blanche ou tomatée, le prix, le diamètre, son style, classique, calzone,Stromboli ou autre et les ingrédients qu'on veut sur notre pizza. donc pour chaque attribut, on fait self point donc on a self point base égal base, self point prix égal prix, self point diamètre égal diamètre, self point style égal style et self point ingrédient égal ingrédient. on va faire une première méthode qui sert à ajouter des ingrédients qu'on va appeler ajouter ingrédient qui prend en paramètres self et le nouvel ingrédient qu'on veut ajouter. avant d'ajouter l'ingrédient, on va vérifier que l'ingrédient n'est pas ananas parce que si c'est des ananas, on va lever une erreur qui dit les ananas ne vont pas sur les pizzas. sinon on prend notre attribut ingrédient et on ajoute le nouvel ingrédient. aussi à chaque nouvel ingrédient ajouté, on va augmenter le prix d'un euro. donc on fait self point prix égal self point prix plus 1. ensuite, on a une méthode pour servir une pizza à une table qui prend en paramètre l'instance de la pizza avec self et puis la table et qui affiche avec la fonction print, j'amène la pizza à la table et puis le numéro de la table. pareil pour la livraison, on a une méthode qui permet de livrer qui prend la pizza avec l'objet self et l'adresse à laquelle on va livrer et qui affiche, je livre la pizza à l'adresse et puis l'adresse. maintenant, on va demander à l'utilisateur quel base il veut. pour ça, on crée une variable base et on utilise la fonction input pour demander quelle base voulez-vous, tomate ou blanche. pareil pour la taille, on crée une variable taille et puis on demande quelle taille voulez-vous, moyenne ou grande. pour le style, on demande quel style voulez-vous et on lui propose classique, calzone, Stromboli ou autre. pour les ingrédients, il devra taper ses ingrédients séparés par des virgules. donc on a la taille, moyenne ou grande. par défaut, on va partir du principe que la taille sera moyenne donc 30 cm. mais si la personne veut une pizza qui est grande, on fait passer le diamètre à 34. pour les ingrédients, on prend les ingrédients et on split, ça veut dire on sépare sur les virgules. comme ça la liste d'ingrédients qu'il a mis séparés par des virgules donnera une liste d'ingrédients individuels. pour le prix, on part d'une base de 5 euros et puis on ajoute 1 euro par ingrédient, ce qu'on peut faire en utilisant la taille de la liste d'ingrédients. donc on peut créer notre instance de pizza en faisant pizza égal pizza, en lui passant la base, le diamètre, le style, les ingrédients et le prix. maintenant, on va tester notre fonction pour ajouter des ingrédients. on va ajouter des olives. donc on va regarder la liste d'ingrédients et le prix de la pizza avant et après l'ajout. puis on va essayer de livrer la pizza au neuf rue du bois. on va servir la pizza à la table 13. puis on va demander si la personne veut ajouter des ananas pour tester notre erreur. donc on lui demande oui ou non. et si la personne répond oui, on va ajouter l'ananas, ce qui devrait lever une erreur. lançons notre programme pour tester tout ça. quelle base voulez-vous, on va mettre tomate. quelle taille voulez-vous, on va mettre moyenne. quel style voulez-vous, on va choisir classique. quels ingrédients vous voulez, je vais mettre tomate, ail et aubergine séparés par des virgules et des espaces. quand j'appuie sur entrée, le reste de mon programme s'exécute. donc on voit que avant d'ajouter des olives, j'avais trois ingrédients sur ma pizza et elle coûtait 8 euros. et en ajoutant des olives, j'en ai quatre et elle coûte maintenant 9 euros. on voit que la fonction pour livrer fonctionne bien car ça affiche, je livre la pizza à l'adresse neuf rue du bois. pareil pour la méthode servir qui permet d'amener une pizza à une table. j'amène la pizza à la table 13. et puis maintenant le programme nous demande si on veut ajouter des ananas, on va répondre oui et là on a bien une erreur de type, une erreur type error, les ananas ne vont pas sur les pizzas. et voilà, c'est tout pour la base des classes, mais il y a plein d'autres concepts de POO que je vous invite à découvrir avec python. voilà, c'est tout pour cette formation d'une heure en python. vous avez maintenant les bases qui vont vous permettre de vous lancer dans la programmation, mais il y a encore plein de concepts importants à apprendre en python avec lesquels vous pourrez améliorer vos connaissances. et pour ça, vous trouverez des vidéos sur python au format long ainsi que des shorts sur cette chaîne. je vous invite donc à vous abonner pour ne rien rater et de me dire en commentaire les sujets pour lesquels vous voudriez que je fasse des vidéos.Je suis prêt à transcrire. Envoyez-moi l'audio.

Outils de révision