Session du 18 février 2025 à 21h00
TOSA & Certifications
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat TOSA
Session de mentorat TOSA
00:00:00 :C'est bon, l'enregistrement est lancé.Donc, ce soir, j'ai décidé de vous faire un petit rappel sur tout ce qui est boucle et conditions.Alors, pourquoi je suis parti sur ce sujet-là ?
00:00:16 :Je pense que pour certains, vous l'avez peut-être vu, je m'occupe pas mal des corrections sur Docstring.Et...Attendez, parce que je vois qu'il y a Sylla qui demande est-ce que je l'accepte sur le truc, mais je n'ai pas sa demande.
00:00:35 :Je vais lui envoyer un petit message.Vous êtes passé par le site ou par le lien que j'avais posté ?Au début par le site et après par le lien que tu as posté.
00:00:55 :Ouais, sur Discord.Ok.Hop là.Donc, je vous disais les boucles.Donc, je fais pas mal de corrections sur Docstring.Et je me suis aperçu qu'il y avait des petits éléments sur les conditions et les boucles qui n'étaient peut-être pas super, super clairs.
00:01:22 :Donc, je me suis dit qu'on va faire une petite remise à plat.Ça fait jamais de mal.Et puis, je parlerai d'un petit truc enfin qui est lié un petit peu aux conditions,qui n'est pas forcément hyper connu, mais qui peut être très pratique.
00:01:35 :Donc, on va commencer tout bêtement par les conditions.Alors, je rappelle, if, elif, else.Ok.Je vais vous partager un petit VS Code, histoire qu'on puisse…Hop là.
00:01:53 :Et on va écrire trop vite.Hop là.Voilà.Hop.Voilà.Vous voyez le…Ouais, impeccable.La taille, je vais peut-être monter un petit peu.Voilà.
00:02:19 :Ça sera un peu mieux.Hop là.Alors, donc je disais…Hop là, il y a celui-là qui arrive.Celui-ci là.Salut.Salut, salut.C'est un peu compliqué ce soir à rejoindre.
00:02:45 :Donc, j'expliquais les boucles et les conditions.Alors, d'abord, on parlait des conditions.Donc, tout le monde connaît if, hop là, elif et else.Ok.Donc, je rappelle, le if, il définit une condition.
00:03:02 :Donc, si la condition est remplie, il exécute le code qui est à l'intérieur.Le elif, c'est une alternative.Donc, pour un elif, on va définir une autre conditionqui réalisera à ce moment-là le code qui est à l'intérieur.
00:03:15 :Et le else, c'est au cas où il n'y a aucune condition qui soit remplie,on réalise un code.Alors, ce que je vois de plus en plus avec les if, elif, else, c'est ça.
00:03:27 :Alors, notamment dans des boucles.Alors, if condition, par exemple, là.Voilà, do something, c'est très bien.Else, break.Voilà.Donc, ça, c'est un schéma que je vois de plus en plus,enfin, assez souvent.
00:03:48 :Et en fait, ce schéma, il ne sert strictement à rien.Je m'explique.Dans le cadre d'une action quelconque ou autre,le else break, il ne sert à rien.
00:04:00 :C'est-à-dire que dans le cas d'une boucle classique,par exemple une boucle fort,si vous demandez à ce qu'une condition soit respectée,le code va être exécuté, on est bien d'accord.
00:04:14 :Mais si la condition n'est jamais respectée,la boucle va se terminer d'elle-même.On est toujours d'accord.Donc, en fait, il y a des gens qui me rajoutent beaucoup de else avec un breakpour arrêter une boucle.
00:04:26 :Alors, ça n'a pas forcément de sens parce que, tout simplement,notamment dans une boucle fort,soit on cherche à obtenir le premier élémentet à ce moment-là, on peut passer autrement.
00:04:37 :On va, par exemple, faire une simple conditionavec if élément in list.D'accord ?On va basculer sur notre exécution de code.Et ça revient au même que si je faisaisfor élément in listif élémentégale, je ne sais pas, 7,do something.
00:05:13 :Ok ?Jusque-là, on est bien d'accord.En fait, la valeur qu'on va donner à l'élément ici, c'est 7.On va chercher la valeur 7.Et j'en vois qui me fontsinon continue, par exemple, ou break.
00:05:30 :Enfin, tout simplement continue, dans ce genre de cas,c'est plus un continue que je vais...Là, ça ne sert strictement à rien, en fait.C'est du code écrit pour rien.
00:05:38 :Parce que le continue, il va forcément le faire.Ok ?Donc, là où je veux en venir, c'est que,ce que je voulais rappeler, c'est qu'un if,en soi, il se suffit à lui-même.
00:05:50 :Ce n'est pas parce que, dans les cours,j'ai montré du if-else ou if-elif-elsequ'il faut se sentir obligé de mettre un else derrière un if.
00:05:59 :Ok ?Le if, en lui-même, il suffit tout seul.Petite astuce que je vois par rapportaux conditions en if.Est-ce que vous pourriez me dire comment vous feriezpour savoir si une liste est vide ?
00:06:15 :J'ai perdu tout le monde ? Je ne suis pas dans le vide ?Non, non, non.J'ai cru que...Vu que j'ai eu des soucis techniques aujourd'hui,je me suis dit, ça y est, j'ai encore un autre.
00:06:33 :J'ai perdu tout le monde.Est-ce que quelqu'un peut me dire comment il feraitpour vérifier si une liste est vide ?Juste un if...Ouais, vas-y.
00:06:45 :If not list.On va définir une liste qui est vide.Après, on a la condition if...Je sais ce que tu me dis.Je définis une liste vide, ok ?
00:07:01 :Exactement.Mettre ma liste.Et ensuite ?Et ensuite ?If not ma liste qui est définie,on print la liste est vide.Else, print la liste n'est pas vide.
00:07:32 :Ouais, ok.Alors, c'est pas l'inverse ?C'est directement sur la liste.If directement sur la liste.Ma liste, quand c'est vide,il renvoie false.Pour Python, c'est une valeur false.
00:07:50 :D'accord ?On va le lancer vite fait.Eh bien, on a bien la bonne réponse.La liste est vide.Parce que ma liste, il faut savoir qu'une liste,quand elle est vide, en valeur boolean,c'est false.
00:08:05 :Donc...Not.Avec le not, on passe en trou,donc le trou,on arrive sur la bonne réponse.Exactement.Alors, ce que je vois souvent, c'est ça.
00:08:17 :Alors,if ma listeégale égale,ça.Concièrement,c'est pas faux.Si j'éclate le code là,ça marche toujours.Si, ou alors, j'ai ça aussi.C'est ça.
00:08:39 :Donc ça, voilà.C'est une petite astuce à connaître,notamment avec les listes.Si une liste est vide,elle vous renvoie false.Donc avec un not list,on a bien le résultat,on a bien le résultat attendu.
00:08:59 :OK ?Alors, les opérateurs, justement,vous les connaissez tous ou pas ?Allo, Stéphane ?Oui ?Bon, je...Je voulais savoir les deux expressions, en fait.
00:09:14 :If not my listet if length listest égal à zéro,c'est...Qu'est-ce qui est plus efficace ?Parce que pour moi,if my list is not my list,c'est plus efficace.
00:09:28 :Parce que pour moi,if length of my listest égal à zéro,c'est plus parlant, en fait.Alors, c'est plus parlant en termes de...de lecture de code ?
00:09:41 :C'est plus littéral ?C'est plus explicite.C'est plus explicite ?On est bien d'accord ?Ouais, ouais.Maintenant,si on prend en comptele fait que ma liste renvoie false,on va se simplifier l'écriture.
00:09:56 :OK ?Ouais.C'est bien si là,parce que tu me permets de faire une...une bascule.Notamment sur la simplificationpar rapport avec les conditions,avec les compréhensions de liste.
00:10:12 :Alors, est-ce que vous savez tousà quoi correspondent les compréhensions de liste ?Ouais, c'est...En une seule ligne.Alors, on va dire.C'est très pratique,mais ça peut vite devenir dangereux.
00:10:25 :Alors, on va faire...Je vais faire une liste comme ça.Alors, j'essaie de trouver pour faire...Voilà.On va le pousser un peu plus.Voilà.
00:10:39 :Alors, par exemple,je vais vous passer ça en compréhension de liste.Je vais chercher à obtenirque les valeurs paireset divisibles par 4.D'accord ?
00:10:53 :D'accord.Alors, on va passer par une compréhension de liste.D'abord, je vais récupérer mes valeurs paires.Alors, mes valeurs paires.C'est une listequi va être if for i.
00:11:07 :Là, au tapis de Jongo, Stéphane, aujourd'hui.For i.Il m'a liste.If modulo 2 égale à 0.Donc là, on est d'accordqu'avec ça, je ne récupère que les nombres paires.
00:11:21 :D'accord ?Maintenant,si je veux continuer avec de la compréhension de liste,je vais prendre j for j in.Voilà.If j modulo 4est égal à 0.
00:11:50 :On est d'accord ?Je ne récupère que les nombres qui sont à 4.D'accord ?On va encore s'amuser un peu plus.On va récupérer ceux qui se divisent par 8 uniquement.
00:12:02 :On reprend.Hop.Allez, k for k in.Là, if k modulo 8est égal à 0.Ok ?On va imprimer tout ça.Voilà.Si j'exécute mon script,normalement, je vais récupérer 8 et 16.
00:12:36 :Ok.Vous voyez, ça marche.C'est fonctionnel.Le problème, c'est que là,on s'est un peu imbriqués les choses.Alors, le code, il est fonctionnel.On peut vite retrouver à comprendre.
00:12:49 :Mais ce n'est pas parce qu'on a une facilité qui se présente.D'accord ?On doit essayer à la simplifier avec la compréhension de listeparce qu'on l'a vueou à faire du regroupement de données comme ça.
00:13:01 :Donc là, si on écrivait ce code dans une boucle,on ferait un truc dans ce genre-là.Voilà.Et on imprimerait l'élément uniquements'il répond bien à toutes les conditions.
00:13:17 :Ok ?Là, dans ce cas-là,le format avec un if et des ifs imbriqués,il est valable parce qu'on comprend bien ce qu'on cherchecomparé au format compréhension de liste.
00:13:32 :Maintenant, il y a des fois où il va falloir savoir aussimanipuler ces conditions, jouer avec.Tiens, je vais vous reprendre un exempleque j'ai travaillé cet après-midi comme ça,ça sera très parlant.
00:13:48 :Donc, pour l'histoire,j'étais sur une programmation d'un OTP pour Djangoet donc j'ai besoin de vérifier plusieurs conditions.Alors, au début, j'ai ma condition qui ressemblait à ça.
00:13:59 :Donc, if, il va me mettre plein d'alertes,mais ce n'est pas grave,on va essayer d'en faire abstraction.de fmethodégal, égal, c'est authentique à tort,de test,tort,end, user,point,ease,c'est pas,enable.
00:14:29 :Voilà.Donc, j'avais cette condition-là.D'accord ?Ma condition à marche,elle vérifie que la méthode utiliséepour le deuxième facteur d'authentification,c'est un type authenticateuret si j'ai bien le deuxième facteur d'authentificationqui est activé sur mon utilisateur.
00:14:51 :Là, je lui disais de faire ces vérificationspour s'assurer que l'OTP était bon.Maintenant,j'aime bien, il me la propose,ça j'aime bien.Si je veux faire la même chose avec l'SMS.
00:15:06 :Pareil, je vérifie si c'est bien l'SMSet si c'est activé.OK ?Et maintenant,si je veux le faire avec un e-mail,même chose.Alors, est-ce que là,il n'y a pas déjà quelque chose qui vous choque ?
00:15:23 :Voilà.Est-ce qu'on ne pourrait pas simplifier un peu tout ça ?On pourrait déjà faire un premier test avecif the two effets enabled.Voilà.
00:15:49 :Exactement.On pourrait très bien faire ça.Hop.Un if user is enabled.On reprend notre code en dessous.On indente.D'accord.Et après, on n'a plus qu'à vérifier les fausses.
00:16:10 :Hum.Voilà.Donc, c'est exactement cette réflexionà laquelle je voulais vous amener ce soir avec les conditions.En fait, il faut savoir jonglerentre le fait d'avoir des conditions imbriquéeset le fait de pouvoir les réunir sur la même ligne.
00:16:27 :La règle de base que vous avez très bien vue là,c'est que si vous écrivez une condition qui se répèteau travers de vos différentes conditions,vous en faites une condition préalable.
00:16:36 :D'accord.Par contre, s'il y a des conditions spécifiques,par exemple, qu'est-ce que je pourrais rajouter ?Voilà.Hop.And,user.fun.Voilà.Là, je vérifie s'il y a bien un numéro de téléphone pour l'utilisateurparce que si je dois utiliser une méthode SMSalors que je n'ai même pas son numéro de téléphone,
00:16:59 :ça va être un petit peu embêté.Mais là, on est sur une condition spécifique de ce cas-là.D'accord.Donc, ce que je voulais vous faire passer ce soirpar rapport aux conditions, justement,c'est qu'on a des compréhensions de liste.
00:17:15 :On a tout un tas d'outils à disposition dans Pythonpour gérer les conditions.C'est d'ailleurs...Python est d'ailleurs très riche.Je vous montrerai encore une autre solution à la fin,celle de tout à l'heure qui, je pense,je ne suis pas sûr que vous connaissiez,vous l'avez déjà utilisée,
00:17:28 :mais qui marche très bien pour les conditions.On se gardera ça.D'ailleurs, ça servira dans ce cas-là.Mais il ne faut pas forcémentsoit utiliser tous les outils un petit peu magiques qu'on acomme la compréhension de listeparce que comme vous le voyez sur le premier,pour retrouver les 8,
00:17:47 :alors OK, ça marche.C'est efficace.C'est super.Mais là, franchement,pour aller débugger ça,s'il y a un problème,on va juste s'amuser.Donc il faut savoir,choisir judicieusementquelle solution on va prendre.
00:18:01 :Soit la compréhension de liste,soit des if imbriqués.Par contre, pour ce qui est des if imbriqués,il faut qu'il y ait une alertequi se mette pour vous systématiquementet si vous commencez à avoir ça.
00:18:11 :Voilà.Quand vous commencez à imbriquerles ifs, les elifs, les elsesdans des étages comme ça,n'en plus finir sur 3 ou 4 niveaux,là, quand vous faites votre crypte,c'est une petite alerte qui doit vous direj'ai quelque chose à refactorer làparce que j'ai un problème.
00:18:30 :J'ai un problème.J'ai un problème.J'ai un problème.J'ai un problème.J'ai un problème.J'ai un problème.J'ai un problème.J'ai un problème.J'ai un problème.
00:18:39 :J'ai un problème.Je dirais que déjà dépasserles deux ifs imbriqués,ça commence à devenir compliqué.Et là, quand vous allez avoirde la maintenance à faire sur votre code,ça va être dur de recomprendreet retrouver la logique.
00:18:56 :Après, vous allez me direil y a le docstring qui sert bien.On peut se mettre des petits commentairesquasiment sur chaque lignepour se rappeler à quoi sert chaque conditionet pourquoi on la vérifie comme çaet ainsi de suite.
00:19:09 :Mais bon, alors ça,ça a le défaut d'alourdir grandement le script.Ou alors il faut avoir deux scripts,un script avec des commentaireset un script sans les commentairespour mettre en production.
00:19:19 :Ça fait du boulot en double,pas pour grand-chose.Voilà.Préférez le refactoringet justement apprenez à utiliserà bon escient vos outils.Concernant les conditions,alors après,si vous avez des questions à ce niveau-là,on va poursuivre un petit peu sur ce cas-là.
00:19:41 :Est-ce que vous connaissez le mot-clé match ?En piéton.C'est le module RE, ça ?Non.Pas du tout.Alors, je vais...Je crois que c'est à partir de la 3.9
00:19:58 :que ça a été introduit.Je vous vérifie ça.En 3.10.Voilà.Ça a été introduit avec la 3.10.Pas beaucoup utilisé,mais c'était très pratique.
00:20:15 :Alors, je vous avais ditque j'allais garder ce cas-làparce que justement,il s'y prête très très bien.Là, ce qu'on fait,on va oublier l'histoirede numéro de téléphone.
00:20:26 :Vous allez voir,surtout en termes de lisibilité,c'est super.Là, ce qu'on fait techniquement,c'est que sur les différentes optionsde user de frMethod,on vérifie quelle méthode a été retenuepour le deuxième facteur d'authentification.
00:20:40 :D'accord ?Donc, on fait un if, un elif,un elif, et ainsi de suite.Là, ça va encore.On a trois solutions.Pas trop compliquées à écrire,mais on s'en sort.
00:20:50 :Mais maintenant,si je rajoutais encore un elif,je ne sais pas,plusieurs méthodes phone,on va voir jusqu'où je peux le faire jouer.Elif, voilà.
00:21:00 :Backup code.Le copilote a de l'idée.Allez, U2F.Allez, hop.Et on va se faire un dernier.Sécurité.Voilà.Là, pour commencer à écrireles différents cas,ça devient un peu plus loin,un peu plus fastidieux.
00:21:19 :Et puis surtout,en termes d'écriture,c'est quand même pas topentre les ifs et les elifs.Alors, le match, comment ça marche ?On va tout simplement y dire match.
00:21:30 :On va y donner la variableque l'on veut tester.Et là, hop, il me le propose.Vraiment, comme c'est plus clair.Il va dire, OK,tu me vérifies cette variable.
00:21:43 :Si le cas, c'est authentique à tort,tu fais quelque chose.Si le cas, c'est authentique à tort,tu me fais quelque chose.Phone, email, et ainsi de suite.
00:21:50 :Et vous voyez,il me reprend exactement la même chosequ'avec tous mes ifs et elifs.Déjà, en termes de lecture,c'est plus clair.On différencie vraiment des cas d'usage,donc c'est quand même un peu plus lisiblepour maintenir le code.
00:22:10 :Et vous avez la possibilité du else,que l'on connaît avec les elifs,qui s'écrit comme ça.Voilà.Case underscore,c'est le terme qui est utilisédans le cas de matchpour gérer le cas de else.
00:22:28 :Où, en fait, dans ce cas,vous décrivez ce que vous faitessi jamais il n'y a aucun des casqui a été rencontré par rapport aux ifs et elifs.
00:22:37 :Est-ce que vous connaissiez cette astuce ?Moi, non.Non, non, non.Même moi, jamais.Ce match-là, c'est natif Python ?Oui, c'est natif Python.C'est l'équivalent d'un switch caseque tu peux avoir ailleurs, en fait ?
00:22:52 :Voilà, par exemple.C'est exactement ça.Dans Java ou C sharp.C'est exactement ça.C'est ça.Mais là, il y a une lignée rouge, ou bien c'est...
00:23:05 :Pardon, Silas, je ne t'ai pas entendu.Le case est sous lignée rouge, c'est pas...Alors ça, c'est parce qu'en fait,il faudrait que je fasse ça.
00:23:15 :Je vais faire ça, tu vois, ça va...Il va déjà arrêter.Oh, les variables, les variables.La variable n'est pas définie,donc c'est pour ça que je...
00:23:29 :Même avec Décisionnaire,je pense que ça ne sortira pas, je pense.Voilà.Ouais.En fait, il me le sort.Par exemple, si je faisais comme ça...
00:23:41 :Ça marcherait peut-être mieux.On va faire...Is...Voilà.Je vais juste supprimer ça.Vous le transformez comme ceci.Tu vois, tout le rouge va disparaître.
00:24:03 :Hop.Voilà.Et ici, je vais le mettre en clé.Et voilà.Non, est-ce qu'il y va pas maintenant ?Ah oui.C'est ma faute.Hop.
00:24:24 :C'est...C'est...Ça.Tac.Excusez-moi, je n'avais pas vraiment prévu ce qu'il y a là.Voilà.Hop.Et voilà.Ah oui.Je rajoute ça, parce que sinon, il va m'embêter encore.
00:24:50 :Voilà.Hop.Hop, hop.Voilà.Bon, là, il est « do something », c'est parce que ce n'est pas défini.Mais en fait, voilà, le rouge, c'était juste parce qu'il ne trouvait pas les valeurs correspondantesà « user2FA » et « userIsEnabled ».
00:25:16 :C'est ma première nouvelle, le match.C'est bien, ça.Alors, moi, le match, j'utilise assez souvent dans le cas où je vais lancer une fonction différente,ou une méthode différente, en fonction du cas d'espèce que j'ai.
00:25:32 :Donc, par exemple, si je veux lancer une fonction, je ne sais pas, allez, on va l'appeler comme ça.Voilà.Voilà.« Check SMS ».Je ne vais pas tout vous les faire, je pense que vous avez compris l'idée.
00:25:57 :Donc, là, je crée mes fonctions.Ici, je vais définir vite fait.« Def », « Check », « Authenticator », voilà.Voilà.Donc, ça, pourquoi j'utilise cette version-là quand je dois comparer des valeurs et agir différemment en fonction des valeurs,c'est parce que ça me permet justement de sortir le traitement de ma data en fonction de mon cas rencontré
00:26:24 :dans des fonctions à part, mais au niveau de ma sélection de choix, j'ai quelque chose de très propre au final.J'ai lu un étudiant qui me l'a utilisé sur la calculatrice avec les différents signes et opérateurs,où il m'a mis un match opérateur en fonction d'opérateur qui était choisi par l'utilisateur,
00:26:48 :et il m'avait fait un case plus, case moins, case divisé, ainsi de suite,et ça renvoyait dans des fonctions ajoutées, addition, subtraction, division, multiplication, ainsi de suite.
00:26:59 :Et addition, subtraction, division, multiplication, ainsi de suite.Donc le match case peut être assez utile pour ça.Et maintenant, il faut que je fasse gaffe à ne pas dire de bêtises, il y a quelqu'un qui vient de nous rejoindre.
00:27:16 :Est-ce que ça nous semble un peu plus clair, l'histoire du match case ?Ouais.Donc vous voyez, au niveau des conditions, il faut bien faire gaffe,parce qu'on peut vite se retrouver embourbés dans des compréhensions de listes.
00:27:37 :C'est super intéressant.Tant mieux, tant mieux, c'est le but.Et comme je dis toujours, si vous avez d'autres sujets que vous voulez voir,n'hésitez pas à me les dire, je ne demande que ça, c'est vous présenter le contenu qui vous intéresse le plus.
00:27:52 :Donc comme je vous disais, avec les compréhensions de listes, on peut vite se s'embourber.Les IF, les LIF, comme on a vu tout à l'heure, surtout quand on commence à les imbriquer en 2, 3, 4 niveaux,ça devient très compliqué.
00:28:07 :Mais heureusement, dans Python, on a d'autres solutions, comme le match case,où mixer un petit peu tout ça, parce qu'on pourrait très bien match case authenticator.
00:28:18 :À l'intérieur, on pourrait très bien faire un IF ça.Je vais m'embêter encore avec du rouge, sinon.Else, on lance la fonction par exemple.Vous voyez, ça n'empêche pas à l'intérieur du match face de réutiliser d'autres conditionnalités,d'autres boucles ou autres.
00:28:40 :Pour tout ce qui est traitement de conditions, est-ce que c'est bon pour vous ?Ou est-ce que vous avez des questions ? Non ?On va repasser vite fait sur les boucles.
00:28:56 :On a abordé rapidement tout à l'heure la boucle FOR.Je vais garder juste ma liste, comme ça, ça va nous permettre de travailler un peu avec.
00:29:09 :Voilà.Donc vous connaissez tous cette boucle-là.FOR P in ma liste.On va faire un truc simple.INT P.Ok ?Maintenant, comment je pourrais faire si je voulais afficher également l'indice auquel se trouve mon élément de liste ?
00:29:34 :Par exemple, là pour le 1, je voudrais qu'il m'indique que je suis à l'indice 0, et ainsi de suite.Personne n'a d'idée ?Pardon Stéphane, je n'ai pas bien compris la question.
00:29:55 :Là, vous avez mis le code sur Visual Studio Code.J'ai fait une boucle sur la liste avec nos 20 chiffres.Là, techniquement, j'affiche chaque élément de la liste.
00:30:08 :Moi, je voudrais que vous me disiez comment je pourrais faire pour afficher l'élément de la listeet avoir l'indice dans la liste auquel se trouve cet élément.
00:30:19 :Par exemple, pour le 1, que ça m'affiche 0 et 1.Pour le 2, ça m'affiche 1 et 2.Pour afficher l'élément ?Pour afficher les indices de chaque élément, en plus de l'élément.
00:30:29 :C'est la fonction Enumerate sur ma liste directement qui retourne l'indice.Voilà.C'est ça.Donc, si je rajoute Enumerate, il faut que je rajoute du coup un deuxième argument.
00:30:45 :Puisqu'il va me le mettre dans quoi ?On va l'appeler...Comme ça, on va l'appeler Indice.Normalement, je ne dis pas de bêtises parce que j'ai tendance à les mélanger assez souvent.
00:31:02 :On va faire Indice.Voilà.Là, si je lance, on va voir s'il y a une grosse bêtise.Non, c'est bon.Donc, ici, on met la valeur du Enumerate en premier.
00:31:15 :Après, on met l'élément de la liste.Et comme vous voyez là, il va m'afficher la liste.OK ?Alors, je vais faire ça pour l'exercice suivant et que vous ne soyez pas perturbés.
00:31:29 :Voilà.Donc, une petite série de lettres.Ah oui, j'aurais dû mettre comme ça.OK.Bon, que ce soit suffisant.Là, maintenant, j'ai une liste de lettres.
00:31:47 :À la place de ma liste.Je vais vous commencer par la liste de lettres.Donc, j'ai une liste de lettres.Bon, que ce soit suffisant.
00:31:55 :Là, maintenant, j'ai une liste de lettres.D'accord ?À la place de ma liste.Je vais vous commenter celle-là, que ça ne vous perturbe pas.
00:32:01 :Voilà.Maintenant, ce que je veux, c'est que vous m'indiquiez toujours la même chose.Je veux avoir l'indice à lequel se trouve la lettre.Mais je ne veux pas avoir son indice, en fait, mais je veux avoir l'ordre.
00:32:19 :C'est-à-dire que, par exemple, je veux que ma liste, elle commence à 1.C'est-à-dire que je vais avoir 1 et puis A, 2 B, 3 C et ainsi de suite.
00:32:30 :Alors, comment on s'y prendrait toujours en partant sur les numériques ?Et si on faisait l'indice plus 1 ?Ah, exactement la réponse que j'attendais.
00:32:46 :Merci bien.Alors, on peut effectivement faire un indice plus 1.On peut faire un indice plus 1, effectivement.Cette réponse est bonne, ça fonctionne.Parce que la troisième position, c'est le start, je pense.
00:33:04 :Voilà.Mais dans Enumerate, en deuxième argument, on peut effectivement dire à quel numéro il commence.Par défaut, c'est 0.Mais si on le précise, là, comme dans ce cas-là, ça va être 1.
00:33:19 :Et là, si je lance mon script, vous voyez qu'il me renvoie bien 1 A, 2 B, 3 C et ainsi de suite.On pourrait, par exemple, pour la fantaisie, le faire commencer à 5.
00:33:30 :Et si je commence à 5, vous voyez bien, 5 A, 6 B et ainsi de suite.Donc, à savoir quand vous devez numérer une liste, pour récupérer l'indice,si vous voulez l'indice brut, parce que vous voulez pouvoir utiliser l'indicepour aller chercher l'élément qui vous intéresse, peu importe le motif.
00:33:48 :Vous pouvez faire un Enumerate simple, qui va par défaut commencer à 0,ça correspondra donc bien à l'indice de la liste.Maintenant, si vous souhaitez avoir un début dans votre liste qui est définie,par exemple 1, comme vous l'avez demandé au début, ou 5, ou 10, peu importe.
00:34:10 :Enumerate permet d'avoir un deuxième argument, une valeur,et quand il va commencer à compter,Enumerate ne fait que compter les éléments qu'il trouve au fur et à mesure,le fonctionnement derrière c'est ça,et au lieu de partir de 0, comme il le ferait normalement pour une liste,comme le fait Python pour chaque élément d'une liste,
00:34:28 :il va partir de 1, et donc il va dire 1 c'est le premier élément que je trouve,2 c'est le deuxième et ainsi de suite.
00:34:33 :D'accord ?Est-ce que c'est bon pour tout le monde ça ?Oui c'est bon.Ok, alors on va basculer sur une dernière petite astuce,mais ce coup-ci on va faire sur la boucle while.
00:34:53 :Je vais vous écrire un petit code.Ça me va très bien.Hop.On va se faire un petit fstring.On va rester en français quand même.
00:35:20 :Voilà.Et on va faire une incrémentation de i.Ok ?Alors comment est-ce que je peux savoir que ma boucle s'est parfaitement déroulée ?Parce que là, vous allez me dire, je vais imprimer les i,je sais que je monte jusqu'à 10,il suffit de regarder dans mon terminal,
00:35:45 :Ok, je suis arrivé à 9, donc ma boucle s'est bien exécutée.Là on est sur du print.Ça c'est pour l'aspect visuel, pour que vous visualisez bien la chose.
00:35:55 :Maintenant, qu'est-ce que je pourrais utiliser comme astucepour savoir que ma boucle s'est bien exécutée ?Je vais modifier un petit peu le code pour que vous puissiez visualiser la chose.
00:36:11 :Admettons qu'au lieu de print, je me contente simplement d'incrémenter.Là, si je lance mon script, mon script s'est exécuté.Maintenant, je ne sais pas si ma boucle s'est vraiment bien exécutée jusqu'au bout.
00:36:26 :Oui, j'aurais peut-être une erreur.Oui, mais cette erreur peut être pas forcément fatale pour Pythonet ça ne va pas empêcher le programme de continuer,donc il ne va pas forcément avoir une erreur de levée.
00:36:40 :Ce n'est pas ça l'élément qui va pouvoir me permettre de dire que ma boucle s'est bien exécutée.Est-ce que vous savez comment on fait pour savoir si une boucle wise s'est bien exécutée ?
00:36:48 :Non, pas non.Eh bien, tout simplement,cette personne ?Allez, je vous donne la réponse en utilisant un else avec la boucle white.Par exemple, print ferme la boucle.
00:37:14 :Stéphane ?Oui ?Oui, c'est là.Ah, je crois que celui-là a essayé de parler, mais on a perdu le micro.Vous m'entendez toujours ?
00:37:28 :Oui, on vous entend.Enfin, moi, je vous entends.Oui, bon, c'est tout.Oui, pas de soucis, si non plus.Bon, OK.Je vais continuer.Celui-là, sinon, si on met ta question, je vais afficher le...
00:37:43 :le script si je vois quelque chose, mais je vais continuer.Donc, avec wise, chose qu'on sait peu et qu'on utilise très peu d'ailleurs,on peut associer un else.
00:37:56 :Le else, il va se déclencher uniquement si la boucle s'est bien exécutée.Donc là, si je relance ma boucle,il m'affiche fin de la boucle,donc je sais que la boucle s'est bien exécutée.
00:38:10 :Il m'affiche fin de la boucle,donc je sais que ma boucle s'est bien exécutée.Alors, là, une fois de plus, je fais un printparce que je suis en train de vous montrer des petites choses comme çaet je fais un print parce que c'est plus visuel,vous savez exactement ce qu'il en est.
00:38:25 :Mais par exemple, je pourrais très bien avoir une variablequi s'appelle exécution correcte,OK,que je définis à false par défautet je pourrais très bien dire else,on va supprimer tout ça, ça sert à mieux,exécution correcte égale true.
00:38:56 :Donc là, je peux renvoyer dans la logique de mon programme,OK, je t'avais demandé de faire une boucle où j'incrémente i de 1,je te renvoie la faux, la boucle, elle s'est bien exécutée.
00:39:10 :Toi, Baptiste, quand tu me parlais tout à l'heurede tes problèmes avec Asyncio,ça pourrait par exemple être une sorte de solution.Bon, apparemment, c'était un bruit de micro intempestif.
00:39:32 :Ça, ça pourrait par exemple être une solution.On exécute une boucle while.Alors, quand elle se termine bien, c'est sûr qu'on n'a pas de signaux de base.
00:39:40 :Alors, on peut avoir des erreurs qui sont levées par le programme Python,mais bon, après, ça c'est ce qu'on essaie de vous montrer,notamment avec l'exercice de la calculatrice et la détection des erreurs.
00:39:51 :De manière globale, s'appuyer sur le fait que Python lève une erreurpour détecter si un événement s'est bien passé comme on l'entendait ou pas,oui, ça marche, puisqu'il y a Try Except pour gérer ça,donc ça marche.
00:40:05 :Mais si on peut éviter de recourir à cela, c'est mieux.Exemple bête, par exemple, je ne sais pas si vous avez tous des véhiculesqui sont comme ça.
00:40:19 :Sur votre voiture, vous avez des radars de recul pour vous indiquerquand vous approchez d'un obstacle.Alors oui, on pourrait très bien se passer de radars de reculet attendre qu'il y ait un bruit qui vous indique que votre voiture a percuté un mur.
00:40:32 :Ça marche aussi, vous avez détecté l'erreur.Le bip, c'est quand même mieux, ça coûte moins cher.En Python, c'est exactement la même chose.Si vous attendez que Python vous lève une erreur pour détecter si,oui ou non, une de vos fonctions ou une de vos routinesau sein d'une fonction s'est bien déroulée, ça marche.
00:40:56 :Mais ce n'est pas idéal.Le mieux, c'est d'anticiper et d'essayer de dire, tiens,je vais être en place, par exemple, avec Wild, un petit coup de healthpour voir si ma book s'exécute bien.
00:41:06 :Ok, si j'ai le retour, ça veut dire que mon programme peut continuer,il n'y a pas de souci, l'action que j'avais lancée s'est bien faite.
00:41:12 :Si je n'ai pas ce retour-là, peut-être que je peux dire,lancer une action corrective parce qu'il fallait absolument que ça s'exécuteou éventuellement inscrire dans un log,tiens attention, à tel endroit, l'exécution ne se fait pas, mais pour quelle raison ?
00:41:27 :Est-ce que vous sévissez l'idée ?Oui, tout à fait.Je pense que mon exemple avec la voiture et le radar de fil va vous rester en tête.
00:41:36 :Voilà, voilà.Voilà un petit peu tout ce que je vais vous dire ce soir sur ces sujets-là.Je ne sais pas si vous avez des questions à me reposer en complémentpar rapport à tout ça.
00:41:54 :Mais si c'est le cas, allez-y, n'hésitez pas.Moi, c'est bon, en ce qui me concerne.Ou est-ce que vous avez d'autres questions,autres que ce dont je vous ai parlé ce soir, que vous voudriez me poser ?
00:42:12 :Oui, moi, ça va aussi.C'est bon pour tout le monde ?C'est bon pour tout le monde ?Gab, tu n'as pas une petite question piège vite fait ?
00:42:25 :Non, non, non.Juste, là, c'est bien, tu sais, quand tu as montré les numérates,ça, les numérates, dans les algorithmes, ça peut faciliter la vie à beaucoup de monde.
00:42:40 :Et là, si on parle purement d'Auza, ça, les numérates,moi, ça m'a sauvé la vie peut-être deux fois, je crois.Avec les paramètres start, aussi.
00:42:48 :Il y a un exo, je ne sais plus ce que c'est, c'est un algo.Et franchement, avec un numérate, un start à un, en trois lignes, c'est résolu, quoi.
00:42:56 :Mais les boucles, c'est...Pour les while else, for else, ça, c'est pareil.Je pense que la question peut tomber aussi avecqu'est-ce qui se passe s'il y a un break dans le while et qu'il y a un else après,par exemple, ce genre de choses-là.
00:43:10 :Après, les boucles, c'est bien,Après, les boucles, c'est extrêmement pratique.Comme vous avez vu, on a balayé vite fait.Il y a quand même des cas d'usage qui sont très sympathiques.
00:43:22 :De toute façon, les conditions et les boucles,à partir du moment où vous rentrez dans Python, vous n'en sortirez jamais.Vous écrirez très rarement des scripts, extrêmement rarement.
00:43:34 :Vous n'allez pas mettre une boucle ou une condition à minimum.Je pense que Gab pourra confirmer.Un script sans boucle ni condition, c'est extrêmement rare.
00:43:45 :Ou alors, c'est vraiment un script d'affichage de valeurs et on arrête là.Dès que vous faites du script qui fonctionne, qui produit quelque chose,vous avez forcément des boucles et des conditions.
00:43:59 :Donc ça, c'est très important de bien les maîtriser,bien comprendre pourquoi ça réagit de telle ou telle manière.Parce que si vous ne prenez pas ça vraiment bien à cœur dès le début,et que vous ne le maîtrisez pas,vous allez marcher en boitant tout le long de votre coup de Python.
00:44:18 :J'ai une question.Oui, vas-y.Je voudrais savoir, pour les boucles et les conditions imbriquées,dans le terme des complexités algorithmiques, c'est conseillé ou non ?
00:44:35 :En termes des boucles, des conditions imbriquées, deux ou trois fois ?Si tu vas mettre des conditions dans tes traitements,alors que ce soit des IF imbriqués sur quatre, cinq niveaux,ou même des IF avec plusieurs conditions à vérifier,fatalement, en termes d'algorithmie,plus tu vas mettre de conditions à vérifier,
00:45:03 :plus ça va augmenter ta complexité.Ça, c'est fatal.Après, si dans une condition,quand tu vérifies deux conditions en même temps,je dirais que c'est déjà bien.
00:45:17 :Si tu passes à trois, voire quatre conditions à vérifier en même temps,pour déterminer si tu vas faire cette action,c'est-à-dire qu'il faut que tes quatre conditions soient réunies pour effectuer une action,je pense qu'il y a peut-être un refactoring à faireet voir si tu ne peux pas traiter le problème au moment.
00:45:34 :Parce que là, tu rajoutes en complexité.Alors maintenant, attention, il y a des cas où tu n'auras absolument pas le choix.Je vais revenir sur mon exemple que je vous ai donné tout à l'heure.
00:45:46 :Par exemple, pour une terme de connexion comme ça avec un OTP,vous êtes obligé de vérifier si le nom d'utilisateur existe,si l'utilisateur a rentré le mot de passe,quelle méthode de deuxième facteur d'authentification il a choisie,voir si le code qui rentre est bien le bonet s'il est autorisé à se connecter sur le site.
00:46:12 :Là, quand vous avez réuni tout ça, on est déjà à quatre ou cinq conditions.Vous n'avez pas le choix, il faut bien vérifier tout ça.
00:46:19 :Maintenant, quand vous vous retrouvez face à un problème comme ça,où vous avez absolument à vérifier ces cinq conditions,peut-être que pour permettre à votre programme d'être un poil plus fluideet de moins perdre de temps sur ces vérifications-là,peut-être d'abord vérifier déjà si l'utilisateur existe.
00:46:39 :Par exemple, vous prenez la valeur d'identifiant, voir si l'identifiant existe.S'il n'existe pas, déjà, ce n'est pas la peine d'aller plus loin.Ensuite, vous allez vérifier si le mot de passe est bon.
00:46:52 :Et seulement là, vous attaquez à la méthode d'authentification et le code.Vous voyez, on vient de faire déjà quatre des cinq conditions,mais sur trois étapes qui vont être beaucoup plus fluidesque si vous les vérifiez tout d'un coupet qui vont fatalement créer le problème de l'arrêt de vérification des conditions
00:47:11 :parce que, déjà, si la première condition, si l'utilisateur n'existe pas,ce n'est plus la peine de vérifier les quatre autres conditions.Alors, si on a mis tout ça sur une seule ligne de conditions,intuitivement, Python, il va tout vérifierparce que pour déterminer le résultat de son addition boolean,
00:47:28 :puisque c'est une addition boolean au bout du compte,il va regarder si la première valeur est à True ou False,la deuxième à True ou False, et ainsi de suite.
00:47:36 :Et après, s'il a mis du End ou du Or, il va déterminer le résultatpour savoir si votre condition IF est bien remplie.Donc, alors, attention, on parle de micro, voire d'autres secondes,mais si vous répétez ces comportements-là tout au long de votre script,eh bien, comme on dit, un franc plus un franc plus un franc plus un franc,
00:47:59 :à la fin, ça finit par faire une fortune.Donc, si vous avez plusieurs conditions vérifiées comme ça,découpez d'abord, prenez la première, la plus importante.
00:48:11 :Donc là, dans l'exemple que je viens de vous donner,est-ce que cet utilisateur existe ?Déjà, rien que ça, ça va vous régler le reste du problème.
00:48:20 :S'il n'existe pas, fini.Ensuite, on vérifie s'il a rentré le bon mot de passe.Eh bien, ça aussi, ça va vous éliminer beaucoup de cas de traitement,et ainsi de suite.
00:48:30 :Il faut essayer de...C'est bien des fois de regrouper les conditions dans une seule condition.On se dit ça, c'est super, j'ai fait une méga condition,on vérifie tout en même temps, c'est génial,j'ai tout sur une ligne, tout, c'est propre.
00:48:41 :Oui, mais le problème, c'est que, comme je viens de vous le dire,si déjà, rien qu'à la première condition, ça échoue,et qu'il n'y a pas besoin d'aller plus loin,vous avez perdu du temps à vérifier les 4 autres.
00:48:51 :Est-ce que j'ai été assez clair ?Parce que je pense que je me suis peut-être un petit peuemmêlé les pinceaux dans mon explication.Oui, c'est clair.
00:49:00 :Oui, je pense que c'était clair.Ce qu'il faut toujours, c'est réfléchir votre script.C'est vrai que, surtout quand on débute,on dit tiens, je vais vous le montrer en live.
00:49:14 :Ok, alors je vais faire un script.Je vais prendre celui-là parce que je le vois tous les jours.Je vais prendre un script pour faire une addition.
00:49:22 :Ok, alors d'abord, je vais rentrer mon premier nombre.Là, comment je fais ?Je vais faire un input.Allez, ok, un input.Hop, premier nombre.
00:49:33 :Je vais faire du simple.Après, je fais un deuxième nombre.Allez, un deuxième input.Ok, qu'est-ce qu'il faut que je fasse ?Mes nombres, il faut que je les additionne.
00:49:39 :Il faut que je les transforme en lignes.Allez, je les transforme en lignes.Ensuite, je vais les additionner.Allez, je vais faire une variable.Résultat égal.
00:49:46 :Nombre 1 plus nombre 2.Puis après, je vais les afficher.Allez, hop, je les affiche comme ça.Là, je viens d'écrire 6 lignes.Parce que j'avais mon script à faire,j'ai tapé dedans directement et j'ai tout tapé.
00:49:58 :Ok, il faut que je fasse ça, il faut que je fasse ça, il faut que je fasse ça.Très bien.Mais là, si on observe bien notre script,qu'est-ce qu'on a fait ?
00:50:07 :On a créé 3 lignes, ici, sur les 6,qui sont totalement inutiles.Pourquoi ?Hop, je vais vous montrer ça.Déjà, ici, on peut utiliser une fString.
00:50:19 :Exactement.Donc, je vais transformer ça en fString.Hop.Je vais mettre directement les ints,nombre 1, à l'intérieur.Là, voilà.On transforme ça en fString.
00:50:35 :Ok.Hop.Voilà.C'est ça.Ok, super.Maintenant, mes ints,je pourrais faire le calcul directement.Allez, je le fais.Hop.Je vais passer par les étapes supplémentaires,mais c'est volontaire.
00:51:03 :Hop.Voilà.Du coup, là, en faisant ça,ça y est,je viens de supprimer 2 lignes.Je viens de supprimer 2 lignes.Hop.Et puis, mon résultat,à part stocker le résultat de mon addition,il ne sert à rien.
00:51:25 :Alors, je le passe directement dans la fString.Hop.Voilà.Voilà.Et bien, ça marche,et j'ai 3 lignes de moins.En fait,quand vous allez écrire un script,il faut essayer de faire ça tout le temps.
00:51:46 :Avant de toucher au clavier,prenez une petite feuille de papier à côté,un stylo,et réfléchissez à ce que vous allez vraiment avoir besoindans votre script.
00:51:54 :Là, c'est vrai que c'est une étapequ'on a un petit peu tendance à couper.On dit, c'est bon,je vais faire du piton,j'y vais,on tape.
00:52:03 :Tac, tac, tac, tac, tac, tac.Bon,j'ai un peu grossi le trait,je vous l'accorde.Mais,en gros, voilà le résultat qu'on aquand on tape directement.
00:52:13 :Il faut réfléchir avant,parce que si on prend le temps de réfléchir avant,justement,on arrive à du code qui est déjà beaucoup plus propreet beaucoup plus pertinent.
00:52:24 :Et on évite de créer des variables qui ne servent à rien.Pour ceux qui ont suivi les mentoratsqu'on a fait sur le sujet,vous avez pu voir que la gestion de la mémoire,ça pouvait vite devenir une question en piton.
00:52:35 :Et, comme je le dis toujours,l'IA,ce n'est pas forcément notre grande copine.Parce que, vous voyez, déjà,l'IA, là,parce que, bon, là,j'ai tapé avec les suggestions qui étaient faitespar Github Copilot.
00:52:53 :Bah, Livestream, il n'y a pas du tout pensé Copilot.Il est allé en barbare.Est-ce que l'idée est claire pour vous ?Ouais.J'ai bien répondu à ta questionconcernant les complexités et tout ça ?
00:53:10 :Oui, ça va.Merci.Est-ce que vous avez d'autres questions ?N'hésitez pas.Non, c'est bon pour tout le monde ?Ouais, c'est bon.Moi, j'ai une question qui me vient en tête,mais ça n'a rien à voir avec les sujets du jour.
00:53:35 :Moi, je regrette ça, prochainement.Bah, n'hésite pas.Puis, comme je le dis à la fin de chaque mentorat,n'hésitez pas.Vous pouvez m'envoyer des messages en direct sur le Discord.
00:53:46 :S'il y a des sujets que vous souhaitez voir abordésau cours des mentorats,si vous m'envoyez ça assez tôt,moi, j'essaie de me pencher sur le sujet,puis je vous présente ça.
Aucune occurrence trouvée pour « ».