Session du 02 mars 2023 à 20h00
Pratique & Live Coding
Développement Web & Frameworks
Frontend & UI
Algorithmique & Performance
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
Camel Case, chaînes et front Streamlit
-
Revue d'une question d'un étudiant sur l'ex de Camel Case
-
Revue des vitesses d'algo
-
Mise ne place du frontend en streamlit pour une api
00:00:00 :Est-ce qu'il y a moyen de ne pas du tout l'afficher? Je ne sais pas, chercher un espèce de spotlightcomme on faisait avant. Tu peux piner le truc et tout mais je ne sais pas s'il y a moyen
00:00:14 :vraiment d'attendre dans les settings peut-être. Ouais Moïse, effectivement on l'avait pas,je viens de le dire sur la communauté, on n'a pas encore fait le calendrier, ça va être similaireavec tous les jeudis et les samedis. De toute façon, à moins qu'on soit pas disponible une fois
00:00:47 :ou un truc comme ça et dans ce cas-ci on préviendra en avance, de base les sessionsdébutantes avec PA sont le jeudi soir 20h et moi le samedi et ça peut dépendre l'heure,généralement j'essaie de les faire en début d'après-midi mais on va faire le planning eton va afficher tout ça, comme ça vous saurez à l'avance, vous pourrez ajouter tout ça dans
00:01:11 :votre calendrier. Du coup je vous laisse moi avec PA, bonne séance. Ok, merci Thibault. Bon bah ducoup comme d'hab n'hésitez pas à me dire si vous m'entendez plus, si ça grésille ou des chosescomme ça et puis si vous avez des questions, attendez je regarde un peu le monde qu'il y a.
00:01:37 :Je vais enlever ma caméra déjà, j'ai lancé l'enregistrement, je vous préviens à chaque fois.Ok, bah du coup j'ai prévu ce programme là, je commence ce programme, au moins bien sûr quevous ayez des questions. L'idée vraiment ce soir je pense que ça va être, ce sera vraiment plutôt
00:02:03 :débutant, enfin comme prévu le jeudi soir c'est débutant mais on va vraiment revoir des bases làsur la manipulation de chaînes de caractère et puis la vitesse des algorithmes je vous en parleà chaque fois mais à chaque fois au final je ne l'aborde pas mais là cette fois-ci on l'abordera,
00:02:21 :je le prévoirai en deuxième étape et puis si on a le temps je vous montrerai une implémentationd'un front-end avec Streamlit sur une API. Donc là c'est un petit peu plus avancé mais je vous
00:02:32 :montrerai, comme ça vous pourrez voir aussi un petit peu l'intérêt des API si vous avez toujoursun peu de mal à appréhender ces concepts là. Et vraiment là pour l'exercice de la camelcast,
00:02:45 :je vous invite vraiment à poser des questions etc parce que c'est des manipulations qu'on faittrès couramment donc c'est bien quand on maîtrise Python de faire ce genre de manipulation c'estimportant. Donc voilà, est-ce que ça vous va comme programme? Est-ce que vous avez des questions
00:03:04 :avant de commencer? Ok. Donc là du coup je vais me servir d'une question qui était de Moïse ilme semble sur la camelcast et j'avais vu que Salvatore avait fait d'ailleurs une réponse quiétait très bien donc c'est cool que les étudiants peuvent s'aider entre eux. Du coup ce que je vous
00:03:35 :propose c'est par le biais de cet exemple de voir plusieurs choses, des différents sujets,la manipulation etc comme ça c'est toujours bien de travailler sur un exemple pour voir des basesc'est un peu moins ennuyeux et puis comme ça on peut revoir des choses. Donc en gros l'exercice
00:03:53 :de base qui était disponible sur la formation c'était de transformer une phrase en une variablecamelcast. Donc en fait camelcast c'est une majuscule en chaque début de mot et je crois
00:04:05 :même que la camelcast, le premier mot n'est pas en majuscule mais ça je suis pas sûr,faut vérifier. Et en fait pourquoi on dit camelcast? Parce que camel en anglais c'est
00:04:17 :chameau et du coup il y a deux bosses donc en fait quand vous écrivez camelcast en camelcastjustement et ben vous avez, ça fait les deux bosses d'un chameau ou justement du coup je saisplus si c'est avec le premier sans majuscule ça fait un dromadaire, enfin une connerie comme ça
00:04:35 :quand vous voyez le truc mais bon. Là on va juste prendre cet exemple là, on va se donner l'exercicede, imaginons j'ai une phrase, donc une phrase n'importe laquelle, je vais vous la montrer ici, donc imaginezque vous avez cette phrase, phrase en camelcast et du coup vous ce que vous voulez c'est transformer
00:04:54 :cette phrase là en une variable camelcast à utiliser comme pour une variable en fait,pour le nom d'une variable parce qu'en fait quand on nomme une variable il y a deux choix, soit ondit ben je veux, attendez je vais peut-être ouvrir un terminal, celui là, non, 2303, celui là. En gros,
00:05:29 :je vais ouvrir un terminal ici, quand vous définissez une variable vous avez, bon vous avez déjà vu qu'ilfaut pas mettre d'accent, faut pas mettre d'espace etc, donc vous avez le choix soit vous ou mêmeune fonction, si vous définissez une fonction vous pouvez dire soit définissez en camelcast ou avec
00:05:55 :des underscore, donc par exemple pour le nom de variable vous pouvez dire soit ma variable commeça, donc là c'est de la camelcast, ou sinon ma variable comme ça. Moi je suis plus team underscore
00:06:10 :mais chacun il fait ce qu'il veut, donc voilà, donc ça c'est juste pour l'introduction. Donc ce queje vous propose c'est qu'on fasse cet exercice, c'est à dire de transformer une phrase en unevariable camelcast, et là j'ai 5 méthodes différentes, et puis si vous en avez d'autresn'hésitez pas à proposer. Donc en gros la première c'est assez simple, c'est en utilisant capitalize
00:06:33 :et sur une, voilà en utilisant le split et les fstrings. Je vais vous montrer un petit peu,donc en gros l'idée c'est de dire qu'on a notre phrase, et donc là en fait l'idée c'est d'utiliserle split, parce qu'en fait quand vous utilisez split c'est une méthode de la méthode string,
00:07:03 :donc si vous dites phrase split, en fait il va vous découper votre chaîne de caractère,en mot, il va la découper suivant le caractère que vous lui mettez dans la chaîne split. Là ici
00:07:20 :j'ai rien mis parce qu'en fait par défaut si vous mettez rien il considère que c'est l'espace. Enrevanche si par exemple j'avais dit tu me découpes suivant le caractère de la virgule, en fait il nese passe rien parce que j'ai aucune virgule dans ma phrase. Du coup si ma phrase ça avait été
00:07:33 :bonjour tout le monde, je m'appelle PA et je suis en Torah, et du coup là si je fais phrase.split,mais que là cette fois ci je mets la virgule, comme il y a une virgule ici et une virgule ici,normalement il va me les trouver, et du coup vous voyez qu'il m'a découpé ma chaîne de caractère
00:07:59 :en une liste avec deux éléments. Le premier élément avant la première virgule, donc c'estmême trois éléments. J'ai le bonjour, ici tout le monde je m'appelle PA et ensuite le dernier.
00:08:10 :Donc ouais en gros le truc c'est que ça crée une liste, la méthode split. Donc nous ce qu'on vafaire c'est que, donc je vais revenir à ma première phrase, phrase en kameikas, ce qu'onva dire c'est qu'on va prendre chaque mot et on va lui appliquer la méthode capitalize qui permet
00:08:27 :de mettre en majuscule le début du mot. Donc je vais l'appeler phrase split, donc en gros c'estma phrase que je vais splitter tout simplement. Donc phrase, je ne sais pas si je vais voir,
00:08:54 :en fait j'ai plus une chaîne de caractère mais j'ai une liste qui est découpée en mots. Donc làce que je vais faire c'est que je vais dire, je vais recréer une nouvelle chaîne de caractèremais en prenant chaque mot et en lui mettant une majuscule. Donc je vais dire que ma première
00:09:08 :chaîne de caractère c'est phrase split, mais du coup c'est 0, ensuite c'est 2, c'est 3, et c'est 4.Et donc là en fait j'ai juste attribué à chaque élément de la liste une chaîne de caractère etaprès ce que je fais juste, je dis que mon résultat, donc c'est une fstring, et je dis en
00:09:44 :fait c'est c1, c1, c2, c3, et c4. Ok? Donc là maintenant si j'affiche résulte, j'ai bien, ah nonben du coup je suis con, je les ai pas mis en camel cast. En fait ici, soit je le fais directement
00:10:12 :dans le string, soit je le fais dans ma définition de c1, donc je lui dis, capital, bon il y a deserreurs. Maintenant si je prie résulte, on a bien notre phrase en camel cast. Oui ok, du coup
00:10:42 :Salvator, je vais faire comme si je me plantais et je vais garder le camel cast, je vais garderla majuscule sur le premier mot, mais tout ce que je vais faire, parce qu'en fait après je vaisutiliser des fonctions, il suffirait juste que je mette un if sur le premier mot, mais là je vais
00:11:01 :pas le faire parce que ça va alourdir, mais voilà c'est juste pour vous montrer. Donc là vous voyezbien que ça marche ce qu'on fait, mais c'est vraiment pas efficace, parce que je suis obligédéjà de connaître, là en fait vous voyez que j'ai défini 4 variables, et ça veut dire que je suis
00:11:17 :obligé de savoir combien je vais avoir de mots dans ma phrase. Et vous voyez que c'est un peurépétitif, il faut que je définisse une variable, je dise ça c'est 0, 1, 2, 3, c'est vraiment,pas de soucis Christian, bienvenue. Là c'est vraiment pas dry, c'est une des lignes de conduite
00:11:39 :de Python, c'est à dire dry c'est don't repeat yourself, donc là on se répète carrément,parce qu'on fait exactement la même chose, c'est juste qu'on l'applique à un élément différent.
00:11:47 :Donc là c'était la première méthode. La deuxième méthode, justement pour éviter de se répéter,ce serait la boucle. Donc la boucle, en fait, l'idée, bon je vais pas le faire ici, je vais pas
00:12:01 :reproduire, ça sert à rien. En gros on redéfinit notre phrase, on instancie une première variablevide, donc résulte, et on va parcourir ici le mot, attendez je vais l'écrire ici. Voilà,
00:12:27 :en fait ce qu'on fait ici, c'est qu'on dit, je définis ma phrase, on instancie une variableavec une chaîne de caractère vide, et je vais dire, je vais faire une liste, parce que là commevous l'avez vu tout à l'heure, quand je fais phrase.split, en fait je crée une liste, et du
00:12:41 :coup je vais juste dire pour chaque mot dans l'élément de la liste, et bien je vais ajouterà mon élément vide, donc en faisant plus égal, parce que plus égal, je sais pas si vous savez,mais c'est comme si on faisait résulte égal, résulte plus quelque chose, et là en l'occurrence
00:12:59 :le plus quelque chose c'est le mot auquel on applique la méthode capitalize. Donc maintenantsi je fais résulte, bah j'ai exactement la même chose, j'ai bien ce que je voulais. Ok,
00:13:10 :c'est bon pour tout le monde ça, cette liste avec le plus égal etc, avec l'ajout du motdans le résulte. N'hésitez pas à dire si c'est pas clair, parce que... Excusez-moi, j'ai une question.
00:13:29 :C'est quoi le type de phrase.split en fait? Le quoi pardon? Le type de phrase.split.On va regarder tout de suite. Ça va être une liste. Tu vois si je fais phrase.split,
00:13:46 :tu vois bien qu'en fait je récupère une liste ici, il a découpé la phrase en prenant par défautle caractère de séparation espace. Ok, merci. Pas de souci. Christian, oui tout à fait,
00:14:00 :mais tu m'as spoilé la fin de mon exercice. Je rigole, c'est pas grave. Donc voilà,ça c'était la deuxième méthode avec les boucles. Je trouve que ça permet de voir un petit peu les
00:14:20 :boucles et puis le plus égal etc, donc c'est intéressant, n'hésitez pas à dire si vous avezdes questions ou si vous voulez voir d'autres choses. Ensuite, la méthode 3, qui est en fait,
00:14:31 :c'est exactement la même chose, on le fait avec des listes, sauf qu'on le fait d'un coup. Donclà, en fait, à lire, j'ai essayé de faire des méthodes qui sont un petit peu de plus en pluscomplexes entre guillemets, qui montent crescendo. Donc en gros, là, je vais l'écrire ici, on va
00:14:48 :la refaire. Ok, donc en gros, je l'ai écrit ici. Est-ce que vous connaissez cette méthode là defaire un join machin? Dites-moi si vous connaissez, je vais pas aller plus loin si vous connaissez
00:15:11 :déjà, mais dites-moi si vous connaissez, bon bah je vais pas aller plus loin, très bien. Donc engros, ce qu'on fait, c'est exactement la même chose que tout à l'heure, sauf qu'au lieu de faireune liste, de faire une boucle sur une liste qu'on instancie, bah là on le fait directement
00:15:26 :avec une liste de complétion. Donc en fait, la liste de complétion ici, peut-être je peux justevous la marquer pour ceux qui ne connaissent pas, en gros, je fais mo capitalize for mo inphrase point split. Donc en gros, j'ai fait, j'obtiens une liste auquel chaque mot, je lui ai
00:15:44 :mis une lettre capitale en première lettre, et du coup, comme j'ai créé une liste, je lui metsjuste un join, et ici, join, bah en fait, je veux juste que, je veux pas d'espace, donc ça veutdire que je fais une chaîne de caractère à partir de ma liste. Donc en gros, cette méthode là,
00:16:00 :c'est la même chose, c'est juste que c'est un petit peu plus concis comme résultat, enfin commeécriture de code. Alors ensuite, on a la méthode avec map. En fait, map, c'est quelque chose qui,
00:16:14 :c'est une méthode qui permet d'appliquer une fonction à tous les éléments d'une liste.Ok? Donc on va reproduire. Hop, c'était très intéressant. Ouais, bon, y'a pas vraiment
00:16:40 :d'explication, Gabriel. C'est vrai qu'elle est un petit peu particulière, parce qu'en fait,tu mets, ouais, on pourrait s'attendre à plutôt refaire un join, entre parenthèses, la liste,enfin littérable, virgule, le paramètre qu'on veut utiliser pour faire le join. Je suis d'accord,
00:16:58 :c'est vrai qu'elle est un petit peu... Ouais, comme les autres quoi, enfin, comme...Ouais, c'est bizarre. Historiquement, je sais pas trop pourquoi elle est comme ça. J'imagine qu'elle
00:17:08 :doit pouvoir s'écrire d'une autre façon, mais voilà, voilà, elle est comme ça. Est-ce que vousconnaissez tous le map sur un littérable? Non, non, ok. En gros, le map, c'est assez intéressant.
00:17:30 :Enfin, ça l'était beaucoup quand il n'y avait pas les listes compréhension, parce que les listescompréhension, c'est pas là depuis tout le temps. Maintenant, qu'il y a les listes compréhension,
00:17:38 :je vous avoue que moi, j'utilise un peu moins, mais en gros, ça se définit comme ça. Donc,imaginez que vous avez une liste, vous dites, bon, bah, j'ai ma liste égale... Qu'est-ce qu'on va
00:17:52 :dire comme liste? On va lui faire les carrés de 4, 6 et 9. Donc, imaginez que vous voulez fairele carré de chaque élément de la liste. Donc, c'est pour ça que je vous dis maintenant qu'il
00:18:09 :y a les listes compréhension, on s'en sert un peu moins. Si je voulais faire le carré de chaqueélément de ma liste et en sortir une liste, je pourrais dire, par exemple, lm carré for lm ina liste. Donc là, j'ai bien fait le carré de chaque élément grâce à une liste compréhension.
00:18:27 :Ok? Mais maintenant, ce qu'on peut faire, ce qu'on faisait avant, et puis en fait, le map,il peut servir, il sert beaucoup dans les manipulations de data avec Pandas, etc. On
00:18:39 :peut dire, on peut définir la fonction qu'on va appliquer à chaque élément. Donc, en fait,on peut dire carré lm, je vais lui dire retourne lm au carré. Donc là, en fait, j'ai juste défini
00:18:56 :une fonction et si je lui dis, c'est une fonction toute simple, si je dis carré de 2, il me retourne4, carré de 4, il me retourne 16, etc. Donc là, ça fonctionne bien. En fait, ce que je peux faire,
00:19:07 :c'est je peux dire map ma liste et, attendez, est-ce que c'est dans le bon sens? Ouais, c'estla fonction et la liste d'abord. Donc là, on va lui dire, applique ma fonction carré à chaque
00:19:22 :élément de ma liste. Donc là, en fait, normalement, on obtient un générateur. Je ne sais pas si vousvous souvenez, mais j'en ai parlé la dernière fois des générateurs. Donc en fait, on va plutôt
00:19:33 :faire for lm in map. Voilà, donc en fait, le map, ça crée un générateur. Je ne sais pas si vousavez suivi la semaine dernière ou si vous avez vu la rediffusion, le générateur, c'est comme unefonction avec un itérateur à l'intérieur. Donc là, en fait, ce qu'on peut faire, c'est que au
00:20:04 :lieu de, voilà, un générateur, je peux le transformer en liste directement, le générateur.Donc là, si par exemple, je fais list map carré liste, je me retrouve bien avec le carré de chaqueélément de ma liste. Donc vous, voilà, dites-moi ce que vous en pensez. Est-ce que du coup,
00:20:26 :c'est plus clair pour vous d'utiliser map ou plutôt les listes de compréhension? On veutbien voir votre avis, ce que vous en pensez. En fait, ouais, du coup, je te dis map,
00:20:41 :la liste en compréhension, compréhension de liste, les listes, etc. Ok, le truc, c'est que je suisd'accord avec vous, sauf que la liste compréhension, vous travaillez directement avec des listes,alors qu'avec map, vous avez, vous créez un générateur et un générateur, c'est beaucoupplus optimal en termes de gestion de ressources et de mémoire, de mémoire machine. Donc voilà,
00:21:05 :pensez-y quand même que ça, ça existe, que le map, ça existe. Et ce qui est pas mal aussi,c'est qu'en fait, là, vous voyez, c'était un peu laborieux parce que j'ai dû définir ma fonctionet ensuite appliquer le map. Mais en fait, on peut le définir à la volée avec les fonctions
00:21:17 :anonymes lambda. Vous voyez, ici, au lieu de faire carré, j'aurais pu dire lambda,à lm, je lui fais un lm carré, et là, ça marche aussi. Bon là, ça marche parce que j'ai juste un
00:21:39 :générateur, mais si je veux le transformer en liste. Vous voyez, vous voyez aussi là l'intérêtdes lambdas. En fait, c'est une fonction anonyme que je peux définir à la volée. Je n'ai pas besoin
00:21:49 :de la redéfinir avant avec un retourne, etc. Je peux directement le faire là. Donc du coup,vous me voyez venir, ma phrase qui était celle-ci, si je la sors, donc, GammaCas, donc là, ce que jevais faire, c'est que je vais lui appliquer le map et en fait, c'est quoi que je veux comme fonction,
00:22:08 :bah moi je veux faire capitalize. Donc en gros, ce que je peux faire, ce serait liste, map, lambdaà lm, je lui dis lm.capitalize, voilà, et du coup, ça va être razzle split. Donc là, on a ça,
00:22:33 :et après il suffit juste de lui mettre a join, et ça marche. Ok? Après, ce qu'on aurait pu faireaussi, c'était fromStringImportCapWord, là comme ça, au lieu de m'emmerder à définir une fonctionanonyme, j'aurais directement pu mettre la fonction capWord qui fait la même chose. Voilà. Donc,
00:23:08 :ça c'était la méthode 4, et la méthode 5, qui en fait, c'est celle qu'a dévoilé Christian,il n'y a pas de souci, hein, Christian c'est bien que tu la connaisses. En fait, il y a une méthode
00:23:23 :qui existe dans les méthodes de chaînes de caractère, qui est title, et en fait c'est toutsimple, il suffit, quand vous avez, donc là si j'ai phrase, si je lui dis phrase.title, vous
00:23:44 :voyez qu'en fait j'ai directement une majuscule à chaque début de mot, donc après j'ai juste àrefaire mon join, phrase.title, du coup il faut lui refaire un split, voilà.
00:24:03 :Voilà, sur, tu peux remontrer capWord, ouais ouais bien sûr, capWord, en fait c'est comme situ utilisais capitalize, si tu fais capWord hello, tu vois t'as un peu la même chose que capitalize,mais en fait moi j'ai appelé capWord pour pouvoir la définir ici dans le map en utilisant une
00:24:39 :fonction directement, tu vois, pas un truc que moi je redéfinis. Il faut l'importer, ouais. Ok,merci Moïse pour la correction de Thibault, je regarde en même temps, ouais bah il y a pop,du coup vous connaissez pop, en fait c'est, pop ça permet de sortir un élément de la liste,
00:25:08 :enfin de sortir un élément d'une liste, et du coup ça réduit la longueur de la liste. Doncbah voilà. Donc en gros vous voyez, de toute façon il y a tellement de manières différentes
00:25:19 :d'arriver aux mêmes fins, c'est ça aussi la beauté de la programmation, c'est parce quevous avez plusieurs méthodes pour le faire. Donc tu comprends pas trop pop, alors en gros quand
00:25:31 :t'as une liste, on va reprendre ma liste, si je fais ma liste.pop, du coup je sais plus si c'estl'index ou si c'est le numéro, ouais c'est l'index. Donc en fait si tu vois, je fais ma liste,
00:25:46 :il agit de ma, bah en fait pop tu vois, il te sort un élément, donc ça te sort vraiment unélément, par contre il modifie ta liste. Tu vois là ma liste c'était 2, 4, 6, 9, j'ai fait pop 0,
00:26:00 :donc ça veut dire que j'ai fait sortir le premier élément de ma liste, donc il m'a dit c'est 2,et maintenant quand je réaffiche ma liste par contre j'ai plus que 4, 6, 9. Et si je refais
00:26:09 :encore pop, et bah là j'ai 4, mais si j'affiche ma liste, j'ai plus que deux éléments dans ma liste.Donc en gros ça permet de pouvoir, tu vois par exemple si tu voulais parcourir, tu vois j'aiphrase.title, phrase.split, tu vois j'ai une liste, en fait si je veux la parcourir je suis obligé de
00:26:42 :faire un truc for lm in machin print lm, ou même si tu veux le faire avec un index, t'es obligé detout parcourir, alors qu'en fait avec pop tu peux garder pop 0, et en fait ça sortira toujours lepremier élément de ta liste, mais comme il va te le sortir, et bien quand tu le refais, à chaque fois
00:27:03 :tu as un élément différent, et au bout d'un moment il s'arrête parce qu'il a enlevé tous les élémentsde la liste. Est-ce que c'est plus clair pour toi Moïse maintenant le pop? Oui ça va, en fait ce
00:27:27 :qui m'a un peu, que je n'ai pas bien compris c'est que, ou dans la correction de Thibault, peut-êtreil aurait mis mo est égal au mo.pop, mais là il a déclaré une autre variable et dans cette variable
00:27:50 :il a fait agi pop, et pop intervient sur mo, donc c'est un peu ça qui est... En fait le truc c'estqu'il le met dans sa liste, en fait il ne le met pas dans une variable, c'est juste qu'il l'ajoutedans sa liste, et en fait le pop 0 c'était comme le disait tout à l'heure Salvatore, c'est pour
00:28:13 :éviter de prendre le premier mot, parce que en fait la camel cast normalement tu mets pas demajuscule sur la première, donc le pop 0 ça te permet de dégager le premier mot et de lui mettrepas de majuscule. Tu vois le pop 0.lower, ça te permet d'enlever la majuscule sur le premier mot,
00:28:35 :parce que la camel cast en fait c'est comme ça, la vraie camel cast c'est comme ça, c'est pas avecune majuscule. C'est pour ça qu'il fait le pop, c'est pour enlever le premier mot et pour obtenir
00:28:50 :le premier mot, comme ça il le dégage, et après il sait qu'il sera plus dans sa liste, il le meten lower et après il continue. Tu vois en fait si je fais ça, donc là il a mo, après c'est
00:29:13 :ce qu'il fait, c'est qu'il va d'abord commencer à remplir sa liste. Donc en gros il dit listeégal, donc là il prend le premier, il prend la liste, il lui fait comme tout à l'heure,il fait un pop 0, donc ça veut dire qu'il va prendre le premier élément de la liste de mots,
00:29:32 :parce qu'il sait qu'en fait moi je vais me retrouver avec ce mot là, si je fais un phrase.split je meretrouve avec ce premier mot là dans la liste, je lui fais pop 0 et je lui applique lower,comme ça je sais qu'il va me faire sur le premier élément. Tu vois si je fais liste,
00:29:48 :je me retrouve avec phrase parce qu'il a pris le premier mot, en fait pop 0 sur ça, ça me sort bienparce que tu vois si je fais phrase.split, là il va plus me le faire parce que je l'ai fait en pop,
00:30:01 :mais tu vois si je fais phrase.split, le premier élément de ma liste est bien phrase, donc enfait si tu fais pop 0, tu vas sortir lui et lui il applique lower et comme ça en fait sa liste,il commence à la remplir avec le premier mot et après il fait sa boucle où en fait il va ajouter
00:30:22 :le reste des autres mots comme on a vu tout à l'heure. Si c'est ça, le pop ça marche avecl'indice. Tu vois si je reviens sur, je réponds à la question de Stuac, si je fais ma liste.pop0,
00:30:43 :bah je sors 2, si je vais voir ma liste, ça marche et maintenant si je fais pop 1, il va me sortir 6normalement, voilà. Donc si je vais voir ma liste, il m'a dégagé 6 et je me retrouve avec 4 et 9.
00:30:56 :Ok, est-ce que c'est plus clair pour toi Moïse l'histoire du pop? Ok très bien. Bon bah voilàun petit peu ce que je voulais vous dire sur l'exercice Kamekas. Maintenant ce que je vous
00:31:16 :propose c'est qu'on voit les vitesses d'algorithme. Est-ce que ça vous intéresse d'abord d'essayer decomprendre ça, les notions de grand O, de petit n, grand O, n carré, etc. Dites-moi si ça vous
00:31:27 :intéresse, parce que je ne vais pas vous faire des choses qui ne vous intéressent pas, ça ne sert àrien. Ok, ok, ok, ok. Du coup pour ça j'avais créé un petit, un, ouais j'avais créé un Google
00:31:46 :collab. Ok vous voyez bien là sur la page, dites-moi si vous voyez bien. Ok alors en fait avant decommencer, est-ce que, c'est important de revoir le logarithme décimal et le logarithme n'est pasrien. Donc c'est juste parce qu'en fait je m'en sers pour l'exemple après et en fait il faut bien
00:32:15 :il faut bien passer par là pour essayer de comprendre l'évolution des différences d'algorithme. Doncen gros pour ceux qui connaissent déjà très bien et pour ceux qui ne connaissent pas, je ne sais passi vous vous souvenez en maths, en fait nous en informatique on parle beaucoup du log de 2. Alors
00:32:36 :en fait le logarithme indice n d'un nombre c'est juste le logarithme n'est pas rien de ce nombredivisé par le logarithme n'est pas rien du n. Donc en gros quand on dit log décimal ça veut dire
00:32:50 :qu'en fait je fais log de 10 divisé, enfin log de x divisé par log de 10. Donc par exemple si jedis log 2 de x, bah c'est bien ln de x divisé par ln de n. Donc je ne sais pas si vous vous souvenez
00:33:09 :de vos cours de maths mais le logarithme c'est la fonction inverse de l'exponentiel. Mais bonc'est pas important. Mais en gros ce qui nous intéresse dans le logarithme c'est qu'en fait
00:33:21 :quand on fait le logarithme d'un nombre ça nous permet, surtout le logarithme 2, le logarithmebase 2, ça permet de savoir le nombre de, le nombre, la puissance de 2 de ce nombre. Je
00:33:39 :m'explique. En fait imaginez que vous dites logarithme binaire de 8. Bah en fait si on suitla définition c'est logarithme n'est pas rien de 8 divisé par logarithme n'est pas rien de 2. Ok?
00:33:51 :Et en fait il y a une particularité de la fonction logarithme c'est que le nombre quand on lui metune puissance et bien en fait cette puissance elle sort et elle multiplie le nombre devant. Bon ça
00:34:05 :voilà si jamais vous avez jamais vu et que vous ne comprenez pas, admettez-le c'est une propriétéde la fonction. C'est pas quelque chose qu'on, c'est comme un axiome un peu. Comme quand on vous
00:34:17 :dit 2 plus 2 il y a le 4, bah en fait logarithme de 2 puissance 3 bah c'est 3 fois logarithme de2. Ok? Il n'y a rien à comprendre c'est la fonction qui est comme ça. Et donc en fait vous voyez
00:34:29 :ici que si vous faites sortir la puissance du logarithme vous vous retrouvez en fait aveclogarithme ln de 2 divisé par ln de 2 donc en fait ça se simplifie et du coup vous sortez 3. Et
00:34:40 :donc en gros vous voyez que le logarithme en base 2 ça permet de savoir à combien a été élevé lenombre en puissance. Peut-être que je vous embrouille mais en gros vous voyez que, imaginez
00:34:56 :que vous voulez savoir 8 bah c'est 2 puissance combien et bah il suffit de lui faire le log 2et vous savez que si vous obtenez 3 bah en fait vous savez que 8 c'est 2 puissance 3. Si par
00:35:07 :exemple j'avais fait avec le 4 ici et bah en fait j'aurais ressorti 2 parce que 2 puissance 2 çafait 4. Et en fait pourquoi c'est important le logarithme n'est pas rien de 2 en informatique
00:35:20 :parce qu'on parle en binaire c'est des 0 ou des 1. Donc en fait quand vous comptez le nombre d'octetsetc vous avez 2 puissance 0, 2 puissance 1, 2 puissance 2, 2 puissance 3 etc. Enfin bref on
00:35:31 :va pas revenir sur le binaire ici mais sachez que c'est important. Donc en gros si vous avezpas compris c'est pas grave retenez juste qu'en fait le logarithme... Ah mais pas de soucis
00:35:43 :Gabriel. Essayez de leur parler du logarithme n'est pas rien de 2 tu vas voir ça va les endormir.Du coup est-ce que ça va? Dites moi un peu si c'est clair pour vous ou pas, si vous avez à
00:36:04 :peu près compris à quoi ça sert le logarithme parce qu'on va s'en servir un petit peu pour lepetit exemple qu'on a après. Ok bah je veux pas vous faire perdre trop de temps avec ça mais
00:36:22 :retenez juste cette opération là que en fait 8 c'est 2 aux cubes et si vous voulez sortir le cubeet bien vous vous limitez son logarithme et ça vous permet d'obtenir à quelle puissance a étéélevé 2 pour obtenir ce chiffre. Voilà retenez juste ça. Donc imaginez maintenant que... Ah
00:36:44 :salut Céline. Imaginez maintenant qu'on a un algorithme dont on veut mesurer sa complexitéparce qu'en fait on parle pas vraiment de vitesse, forcément ça se traduit en vitesse d'exécutionmais en fait établir la vitesse d'un algorithme ça n'a pas trop de sens, ce qui a du sens c'estd'analyser sa complexité. Imaginez par exemple que... Attendez qu'est-ce que j'ai foutu ici...
00:37:30 :Donc imaginez que j'ai un algorithme et l'algorithme en question c'est de dessinerdes cases sur une feuille de papier. Donc en gros, attendez je vais vous montrer,
00:37:55 :j'avais juste une petite image, je crois que c'est celle là. Voilà c'est tout simple. En faitimaginez que votre algorithme, ça n'a rien à voir avec une opération d'un ordinateur mais pourprendre l'exemple, imaginez que votre opération c'est de dessiner une case sur une feuille. Donc
00:38:23 :en gros le fait d'avoir dessiné une case sur une feuille c'est une opération, deux cases,deux opérations etc. Donc en gros si la première approche dans mon algorithme c'est de dessiner
00:38:37 :à la main une case par une case, et bien en fait si par exemple l'instructeur vous dit dessine-moi10 cases et bien vous allez devoir effectuer 10 actions parce que votre première approche c'estde dire je dessine la case sur la feuille et puis une autre et puis une autre etc. Donc ça veut
00:38:54 :dire que la donnée d'entrée c'est dessine-moi n cases, donc n pour 1, 2, 3, 4, 6, 10, ce quevous voulez. Si je vous dis avec cet algorithme là, ce qui est de dessiner une case par une case,
00:39:07 :si vous choisissez cet algorithme là, et bien votre complexité c'est un grand taux de n. Parcequ'en fait si à chaque fois que vous allez augmenter de une fois l'instruction, c'est à dire si je vousdis dessine-moi 10 cases, vous dessinez vous avez 10 opérations à faire parce que vous dessinez une
00:39:25 :case par une case. Et si je vous dis en fait fais-moi en 15, et bien en fait le nombre d'opérationsil augmente linéairement avec l'instruction, c'est à dire si je vous en demande d'en faire une enplus, et bien vous allez devoir en dessiner une en plus. Donc n instructions implique n opérations,
00:39:44 :et donc ça c'est ce qu'on appelle une complexité linéaire, donc en grand taux de n. Donc en faitle nombre d'opérations il va augmenter linéairement avec le nombre d'entrées. Donc ça c'est la
00:39:56 :première approche, et c'est un grand taux de n, c'est une évolution linéaire pour l'algorithme.Mais imaginez maintenant, pas de soucis Gabriel, ça va ça a été vite, une seconde approche quiest un petit peu plus intelligente, c'est de se dire bah en fait au lieu de dessiner une case par
00:40:16 :une case, mon opération ça va plus être de, donc là l'opération c'est dessiner une case,maintenant mon opération ça va être plier la feuille. Et vous voyez bien que en fait ce qui
00:40:29 :est intéressant dans cette méthode là, c'est que imaginez qu'on me dise dessine moi deux cases.Donc là deux cases, vous voyez que si je plie une seule fois ma feuille, et bien j'obtiensautomatiquement deux cases. Si je plie une deuxième fois ma feuille, que j'ai déjà plié une fois,
00:40:49 :j'obtiens quatre cases, et ainsi de suite. Si je la replie, en fait vous voyez apparaître le carré,parce qu'ici si je plie deux fois, j'obtiens bien quatre cases, donc 2 puissance 2, 4. Ici si je
00:41:07 :plie trois fois, je vais obtenir huit cases, donc 2 puissance 3 ça fait 8, et etc etc. Donc vousvoyez qu'il y a une manière un petit peu plus intelligente de réaliser l'opération de dessinern cases, c'est de plier la feuille. Donc là où je veux en venir, c'est que si on reprend notre
00:41:27 :exemple du logarithme 2, en fait vous dites si je plie une fois la feuille j'ai deux cases,si je la plie une deuxième fois, j'obtiens quatre cases, et si je la plie une troisième fois,j'obtiens huit cases. Donc vous voyez bien que combien de fois j'ai dû plier ma feuille en deux
00:41:41 :pour obtenir huit cases? Trois fois. Pour obtenir 16 cases, il suffit que je la replie une quatrièmefois et je vais en obtenir 16. Et donc en fait là vous voyez un petit peu l'évolution qui est
00:41:54 :différente, c'est à dire que maintenant si on me demande de faire huit cases, au lieu de fairehuit opérations, je vais en faire que trois. Et en fait trois par rapport à huit, c'est le logarithme
00:42:11 :en base 2. Et donc c'est pour ça qu'on dit l'algorithme a une croissance en logarithme,enfin l'algorithme qu'on a choisi, le deuxième, c'est à dire plier la feuille, il a une évolutionen logarithme et plus en linéaire. Et en fait ça c'est beaucoup plus efficace parce qu'en fait,
00:42:30 :quand vous avez 16 opérations à faire, enfin quand on vous demande d'avoir 16 cases, vous n'avezqu'à faire quatre fois l'opération. Donc c'est beaucoup plus optimal en termes de nombre d'opérations
00:42:46 :à faire. Et ce qui est important, c'est que vous voyez que au plus ça va augmenter, au plus ladifférence entre cet algorithme là et le précédent elle va être importante. Parce que là si je dois
00:42:57 :faire 100, si je dois faire 16 cases, je vais devoir faire 16 opérations avec le premier algorithme,alors que si je dois en faire 16 avec le deuxième algorithme, j'ai que quatre opérations à faire.
00:43:12 :Et donc vous voyez que l'évolution en log est différente de l'évolution en linéaire,c'est à dire que c'est pas parce que je vais augmenter autant de fois mon nombre d'opérationsà faire que je vais vraiment en faire autant, je vais en faire moins parce que la complexitéd'algorithme allait en logarithme. Voilà donc c'est pas vraiment une notion de piton, mais c'est
00:43:47 :important de connaître ça et d'en avoir entendu parler parce que parfois quand vous allez voir desalgorithmes, vous allez voir cette notation en grand O de quelque chose. Et en fait grand O en
00:43:59 :notation mathématique, c'est quelle est la complexité de mon algorithme. Donc même si vousn'avez pas tout compris le logarithme etc, au moins vous ne serez pas perdu quand on vous parlera degrand O de n. Des fois vous allez voir des grands O de n², donc ça c'est un grand O de n², c'est
00:44:18 :un mauvais algorithme parce qu'en fait pour n résultats il va falloir faire n² opérations. Doncça veut dire que ça fait beaucoup d'opérations pour avoir le résultat. Voilà ça fait plusieurs
00:44:34 :fois que j'en parle de ça, de vitesse d'algorithme etc. J'avais trouvé ça dans un livre qui estd'ailleurs très intéressant, je vous le conseille, c'est Gawking Algorithm, c'est en anglais, maisen fait c'est un livre qui parle de différents algorithmes sous version un petit peu bandedessinée. Je vais remettre ma caméra juste pour vous le montrer si ça vous intéresse. Donc c'est
00:45:06 :ce livre là avec le fond. Bon bref, je vous mettrai la référence si vous intéressez, n'hésitez pas à medemander. En fait la complexité d'un algorithme ça dépend du nombre d'opérations à effectuer
00:45:23 :pour obtenir un certain résultat exactement. La complexité d'un algorithme elle se mesure pas,je vais vous le mettre ici tout de suite. Le titre c'est Gawking Algorithm et l'auteur c'est Aditya
00:45:49 :Bhargava. Est-ce que j'ai fait une bêtise? Non c'est Bhargava pas Bhargada.Voilà donc voilà. Est-ce que ça vous a... bon même si c'est pas entièrement clair.
00:46:29 :En fait là j'ai fait une analogie avec l'histoire de la feuille mais par exemple ça va pouvoir êtreun appel à une fonction ou faire un tri de listes ou des choses comme ça. En fait ça peut être
00:46:50 :n'importe quoi dans ton algorithme mais c'est pas forcément 1 plus 1 ou 2 plus 2 tu vois,ça peut être un appel à une fonction, une ouverture de fichier ou des choses comme ça.
00:47:03 :Tu vois si par exemple en fait c'est pas vraiment un algorithme mais imagine tu fais une solution,tu fais une simulation et ça te sort deux fichiers. Et bah tu vas devoir aller lire deux fichiers pour
00:47:25 :un résultat. Tu vois donc ça peut être ça l'opération à considérer dans ton algorithme.Mais bon ça peut vraiment être tellement de choses que je peux pas te donner là, j'ai pasd'exemple concret d'algorithme. Souvent là tu verras beaucoup des différentes optimisations
00:47:45 :sur des algorithmes de tri. Voilà d'autres questions là dessus, est-ce que c'étaitclair ou c'était du gros n'importe quoi sur mes explications? Ok, bon s'il y a pas de
00:48:16 :questions je vais passer à un autre petit sujet. Qu'est-ce que j'avais dit?Alors on va revoir un petit peu l'utilisation des API. Je vais pas tout recoder en même
00:48:57 :temps ici, ça sert à rien. Ok, donc imaginez que j'ai une API qui tourne sur, donc làpour l'exemple je l'avais mis, ok donc là en fait j'ai une API qui tourne sur PythonAnywhere, donc c'est une plateforme qui permet d'héberger des applications Django et enl'occurrence ici une API Django REST Framework. Et ici peut-être on le verra plus tard mais
00:49:43 :c'est un Swagger, en fait c'est une interface automatique qui permet d'afficher tous lesendpoints, donc en fait toutes les URL qui existent dans mon API et ça me permet un peud'avoir un glossaire de mes URL, donc c'est très pratique. Et du coup par exemple je
00:50:00 :sais que j'ai un URL ici si je vais voir dans mesures, API mesures, vous voyez icije tombe sur l'implémentation de, ouais tout ça c'est fait avec Django REST Framework.
00:50:15 :Donc là je suis vraiment dans Django REST Framework, je suis dans le langage API etvous voyez ici je suis connecté parce que moi ça je l'avais implémenté mais on peutse loguer etc. Voilà donc vous voyez que c'est pas moche mais c'est pas non plus très
00:50:33 :charmant quand même, c'est pas hyper charmant en fait à la base les API c'est pas faitpour que les humains ils le lisent directement sur le navigateur. L'idée en fait d'une
00:50:48 :API c'est de pouvoir récupérer les données en format JSON directement et puis aprèsde faire des manipulations dessus etc. Ok? Donc là vraiment une API c'est quelque
00:50:57 :chose qui vous sort une liste des datas etc. Donc là l'idée en fait c'est de se direbah j'aimerais bien me créer une petite interface beaucoup plus sympa pour pouvoir interagiravec mon API. Donc en gros ce qu'on peut faire c'est on peut utiliser Streamlit, du coup
00:51:17 :c'est run. Ok donc en gros ce que j'ai fait c'est j'ai créé, voilà je vous avais déjàmontré un peu Streamlit, donc j'ai créé une interface, donc c'est assez, enfin lecode il est pas très compliqué, enfin voilà si vous regardez dans la documentation vouspouvez aller trouver ça facilement. Mais en gros avec quelques lignes de code, vous voyez
00:51:41 :j'ai créé une interface ici que j'ai pas du tout, en fait vous voyez ce front-end làun peu comme si vous faisiez du HTML et du CSS, c'est ce que vous obtiendrez. Et moi
00:52:04 :ici j'ai juste en utilisant le Streamlit, donc cette bibliothèque là, c'est des chosesqui existent dans la bibliothèque, vous voyez ici je lui ai dit par exemple sttextinputou je dis renseigner l'URL de l'API, vous voyez c'est ici, si je fais rerun, vous voyezrenseigner l'URL de l'API et en fait tout ce que je vais mettre là il va me le prendre,
00:52:34 :donc c'est vraiment comme si je faisais un formulaire dans Django en HTML, CSS mais làc'est lui qui me le créé tout seul. Donc en gros ce que je lui ai dit maintenant c'est
00:52:43 :que j'ai juste à renseigner l'URL de mon application, il me dit, parce que ça c'estmoi qui l'ai défini, donc ça tu me définis l'API, ici je lui demande le token, bon çaj'en avais déjà parlé, je vais pas revenir dans le détail parce que c'est un petit peu
00:52:59 :complexe mais ici si je veux avoir accès à mon API il faut que je génère d'abordun token, donc ça c'est quelque chose que j'avais implémenté avant, donc là j'aimon token, c'est un peu comme une clé d'API en fait. Et donc si je définis ici ma clé
00:53:15 :d'API, vous voyez que voilà il me dit token valide et il affiche, en fait je peux voirmes mesures et je peux même ici ajouter des mesures, et en fait ça me permet de créerfacilement une interface avec mon API sans avoir à passer par cette interface là qui
00:53:32 :est un petit peu, celle là elle est un petit peu plus barbare en fait vous voyez, si parexemple je voulais ajouter une mesure, il faudrait par exemple qu'ici que je définissele JSON avec le bon format etc et que je lui balance dans l'URL, voilà c'est un petit
00:53:48 :peu compliqué, donc en fait Streamlit lui il me fait office d'interface pour pouvoirfaire des jolis formulaires ici, donc là en fait c'est mon API que j'ai développé,donc ça je l'ai déjà mis, mais vous voyez ici j'ai des boutons facilement où je peuxchanger, ici j'ai un date picker, un date piker pardon, où en fait je peux aller sélectionner
00:54:13 :la date etc et ça, imaginez l'enfer pour ceux qui connaissent pas bien, imaginez l'enferen fait de faire ça en CSS et HTML si vous faites pas du tout de CSS HTML, moi j'aimepas du tout ça, et là en fait vous voyez ici tout ça, les boutons etc, c'est juste
00:54:33 :avec des ST time input, date input, ici j'ai fait une liste déroulante de choix avec unselect box et vous voyez le rendu il est joli quoi, moi je suis incapable de faire un truccomme ça avec des divs et des CSS centrés etc. Oui Gabriel l'interface de ton API tu
00:55:00 :peux très bien la faire avec des templates etc mais en fait ça n'a pas d'intérêt,le principe d'une API c'est que ce soit une interface avec une base de données et aprèssi tu t'embêtes à refaire un frontend etc des templates, bah tu repars dans une applicationDjango, c'est plus une API quoi, c'est une application Django et y'a pas d'intérêt
00:55:23 :à faire la surcouche JSON etc. Voilà, c'est juste pour vous montrer un petit peu l'intérêtjustement d'avoir une API et de pouvoir faire des petites interfaces comme ça sympa pourl'utilisateur et voilà donc là typiquement il faut imaginer que vous vous êtes développeur,vous avez développé l'API donc ici tout ce qu'il y a là dedans, ou même ça donc
00:55:52 :tout ce qui permet en fait d'avoir accès aux données au format JSON, ici, donc çavous avez développé ça et vous je sais pas y'a un autre développeur ou vous mêmevous dites bah voilà j'ai développé cette petite interface et vous voyez ici que quandje vais dans mon API là par exemple une fois que j'ai rentré l'URL, bah vous voyez qu'en
00:56:16 :fait je fais des requêtes à mon API donc tu vois j'ai bien l'URL etc donc ça c'estvraiment l'utilisation pure et dure des API mais c'est mon interface qui l'a fait ellemême. Ici en fait c'est bien une requête d'API automatique. J'ai pas à le faire moi
00:56:36 :même dans Postman etc c'est mon API enfin c'est mon interface Streamlit qui va la fairegrâce à Request qui est juste un module de Python. Voilà bah pile dans les temps
00:57:00 :est-ce que c'était clair pour vous? Est-ce que ça vous a plu? Dites moi bien dans lechat si vous pouvez si le format vous convient ou est-ce que pour vous y'a des choses quisont encore trop avancées ou des fois parfois trop débutants, c'est important de votreretour en fait que vous nous disiez si y'a des choses sur lesquelles vous aimeriez passer
00:57:24 :beaucoup plus vite ou des choses qui sont trop compliquées encore pour les sessionsdébutants. Dites moi. En fait je pense que, ok merci Raphaël pour le retour, en fait
00:57:38 :ce que j'ai fait au début vraiment c'était vraiment débutant. Ok bon bah si ça vousplaît c'est bien. En gros ce que je vous propose c'est que quand on fait vraiment les
00:57:51 :choses débutants, c'est vraiment pas péjoratif, ne le voyez pas péjorativement, c'est queon fasse le code ensemble, c'est à dire vous voyez ce que j'ai fait ici avec, quand j'étaisdans ma console Hippiton où je faisais en même temps le truc un peu comme si on lefaisait ensemble parce que c'est des choses débutants donc on les fait ensemble et quand
00:58:13 :on passe sur des choses un petit peu plus complexes comme ce qu'on a vu avec les APIbah je vous propose que je vous montre directement le code que j'ai, ça sert à rien de le retaperensemble à 1000 à l'heure, on va se perdre et du coup si ce format là vous convient
00:58:30 :je continuerai à faire comme ça. Après j'en fais le truc c'est que cette session là,la session du jeudi soir elle est vraiment réservée aux débutants donc j'ai pas nonplus envie que les débutants se sentent lésés parce que je montre des choses un peu plusintermédiaires donc faut que j'arrive quand même à trouver le bon équilibre et que
00:59:02 :les débutants soient aussi contents pendant toute la séance et qu'il n'y ait pas unmoment où ils soient trop largués. Donc voilà, je mets vraiment l'accent sur des choses
00:59:12 :débutants pour cette session là et puis si on a l'occasion de temps en temps je montredes choses un petit peu plus avancées. Bah voilà, si vous avez des questions, n'importe
00:59:27 :quelle question, que ce soit sur Python, sur l'apprentissage ou quoi que ce soit, ditesmoi, je suis tout ouïe. J'attends un petit peu et puis si vous n'avez pas de questions
Aucune occurrence trouvée pour « ».