Session du 11 mai 2024 à 14h00
Structures de Données
TOSA & Certifications
Fichiers & Système
Algorithmique & Performance
Librairie Standard & Modules
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
Mentorat TOSA
Format JSON et le module JSON, structures de données itérables, module collections.
00:00:00 :Salut, je ne sais pas s'il va y avoir du monde aujourd'hui, vu que c'est un petitpeu différent de d'habitude et il n'y avait pas beaucoup de gens qui avaient répondudu coup. On a Mathieu qui arrive aussi. Salut Mathieu ! Du coup je ne sais pas si ça va
00:00:34 :être une session avec beaucoup de monde comme je disais, on va attendre encore un petitpeu, il y avait je crois 2-3 autres personnes qui avaient quand même répondu au sondage.
00:00:45 :Je vais vérifier, ça va au niveau des étapes, je crois que Mathieu, Gab vous aviez toutfini, Lofty je crois que tu étais presque aussi, tu étais bien avancé si mes souvenirssont bons. Ouais moi ça va j'avais fini hier. Ouais j'ai vu que tu avais fait les exercices
00:01:11 :aussi, je crois que je t'en avais rajouté. Ouais ok. Et ça va pour l'instant. Ok super.Au niveau des tests, à partir d'intermédiaires, ça commence à devenir compliqué. Les deux
00:01:26 :derniers j'ai pas réussi sans au moins la doc en ligne, c'est sur le module collectionde tête comme ça, et même juste avec dire et help j'ai encore du mal à lire ce qu'onme donne par exemple la classe, quand tu fais leur help, collection point le module, la
00:01:46 :méthode, j'ai encore un peu du mal à comprendre. Ok c'est bon à savoir, on va regarder ça,qu'est-ce que j'ai fait, j'ai fait un test récemment avec, je crois que c'était daytime,où j'avais affiché help et c'était assez succinct, il n'y avait pas énormément d'informations,ah oui je voulais savoir en fait je crois que c'est ça sur daytime, je crois que c'était
00:02:14 :sur string for time ou un truc comme ça, tiens je vais regarder, je vais partager monécran aussi, salut Arnaud, ah si on a quand même des gens qui arrivent, salut, salut,alors partager, screen, ah ouais il y a quand même du monde qui arrive, cool, où est-ceque c'était, je vais faire un petit, ouais donc dans le terminal j'avais essayé de voir
00:02:52 :si, daytime, en faisant help, daytime, string for time, ouais c'est ça, c'était l'exempleque j'avais essayé, où vous voyez c'est très très succinct, je me disais peut-êtreque j'avais l'espoir qu'ils indiquent les styles, le formatage qu'on a vu il y a uneou deux sessions si je me souviens bien, et en fait c'est vraiment vraiment très succinct
00:03:25 :avec le string par time aussi, voilà, il n'y a pas grand chose, donc il y a des effectivementet sur le collection, je ne sais pas si on importe counter, si on fait un help de counter,là il y a quand même pas mal plus de choses, là vous voyez c'est quand même très très
00:03:41 :cool, parce qu'en plus là comme c'est une classe on a toutes les méthodes qui sontaffichées, donc ça c'est un truc aussi à savoir, quand vous faites help, vous pouvezle faire sur tout normalement, je réfléchis, mais je ne crois pas qu'il y ait quoi quece soit sur lequel vous ne puissiez pas faire help, parce qu'à chaque fois ça va être
00:04:02 :un objet, et au pire il n'y a pas de documentation, mais si je fais help de liste je vais avoirl'aide sur les listes, et on va avoir à chaque fois ici toutes les méthodes, on va pouvoirvoir copy, count, tout ça, donc dès que vous avez des petits doutes comme ça, ça
00:04:16 :peut être bien, vu que sur le Toza, c'est ça, vous n'avez pas le droit de l'aide externe,vous n'avez pas le droit d'aller chercher sur Google, ou d'avoir, enfin oui c'est ça,d'aller chercher sur une documentation ou quoi, mais vous avez la possibilité dansles exercices de code, après c'est sûr, quand c'est des questions QCM etc, là vous
00:04:35 :n'avez pas la possibilité, mais quand c'est un exercice de code, vous pouvez utiliserhelp, dire pour vous aider. Après je vous dirais que la plupart du temps quand même,
00:04:43 :on va faire d'ailleurs quelques petites révisions rapides là-dessus, le mieux çareste quand même d'apprendre un peu tout ce qu'on a vu de tête, là il n'y a pas énormémentde choses dans les trucs qui sont un petit peu plus tricky justement, sur les date timeou les nombres etc. Du coup, ouais, je vais, hop, je vais, tac, revenir là, donc ouais,
00:05:10 :vous êtes là, dans tous ceux qui sont ici, vous êtes pas mal à jour sur les tâches,je pense que vous avez vu mon petit mail là, n'hésitez pas à en faire vraiment un petitpeu tout le temps, c'est pas des tâches très longues à faire, donc vous pouvez en faire
00:05:23 :assez régulièrement. Et cette semaine donc, on va finalement voir ce qu'on n'avait pastrop eu le temps de voir la semaine dernière, donc le module JSON, il y a des petites particularitésà voir, des méthodes aussi qu'on utilise un peu moins, notamment loads et dumps, avecun s à la fin, on utilise souvent loads et dumps sans les s, mais on va voir aussi
00:05:43 :les deux autres. On va revenir un petit peu sur le module collections et on va revoirun petit peu aussi des choses que j'ai vues passer, je vais vous montrer dans les, hop,je vais me prendre mes petites notes ici, quelques erreurs que vous avez faites, desquestions au fait que les trois quarts des gens ont eues justement sur le module collections,
00:06:05 :on va voir un petit peu les slides aussi, je vais vous montrer des petits moyens mnémotechniques,ça oui j'avais vu c'était intéressant aussi, et on va faire des petites révisions, ouais c'estça sur ce qu'on avait vu dans les premières sessions, je vais revenir sur les premièressessions parce que ça c'est voilà, je pense que le genre de trucs, on l'a vu une fois,
00:06:22 :on va juste revenir dessus très rapidement, parce que c'est le genre de choses où là,je pense pas que help ou dire pourront vous aider, et c'est pas des trucs non plus supercompliqués mais il faut bien les avoir en tête. Donc le fameux, la question sur tous
00:06:37 :les ints valides, avec cette liste ici, est-ce que vous vous souvenez lesquels sont valides,est-ce que vous pouvez me dire, là on va faire, j'ai pas mis le numéro ouais, on peutfaire, ouais dites-moi dans l'ordre, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, il y en a 10, dites-moi
00:06:53 :dans le chat lesquels ne sont, c'est peut-être plus simple de faire, on va dire quels sontles valides. Donc là on parle de ints, et après j'ai la même question sur les flots,
00:07:05 :je crois que c'est Mathieu qui a eu la question sur les flots, ou t'en avais oublié un ouje crois que t'avais fait une faute, et on va voir ça après. Donc valide, 1, 2, 3,
00:07:15 :5, 6, donc 1, 2, 3, 4, 5, 6, ok. Gab il rajoute le 4, 1, 2, 3, 4, ok. Ouais bon, effectivement1, 2, 3, 5, ok, il y a des petites différences, 1, 2, 3, 5 et pas le 6, ok. Donc la bonne
00:07:44 :réponse effectivement c'est 1, 2, 3, 5, 6 si je ne me trompe pas, 1, 2, 3, 5 et 6effectivement. Donc pourquoi le 4 n'est pas bon ? Parce qu'il y a des virgules, donc
00:07:55 :Gab, ouais, euh, non en fait ce qui fonctionne en int à faire attention c'est les tiréesdu bas, c'est ça, c'est probablement ça qui t'a induit en erreur, donc effectivementavec les ints les tirées du bas sont acceptées pour visuellement que ce soit plus facileà séparer, on n'est pas obligé de les mettre entre les séparations de centaines,
00:08:18 :milliers etc, là vous voyez on a un tiret juste après les deux premiers nombres, maison peut mettre des tirets entre chaque nombre si on veut, entre les 100, 1000 etc, ça vapas interférer, ça va pas créer d'erreur, par contre les virgules ouais, ça va pasêtre bon, pourquoi ? Parce que la virgule en fait est déjà utilisée notamment pour
00:08:39 :les tuples, je crois que si tu lui donnes des choses comme ça, par défaut, j'ai unpetit doute, mais je crois qu'il va te faire un tuple si je fais par exemple 1, 2, 3, 4,ouais c'est ça, tu vois il te fait un tuple. Donc c'est pour ça en fait que la virgule
00:08:52 :c'est vraiment un caractère qui est réservé à la séparation, que ce soit des élémentsdans les listes, dans les tuples, dans, qu'est-ce qu'il y a d'autre, principalement ça, lesdictionnaires, bah les dictionnaires oui, en fait t'as les deux points pour les clésvaleurs et après t'as les virgules, la virgule c'est vraiment pour séparer les choses et
00:09:07 :après dans les ints c'est le point pour faire un int, et je crois que c'est justement çaqu'on va voir après, Mathieu t'avais dit que 123 points c'était pas un float valideet en fait oui, dès qu'on a en fait on peut faire .34 ça va être valide et 123 points
00:09:22 :ça va être valide. Et juste le fait de mettre le point du coup ça va être, si on faitun type de ça du coup on est directement avec un float. Donc dès que vous mettez un
00:09:30 :point quelque part, même s'il n'y a pas les nombres avant, .3 ou 1 point, automatiquementil va rajouter le 0 avant ou après. Donc ça bien prendre en compte aussi. Et donc
00:09:42 :si je reviens là, le deuxième il est valide, donc ça c'est le fameux truc justement,là pareil, petit truc à apprendre par coeur, les hexadécimales, vous pouvez avoirdes lettres et des nombres de 1, de 0 à 9, donc ça c'est les nombres normaux, le x làqu'il faut penser, x hexadécimal, et après c'est des lettres de A à F. Donc là, dès
00:10:08 :que vous avez ici une lettre qui est en dehors du A, B, C, D, E, F, c'est plus valide.Le 1.234 c'est un float, là c'est un string, ceux là ils sont faciles, ça c'est les virgules,
00:10:20 :ça c'est des bytes, donc c'est facile aussi, c'est juste 0 ou 1. Donc là de la même façonsi vous avez quelque chose qui est autre que 0 ou 1 là dedans ça va pas marcher. Et par
00:10:31 :contre là dedans vous pouvez en avoir aussi, il faut bien se rendre compte que ici vouspouvez en avoir beaucoup plus. Si je fais ça en fait ça peut s'additionner, c'est le
00:10:40 :fameux méthode de calcul où le premier c'est 0, ensuite 2, 4, 8, 16, 32, 64, etc. Et sije reviens donc là, ensuite le 0, quelqu'un l'avait oublié je crois, Jonathan ou jesais plus qui, le 0 ici, bien prendre en compte que c'est valide aussi, c'est un int, même
00:11:03 :si c'est 0 c'est un int, si vous avez 0.0 c'est un float, 0.0 aussi, 0.0 aussi, floatet juste 0 ça va être un int. Donc voilà, petit retour rapide là-dessus et je vais
00:11:17 :voir ici, ça c'était donc la question qu'avait Mathieu si je ne me trompe pas. Donc voilà,le point 345 est valide, 1.0 et le 47 point aussi. Dès que vous avez un point en fait
00:11:27 :ça va être valide. Et là vous voyez aussi on a les tirés du bas, int ou float c'estvalide dans les deux cas, et la seule chose vraiment qui va définir dans un nombre sic'est un int ou un float c'est si vous avez un point quelque part. Là où ça va
00:11:40 :plus être valide c'est, et là tu avais bien fait de ne pas la cocher, c'est quandvous avez plusieurs points. Là ça va plus marcher, bon ça c'est assez logique. Et après
00:11:48 :donc la 36 c'est un nombre entier, et là on a un hexadécimal avec un point donc onpourrait penser que ça fonctionne mais en fait non, ça n'est pas valide, ça ne fonctionnepas. Les puissances, celui-là est un petit peu sournois, c'est un truc qu'on utilise
00:12:04 :assez rarement, on reviendra un petit peu sur toutes ces questions plus en détailquand on verra les choses un petit peu plus avancées qu'on peut faire avec le modulemath ou des choses du genre, mais effectivement l'exposant ici est valide aussi, et là commeon a le point on est bien avec un float également. Ok, ça va pour ça il y a des questions ? C'est
00:12:32 :bon, ok. Ensuite il y avait, je vais faire un petit retour sur le date time, on l'avaitvu vite fait, je vais le refaire ici, je vais grossir un petit peu ici, zoom, ok. Donc les
00:12:50 :dates, je voulais juste faire un petit retour sur les dates, on avait vu le string fromtime et string parse time pour convertir, et avec le fameux, si je reviens sur le stringfrom time.org, avec tous ces petits trucs-là qui font un peu peur, donc je vais revenir
00:13:15 :avec mes moyens mnémotechniques, rappelez-vous que pour tout ce qui est date, donc là c'estassez facile, les années ça va être en minuscules, donc year, month, day, donc ypour year, m pour month, et d pour day. Donc ceux-là ils sont assez faciles, % y, % month,
00:13:36 :et % day. Et après on avait juste le tiret qui permettait de rajouter le 0, donc 0,1si on est en janvier, ou 1 si, et alors là justement j'ai le petit doute si on met letiret, non c'est l'inverse en fait, par défaut c'est ça, par défaut il va mettre le 0 et
00:13:54 :si vous ne voulez pas mettre le nombre devant vous mettez tiret, ça va être pareil pourle jour. Et ensuite pour l'année ça va être pareil mais avec le raccourci, ah non l'année
00:14:05 :c'est différent, il est vraiment tricky celui-là, bon celui-là, ah oui non ok je me suis plantévous voyez, je me plante, celui-là ils sont durs, franchement je pense que c'est le trucle plus fiant à retenir dans tout le reste, là le reste ont trop des moyens, celui-làj'ai, même avec mes petits moyens mnéo-techniques je me plante encore, puisque en fait, donc
00:14:26 :quand on est tout en minuscules à chaque fois ça va être deux nombres, % d 08, % m09, % y 13. Donc en fait à chaque fois quand vous êtes en minuscules avec year, month
00:14:38 :et day vous allez avoir deux choses. Ensuite, et c'est là où c'est vraiment mal foutu,vous avez, je vais passer un petit peu, vous avez du coup le "-d", qui est pour enleverle 0 devant, "-m", pareil, et après pour les années, là c'est le Y majuscule pouravoir le 2013 au complet. Donc effectivement, ce qu'on retient souvent, moi ce que je vois
00:15:00 :le plus souvent passer c'est le fameux day, month et après le year en majuscule commeça. C'est souvent le format le plus classique, vous allez avoir 02, 12, 2024 par exemple.
00:15:13 :Et ensuite, plus simple pour les heures, minutes, secondes, vous avez le H, M et S. Si je neme trompe pas là encore, je vais aller vérifier H, Minute, M et seconde, S. Donc c'est ça,
00:15:27 :ceux-là ils sont un peu plus faciles à retenir, et avec pareil, à chaque fois, là ici vousavez le "-m", "-h", et "-s", pour enlever le 0 devant. Et après les deux derniers, donc
00:15:38 :ceux-là assez faciles, donc H, M, Minute et Seconde. Et les deux derniers c'est les Aet B, si vous vous souvenez, donc ça c'est pour avoir le jour et le mois, et l'annéeon n'a pas parce que l'année on peut juste la mettre en nombre, par contre le jour on
00:16:02 :peut avoir Monday, Tuesday, etc. Et donc ça c'est le A et le B, et là vous avez de lamême façon le A minuscule et A majuscule, donc dès que vous avez la majuscule c'estle truc un peu plus complet, et vous avez le B, pareil avec le mois, en petit, en raccourci,
00:16:15 :et B pour September. Donc là il faut juste se rappeler, c'est les premières lettresde l'alphabet, A-B, et là vous allez avoir donc Monday par exemple, et ici September,et si vous mettez du coup en majuscule vous avez le nom complet, B, vous avez September,je pense que si. Ok, donc Y, M, B, on a juste deux, donc là ça va être 24, là ça va
00:16:38 :être par exemple 12 pour Décembre, et là ça va être 01, ensuite vous pouvez mettrele Y majuscule, là ça va être 2024, et pour E ça va être le tiret, tiret ici, dansle cas de 12 ça va rien changer, mais si on était avec le mois de Janvier, donc ça
00:16:53 :serait 1 au lieu de 01, et pareil là ça serait 1 au lieu de 01, et ensuite HMS, Monday,et September avec le Y. Ok donc essayez de vous le refaire de temps en temps ceux-là,
00:17:06 :avec ces petits moyens mnémotechniques, ou trouvez-en d'autres si vous n'aimez pas ceux-là,essayez de les refaire de temps en temps parce qu'il y a quand même quelques questionslà-dessus, et voilà, c'est juste un petit peu du par coeur. Ok, ça va pour ça aussi ?
00:17:22 :Ouais Gab j'ai vu, je sais pas si t'avais vu. Ouais juste à l'oral ça sera plus sympa.Y en a qui ont eu des questions là-dessus, ou pas, juste pour savoir ce qu'ils posaientdes questions. Ouais je vais te retrouver dans les questions, alors je vais te la retrouver
00:17:59 :si les gens ont fait des fautes, parce qu'on vous a mis que les questions fausses, il yen a une en fait qui est avec isoformat justement, il me semble que vous êtes plusieurs à l'avoireu, je vais essayer de te la retrouver, mais en gros l'idée de la question c'était de
00:18:18 :récupérer à partir d'une chaîne de caractère une date, donc en fait t'avais une date quiétait sous forme de chaîne de caractère et qui suivait le format isoformat, donc c'estlà où en fait c'était un petit peu, tu peux aller plus ou moins vite parce que situ te souviens pas que tu peux faire, que tu peux utiliser cette, enfin si tu remarques
00:18:37 :pas que la date est sous ce format et que tu peux facilement la récupérer en dateavec from isoformat, tu vas commencer à faire les %M, %D etc et c'est là que tu peux perdredu temps parce que tu te mélanges là-dedans. Et après l'idée c'était à partir de cette
00:18:50 :date, bon je la retrouve pas, c'était de, je sais pas si il y a des gens qui se souviennentde l'avoir eu, qui sont là aujourd'hui, je sais que je l'ai vu passer, je crois qu'enfait elle est peut-être tout simplement dans le, je suis en train de regarder là, je crois
00:19:09 :qu'elle est peut-être tout simplement dans le test gratuit qu'ils font, je vais revérifier,Toza, Piton, parce que vous pouvez passer un test qui est vraiment, c'est 3-4 questionslà, c'est très très, et c'est toujours les mêmes en fait, test gratuit, Piton, c'esttoujours les mêmes 3 questions, donc c'est pas très bon, c'est pas très pratique, mais
00:19:32 :si je me souviens bien, ouais ok, abandonner cette question, c'est pas elle, oui, ok, tac,ouais c'est celle-là, tu vois, donc celle-là c'est la seule que j'ai vu revenir, que j'aivu passer dans les tests de certaines personnes, donc tu vois en fait on te donne et justementça fait le lien un petit peu, on va pouvoir, ça peut être intéressant, on va la faire
00:19:55 :après qu'on ait regardé le module JSON, parce que justement là on te donne, tu vois,je vais te pousser un petit peu ici, hop, donc t'as une fonction arrival date, on tepasse en paramètre à une chaîne de caractère qui contient des informations JSON, et t'asle départure date et le travelling time, et tu dois retourner quand est-ce que t'arrives,
00:20:18 :donc tu dois récupérer cette date ici, en format date, après tu dois utiliser lefameux time delta pour ajouter 10 jours à cette date, et pour ajouter en fait le travellingtime ici, donc ça pourrait varier, et donc tu vois il y a plusieurs étapes ici, tu transformescette chaîne de caractère qui contient des informations JSON en dictionnaire, avec tout
00:20:43 :ce qu'on va voir justement bientôt avec le JSON, à partir de ce dictionnaire tu récupèresla date de départ, donc départure date, donc là juste récupérer la valeur associéeà une clé dans un dictionnaire, tu te retrouves avec ça, ça du coup il faut le convertiren objet de date, et après tu récupères donc la valeur associée à travelling time,
00:21:00 :tu fais un time delta et t'ajoutes à ton objet de date. Donc tu vois c'est le genrede truc, si tu sais faire c'est 2-3 lignes de code, c'est assez rapide, mais comme avecleur foutu timer ici c'est assez stressant, faut vraiment pas perdre de temps de là-dessus.
00:21:15 :Et tu vois là ils te le disent quand même format ISO de la date de départ du paquet.Et tu vois moi-même là j'ai un doute parce que je vais revenir ici, si on fait importdate time, si je me trompe pas t'as from ISO format, c'est ça tu vois. Donc là from
00:21:31 :ISO format effectivement, si je lui passe ça, tac il va me retourner l'objet directement.Donc tu vois c'est là où je disais que c'est plus rapide d'utiliser from ISO format, làaussi c'est ce que je vous disais, le truc avec lequel je me suis moi-même emmêlésouvent c'est si vous faites from date time, import date time, ou si vous faites import
00:21:56 :date time. Parce que là je me suis moi-même planté comme je vous disais là-dessus defaire date time, après de faire date time point from ISO format, là ça vous dit quele module n'a pas d'attribut from ISO format, donc là vous vous dites ah merde je pensaisqu'il y avait une fonction comme ça mais j'ai dû me tromper, en fait oui elle existe
00:22:13 :bien mais elle est dans date time point date time point from ISO format. Donc ça vousfaites pas voir aussi, en fonction de comment vous l'importez, si vous faites from datetime, import date time, ça va directement être ici, et c'est from ISO format, et sivous importez directement le module vous avez deux fois date time. Parce que date time du
00:22:35 :coup c'est le nom du module, date time c'est la classe, donc date time point date time,c'est juste la classe qui permet de créer un objet date time. Après on a date time
00:22:46 :date time point date, et du coup je crois aussi qu'on a date time point date pointfrom ISO format aussi, ça devrait être logique, voilà c'est ça. Vous l'avez aussi sur date,
00:22:57 :ça peut être une autre façon si vous tombez précisément sur cet élément là, vu quelà c'est une date et qu'il n'y a pas d'heure dedans, vous pouvez utiliser le date et làc'est un peu plus visible qu'on a date time, le module, date, la classe, et ensuite la
00:23:13 :méthode ici qui permet de récupérer l'élément. Et donc tu vois à partir de ça, après datetime point relative delta ou time delta, tu vois là aussi je me trompe, time delta,si je ne me trompe pas voilà, time delta. Donc là du coup tu récupères, je reviens
00:23:29 :un petit peu là, j'avais mon, voilà. Donc là tu récupères departure date, et ensuitetu fais departure date plus date time point time delta, et on va faire days égal 10,et voilà. Et après je crois qu'il demande de le retourner, je vérifie, ouais c'est
00:23:52 :ça, ça doit retourner après en format chaîne de caractère. Donc là, après tout ça,tu vas faire arrival égal, et là arrival, soit tu fais un string from time, soit jepense on doit pouvoir faire isoformat, comme ça, voilà c'est ça. Sauf que là isoformat
00:24:13 :ça va te retourner avec les heures, minutes, secondes, donc là il faut juste si je metrompe pas retourner date, et voilà. Et là tu l'as comme ça direct. Donc là encore
00:24:22 :tu vois tu peux éviter de repasser par le string from time, et c'est possible aussien string from time, si on fait string from time, donc c'est ça, là on part d'une chaînede caractère, euh non, c'est, attendez, j'ai un doute. Oui c'est ça, on fait une chaîne
00:24:42 :de caractère à partir de la date, c'est ça, donc c'est à partir from time, doncça c'est le time, arrival, c'est un peu aussi, le nom est pas forcément super expliciteparce que là c'est un date time du coup, mais bon, c'est juste from time. Et là du
00:24:58 :coup, hop, si on se souvient bien, donc Y, grand Y pour l'année au complet, et ensuite01, donc c'est le mois et le jour, comme ça. Voilà, et là tu retrouves ça aussi.
00:25:09 :Donc tu vois, c'est pour ça que je vous ai dit la semaine dernière, vous voyez, moi-mêmelà je me suis planté plusieurs fois, je confonds le relative delta parce que ça c'est un autremodule un peu plus robuste qu'avec le time delta, donc je confonds toujours les deux,avec le isoformat, on est jamais trop sûr, tout ça, donc voilà, c'est pour ça qu'il
00:25:35 :faut vraiment beaucoup s'entraîner avec ces choses là si vous voulez être assez bonà les manipuler et à retomber sur vos pieds aussi, vous voyez, là même si on se trompe,on finit par comprendre pourquoi on s'est planté et retrouver ce qu'il nous faut, mais voilà.
00:25:49 :Et du coup après, le truc en plus qu'il y a là-dedans, et ce qu'on va voir tout de suite,c'est donc la fameuse conversion JSON pour récupérer les éléments.
00:26:00 :Ok, ça va pour ça ? Je suis allé un petit peu vite, merci. C'est bon ? Ok,mais après comme je vous dis, je pourrais vous, je vais vous, hop, je vais vous,tac, je l'ai reperdu, Tosa, ok, est-ce que je peux revenir ? Non. Bon,
00:26:26 :j'essaierai de vous la mettre, je vais me le noter là, mettre la question sur le Discord. Ok,je vous la mettrai sur le Discord si vous voulez la retester de votre côté plus calmement. Ok,
00:26:44 :alors, ouais Arnaud, question ? Ouais, j'ai une petite question par rapport au time delta,quand est-ce que finalement on utilise les dates, parce que là c'était des dates naïves que tuutilisais vu qu'il n'y avait pas de fuseau horaire, mais ce qu'on a vu aussi, via les vidéosque t'as montrées de date time, c'est que dès qu'on fait comme ça des opérations, on rajoute
00:27:07 :justement pas que des heures ou des minutes et qu'on commence à taper dans les jours,ben en fait on peut vite tomber sur un cas où le résultat finalement n'est pas correct,justement avec des changements d'heure et tout. Bah c'est pour ça que si t'as vu toute la partie
00:27:24 :où j'aborde les fuseaux horaires, en fait il faut toujours revenir à quelque chose de neutre enUTC où là tu fais tes conversions et après tu retranscrits dans le fuseau horaire où tu asbesoin de... C'est pour ça qu'après les vidéos je me demandais vraiment quand est-ce qu'on
00:27:43 :utilisait des dates naïves finalement. Des dates naïves, assez rarement en fait, parce que souventje te dirais, je prends l'exemple de Django là, qui est l'exemple principal personnellement danslequel je fais ces opérations, souvent les dates que tu récupères sont déjà en fait avec uneinformation de fuseau horaire, donc après c'est là où il faut faire attention. Tu vois par exemple
00:28:06 :si je prends une session de mentorat, je récupère depuis la base de données la date de la sessionde mentorat, imaginons que je vais faire un calcul justement dessus, ben là effectivement il fautfaire attention parce que si tu remets pas tout en UTC, tu pourrais prendre une date qui est avec
00:28:24 :un fuseau horaire et après toi tu crées une autre date où tu fais un time delta ou tu fais desopérations comme ça avec une date naïve ou une date que tu as récupéré de ton côté sur tonordi avec un autre fuseau horaire parce que c'est pas le même que le serveur Django et là ça peut
00:28:38 :commencer à devenir le bordel. Donc là en fait il faut récupérer tes informations, les nivelersur l'UTC et après une fois que ton site est à Paris, tu affiches l'information en fonction dufuseau horaire de Paris. Après tu peux aussi dans le cas de Django, tu as des templates et tout
00:29:04 :qui te permettent de l'afficher en fonction du fuseau horaire de la personne qui va voir la pagedu navigateur qui l'utilise etc. Mais ça c'est encore d'autres choses. Après dans le cas du
00:29:15 :Toza je te dirais tu vois c'est vraiment, ils vont pas au delà de la librairie standard donc ilsrestent là dessus, j'ai pas vu de questions avec les fuseaux horaires, c'est le genre de chosesqu'on verra plus vers la fin, on fera des trucs là dessus. Pour l'instant je préfère que vous
00:29:28 :maîtrisiez déjà bien tous les trucs plus basiques de daytime et puis après si on a le temps dansquelques semaines on abordera ça. Et les tests, je sais pas si tu parles du petit test que j'ai
00:29:44 :montré de Toza là ou les tests sur le site? Celui de Toza. Celui de Toza, ouais celui là en faitc'est un test gratuit que tu peux faire mais c'est toujours les trois mêmes questions tu vois,genre je savais que... Donc effectivement si vous voulez vous entraîner avec la fameuse question
00:30:00 :là avec Daytime vous pouvez le faire directement sur le site d'Isograde, là vous tapez Toza,Python, test gratuit, mais c'est toujours les trois mêmes questions donc c'est plus pour voir,pour tester un petit peu l'outil mais ça va pas plus loin que ça. Ok et d'ailleurs là dessus je
00:30:20 :réfléchissais parce que là du coup, comme vous êtes le programme bêta, je pense que je vaisvous permettre de repasser un test d'évaluation. En fait je pense que bon là c'était intéressant de
00:30:33 :voir au début, je verrai pour les prochains si ça vaut le coup d'en faire deux parce que bonça coûte de l'argent, il faut payer les crédits pour vous faire ça, sinon je vous en ferai faireautant que nécessaire. Mais je pense que ça peut être bien soit au milieu, soit un peu avant la fin
00:30:52 :du programme de refaire un test pour juste évaluer, voir la différence, voir si vous êtes prêts,voir si vous avez un petit peu amélioré, si vous avez grandement amélioré, si vous êtes prêts,etc. Ça peut être sympa pour se rassurer et voir dans le cas où vous n'avez pas encore
00:31:11 :une note suffisante pour allonger un petit peu et vous entraîner sur des points spécifiques quirestent. Alors le module JSON, c'est tout bon pour ça ? Plus de questions sur ce qu'on a vu ?
00:31:23 :Alors le module JSON, je crois que je vous avais mis les glossaires, donc je vous les mettrailà dans le readme, je vous mettrai le lien du git dans la description de la session. Je ne l'ai
00:31:42 :pas fait aussi pour les derniers, il faudrait que je mette un petit peu à jour tout ça, si vousvoulez revoir les sessions en rediffusion. Je n'ai pas fait les chapitres et tout aussi mais je vais
00:31:50 :les faire. Donc il y a un glossaire assez complet sur le JSON, avec normalement tout ce que vousavez besoin de savoir, mais on va revoir tout ça un petit peu plus en détail. Et notamment des
00:32:03 :choses que je vois qui mélangent pas mal les gens régulièrement. Donc les fonctions de base.Donc le JSON, ce qui est déjà assez confus, c'est que ça ressemble à des dictionnaires,c'est pas totalement des dictionnaires. Quand on le met en contexte Python, vous allez voir qu'il
00:32:26 :y a des petites différences. Des fois aussi, comme on l'a vu, ça peut être des chaînes de caractère,notamment ça va être le cas quand on va travailler avec du web, on va souvent avoir des données,qui vont qu'on va soit envoyer en chaîne de caractère, soit qui vont nous être retournées
00:32:42 :en chaîne de caractère. Là ça dépend beaucoup des API. Si vous avez déjà travaillé un petitpeu avec ça, des fois vous allez utiliser Request et vous allez faire un post, et là vous allez luidonner un JSON ou un Payload, il y a différentes attributs des fois. Et des fois, ça m'est arrivé
00:33:00 :assez régulièrement, vous mettez votre Payload, vous mettez votre DataString, et des fois si votreDataString ici c'est un dictionnaire, ça va pas marcher. Donc vous le mettez comme ça,
00:33:09 :vous lui envoyez directement le dictionnaire et vous aurez une erreur avec l'API. Et là du coup,il faut transformer ce dictionnaire en chaîne de caractère JSON, et pareil dans l'autre sens,des fois l'API va vous retourner une chaîne de caractère qui va être non pas directement unobjet Python, mais une chaîne de caractère avec ces données-là, et là il faut convertir cette
00:33:29 :chaîne de caractère en dictionnaire du côté de Python, qu'on va pouvoir manipuler.Parce que là, quand on a une chaîne de caractère, si on veut accéder au nom John,bah forcément ça va être un petit peu le bordel, vu que c'est une chaîne de caractère,c'est juste une suite de caractères, alors que quand on est avec un dictionnaire,
00:33:46 :là on a juste à récupérer la valeur associée à la clé Name, et c'est facile. Et c'est à ça queservent du coup ces deux fonctions, Dumps et Loads. Donc là, je vous ai mis une petite question ici,
00:34:00 :là quand je fais, j'ai mon data ici qui est un dictionnaire, si je fais JSON.DumpsData,à votre avis qu'est-ce que ça va retourner comme type de données ? Est-ce que ça va retourner
00:34:11 :une liste, une chaîne de caractère, un dictionnaire, un objet JSON, je ne sais quoi ?Alors, un objet, Cécile, c'est un peu vaste un objet, vu que tout ce qu'on a ici sont des objets,du coup ça peut signifier un peu tout. Arnaud dit un objet JSON. Personne d'autre ? Petite idée,
00:34:51 :non ? Ok. Donc, un objet c'est trop vague. Un objet JSON, et c'est là que justement,ok, d'autres qui pensent que c'est un objet JSON. Alors, je vais faire un return ici,
00:35:02 :et je vais vous montrer. Donc là, c'est en fait une chaîne de caractère tout simplement,parce qu'on va prendre justement notre objet ici qui est un dictionnaire, et on va le dumper enfait. Donc si je lance, hop, ah oui, j'ai fait un print, je vais faire un print de type. Et là,
00:35:18 :vous voyez, c'est là aussi où c'est surnoi, c'est pour ça je pense que si vous avez vu lesformations, je vous dis toujours de bien faire un type, parce que là quand on regarde ça,on se dit bah oui, ok, ça n'a rien changé, on a un dictionnaire, ou peut-être un object JSON,
00:35:30 :et en fait non, si je lance, en fait c'est juste une chaîne de caractère. C'est pour ça que jevous dis toujours, quand vous avez un doute sur le type, faites un print du type, et ne vouslaissez pas avoir par ce que nous retourne ici votre IDE, parce que des fois il va rajouter les
00:35:44 :guillemets autour, peut-être que si on le fait dans un, je vais essayer là, si je le fais dansun terminal, peut-être qu'il va nous mettre, oui, import JSON, non, là vous voyez non plus, il ne nousmet pas les guillemets autour, donc on a l'impression que ça n'a rien changé, et en fait c'est une
00:36:02 :chaîne de caractère. Parce que le loads, en fait, va nous permettre, à partir d'une chaîne decaractère, de faire l'inverse, donc si je descends ici, là si je relance, là vous voyez, il n'y a pasgrand chose qui semble avoir changé, à part le fait qu'on a les guillemets qui étaient doubles ici,
00:36:16 :et qui sont simples, mais là de nouveau, si je fais un type cette fois-ci, alors, deuxième interrogation,qu'est-ce que ça va nous mettre cette fois-ci, selon vous ? Arnaud dit un dicte, ouais, bon, c'est ça,
00:36:36 :dicte, alors ouais, donc c'est bien un dicte, donc Jonathan, non, tu vois, et c'est pour ça que je posela question, parce qu'effectivement, on pourrait se dire, ok, avec le JSON, vu que c'est un petitpeu différent, ça va être un objet JSON, et en fait non, à chaque fois, en fait, on va, quand on va
00:36:57 :travailler avec ces objets-là, du côté de Python, ça va toujours nous retourner un dictionnaire, ok,donc vous n'aurez jamais un objet, ça pourrait exister, il y a des objets custom,là, quand on fait un fichier, par exemple Python, ça va nous retourner, ça peut nous retourner unfile object, il y a plein de trucs comme ça qu'on peut faire, quand on fait, quand on travaille avec
00:37:20 :des fichiers aussi, on peut faire des objets en mémoire, donc on peut prendre une chaîne decaractère, mais après, la faire comme un objet en mémoire, avec le module I.O. notamment, là,
00:37:32 :dans ce cas-ci, ça va vraiment, à chaque fois qu'on va manipuler du JSON, ça va être via ledictionnaire. Et des fois, donc comme je vous dis, la différence, et c'est pour ça qu'il faut bien
00:37:43 :faire attention, il faut bien regarder qu'est-ce qu'on a, des fois, en fait, ces objets, comme je merépète, mais dans des contextes différents, ça peut être des chaînes de caractère qui ressemblent,du coup, et c'est là que c'est très sournois, ça peut ressembler à un dictionnaire, vous voyez là,
00:37:55 :ça ressemble à un dictionnaire, et en fait, dans un cas, c'est une chaîne de caractère, dans l'autrecas, c'est un dictionnaire. C'est pour ça, quand vous récupérez ces données, il faut toujours un
00:38:02 :petit peu vérifier avant ce qu'on a, et ensuite utiliser loads et dump dans le cas où vous voulezpasser de l'un à l'autre. Et après, donc ça c'est pour loads et dump, quand on travaille avec des
00:38:13 :fichiers, là par contre, on va utiliser les fonctions sans le S, donc dump et load, pourécraser, enfin pour écraser, pour dump, c'est un mot anglais qui veut dire vider, si vousvoulez, on va déverser quelque chose dans un fichier, dans ce cas-ci, et load pour chargerles informations. Et le deuxième truc que je vois très souvent, c'est les gens ne comprennent pas
00:38:40 :trop comment modifier un fichier JSON. Donc là par exemple, dans mon data, ah oui, puis on vavoir aussi qu'est-ce qu'on peut mettre dans un fichier JSON, ça aussi c'est intéressant.
00:38:52 :Donc, est-ce que c'est bon déjà pour loads et dumps, qu'est-ce qu'elles font, et dans quelcontexte on les utilise, ça va ? Et dans le cas, pour terminer là-dessus, je vais revenir sur,
00:39:09 :regardez, je vais revenir sur la, je vais la retrouver vite fait, je vais reprendre le, hop,je vais en profiter pour faire la petite capture d'écran, tac, test, ok, abandonné, ok, parce queon avait ça, voilà, JSON string, tac, copie, hop, ok, donc là vous voyez en fait ici, on avait JSON
00:39:43 :string, alors là il est tout cassé, pourquoi il est tout cassé comme ça, ok oui parce que c'estune chaîne de caractère, il me la met, tac, ok, donc là vous voyez on a ça, on a une chaîne decaractère qui contient ces informations, et c'est exactement ça qu'on a dans, si je vous remets là
00:40:03 :l'énoncé, vous voyez, on a cette chaîne de caractère et il faut qu'on récupère les informations. Donclà qu'est-ce qu'on va faire, donc première chose, on importe le module, ensuite on fait, bon là jele fais à l'intérieur ici, normalement on le ferait au-dessus, mais vous comprenez, on va faire donc
00:40:21 :un JSON.loads pour récupérer tous ces paramètres, là on va récupérer ça, on va le mettre dansdata, là si je fais un print de data, donc on a l'impression que rien n'a changé, si je fais unprint de JSON string avant et un print de data, je lance, là, même chose que ce qu'on vient de
00:40:36 :voir, on a l'impression qu'il n'y a rien qui est différent, il y a un petit espace en plus, làon commence à voir un petit peu des différences, vous voyez là, j'avais pas mis d'espace, parce quelà c'est vraiment une chaîne de caractère, donc il va pas, si j'enlève ça ici d'ailleurs, là je
00:40:48 :vais avoir une erreur, parce que je vais essayer de le lancer, et là on va avoir un JSON decodeerror, il s'attend à avoir une virgule et il l'a pas. Après là vous voyez, si je mets des espaces,
00:40:58 :là les espaces sont conservés, alors qu'après ici, comme on a vraiment un objet, il va êtrebien formaté. Et la différence du coup, donc c'est bien ici que si je refais un type pour que ce
00:41:07 :soit bien clair, type des deux, on a bien une chaîne de caractère et un dicte. Donc là l'intérêt,c'est qu'après, du coup, ici on peut faire un print de data et de departure date, et là jerécupère mon élément. Et là pareil, si je reviens sur le import date-time, bien voir que là c'est
00:41:28 :une chaîne de caractère, parce que si on fait les deux, si je fais departure date, toujoursutiliser type, très important, si je fais date-time.date-time.from iso-format departure-date,
00:41:41 :date-as-date, on va faire ça, je vais printer les deux, et là il y a une petite indication,vous voyez, mais si je le récupère en date comme ça, là pareil, on a l'impression qu'on a deuxfois la même chose, on se dit ok, bon quelle est la différence entre les deux ? La différence c'est
00:42:02 :qu'il y en a un sur lequel on va pouvoir faire des opérations, donc celui-là on va pouvoir parexemple le retransformer, donc faire string from time, et là par exemple mettre Y, alors que luic'est juste une chaîne de caractère, donc si je fais ça, là vous voyez il y en a un, on va pouvoir
00:42:17 :le manipuler comme une chaîne de caractère, et l'autre c'est un objet date. Donc bien bien bienfaire attention aux données qu'on a et les afficher, ça c'est un petit peu conseil généralque je vous donne. Je vais vous laisser là, ça peut être intéressant aussi. Donc si je reviens
00:42:35 :ici, donc voilà, est-ce que c'est bon pour ça, du coup dumps, loads, avec cet exemple, et oui c'estsagame, effectivement, c'est ce qu'on va voir. Donc je vais reprendre mon data ici, donc si je veux
00:42:53 :écrire ces données dans un fichier, donc là par défaut ça va le faire dans le dossierdans lequel se trouve le script, je lance, hop, run module, je ne l'ai pas appelé, donc je l'appelle,ça sera mieux. Donc là je lance, data, il n'a pas écrit, qu'est-ce que j'ai fait, JSON dump, ah oui
00:43:16 :parce que oui du coup je lance le truc depuis, j'ai mis dans un sous-dossier, donc là il va me lemettre au niveau de où je lance le script Python. Donc là on a bien notre fichier data qui contient
00:43:29 :les informations, et pour l'instant vous voyez que si je reviens entre, si je mets les deux côte àcôte, comme ça, entre data et module, vous voyez là, alors bon j'ai modifié, là je l'ai modifié,si j'enlève ça, désolé c'est un petit peu le bordel, je relance, ok. Donc là entre les deux
00:43:48 :vous voyez qu'il n'y a pas grand-chose qui a changé, ok, on a des chaînes de caractères, hop, ici on aun 30, ok, il n'y a pas grand-chose qui a changé. Par contre, et c'est là qu'il y a une différence entre
00:43:59 :les deux, c'est qu'on a un dictionnaire ici, donc un objet Python, ici si je mets none par contre etque je relance, là on va avoir null. Donc ça c'est vraiment, ça m'étonnerait pas, d'ailleurs je crois
00:44:11 :avoir vu des questions là-dessus, j'ai un vague souvenir d'avoir vu des questions posées là-dessus,sur justement qu'est-ce qu'est un JSON valide, qu'est-ce qu'est un dictionnaire valide. En Python,
00:44:21 :null ça n'existe pas, donc si vous mettez ça là vous aurez une erreur, il va vous dire voilà,name null is not defined, c'est pas un objet qui existe, par contre le none c'est le singleton,il le connaît, c'est l'objet qui ne représente rien, et par contre dans le JSON vous voyez qu'il
00:44:35 :va le convertir parce que JSON c'est un format qui est justement qui au départ un format,c'est javascript, si je ne me trompe pas, javascript object notation, un truc comme ça,je crois que c'est ça, json, et en javascript le none c'est null. Pareil avec les booléens,
00:44:55 :si je mets true ça va être la même chose mais en minuscule, vous voyez, et le false pareil,false en minuscule, et on a une dernière différence, il y a les guillemets aussi,c'est pour ça que vous avez vu là quand je vous disais la seule différence qu'on avait entre les
00:45:11 :deux c'est que des fois on avait des guillemets doubles, des fois des guillemets simples, là sije mets un guillemet simple et que je lance ici on aura quand même toujours des guillemets doubles,et de la même façon si je mets un guillemet simple ici, là il va m'engueuler, vous voyez,
00:45:22 :il n'est pas content et là il me dit, tu vois, il faudrait le mettre entre doubles quotes. Etil y a peut-être d'autres trucs encore, tout ça je le montre dans le glossaire si vous voulezle retrouver, j'explique là les différences, les chaînes de caractères seules les guillemetsdoubles, les booléens s'écrivent en minuscule et l'objet non est représenté par nul, dans mes
00:45:43 :souvenirs, et si je ne me suis pas trompé ici c'est les trois seules différences. Mais doncvous voyez que là on a effectivement une petite différence entre l'objet json qui est dans lefichier et celui qu'on récupère ici. Par contre, et là aussi c'est quand même l'intérêt du module
00:46:00 :json en fait ici, c'est que donc là je fais une écriture avec dump, donc je fais une ouverturede fichier classique, j'ouvre mon fichier en mode écriture en tant que f, et ensuite on lui ditqu'est-ce qu'on veut mettre, dans quoi, et le indent 4 ici ça permet juste d'avoir quelque
00:46:15 :chose qui est un peu plus facile à lire. On peut mettre, si on met indent 1, il y aurajuste une indentation d'un espace, moi je suis habitué à mettre 4, donc voilà c'est juste queça le met en forme un peu plus facilement. Donc json.dump, qu'est-ce qu'on veut écrire,
00:46:31 :dans quoi, et éventuellement le indent. Alors, oui alors justement Arnaud, très bonne remarque,c'est exactement là dessus qu'on s'en va. Donc là après j'ai mon fichier, je peux faire
00:46:52 :l'inverse, c'est-à-dire le lire, donc pour le lire on n'est plus en mode write mais en mode read,et à la place de dump on va utiliser load, et là c'est plus simple, il n'y a pas 36 choses à faire,c'est juste dire qu'est-ce qu'on va chercher, et dans ce cas-ci on lui passe le fichier. Et on va
00:47:07 :récupérer ça dans data, donc là si je print data, et c'est là que c'est intéressant, c'est que vousvoyez qu'il va nous récupérer tout ça en forme de dictionnaire, donc si je fais un type de data,là on a bien directement un dictionnaire. Donc c'est pas une chaîne de caractère,
00:47:21 :c'est directement un dictionnaire, et quand j'affiche mon dictionnaire, on a directement lefalse qui est bien cette fois-ci un booléen. Si j'affiche age, ici j'ai bien false, et si j'affiche
00:47:32 :le type de ça, c'est bien un booléen. Donc c'est le module JSON qui va s'occuper dans les deux sensde faire cette conversion, de prendre le none et de le mettre en nulle, et dans l'autre sens deprendre le nulle et de le remettre en none. Et pareil avec les guillemets, il va s'assurer de
00:47:49 :les mettre en double ici, la seule chose qu'il faut faire attention du coup c'est si vous modifiezdes fichiers JSON à la main, donc là pareil si je mets false, généralement si vous avez unbon IDE comme PyCharm ou les trois quarts des IDE, il va vous le surligner, il va vous dire
00:48:03 :que voilà dans ce cas-ci, alors là il me propose vous voyez de le mettre entre un double quote,ici le plus évident ce serait de le mettre comme ça en minuscule, mais voilà si vous faites desmodifications comme ça, faites bien attention de respecter ça. Après du côté de Python,
00:48:15 :automatiquement il va s'assurer dans les deux sens de faire les bonnes conversions. Et donceffectivement après si on veut modifier quelque chose, ça c'est un truc qui mélange un petit peupar rapport à quand on utilise des fichiers classiques, parce que quand on utilise desfichiers classiques c'est un peu plus libre, on peut rajouter à la fin, on l'avait vu un petit
00:48:35 :peu rapidement à la fin de la dernière session, avec le mode append par exemple, on peut rajouterdu texte à la fin du fichier, avec le mode write on peut écraser tout ce qu'il y a dedans, on peutlire par ligne, on peut lire tout d'un blog, donc il y a plusieurs choses comme ça et c'est un peu
00:48:50 :plus organique, il n'y a pas dans un fichier texte, si j'essaie de lire tout ça en fichiertexte, là il s'en fout, si je mets false comme ça et qu'à la place ici je fais un f.read et que
00:49:01 :j'affiche data, là j'aurai pas de problème, vous voyez il va me lire le fichier, le falseil n'y a pas de souci, sauf que là en fait ce que je récupère c'est une chaîne de caractère.
00:49:12 :Donc quoi que j'ai un petit doute d'ailleurs, parce que je crois que c'est peut-être un, non c'est ça,c'est bien directement une chaîne de caractère. Donc vous voyez et après avec les fichiers justement
00:49:23 :on pourrait facilement mettre d'autres choses après, là je pourrais mettre un autre élément,on pourrait sauter une ligne et créer un autre dictionnaire, je vais remettre comme ça, on pourraitcréer un autre dictionnaire, mettre un tchou etc, il n'y aurait pas de souci. Avec JSON c'est
00:49:36 :différent, c'est différent parce que première chose vous pouvez avoir qu'une seule donnée àl'intérieur et c'est un peu ce que tu disais Arnaud, ici on peut pas avoir plusieurs éléments. Si je
00:49:47 :mets, si je fais virgule et que je mets quelque chose d'autre à la suite, vous voyez ça marchepas, il met une erreur ici. De la même façon on peut mettre, on n'est pas obligé de mettre des
00:49:56 :dictionnaires, ça c'est une erreur que je vois aussi souvent, donc si vous avez une question dustyle est-ce qu'on peut écrire une chaîne de caractère dans un fichier JSON ? Oui, si je mets
00:50:04 :deux comme ça ici ça va marcher. Donc là si je reviens avec mon json.loadf et que je print data,j'ai bien deux et là si je fais un type de data ça va bien être une chaîne de caractère. Donc ça
00:50:17 :peut être utilisé pour stocker autre chose que des dictionnaires, je peux mettre une liste et làsi je refais un print de data et de type de data, je vais bien récupérer directement ma liste,ça veut dire qu'après je peux faire data.append, on peut mettre 5 et c'est là où, donc on revient
00:50:32 :à ce que disait Arnaud, si on veut modifier cet élément, il faut lire ce qu'il y a dedans,modifier du côté de Python notre objet et après le réécrire dedans. Donc là on va faire un json.dump
00:50:44 :de quoi ? De data dans f et on remet notre indent égale à 4 et là à la place du read on va mettreun write. Donc là si je fais ça, je vais lire mon json, ça va me retourner un objet de type liste,
00:50:59 :je peux ajouter dedans et ensuite je réécris tout ce qu'il y a dedans. Donc c'est vraimentcomme ça, on peut pas juste rajouter une petite information, on va vraiment récupérer tout l'objetqu'il y a dans notre json, modifier cet objet et ensuite réécrire toute l'information. Donc si je
00:51:15 :relance là, on va voir qu'on a bien notre 5 qui est rajouté. C'est pour ça que c'est un petit peubon là c'est des exemples très simples mais c'est sûr que quand on a un dictionnaire, c'est souventle cas avec les json après, vous allez avoir un dictionnaire avec une clé, avec un autre
00:51:28 :dictionnaire, avec une clé, avec un autre dictionnaire. Pour ceux qui ont fait les trucse-commerce avec Stripe, vous avez dû voir ce genre de trucs en cascade où on a le dictionnaireprincipal, après on a le items, après dans items on a line items, après on a payment, après on a
00:51:43 :ID, ensuite on a user et on descend, on descend, on descend comme ça. Et là le truc c'est que siici j'ai finalement des E, et que là j'ai une liste, on va faire un petit exemple comme ça,voilà normalement si je me trompe pas ça c'est valide, voilà. Donc là le truc c'est que si on
00:52:04 :veut aller modifier ça ici, on peut pas juste dire ok récupère moi juste ce dictionnaire làpour que je puisse le modifier, il faut vraiment récupérer tout le dictionnaire, donc tout cetruc là, et ensuite faire data.crochet, donc là on va faire A, crochet B, crochet A, B, C, D, E,
00:52:22 :E c'est tout, et là on va faire .append 2 si je me trompe pas, et après on va refaire notrewithOpenData.json, write as F, et on fait un json.dump de data dans F intent égal 4, si je
00:52:44 :me trompe pas, ok. Et là on a fait ok, oui ok c'est bon, ça a tronqué mais là c'est bon. Doncvous voyez c'est vraiment comme ça qu'on va aller modifier, il faut vraiment récupérer tout l'objetet aller modifier précisément à l'endroit où on veut l'élément qu'on veut modifier. Et donc
00:53:03 :je reviens, ça ça va pour ça ? Déjà je vais m'arrêter deux petites secondes ici, il y a beaucoupd'informations quand même. Super, pratique les petits pouces, ça permet de voir rapidement si
00:53:17 :les gens ont compris. Donc effectivement comme je vous ai dit par contre on n'est pas obligé destocker un dictionnaire avec donc les accolades ici, on peut mettre des listes, on peut mettredes tubes, j'ai jamais essayé mais j'imagine que non un tube ça marche pas, ok. Vous voyez le tube
00:53:36 :il aime pas, je pense qu'il y a quand même des petites limites. J'allais dire un set aussi, jesuis pas sûr que le set ça marche, ouais le set à mon avis il aime pas trop. Mais les chaînes de
00:53:45 :caractère, les crochets, un booléen aussi, non ? Oui si un booléen si je mets comme ça, je penseque ça marche. Bon après pour ces décats de figure, ça peut être peut-être pratique si vous voulez
00:53:56 :faire une petite base de données et juste stocker une information comme ça, mais c'est rare qu'onmette directement ça ici. Souvent si vous voulez stocker dans un JSON des informations, par exemple
00:54:06 :une configuration, vous allez avoir un dictionnaire avec par exemple settings et après ici je sais pasdark mode et vous allez avoir un truc comme ça, ça va être un petit peu plus organisé comme ça,c'est rare qu'on découpe un fichier et que si peut-être vous avez une application très simple,
00:54:21 :vous faites un darkmode.json et vous mettez juste true ou false dedans, ça peut, à la limite,pourquoi pas. Et là je pense que si je le mets, voilà, ça récupère bien l'élément. Donc des
00:54:31 :booléens, des listes, des chaînes de caractère, des dictionnaires, ça marche. Et après par contredonc vous pouvez pas avoir plusieurs objets. Si je veux mettre deux listes, je peux pas faire ça,
00:54:40 :je peux pas faire 4, 5, 6, là ça va pas marcher. Même si vous mettez une virgule, peu importe,ça va pas marcher. Si vous voulez avoir deux listes, vous faites une liste, deux listes. Vous
00:54:48 :mettez une liste et dans la liste, vous mettez deux listes. Et là comme ça, ça marche parcequ'on a un seul objet au niveau global du fichier et après dans cet objet, on a plusieurs objets,ok ? Vous pouvez faire pareil avec un dictionnaire, vous pouvez mettre un dictionnaire 1, vous mettez
00:55:03 :votre première liste et après 2, vous mettez votre deuxième liste et vous avez votre dictionnairecomme ça, ok ? Ou une liste, deux listes, ça marche aussi. Mais vous pouvez pas mettre deux
00:55:13 :choses directement comme ça, ça va pas marcher. C'est vraiment la seule règle. Un seul objet dansle fichier et après dans cet objet, vous pouvez le manipuler comme vous voulez. Donc voilà,
00:55:27 :je crois que c'est ça, stockage divers, c'est ce que je voulais vous montrer. On peut mettredonc juste une chaîne de caractère ou un booléen, ça va marcher. Le error, c'est aussi ce que je
00:55:36 :vous ai montré, là on a un peu tout fait comme ça, voilà, si j'ai deux listes comme ça, ça va pasmarcher. Et on va se retrouver avec l'erreur qu'on a la plus courante, c'est le, et alors là ça va être
00:55:45 :dans json module, tac. Si je lance ça, hop, on a le json decode error. Donc ça c'est quand on aun fichier json qui est mal formaté, on va se retrouver avec cette erreur qui nous dit qu'iln'a pas réussi à lire les données qui sont dans le module, dans le fichier qu'on lui a donné. Donc
00:56:07 :là dans ce cas-ci, l'erreur ici. Ok, parce que là c'est pas un format valide. C'est bon pour ça,on a fait le tour normalement de tout ce que je voulais vous montrer. Vous voyez, il n'y a pas
00:56:20 :énormément de choses, c'est vraiment, il faut juste bien comprendre, il y a quatre fonctionsqu'on utilise, loads, dumps, load et dump. Les fonctions sans les S, c'est vraiment pour l'écriture
00:56:32 :et la lecture. Et après loads et dumps, c'est vraiment quand vous êtes, c'est comme ça qu'ilfaut le voir en fait. Loads et dumps, c'est vraiment avec les fichiers sur le système. Loads et dumps,
00:56:43 :c'est vraiment quand vous êtes en mémoire. Loads et dumps, vous pouvez tout faire sans jamais écrirequoi que ce soit sur le disque. Ça va être juste, vous récupérez une chaîne de caractère, vous la
00:56:51 :récupérez en format dictionnaire, vous modifiez votre dictionnaire, vous le repartez, vous leressortez en chaîne de caractère avec dumps. Et ça du coup, comme je dis, c'est souvent un truc
00:57:03 :qu'on fait avec des API. Donc comme ça, vous récupérez des informations du net, vous lesmanipulez, vous les renvoyez à l'API. Et là, il n'y a rien qui se passe sur le disque, c'est vraiment
00:57:11 :en mémoire avec tout ça pour la manipulation du format JSON sans parler d'écriture sur le disque.Ok. Et après, donc voilà, juste bien retenir tout ce qu'on a vu, reliser le glossaire sur les
00:57:24 :types, sur le nul, le non, le true, le false, le seul objet, c'est vraiment ces choses-là qu'ilfaut retenir. Ouais, question Mathieu. Ah ouais, c'était juste pour savoir si par exemple le fichier
00:57:40 :n'existe pas qu'on veut charger. La meilleure méthode, on va dire, de gérer le cas où iln'existe pas entre un bloc if, par exemple if os.y ou un bloc try except. Je ne sais pas trop quoi
00:57:55 :choisir des fois entre un bloc if ou un bloc try si le fichier n'existe pas par exemple. Est-ce quetu as lu les glossaires sur eafp et lbyl ? Est-ce que ça te dit quelque chose ? Pas du tout. Ok,
00:58:06 :bah je vais te rediriger là-dessus. Du coup, en gros, c'est deux façons de gérer les erreurs,et effectivement c'est assez intéressant comme question. Donc en fait, dans le glossaire,
00:58:19 :ici tu vas voir dans les eafp, c'est easier to ask for forgiveness than permission. Plus facilede demander pardon que de demander la permission. Donc ça c'est le try except, c'est en gros,
00:58:32 :c'est un peu tu vas à bourrin, t'essayes, et si ça marche pas tu gères l'erreur. L'autre,tiens d'ailleurs, ah oui, lbyl, voilà, c'est l'inverse. C'est tu regardes avant de sauter,
00:58:44 :look before you leap. Donc tu vérifies, donc là ce serait le cas, est-ce que le fichier existe ? S'ilexiste, je fais quelque chose, sinon je fais autre chose. Et là je te dirais que ça dépend,
00:58:56 :le bon exemple que j'aime donner c'est justement avec ce que je vous ai montré là il y a deuxsecondes, avec le méga gros truc qu'on avait comme ça, avec le A, B, C, D, E, etc. Et là tu
00:59:13 :fais .happened 3. Donc là tu vois, si tu fais un lbyl, il faudrait que tu vérifies if A in data,ensuite tu pourrais faire if B in data A, et tu pourrais faire un truc en cascade comme ça,ou alors tu pourrais faire data.get A, virgule, tu mets un dictionnaire vide au cas où il n'y a
00:59:37 :rien, .get B, dictionnaire, .get C, tu vois, etc. Mais là ça te fait un truc super long. Et aprèsà la fin, tu vois, une fois que t'arrives, tu fais ton happened et là, quoi que là encore,enfin il faudra peut-être le faire en deux étapes, mais tu vois c'est pas très pratique. Donc là un
00:59:56 :bloc try except est peut-être plus intelligent, tu veux dire ok, t'essayes, et là si là tu gérais,t'aurais soit un keyerror parce qu'il trouve pas finalement dans ton dictionnaire un moment,il n'y a pas la clé B, donc hop, il trouve pas et c'est un keyerror, soit à la fin t'aurais pas
01:00:15 :une liste et donc t'aurais bien tous ces éléments ici, A, B, C, D, E, mais à la fin ce serait pasune liste mais un set ou un dictionnaire ou un tuple, et là le happened marcherait pas,et là dans ce cas-ci j'ai un trou, là je vois plus trop quel type d'erreur ce serait,
01:00:28 :peut-être un value, non je sais pas, si t'essayes d'ajouter, ça me perturbe, on va le faire,si je fais, tac, imagine t'as un dictionnaire dict, ça, et si je fais un dict.happened de
01:00:50 :attributeerror, oui ok c'est ça, c'est juste ça, parce que le happened n'existe pas sur ledictionnaire, c'est tout. Donc tu vois dans ce cas-ci ce serait plus logique de faire un try
01:01:02 :except parce que ça fait une ligne de code, t'essayes et après tu gères les erreurs,là tu peux avoir deux erreurs, le keyerror ou l'attributerror, et dans un cas tu vas direexcept attributeerror, tu vas logger ça, tu vas dire la clé n'existe pas, et puis sinon tu dis
01:01:18 :que voilà il y a un problème parce que c'est pas le bon type de données. Donc tu vois c'estvraiment le cas de figure principal dans lequel je change, personnellement souvent j'utilise plusles if, donc le lbyl, parce que souvent c'est ça, c'est une vérification, est-ce que l'utilisateurexiste, est-ce que le fichier existe, est-ce que t'as le droit de faire ça, donc c'est un petit
01:01:38 :if, c'est plus clair, t'as pas besoin de te rappeler quelle est l'erreur, que ça va provoquers'il y a un problème etc, tu fais juste vérifier, et si ta vérification marche pas, t'auras juste pasd'erreur. Si ta structure n'est pas validée, tu passes pas, t'as pas d'erreur. Dans l'autre cas,
01:01:55 :voilà, c'est un peu plus de travail mais ça te permet d'écrire des fois moins de lignes de codedans ces cas-ci. Ça répond à ta question ? Oui, merci. Mais voilà, va lire les glossaires,
01:02:08 :ça résume un petit peu tout ça. Bon, collection, de toute façon je vous ai donné des petitsexercices, et j'allais pas faire grand chose de plus que de presque un peu vous relire l'articleque Kevin a écrit, c'est des trucs assez faciles à comprendre, j'allais juste vous donner un petit
01:02:36 :moyen mnémotechnique aussi, parce que ça c'est des vieux modules qui sont un peu chiants, notammentparce qu'on a encore une fois des classes qui, comme avec DateTime etc, qui suivent pas forcémentPEP8, donc là Deck, NameTable, DefaultDig, c'est des classes, mais on dirait pas que c'est des classesparce qu'ils sont tous en minuscules. Le petit moyen mnémotechnique c'est que les deux principales
01:02:55 :qu'on utilise, il y en a d'autres aussi dans le module mais on les utilise moins, les deuxprincipales qui sont bien formatées c'est celles qui commencent par C, ChainMap et Counter, et toutesles autres, donc Deck, DefaultDig et NameTable, c'est tout en minuscules accrochées. Et après
01:03:11 :je vous laisse aller voir ça, c'est assez facile, le DefaultDig on l'utiliseassez régulièrement, le Counter aussi, il est très pratique, et très pratique dans certainscas de figure, c'est le genre de truc aussi peut-être que vous utiliserez jamais de votre vie, ou alorsvous allez l'utiliser assez souvent en fonction de ce que vous faites. Le Deck, je vous ai mis un
01:03:35 :petit exercice là-dessus, j'ai vu des questions Tosa, là encore c'est un truc très simple, c'estjuste une façon plus efficace d'utiliser une liste avec des façons d'ajouter et d'enlever deséléments avec une complexité 0, N, là qui change pas, 0, 1, 0, N, ça c'est un truc qu'on va voir
01:03:55 :bientôt, dans le sens où avec une liste normale, ça va dépendre de la taille de votre liste, donc sivous avez une très grande liste, ça peut potentiellement prendre beaucoup de temps,parce que par exemple quand vous enlevez un élément tout à gauche, il va tout décaler, donc il va
01:04:09 :faire des opérations assez complexes pour décaler tous les éléments de 1 vers la gauche, alorsqu'avec le Deck, il va pas faire ça, donc ça fait des grosses différences de performance si vousavez des grosses listes à manipuler. ChainMap, je l'ai jamais utilisé, mais il est assez intéressant,
01:04:25 :NamedTopo, c'est un petit peu une version simple de faire une classe je dirais, ou un dictionnaire,c'est un petit truc un peu hybride qui peut être pratique, mais personnellement je l'ai jamais troputilisé non plus, c'est plus si vous faites des petits programmes en ligne de commande, que vous
01:04:42 :n'avez pas envie de créer une classe, que vous voulez un truc très simple à utiliser, que voussavez l'utiliser, ça peut être pratique, sinon en fait avec un dictionnaire ou une classe en vraivous pouvez faire la même chose, et je vois pas forcément trop l'intérêt des fois de l'utiliser,
01:04:56 :alors que voilà c'est un truc en plus à apprendre, avec une syntaxe un petit peu différente, et leDefaultDeck c'est très pratique quand vous faites ce type d'opération, là encore, allez voir l'article,ça explique un petit peu mieux, et c'est un cas de figure assez spécifique, mais très pratique dans
01:05:14 :lequel on peut l'utiliser. Un dernier truc que je voulais vous montrer en fait, donc allez voir ça,faites les exercices, je crois que je les ai rajoutés à tout le monde, je vais vérifier, j'airajouté deux trois exercices pas très compliqués, mais ça vous permet de les mettre en pratique tout
01:05:28 :ça, et on va voir aussi justement les questions qu'il y a eu par rapport à ça. Je vais vousmontrer deux trois questions que j'ai vu dans le Toza par rapport au module collection, comme çavous les aurez en tête, et après pour le Toza en vrai, pour le module collection, il n'y a pas grand
01:05:45 :chose de plus à savoir, juste apprenez ces choses là, soyez conscients de ce que ça fait, le deckon y reviendra un petit peu plus dans les trucs d'optimisation, pas spécifiquement pour utiliserdeck, mais quand on va voir tout ce qui est optimisation on va retomber dessus, mais sinon
01:05:59 :les autres voilà, apprenez les, apprenez à les manipuler, je vais vous montrer quelques questionsque j'ai vu passer, il y a une question qui est un petit peu tricky, j'espère qu'il n'y en a pastrop comme ça là sur Counter notamment, vous pouvez y répondre un peu par élimination, vous allez
01:06:13 :voir, mais on va la voir ensemble. Le petit truc que je voulais vous montrer là, c'était une erreurque je vois revenir très très souvent sur les slice avec les listes, où on sait jamais, c'estun peu ce qu'on a vu aussi la semaine dernière avec le random, rendint, quand on importe random
01:06:30 :et qu'on sait jamais quand on fait rendint, est-ce que c'est exclusif, est-ce que là si je faisrendint, est-ce que le 2 va être compris dedans, pareil avec range, quand je fais un range de 10,est-ce que le 10 va être dedans, pour range non, parce qu'on va créer une liste de 10 éléments et
01:06:45 :du coup on va s'arrêter à 9, et il y a plein, c'est ça que je vais vous montrer avec les listes, en faitil y a plein de façons souvent de s'en souvenir, donc pour le range, comment on sait que le 10 va pas êtrededans, parce qu'il faut vraiment se dire, c'est la longueur de la liste, et par défaut avec Python
01:06:58 :on commence à 0, donc si on a 10 éléments et qu'on commence à 0, logiquement on s'arrête à 9, parceque le 0 prend le premier élément. Pour range, c'est ça le petit moyen mnémotechnique, pour les
01:07:10 :slice, là selon vous, qu'est-ce que ça va afficher ici, si je fais un slice en mettant rien au débutet en allant jusqu'à 2.1, qu'est-ce que ça va m'afficher ici. Alors Mathieu, une liste vide, un premier
01:07:27 :élément, vide, ok, donc là dans ce cas-ci en fait ça va nous afficher effectivement juste lepremier élément. Alors pourquoi, et là mon petit moyen mnémotechnique, c'est de me dire que dans
01:07:43 :ce sens-là en fait, il faut le voir, il faut vraiment, donc là on n'a rien au début, en fait on fait 0.1,ok, en fait c'est ça qu'on fait quand on met rien, c'est comme si on mettait 0, et effectivement c'estça Arnaud, il faut voir vraiment de la même façon, le début de la liste c'est 0, on commence à
01:07:59 :compter à 0, et on peut mettre un 0 ici, là ça va pas nous mettre une erreur, si je mets 0 ici, oncommence à 0, ça marche, donc en fait c'est ça qu'il faut vous souvenir, si je mets 0, 0, làeffectivement j'ai une liste vide, ok, parce qu'on commence à 0 et on s'arrête à 0, donc on commence
01:08:14 :au début de la liste, on va jamais plus loin. Quand je mets 0, 1, on commence à 0, et hop, on s'arrêteau 1, donc souvent ce que je fais, là c'est plus facile avec un petit dessin, mais c'est de direvoilà, là vous avez le 0, là vous avez le 1, là vous avez le 2, là vous avez le 3, 4 et 5, ok,
01:08:31 :donc si on fait un petit peu des indices, donc 0 et 1, on va se retrouver juste avec cenombre là au milieu, entre 0 et 2, donc si on va de 0 à 2, on va récupérer les deux premiers, ok,et la façon de se dire aussi, c'est que si je fais, jusqu'où on peut aller, dans l'autre sens aussi ça
01:08:51 :peut marcher, si je mets 5 ici, ou si je mets length de liste justement, longueur de la liste ça vaêtre quoi, ça va être 1, 2, 3, 4, 5, j'ai 5 éléments, ok, donc on peut aller jusqu'à 5, 5 ici, et là onva récupérer toute la liste, 0 à 5, ok, si je mets 6 là, ah oui, on n'a pas d'erreur dans ce cas-ci,
01:09:11 :puisqu'on peut aller au-delà des boundaries, des limites de la liste, mais voilà, juste lefait de se dire, ok, moi c'est vraiment le petit moyen que j'ai trouvé, de se dire ok, on peutfaire 0, 0, et donc si on fait 0, 0, effectivement on commence pas, et donc si on fait 1 comme ça, on va
01:09:31 :récupérer le premier, et pareil à chaque fois, si vous faites 0, 3, vous dites ok, donc 0, 3, on partde 0, on récupère 1, 2 et 3, et on s'arrête là, et dans l'autre sens c'est valide aussi, même chosequand on fait moins 1, ça aussi, souvent je vois les gens se mélangent, on dit moins 1, alors moins 1
01:09:50 :qu'est-ce que c'est, est-ce que le moins 1 c'est avant le 5, ou est-ce que c'est après le 5,dans ce cas là c'est bien, on va récupérer juste, enfin on va partir à partir du moins 1, donc là dansce cas-ci on va pas prendre le dernier parce qu'on va partir au moins 1, ok, parce que si on met,
01:10:07 :et là comment on peut s'en souvenir, juste en se disant qu'on peut pas mettremoins 0 dans ce cas-ci, on peut peut-être le mettre mais ça va juste faire 0, ouais c'est ça, en faitça va juste faire quoi que, alors attendez là c'est marrant, moins 0, j'avais jamais testé ça, je suis en train de dire un truc, des fois je, ça c'est marrant,
01:10:27 :ok donc si on fait 0, oui en fait on peut mettre un moins, mais en fait c'est ça, c'est juste 0, donc là,oui en fait c'est ça, là c'est comme oui oui, c'est exactement ce qu'on a vu, j'étais en train d'avoir unpetit bug, quand on met 0, on commence à 0, on va à 0, et le moins en fait ça change rien, c'est
01:10:44 :juste moins ou plus, ça reste 0, mais du coup c'est ça, donc c'est bien ce que je disais, on peut pasmettre moins 0, parce que finalement c'est 0, donc par contre on peut mettre moins 1, mais moins 1 enfait on commence déjà à reculer, si on veut aller jusqu'à la fin de la liste, du coup on va
01:11:00 :mettre la longueur de la liste, et là ça va nous permettre de récupérer tous les éléments oudirectement le nombre si on peut le compter et qu'on le met comme ça. Donc voilà, et après si
01:11:12 :vous mettez, et je crois qu'on avait vu ça aussi si on va dans l'autre sens, c'est ça dans l'autresens, en fait vous pouvez pas, si je me souviens bien, faire planter avec, là peu importe ce queje mets, vous pouvez pas faire planter les slices en fait, il n'y a aucun nombre que vous pouvez
01:11:26 :mettre ici qui va faire planter votre slice, au pire du pire vous aurez une liste vide, mais danstous les cas vous aurez quelque chose. Donc c'est vraiment tous ces petits trucs là, de se dire que
01:11:37 :dans tous les cas on a quelque chose, qu'on peut mettre 0, 0, que après si on met rien c'est 0 debase, donc que si on met rien dans ce sens là on va jusqu'à la fin de la liste, donc si je mets 1dans ce cas-ci pareil, on se dit ok, donc si je commence à 0 je récupère tout, donc si on met 1
01:11:52 :ça veut dire quoi, ça veut dire qu'on enlève le premier élément tout simplement, parce que si oncommence à 0, on commence au début, donc si on prend après 0, 1, on enlève juste le premierélément. Donc là pareil, qu'est ce qu'on va avoir, on va juste avoir 2, 3, 4, 5, et on va aller
01:12:06 :jusqu'à la fin. Et 1 moins 1, du coup là on va commencer à grignoter, ça aussi vous pouvez levoir comme ça, 0, 0, on prend tout, 1, moins 1, on commence à grignoter les deux côtés de la liste, donclà aussi ça peut être un moyen de vous rappeler que quand on fait moins 1, on va pas récupérer le
01:12:20 :dernier. 0, 0, on récupère tout, 1, moins 1, on enlève le premier à gauche et le premier à droite, donc là onse retrouve avec 2, 3, 4. Si je fais 2, moins 2, là on devrait avoir juste le 3 au milieu, et si je
01:12:32 :continue comme ça, 2, moins 3, là on va grignoter de chaque côté jusqu'à se retrouver en fait avecrien, parce que là il faut vraiment le voir comme Pacman qui bouffe la liste des deux côtés, etfinalement après là comme ça se chevauche, finalement on enlève tout ce qu'il y a dans la
01:12:47 :liste. Mais voilà, 2, moins 2, vous voyez on voit bien qu'en fait on enlève les deux ici et les deuxpremiers. Voilà donc je sais pas si c'est plus clair avec cette façon de voir les choses, mais
01:12:57 :je sais que c'est quelque chose qui m'a, où à chaque fois je prenais pas le temps de réfléchir, jele testais dans un terminal, mais finalement je perdais du temps aussi, et puis des fois mêmeon fait pas le test et on se retrouve avec des bugs, ou dans des questions justement d'examens, c'est
01:13:09 :pas forcément évident, j'ai vu souvent ces petites erreurs là, donc j'espère que c'est plus clair avec ça.Ça va pour ça ? Ok, et du coup on va juste repasser sur trois petites erreurs que j'avais
01:13:27 :vu qui étaient intéressantes. Celle-là je la trouvais intéressante justement sur la créationdes données, il y a plein, on verra ça probablement la semaine prochaine du coup, ou une autre fois,le fait qu'il y a plein de façons de créer aussi dans des trucs un peu plus complexes comme ça.
01:13:46 :Par exemple on l'a vu tout à l'heure là, quand je vous ai montré que si je fais a égale 345 bla bla,avec une virgule, là on a un tuple. Donc vous voyez il y a différentes façons des fois de
01:13:56 :récupérer des éléments comme ça. Là c'est pareil, quand on fait un dict et qu'on lui passe une listede tuples, on peut créer un dict de cette façon là. C'est quelque chose qu'on peut voir aussi
01:14:09 :avec zip, la fonction zip qui permet de zipper de listes, c'est une façon justement à partird'un zip, si je fais, ça c'est un truc assez classique aussi, si je fais a 1 2 et 3 et bégal, on va faire 1 2 et 3, comme ça, qu'est ce que j'ai oublié, 3 voilà. Donc là on a a et b,
01:14:31 :ok, si je fais zip de a et de b, ça me retourne un zip object, qui est justement, je pense quesi je fais string, string de zip a b, ça devrait me l'afficher, non, ah bah non, ok, je voulais pas,ouais ouais parce que je voulais montrer avec, parce que si je fais avec le dict, ça va vous
01:14:53 :cramer le truc, mais en liste effectivement, voilà c'est ça ouais, c'est ça, donc effectivement c'estça. En fait si on le convertit en liste, là on voit bien qu'on a en fait, le zip va nous faire,
01:15:03 :parce qu'avec les anciennes versions de Python, si je me souviens bien, ça vous retournaitdirectement ça ici, maintenant ça vous retourne le zip object où je me plante peut-être, peut-êtreque je confonds avec range, parce que range ça a changé aussi, mais là vous voyez qu'on a doncune liste avec des tuples qui associent chaque élément de la liste, donc le 1 est associé au 1,
01:15:23 :le 2 au 2 et le 3 au 3, sauf que c'est rare qu'on ait besoin d'une liste de tuples comme ça,et c'est pour ça que souvent en fait le zip on va le convertir en dict, et là ça nous retourne,ça permet de passer de deux listes à un dictionnaire, et c'est exactement ce que t'as eu
01:15:37 :du coup, je crois que c'était Mathieu aussi qui a eu cette question, donc c'est exactement ce qu'onfait là ici, c'est pratique quand on a cette liste de tuples de pouvoir créer un dictionnaire àpartir de ça, et ça c'est le dictionnaire classique qu'on avait. Donc vous allez voir,
01:15:55 :vous voyez avec le zip c'est un autre exemple, il y a plein de petits trucs comme ça, des façons unpetit peu détournées, le json.load c'est un bon exemple aussi, on a une chaîne de caractère qui
01:16:04 :contient un dictionnaire, on peut facilement récupérer un dictionnaire à partir de ça,sans avoir besoin de faire des trucs bizarres ou compliqués, juste avec les trucs built-in.
01:16:13 :Et oui voilà, donc ça c'est ce qui m'avait inspiré le slice justement, là aussi vous voyez petiteerreur, donc si on reprend ce que je vous ai dit, 1 2 3 4 5, laquelle de ces lignes donne la valeur1 2. Donc on commence à moins 1 et on va jusqu'à la fin, donc là ça veut dire qu'on va avoir juste
01:16:40 :le 5. On commence à moins 1 jusqu'à la fin de la liste, donc on aura juste une liste qui contient5. On commence à 0 et on va jusqu'à 2, donc on commence à 0, on prend le 1 et on prend le 2,
01:16:52 :là on va avoir effectivement 1 2, donc ça l'a fallu à la cocher. Le 1 2 donc non comme on l'a vu,parce que 1 2 on commence du coup, on commence pas à 0, on commence pas au début, on commenceaprès le premier élément, donc on va juste récupérer le nombre 2. Moins 3 10, moins 3,
01:17:09 :alors on commence à moins 3, donc là on peut voir assez rapidement que ça va pas retourner ce qu'ilfaut, parce qu'on fait moins 1, moins 2, moins 3 et après on va jusqu'à très loin dans la liste,donc on va avoir 3 4 5 si je ne me trompe pas. Et 0 moins 3, oui on commence à 0 donc au tout début,
01:17:25 :et moins 1, moins 2, moins 3, donc effectivement on élimine les 3 derniers et on prend juste 1 et 2.Là vous voyez il faut vraiment y aller dans, comme je vous disais, pacman, moins 3, on enlève 1, 2,3 et 0, on commence à 0, donc on prend les deux premiers, 0 2, on commence à 0, 1 2, moins 3,
01:17:45 :on commence à moins 3 et on va jusqu'à 10. Voilà il faut vraiment y aller dans l'ordre pour cela.Et le fameux truc sur le collection, donc les affirmations suivantes concernent la classecounter du module collection, laquelle d'entre elles n'est pas vraie. Donc counter peut être
01:18:02 :utilisé pour compter combien de fois les éléments d'une liste apparaissent. Oui, c'est même sonutilisation principale et alors là, oui, vous pouvez sélectionner qu'une seule réponse. C'est
01:18:13 :pour ça que je vous disais dans ce test là, il faut y aller un petit peu par élimination. Nonseulement vous pouvez faire un counter d'une liste, mais aussi de tuplé de chaînes de caractère,donc oui. Comme je vous disais, si vous manipulez counter, vous allez vous rendre compte que c'est
01:18:25 :vraiment à ça qu'il sert, à compter des éléments, que ce soit dans une liste, dans un tuplé ou dansune chaîne de caractère, combien de fois reviennent certains éléments. Donc les deux premiers, c'est
01:18:34 :facile de voir que c'est vrai. Après il y a les deux autres qui sont un peu plus sournois. Doncles instances de counter sont mutables, ce qui signifie que vous pouvez modifier le compte aprèsavoir créé une instance de counter. Donc là aussi, en le manipulant, vous allez voir que non,
01:18:48 :en fait counter ça va vous donner un peu un instantané, ça va vous dire ok, je crée uncounter à partir d'un élément, là il va calculer tout ce qu'il voit dans cet élément, mais aprèsvous pouvez plus le modifier, c'est vraiment un instantané. Non, attendez, je me plante là,
01:19:06 :attendez, c'est l'inverse, j'ai un doute, vous voyez, il va falloir que je révise moi aussi. J'aiun doute, ok, il faudra que je revoie. Mais sinon, c'était ça, elle ne supporte pas les opérations
01:19:19 :mathématiques, vous pouvez pas additionner deux counters. Donc ça c'était celle-là. Donc là,comme je vous dis, c'est juste en manipulant. La dernière, là j'ai un doute sur, vous pouvez
01:19:27 :modifier le count, parce que j'ai en tête l'article justement de Kevin là, je vais revoir, je croisqu'il avait fait un exemple, ça me met le doute, vous avez mis affiche, élément, most common,subtract, oui c'est ça, c'est ça qui m'a mis le doute, parce qu'on peut enlever, mais c'est,
01:19:48 :non c'est ça, ok, donc c'est ça. Et là ça me perturbe parce que c'est une question inversée,laquelle n'est pas vraie, donc ça veut dire que celle-là est vraie. Oui c'est ça, donc c'est ça,
01:20:02 :celle-là est vraie effectivement, donc je confonds, et c'est ça, ça confirme bien ce que je disaisici, on peut soustraire des éléments, on peut modifier le counter après, c'est ça, donc on peutmodifier, on a notre counter avec des éléments et après on peut le modifier. Par contre on peut
01:20:15 :pas en additionner, on peut pas faire comme avec un set en fait si vous voulez, où le set, on vafaire des opérations, on va les additionner, les soustraire pour récupérer les éléments qui sontles, qui sont dans les deux sets ou qui sont pas dans les sets, le counter vous pouvez pas les
01:20:28 :additionner ensemble pour pour additionner deux counters, c'est ça. Genre si je prends ça parexemple, il me met le doute avec son substract là, parce que là du coup on soustrait les éléments,mais c'est juste qu'on peut pas faire ça, je vérifie, non si on peut, ok, on peut faire ça
01:20:55 :mais on peut pas les additionner peut-être. Bon alors attendez, c'est peut-être le Toza qui seplante, il me met le doute. Ah bah écoutez, pas vrai, bon faudrait que je revérifie, parce que là du coup...
01:21:09 :Ouais ouais ouais, c'est pour ça que j'ai eu un doute, mais là je regarde, parce que du coup c'estpeut-être, bon bah si le Toza commence à avoir des réponses fausses, on est mal barré, on pourrafaire une réclamation à la fin pour vous rajouter des points, parce que du coup c'était peut-être,
01:21:37 :alors après il faut regarder, parce que je sais qu'ils disent, c'est peut-être, si c'est ça c'estchiant, parce que je sais que le Toza du coup, ils disent que c'est avec la version 3.9, si je me
01:21:47 :trompe pas, 3.10, ouais c'est ça, 3.10, est-ce que j'ai la 3.10 sur mon ordi, ouais j'ai de la chance,3.10, donc avec 3.10 si je refais ça, peut-être que c'est là où ça marche pas justement,
01:22:05 :non ça marche aussi, ok, bon bah c'est avec 3.9 aussi j'imagine, je pense que c'est vraimentcompteur A, ah merde, parce que me semble-t-il aussi que j'avais des vagues souvenirs d'avoirfait des, je crois même que j'avais ajouté un exercice comme ça sur duckstring, où je vousfaisais manipuler des counters et on les additionnait ensemble, ouais c'est ça, ça s'additionne, ce
01:22:36 :qui semble assez logique, parce que c'est, je vais regarder là, exercice, counter, non ok ça c'estcelui que je vous avais rajouté, il me semblait que j'avais fait un, compter, peut-être lui,ok bon faudrait que je vérifie, ok, non là c'est juste count, ok compter l'occurrence,ouais non ok, bon je revérifierai. Bah écoutez je vais regarder, ouais Arnaud effectivement,
01:23:21 :les seules questions que j'ai vues concernant les nouveautés, ça on le reverra aussi un petit peu,c'était des nouveautés de 3.8, ça je me souviens c'était l'opérateur walrus là, le fameux deux
01:23:33 :points égales, qui vous permet de faire une assignation en même temps que vous, je saispas comment ils appelaient ça, expression, assignation, vous pouvez dire par exemple if adeux points égal, attendez est-ce que c'est ça, print test, oui bah là du coup c'est pas un bonexemple, mais vous pouvez assigner parce que là du coup si je fais a c'est égal, c'est pas un bon
01:24:00 :exemple, mais du coup Mathieu je vais écouter, je vais creuser ça, parce qu'on va vérifier là,on va voir si c'est pas moi qui bug là, laquelle n'est pas vraie, donc bonne réponse non choisie,donc c'est bien ça, toi tu avais choisi ça, donc mauvaise réponse choisi, ça me tue le cerveau,
01:24:31 :c'est quand même les trucs récursifs, c'est la pire chose, les questions inversées comme ça,du coup donc, et en plus là c'est comme t'as pas eu la bonne réponse du coup ça veut diret'as choisi ça, rassurez moi je suis pas le seul à être mélangé là, t'as choisi donc,
01:24:50 :mauvaise réponse choisi, t'as choisi ça, donc ça ça veut dire que ça c'est vrai du coup,et que c'est ça qui n'est pas vrai selon Toza, mais que là on a un doute.
01:25:04 :Ah oui alors non non attendez, alors attends là je suis en train de me dire c'est tout l'inverseen fait, je suis en train de vous dire des conneries sur tout l'inverse, dans le sens oùoui en fait non en fait c'est moi qui suis complètement faux dès le début, en fait c'est
01:25:25 :justement je me suis fait avoir à 100% par ça, dans le sens où ça c'est vrai du coup,donc effectivement on peut additionner deux counters, donc c'est ça en fait la bonneréponse, c'est ça parce que c'est pas vrai, on peut additionner deux counters et on vientde le préciser, par contre c'est l'inverse, c'est que c'est ça effectivement, on peut pas
01:25:47 :faire un counter pour compter les éléments d'une liste, et tous les autres en fait sontlaquelle n'est pas vraie. Ah putain j'ai mon cerveau me contrôler toutes les deux
01:26:09 :secondes. Bah écoutez on va regarder. Non c'est bon c'est parce qu'en fait le problèmequ'il y a c'est qu'il t'est dit il ne supporte pas les opérations arithmétiques, effectivementc'est pas vrai, ça supporte les opérations arithmétiques. Oui c'est ça oui. C'est pour
01:26:27 :ça que c'est ça la bonne réponse, effectivement c'est le ne supporte pas qui fait que c'estdifférent. Oui c'est ça c'est la double négation, c'est pas vrai, il y a un ne et
01:26:35 :en fait le ne qui est pas en fait ça devient vrai, c'est le doublé. Ils t'auraient ditvoilà counter supporte les opérations arithmétiques, ils t'auraient pas choisi cette réponse là.
01:26:43 :Ouais ouais, ah c'est horrible ça. Et du coup dans le sens inverse, counter peut êtreutilisé pour compter combien de fois les éléments d'une liste apparaissent. Ça veut
01:26:52 :dire que ça doit être possible, c'est exactement ça. Oui c'est ça, si on avait coché celle-làça voudrait dire que c'est pas vrai mais en fait comme on la coche pas ça veut direqu'elle est vraie, c'est ça, donc ça c'est vrai, ça c'est vrai, ça c'est vrai. Oui
01:27:04 :on peut modifier le compte, bah oui c'est vrai parce qu'on l'a vu on peut les additionneret ça modifie le compte. Oui donc c'est ça, je suis pas fou, ça c'est vrai, on peut compter,
01:27:16 :on peut compter les tubes, les chaînes de caractère effectivement, et ça effectivementavec le nœud, ouais ok c'est ça. C'est horrible ça, c'est horrible parce que c'est le genre
01:27:31 :de question qui teste même pas en fait vraiment le, c'est plus la comment dire, c'est unequestion qui teste justement si c'est comme avec les trucs écursifs comme je vous dis,je pense que je sais pas si ça dépend des gens ou si ça mélange tout le monde ici,
01:27:48 :là je sais pas si ça vous a mélangé mais les trucs comme ça c'est... Et en plus dansces questions-là je crois, je sais plus, je crois qu'il n'y a pas de timer dans lesquestions qui sont pas des questions de code. Bah t'as le timer global quand même qui tourne.
01:28:06 :Il y a un timer global ouais, ouais ok, ouais mais c'est pas, ouais c'est bon, c'est semi-stressantdu coup. Parce que là en fait il faut vraiment dans ce cas-là donc il faut vraiment y aller,
01:28:22 :laquelle n'est pas vraie, donc ça veut dire que t'as qu'une seule réponse possible. Donc c'estpour ça qu'en fait je pense qu'il faut vraiment y aller comme on disait par élimination quoi,laquelle n'est pas vraie, tu prends la première, est-ce qu'elle n'est pas vraie,compteur peut-être utilisé pour compter combien de fois, donc c'est vrai, donc c'est pas celle-là.
01:28:40 :Parce que si tu la coches ça veut dire qu'elle n'est pas vraie mais elle est vraie, ok doncc'est pas la première. Vous pouvez faire d'une liste de tubes de chaîne de caractère, là ok
01:28:49 :on valide c'est bon, donc c'est pas celle-là parce que ok. Ne supporte pas les opérationsmathématiques, vous pouvez additionner, donc là on sait que c'est vrai, on l'a fait, ça supporteles opérations mathématiques donc là effectivement on peut la cocher parce que c'est pas vrai,ça dit quelque chose qui n'est pas vrai donc on la coche parce que ça dit des conneries,
01:29:07 :faut vraiment y aller comme ça. Est-ce que ce que dit la phrase ça dit des conneries ? Si oui,on coche, donc on prend, est-ce que ça dit des conneries ? Non, on coche pas, ça dit des
01:29:14 :conneries ? Non, on coche pas, ça dit des conneries ? Oui, on coche. Faut essayer de,je pense qu'il faut trouver le moyen de, quand on a un truc comme ça, d'aborder les choses decette façon. Ok bon voilà donc finalement vous voyez ça nous a donné du fil à retordre,
01:29:31 :celle-là aussi. Ok bon, est-ce qu'il y a d'autres questions en général sur tout ce qu'on a vu,sur ces choses-là, sur finalement donc le Tosa, bon ça me rassure quand même, il n'y a pas desréponses fausses dans le Tosa, ils ont quand même dû, ils ont quand même dû la faire,
01:29:51 :oui après Mathieu j'ai envie de te dire, oui ça c'est le genre de truc, c'est le genre de truc,ouais tu la prends par cœur, après bon il y a 170 questions à peu près en tout dans leur test,donc c'est clair qu'on ne pourra pas toutes les faire. Après, prochain motora d'ailleurs,
01:30:12 :ce qu'on va faire, je vais reprendre toutes les questions, là pour l'instant j'ai juste leserreurs que vous avez faites, mais je vais voir avec Kevin, là on va récupérer toutes lesquestions du test, ça devrait faire un bon petit paquet de questions déjà, pour qu'on va tous les
01:30:27 :revoir justement une par une, ça va faire des révisions, on va revoir des trucs, on ne reverrapeut-être pas tout de suite, on va voir là les trucs plus compliqués, les graphes etc. Mais
01:30:38 :après ouais, pour vous rassurer quand même, c'est, je ne sais plus s'il est, non il n'est pas làaujourd'hui, parce que lui il a eu 5 sur 5 au truc, et en vrai en fait c'est ça souvent,toutes vos questions là où j'ai vu que vous avez eu 1 ou 2 sur 5 au final, et quand j'ai vu vos
01:31:02 :mauvaises réponses, c'est très souvent parce que c'est des petites erreurs, genre je reprends tuvois Gabriel, les int valides, la virgule, voilà tu vois, tu coches celui-là, tu as tous lesautres qui sont bons et tu coches celui-là, tu vois ça c'est une erreur, bon c'est les trucs de
01:31:21 :base, si vous revoyez tous les trucs de base comme ça, les dictionnaires, les trucs comme ça,si vous faites attention, vous lisez bien les énoncés, vous faites gaffe, voilà, il n'y a pasde raison que vous bloquiez là-dessus, et juste avec ces petits trucs là, si vous arrivez à avoir
01:31:38 :bon à toutes ces questions un petit peu de base qui ne vont pas très loin, qui ne sont pas desexercices de code compliqués avec des graphes, ou des questions un peu plus sur des date time etc,si vous faites juste déjà les bons trucs sur la base, comment on importe un module, qu'est-ce que
01:31:52 :quand je fais from random import étoile, est-ce que je peux utiliser randint directement, tousces petits trucs vraiment de base global, si vous répondez à ça correctement, vous aurez le 3 sur5, le score de 550, qui est le score de base pour la certification. Et après tout le reste ça va
01:32:12 :être les exercices de code, pour avoir le niveau expert ça va être réussir les exercices degraphes, les exercices de code un peu plus poussés comme ça, donc là aussi des trucs où effectivementil faut les avoir vus, il faut travailler ces trucs là, et moi-même je n'ai pas le niveau expert avec
01:32:29 :ça, parce que ce n'est pas des compétences que j'ai pris le temps d'élaborer, donc on vaen voir un petit peu, on va voir les trucs classiques, mais je ne m'attends pas à ce que vous ayez 980 sur1000, parce que de toute façon, je préfère que vous ayez assurément un 700 ou 800 sur 1000,
01:32:46 :parce que vous avez appris des trucs vraiment utiles, que de vous faire travailler les 200 points finaux,et que finalement vous n'arriverez pas à ça, parce que vous n'aurez pas assez travaillé labase, et de toute façon ces points à la fin, comme je vous dis, ce n'est pas ce que je trouve
01:33:03 :le plus important dans le monde professionnel. Voilà voilà, c'est tout bon des questions ?Merci Arnaud, merci, merci beaucoup, c'est le premier point dans ma liste, allez signer lafeuille de présence, merci, merci beaucoup, ça c'est génial, tu te fais un bon petit trucavec genre littéralement quatre éléments, comme vous pouvez le voir, et tu loupes le premier.
01:33:37 :Donc ouais, merci d'aller juste signer la petite feuille de présence, d'ailleurs on va peut-être,je suis en train de regarder, on va peut-être passer sur Livestorm, plutôt que Google Meet,c'est quand même bien foutu, ça nécessite de s'inscrire, c'est un petit peu plus chiant desfois je crois, c'est pour ça qu'il faut que je regarde, parce que c'est un peu plus chiant
01:34:02 :d'arriver dans une réunion au dernier moment, quoique ça doit être faisable, c'est juste queje pense qu'il faut s'inscrire, mais après du coup en termes de feuilles de présence et tout,c'est vraiment plus simple. Voilà, donc n'oubliez pas d'aller signer la feuille,
01:34:15 :et s'il n'y a pas d'autres questions, du coup on va s'arrêter là, on a quand même fait une heureet demie, comme d'hab, à chaque fois ça s'éteint un petit peu. Et semaine pro du coup, voilà, ceux
01:34:29 :qui sont un petit peu en retard, comme je disais ici, je crois qu'il n'y a personne qui est ultraen retard, n'hésitez pas à en faire un petit peu, ne prenez pas trop trop de retard, et semaine pro,on va commencer tout doucement, je pense que semaine prochaine, je vais voir, peut-être qu'on
01:34:44 :va encore faire des petites révisions plus générales, justement comme on avait commencé àvoir sur les dictionnaires, les trucs comme ça, et on va doucement arriver sur l'orienté objet,parce que c'est quand même un bon morceau aussi, et aussi tout ce qui est optimisation. Là aussi,
01:35:00 :optimisation c'est pas des trucs super compliqués, mais c'est des trucs qu'on n'a pas trop l'occasionde voir, et que c'est un peu des trucs à apprendre un peu par cœur aussi, de savoir en gros quellessont les fonctions, comme je vous disais, qui sont optimisées ou pas, de savoir que quand vous faites
01:35:14 :un pop sur une liste, ça va être méga long si vous avez une grande liste, sort, etc. Donc apprendreces petits trucs là, c'est quand même très important aussi, là pour le coup en termespro, ça dépend ce que vous faites, c'est sûr que si vous manipulez toujours des petites listes,
01:35:30 :c'est pas très grave, mais c'est quand même important en général de le savoir. Donc voilà,on verra ça, et je vous rajouterai du coup des étapes à réaliser lundi. Ouais, il y en a eu
01:35:41 :quelques-unes, semaine prochaine, comme je vous dis, je pense que vraiment ça va être le momentde revoir un petit peu toutes les questions, puisque ça va réaborder un petit peu, ça va faire desrévisions sur tout, ça va commencer à aborder d'autres sujets que je veux voir, notammentjustement sur l'optimisation ou sur d'autres exercices de code, donc je pense qu'on va
01:35:58 :probablement peut-être même faire une session de mentora uniquement là-dessus, à revoir toutesles questions que vous avez eues, et à les faire ensemble. Voilà, merci tout le monde, et je vous
01:36:11 :mets la rediff, ça devrait être d'ici quelques heures, si vous voulez revoir des points, et jevais rajouter les chapitres, n'hésitez pas aussi les chapitres, vous pouvez les faire de votre côtéaussi et les mettre public, je vous en ai pas trop parlé là, mais dans les sessions de mentora,
Aucune occurrence trouvée pour « ».