Session du 28 juillet 2022 à 20h00
Pratique & Live Coding
Bases du Langage
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
Correction d'exercices
Résolution de 2 exercices de code de Docstring en "live coding" avec Lionel.
Notes et sources disponibles ici :
https://github.com/DocstringFr/2022-07-28-Mentorat
00:00:00 :En fait, à chaque fois j'oublie l'allée sur scène, désolé.Ah ouais, non mais je vois après, peut-être l'affichage est pas mal, on voit si on parle ou pas.
00:02:11 :Mais c'est le truc d'aller sur scène, j'ai pas le réflexe encore.Bon, c'est un détail.Vous allez bien?Bon, désolé, ça va être un peu moins préparé que d'habitude, j'ai dû remplacer M. Thibault à la dernière minute.
00:02:35 :On va essayer de se faire une petite impro ensemble.Bon, ça va être un peu ennuyé, mais il avait une priorité.Bon, il pouvait pas faire ce soir.
00:02:50 :Cool.Bon, on va quand même s'amuser, vous inquiétez pas.Bon, on va attendre encore une ou deux minutes.Le temps que les gens viennent s'ils veulent.
00:03:10 :Je sais pas où ça a annoncé l'événement, là.Ok, ça a vraiment su passer l'information.Et normalement, général, non, ça doit pas être dans celui-là.
00:03:25 :Ça doit être dans celui-là.Yes, le mentor a commencé.Ok, bon, normalement ça devrait être bon.Bon, du coup, avant de démarrer, si vous pouvez vous présenter rapidement sur votre niveau d'expertise.
00:03:53 :Depuis combien de temps vous avez commencé Python et qu'est-ce que vous espérez de la formation,même de la session de ce soir, ça m'intéresse.Donc, si vous pouvez prendre quelques secondes pour faire ça, chacun votre tour.
00:04:07 :Ah, il n'y a aucun souci, Arnold.Moi, ça fait presque un an que j'ai commencé mon code.Je suis à la leçon 1 pour le permis de conduire.
00:04:18 :Ok, donc, on va commencer.Alors, Arnold, ça serait mieux, Flavien, si tu as un micro et de quoi communiquer,ça ferait un truc un peu plus vivant.
00:04:49 :C'est intéressant, ça, de voir comment ça se fait.Un peu plus vivant, une petite interaction, plus sympa.Salut.Salut.Tu m'entends, Lionel?Qui, qui, qui parle?
00:05:07 :C'est Romain.Ah oui, c'est ton temps, Romain.Moi, ça fait bien deux ans, maintenant.Voilà.Yes, ça se voit, tu as un bon niveau.Et d'ailleurs, tu espères quoi de la formation, puisque là, de ce que j'ai évalué de ton niveau,je peux me poser la question, en fait.
00:05:29 :Ben, tout est bon à prendre.Oui, c'est vrai.Ok, donc, Jonathan, ça fait deux mois que je fais la formation et j'avance tranquillement par part.
00:05:47 :Yes.L'essentiel, c'est de continuer d'avancer.C'est vrai que pas à pas, ça marche aussi.Après, avec la motivation, les projets, on peut avoir des sauts discontinus, en fait, de progression.
00:05:59 :Mais l'essentiel, c'est de continuer en avant.Jonathan, ça fait deux mois que je fais la formation et j'avance tranquillement par part.Bon, ça, j'ai déjà lu.
00:06:09 :Un mois avec vous, sinon je fais ça de mon côté, de Mars à AcuDemi en sous-summe.Ok, Alexandre, c'est cool aussi.Bonsoir, tout le monde.
00:06:17 :Le micro ne marche pas pour moi, Arnold.Oui, ça arrive.Ben, fais-le à l'écrit.Il n'y a pas de souci.Je suis en train de voir pour faire des projets perso, ma question.
00:06:42 :Oui, c'est Jonathan qui dit qu'il est en train de voir pour faire des projets perso.C'est vrai que c'est un très bon conseil.En fait, la clé d'apprentissage, en particulier chez les adultes, comme nous, c'est l'intérêt, en fait.
00:06:58 :C'est de pouvoir se projeter, d'avoir un intérêt dans ce qu'on fait.Donc, les projets perso, en général, c'est un haut niveau d'intérêt et de motivation.
00:07:07 :Et c'est pour ça que faire quelque chose qu'on a envie de faire ou quelque chose qu'on a envie d'expérimenter,ou un projet perso, en général, ça fonctionne très bien parce qu'on a cette source d'inspiration et de motivation qui est forte,qui est presque gratuite au départ.
00:07:22 :Donc, ouais, ouais, continue.Après, la seule difficulté, Jonathan, c'est de trouver quelque chose d'itératif, en fait,d'augmenter son niveau progressivement et de ne pas avoir, genre, de se dire demain, tiens, je refais Facebook, quoi.
00:07:46 :Par exemple, ça, ça ne marchera pas, quoi.Quoiqu'encore, ouais, bon, ça se discute.Mais, en fait, c'est de trouver ce truc, le step ou le pas qui te fait aller vers l'avant,mais qui ne te décourage pas, comme dans une randonnée, de ne pas t'amuser à faire un GR20,
00:08:03 :mais de commencer avec ta petite colline à côté de chez toi et faire le truc tranquillou dans la journée, quoi.On attend le Flavien et après, on va démarrer.
00:08:21 :Oh, ouais, vas-y, Flavien, par écrit.Yes, c'est une bonne idée, Jonathan.Après, un bon truc, moi, qui marche pas mal, c'est de prendre des sujets simpleset de les faire évoluer en complexité, mais avec le même type de sujetou de vraiment de faire quelque chose d'organique, en fait, qui se rajoute sur une base initiale que tu as fait.
00:08:46 :Et d'ajouter, en fait, de la fonctionnalité au fur et à mesure sur cette fonctionnalité.Et du coup, ça marche assez bien.Alex, on s'est travaillé avec Projet Perso aussi, avec du Django, avec beaucoup d'erreurs,mais à force d'en apprendre, du coup, aussi, j'ai vu un peu CSS HTML, ouais,
00:09:04 :et que du coup, tu as vu le côté full stack front et back avec Django, donc, ouais, c'est logique.Qu'il y a la partie Python Django et après, la partie front CSS HTML, plus les frameworks, ouais,j'imagine, genre Bootstrap ou des trucs comme ça.
00:09:23 :Ok, cool. Bon, on va démarrer.Du coup, ah, Flavien.Du coup, ça fait un an que je fais du Python, ce que j'attends de cette formation, c'est surtout l'accompagnement à l'Entora,j'ai pas vraiment de problème pour apprendre le langage,ok, cool, ouais, ouais, ok, ouais,ben, on va essayer d'avancer ensemble sur l'Entora pour augmenter ton niveau.
00:09:48 :Du coup, si vous avez des questions, voulez intervenir, n'hésitez surtout pas,là, on est vraiment dans une démarche interactive,enfin, je n'ai pas besoin de faire du monologue pendant une heure,je serais ravi de discuter avec vous et d'avoir des échanges, donc n'hésitez pas.
00:10:05 :Donc là, l'idée ce soir, ça va être de prendre des exercices du docstring,donc du coup, c'est une idée de Thibault, de reprendre les exercices et d'essayer de les résoudreet d'approfondir les connaissances ou les termes et les outils Python qu'il y a derrière.
00:10:25 :En général, ces exercices sont bien faits d'un point de vue pédagogiqueet souvent c'est une notion ou deux notions max sur du Python et une mise en application de ces notions.
00:10:37 :Donc, il y a le côté motivation, il y a le côté implémentation, réalisation technique,on peut lire la documentation pour comprendre qu'est-ce que l'objet et comment il est designé côté Python.
00:10:49 :Après, il y a le côté de comment on l'utilise et comment on résout un problème, un vrai problème avec.Donc, on va y aller tranquillou. L'idée, ça va être de partir de l'énoncé des exercices,
00:11:03 :de faire une petite analyse de l'énoncé, etc., de vous montrer un peu ce que je perçoisquand je lis l'exercice et son énoncé, ce que je perçois en problématique,et du coup de vous passer de la documentation sur les notions que je détecteet après essayer d'avancer sur une présentation du code de résolution ou de différents types de résolution.
00:11:27 :Moi, j'aime bien surtout sur les exercices un peu simples ou dit simplistes de Thibault,de faire plusieurs types d'implémentations avec différentes techniques, différentes approches.Ça crée de la variété sur un truc un peu simple au départ et après on peut créer de la complexitéou même avancer dans le langage et dans la complexité du langage.
00:11:47 :Ok, donc du coup, le premier exercice, c'était compter les nombres d'emojis.Donc, on peut aller faire un tour. Ah oui, c'est un sac, ce lien ne marche pas, je ne sais pas pourquoi.
00:11:59 :Donc, il y aura les liens docstream, vous pouvez les rechercher avec le titre « compter les nombres d'emojis ».En général, c'est dans les exosimples.
00:12:12 :Donc, dans cet exercice, l'objectif est de récupérer le nombre d'emojis pour chaque emoji dans la chaîne caractère emoji.Vous devez récupérer ça en renforçant dans le dictionnaire emoji count.
00:12:25 :Dans l'exemple de l'exercice, emoji count doit être égal à R.Donc, on va passer sous Visual Code.Donc, là, je vous passais ces ressources. Donc là, c'est un Macdon où j'ai repris l'énoncé et je fais un peu d'explication dedans qu'on va suivre.
00:12:47 :Moi, j'aime bien écrire les trucs, ça m'aide à me repérer. Donc là, l'énoncé que je viens de lire.Après, il y a une aide contextuelle. Souvent, c'est une indication que donne Thibault pour dire comment on peut résoudre le problème.
00:13:20 :Donc là, il y a pas mal de mots clés. Bon, on va revenir dessus sur l'analyse de l'énoncé et sur l'analyse de l'aide.Mais il y a pas mal de mots clés. Et en général, en plus, il fait un bon formatage. Donc, on les repère assez facilement les mots clés.
00:13:32 :Donc là, d'un point de vue pédagogique, c'est des conseils pédagogiques que m'a donné Thibault et même des trucs que j'ai un peu reformatés.Donc, intéressant de détailler la réflexion. Je dois compter le nombre d'emoji, par quoi je commence, avec quoi je travaille, quelles notions vont m'aider.
00:14:12 :Surtout le faire en français, mais bon, bref, on verra. Donc, par quoi je commence? Moi je dirais, oui, par analyser les énoncés.Souvent dans les exercices, quels que soient les matières d'ailleurs, quels que soient le niveau, il y a pas mal de réponses et pas mal de solutions dans les énoncés directement.
00:14:31 :La façon dont on lit et qu'on décompose les énoncés, ça donne des fortes indications sur ce qu'on doit faire et comment le faire.Donc là, par exemple, dans cet exemple, récupérer le nombre d'émojis, donc là il y a une notion de, ah, c'est chiant, à chaque fois il revient sur le margement.
00:16:05 :Donc là je vous donnerai le document Markdown, et donc là c'est un lien vers la documentation, tiens d'ailleurs, bon c'est ça qui m'intéresse.Donc listCount de X, on voit le nombre d'éléments ayant la valeur X dans la liste, donc la liste elle est là, on fait.count et un élément, donc un élément X, et ça compte le nombre de fois qu'il y a X dans la liste.
00:16:46 :Tous les éléments sont uniques dans un ensemble. Un ensemble permet de réaliser des tests d'appartenance ou des suppressions de doublons de manière simple,donc ça c'est en gros la motivation pour quoi utiliser les ensembles. Les ensembles savent également effectuer des opérations mathématiques telles que les unions, les intersections de différence et différence symétrique.
00:17:05 :Donc là nous ce qui nous intéresse c'est en l'occurrence les intersections. On va voir comment on va l'utiliser.Après donc ça c'est des notions qui sont un peu plus avancées mais ça c'est lié à l'expérience que j'ai. Moi quand j'en vois les mots clés, compter, compter quelque chose.
00:18:11 :pas forcément unique, mais une des caractéristiques intéressantes, enfin primordiales du hache, c'est qu'on programme une chaîne de caractère, on la transforme vers un digit, vers un nombreet si on modifie un peu la chaîne de caractère, le nombre résultant du hache sera très très différent. Donc en gros en faisant une petite perturbation dans l'entrée,
00:20:23 :Donc on va voir comment on va l'utiliser dans la résolution. Ok, vous avez des questions? C'est assez clair pour l'instant?Vous pouvez intervenir si vous êtes toujours en vie.
00:20:37 :Déjà, est-ce qu'il y en a qui ont fait l'exercice ou qui l'ont déjà essayé?Ça pourrait être intéressant. Enfin, les deux sont intéressants si vous l'avez passé ou si vous l'avez essayé pour comparer comment moi je le résous.
00:20:53 :Ou est-ce que vous voyez, si vous ne l'avez pas déjà essayé, est-ce que vous voyez une solution genre comme ça de tête rapidement?Ok, bon, on va avancer sur le… je vais vous présenter des solutions et on pourra discuter de la solution.
00:21:19 :Donc là je peux déjà vous montrer la structuration du projet. Je ne l'ai pas encore fait mais je pense qu'il y aura une solution.Ok, intéressant, si tu as le temps de l'écrire en parallèle, n'hésite pas Jonathan et de la transmettre après.
00:21:34 :Donc ça c'est l'entrée qu'on a, c'est la chaîne Emoji qui est l'entrée dans l'exercice.Ça j'ai appelé c'est Emoji Count Expected, donc c'est ce qu'on attend à avoir comme résultat, donc ça c'est Thibault qui nous le donne dans son exercice.
00:22:09 :La deuxième solution c'est la solution With Counter, donc l'objet Counter de Collection qui permet de dénombrer dans un itérable les objets.Et après la troisième solution que je vous montrerai c'est la solution With Default Dig, donc le Default Dig qu'on vient juste de regarder qui appartient à Collectionqui permet d'avoir une valeur initiale pour toutes les clés possibles dans le disk Fiona.
00:23:13 :Donc en gros quand on fait un import de ce fichier, en fait on ne passe plus là dedans, et d'ailleurs c'est le but.C'est si je fais un import pour avoir accès à ces méthodes, je n'ai pas envie que ça exécute ma suite d'exécution ici.
00:23:35 :Dans les autres cas, donc dans les cas d'import, tu ne feras pas ça.C'est assez important quand on fait des scripts justement, qu'on veut pouvoir les importer et aussi on veut pouvoir l'exécuter.
00:23:48 :C'est ce type de code qu'il faut pour faire la distinction entre l'import et l'exécution d'un code.Donc pour chacune des solutions, on envoie la donnée d'entrée, donc emoji, la chaîne de caractère et les emojis,et on s'attend à recevoir emojiCount, la solution qu'on veut, qu'on calcule, selon la solution qu'on itère là actuellement.
00:24:11 :Et après on fait l'assert, donc c'est comme ça qu'il fait les tests de validité du résultat.Il regarde que emojiCount, donc la solution qu'on vient de calculer, est égale à emojiCount expected, donc la solution qu'on s'attend à recevoir.
00:24:31 :Donc en fait, dès que ça passe, c'est que c'est bon.Donc, solution with count and set, donc on peut regarder l'implémentation, c'est assez simple.Donc ce qu'on fait, c'est qu'on a, donc là déjà je peux parler un peu de comment j'ai écrit, en fait j'ai écrit le def,donc on va définir une fonction, le nom de la fonction, on définit ses paramètres, ou ses arguments,
00:24:57 :ah je ne sais jamais, il faut que je regarde, il y en a un des deux, en fait quand on l'appelle ici c'est un paramètre ou un argument,et quand on le déclare ici c'est un paramètre ou un argument.
00:25:05 :Et on donne un type, donc en gros on dit, on s'attend à recevoir dans emoji une string, ce qui est le cas,et ça c'est pour dire qu'est-ce que va rendre la fonction, donc quel résultat il va rendre, ou quel type de résultat il va rendre.
00:25:20 :Donc ça va être un dictionnaire de string avec un nombre.Donc en gros c'est pour chaque emoji qui a un string, on voit le nombre de fois qu'on l'a vu dans la chaîne, donc il y a un int.
00:25:32 :Donc ce qu'on fait pour résoudre le problème avec set headcount, c'est qu'on transforme la chaîne de caractère en ensemble,on itère sur chacun des emojis, parce que set c'est un itérable, on itère dessus, donc on récupère un emoji unique par rapport à emojis,et après on crée un dictionnaire, donc là c'est une deep comprehension, donc on crée un dictionnaire ici,
00:25:58 :et là on met la clé, deux points, on met la valeur, et la valeur c'est l'emoji que je suis en train de regarder,combien de fois tu le vois dans la chaîne d'entrée emoji que je t'ai filé.
00:26:11 :Donc un des trucs que je fais, moi justement quand j'ai besoin un peu d'intuition, c'est que je m'ouvre un terminal d'évaluation,je prends ma donnée d'entrée, donc là en l'occurrence c'est emoji, et j'essaye chacun des éléments que je suis en train d'écrire.
00:26:31 :Genre cette emoji, je peux regarder directement ce que ça fait.Donc là on voit que ça récupère un emoji à la fois, et chacun est unique.
00:26:39 :Ok, ou ce soit une deep comprehension, en fait c'est pour créer un dictionnaire, pour créer une liste,pour créer n'importe quel objet Python ou conteneur Python, on peut soit le créer en ajoutant des éléments à l'intérieur,si d'ailleurs la structure est compatible pour faire ça.
00:27:02 :Donc par exemple pour les listes c'est avec des append, tu peux rajouter des éléments dans une liste,pour créer un dictionnaire tu peux écrire pour une clé je mets telle valeur, pour une clé je mets telle valeur, etc.
00:27:14 :Après l'autre méthode c'est de faire par ce qu'on appelle une méthode programmatique ou génératrice, c'est la structure,ouais c'est ça, deep comprehension c'est comme liste comprehension, c'est à dire que tu crées ton générateur directement dans la structure.
00:27:29 :Je vais te montrer, par exemple pour une liste comprehension tu peux dire ça, et tu peux dire i x 2 for i in range 10,donc là ce que ça va faire c'est que ça va créer une liste, donc là les crochets ici, pour des éléments qui vont de 0 à 9,
00:27:47 :donc c'est range 10, donc i de 0 à 9, et pour chaque élément dans la liste tu rajoutes l'élément x 2,donc normalement ça devrait faire 0, 2, 4, 6, 8, 10, 12, 14, 16, 18.
00:28:17 :Et tu peux faire la même chose avec un dictionnaire, donc une deep comprehension, donc là tu utilises le crochet comme ça,et par exemple tu peux dire que, bon on prend i et on lui dit i x 2, donc là en gros ce que je dis c'est que je crée une clé avec la valeur
00:28:32 :et je lui associe comme valeur deux fois la valeur, donc là for i in range, donc pareil 10,et là ce que ça va faire c'est que ça va faire pareil qu'avant, sauf que ça va créer un dictionnaire avec la valeur d'origine,donc ça va faire 0 donne 0, 1 donne 2, 2 donne 4, etc. Donc c'est ce qu'on voit, 0 donne 0, 1 donne 2, 2 donne 4,
00:28:55 :3 donne 6, 4 donne 8, etc. Donc là j'ai fait une deep comprehension.C'est bon pour toi Ousmane? Yes, cool. Donc là on revient sur cette émoji, donc là cette ligne, elle est intéressante.
00:29:11 :Donc en gros ça prend la chaîne, ça décompose élément par élément et ça crée un ensemble unique qui compose cette chaîne,donc l'émoji avec les cœurs, l'émoji avec les lunettes, la roquette et l'émoji qui fait la teuf.
00:29:22 :Donc l'autre ligne qui peut nous intéresser c'est le count, genre ici par exemple, on peut faire un test à la main,donc on part de emoji, donc notre chaîne de caractères au début, on fait un count, et avec un count par exemple on peut,on va prendre un genre l'émoji qui fait la fête, normalement il apparaît plusieurs fois, et donc en gros on va demander avec cette ligne
00:29:44 :combien de fois il y a l'émoji qui fait la fête dans la chaîne de départ, il dit qu'il y en a 4, donc on peut compter à la main au-dessus,on voit qu'il y en a 4 ici, 1, 2, 3, 4, etc. Et on peut faire pareil, par exemple avec l'émoji avec le cœur, avec les yeux en cœur, celui-là,
00:30:14 :qu'on le voit dans la chaîne de caractères en valeur, et c'est exactement ce qu'on veut dans le problème.Donc là par exemple si on fait, je ne sais pas si on a accès, non forcément ça n'existe pas, donc là on va copier ça,et là du coup elle est dans le contexte, on peut l'utiliser, et on va lui donner émoji, et on va voir ce que ça rend.
00:30:39 :Et là en fait ça nous fait le dictionnaire qu'on veut, donc pour l'émoji avec les yeux en cœur, il les a compté 2 fois, l'émoji avec les lunettesil les a compté 1 fois, l'émoji avec la roquette, la fusée il les a compté 1 fois, et l'émoji qui fait la teuf il les compte 4 fois.
00:30:56 :Et notre résultat attendu qui est ici, c'est exactement ça, bon c'est pas pris et paré, mais en termes d'égalité de dictionnaire,les deux dictionnaires sont équivalents. Donc là on peut le faire à la main si on veut. Donc on dit solution avec emoji,
00:31:13 :égal l'emoji count expected, et normalement il va dire ouais, et c'est ça qu'on veut.Bon pour tout le monde, ce que j'ai montré, en gros j'ai repris ce que j'ai écrit dans mon script et je l'ai mis dans un interpréteur pour vous montrer l'exécution.
00:31:30 :Donc ça c'est le niveau, enfin c'est la solution que Thibault voulait vous faire faire. Ouais ça doit être exactement ça je pense.Donc ça c'est le niveau entre guillemets incité par l'exercice. Après il y a d'autres implémentations, par exemple on peut faire avec counter,
00:32:26 :Donc ça ressemble énormément à ce qu'on cherche, et même, on pourrait même dire que c'est ce qu'on cherche en fait.Comment ça s'appelle déjà? Emoji count. Et en fait c'est vraiment ce qu'on veut.
00:32:42 :Et du coup là c'est ce que, après si le test que faisait Thibault était un peu plus sensible, il aurait pu tester le type,parce que le type, et encore ouais, ça aurait peut-être marché parce que counter c'est un type de classe, ou c'est un type counter,mais normalement c'est une sous-classe de dictionnaire, donc ça pourrait même marcher, ils sont très proches les objets.
00:33:06 :Et là dans le code, j'ai explicitement dit que je fais une conversion en dic, mais ça reviendra au même, on peut voir le résultat,c'est juste que counter comme c'est un dictionnaire ça supporte items, donc il fait des clés-valeurs-clés-valeurs,mais même counter directement on peut dire que c'est un dictionnaire, donc les deux sont équivalents.
00:33:27 :Mais on peut dire explicitement par exemple transforme counter en dictionnaire, et là on a le dictionnaire,et ce dictionnaire c'est exactement ce qu'on cherche. Donc voilà, ça c'est la solution avec counter.
00:33:38 :Vous pouvez regarder la doc que je vous ai filée, ou même faire une doc contextuelle comme ça, et regarder qu'est-ce que fait counter,mais grosso modo elle fait ce qu'on vient de voir, c'est-à-dire qu'elle prend élément par élément et regarde le nombre de fois qu'ils apparaissent.
00:33:53 :Après bon, il y a un peu plus de choses parce que comme c'est une classe héritée de dictionnaire,et qu'il y a d'autres types d'opérations qu'il peut faire avec count, donc après il faut regarder dans le détail si on veut faire des trucs un peu plus avancés avec counter.
00:34:05 :Mais counter c'est vraiment, dès qu'on voit le mot-clé dénombrement ou dénombrer quelque chose,counter c'est souvent votre meilleur ami, collection counter.C'est bon pour vous, pour cette solution?
00:34:20 :Pour les imports en général, ouais, Ousmane tu as raison, pour les imports en général, enfin c'est par convention, normalement on met en début,et là comme je voulais containeriser, en fait j'aurais pu créer différents fichiers et le faire justement propre et l'avoir l'import en haut du fichier.
00:34:38 :Là je l'ai mis directement en inner import de la fonction, c'est pour avoir une découpe un peu propre, containerisée,c'est-à-dire que l'import il ne m'intéresse que par rapport à cette solution with counter.
00:34:49 :Donc c'est pour ça que je le mets à l'intérieur, mais c'est vrai que c'est vachement préconisé de les mettre en haut du fichier.Là on va dire que c'est une démonstration pédagogique et c'est pour du découpage pédagogique.
00:35:04 :Mais en industrie ou en code un peu plus sérieux, on ferait comme ce que tu as évoqué, mettre en début du fichier.Ok, et donc la dernière avec defaultdict, donc on va regarder, on va comprendre ce que ça fait.
00:35:18 :Donc là il y a l'import de collection de defaultdict, donc on le fait ici, donc on a accès à defaultdict.Et ce qu'on fait c'est qu'on crée en préinitialisation un dictionnaire avec le type int.
00:35:34 :Et donc là on voit que emojiCount, c'est un defaultdict qui prend en default factory un int, une classe int.Et int de base, je ne sais pas si ça marche, de base int à vite ça donne 0.
00:35:52 :Donc grosso modo, emojiCount c'est un defaultdict avec defaultfactory int, et defaultfactory de int c'est 0.Donc par définition des defaultdicts, toutes les clés qu'on demandera dans emojiCount, si elles n'existent pas, auront une valeur int égale à 0.
00:36:13 :Donc on peut essayer.emojiCount total, que je n'ai pas défini avant, est égal à 0.emojiCount, et si par exemple maintenant je définis total égale à 42, bah emojiCount total ce sera 42.
00:36:26 :Si je fais un tata, ce sera 0, etc.En fait par défaut, n'importe quelle clé qui n'a pas été définie a le defaultfactory de l'entier de l'int qui est 0.
00:36:37 :Donc après ce qu'on peut faire, c'est pour chaque élément, pour chaque emoji dans la chaîne de caractère emoji,on compte le nombre de fois qu'on le voit.
00:36:49 :Donc on dit à emojiCount, avec la clé emoji, rajoute 1.Donc quand c'est la première fois qu'il le voit, il va rajouter 0 plus 1, donc 1.
00:36:57 :Quand c'est la deuxième fois qu'il le voit, il va rajouter 1 plus 1, donc 2, etc.Donc on peut regarder, on peut faire, ça on a fait, on peut faire ça.
00:37:09 :Donc la boucle itérative, peut-être fait trop d'espace, non c'est bon, ok.Et là on peut regarder emojiCount, donc normalement ça fait le taf, donc c'est un defaultfactory avec une classe factory de int,et on a rempli, ah oui mais là il y a tata, bon j'aurais dû effacer, parce que du coup il conserve les tests débiles que j'ai fait au début.
00:37:31 :Et emojiCount, 2 emojis, on lui fait 1 plus 1.Ah, pourquoi il n'est pas compte.Ah oui, non mais il faut le, ah oui.Bon, je ne sais pas, on va faire ça un peu.
00:37:55 :Ok, emojiCount, égal, un defaultfactory de int, après tu fais forEmojiInEmojis, emojiCount, emoji plus 1,tac, tac, tac, et là c'est bon, et normalement emojiCount, maintenant,égal à un dictionnaire avec, donc pour chaque clé, donc les emojis,on a compté le nombre de fois qu'on est tombé dessus en itérant sur le forEmojiInEmoji.
00:38:26 :Donc le forEmoji pour Emoji, on peut regarder ça fait quoi, en gros ça récupère chacun des éléments dans emojis,qui est la chaîne de caractère au début, donc ça fait ça.
00:38:36 :Donc on itère sur chacun des éléments, et on rajoute plus 1 dans la clé d'emojiCount en partant de 0.Donc à la fin on a ce dictionnaire, emojiCount, qui est d'ailleurs, defaultDict c'est une sous-classe de dict,donc c'est équivalent aussi à un dict, on pourrait le transformer en dict, mais bon, le test il passe,
00:38:58 :je peux vous montrer, count égale emoji, comment je l'ai appelé, countExpected, et c'est bon.Donc on est bien. Et voilà, en fait là on a 3 implémentations pour le même problème en utilisant des containers différents.
00:39:19 :Donc la première fois on a utilisé des sets et des counts sur les sets, donc sur les ensembles.La deuxième fois on a utilisé la classe ObjectCounter qui fait du dénombrement dans un itérable,et qui crée un dictionnaire de dénombrement. Et la troisième implémentation c'est avec un defaultDict,
00:39:34 :qui a une valeur par défaut à 0, on fait une sorte d'histogramme sur ce qu'on voit dans la chaîne d'entrée,et on crée un histogramme de la présence des éléments dans la chaîne d'entrée.
00:39:47 :D'un point de vue de performance, quelle est la fonction la plus efficace?Je vais le faire haute voix mouillée, mais c'est vrai que ça atteint, d'ailleurs ça pourrait être un bon...
00:40:02 :J'en parlais à Thibault faire une session sur comment mesurer l'efficacité de son code.Il y a des librairies comme Timeit ou Profile qui permettent de faire ça. On ne va pas le faire maintenant.
00:40:15 :Intuitivement, je dirais que Counter est la meilleure méthode, parce que l'implémentation est vraiment très rapide.Et cet objet, Counter, cette classe, c'est une classe de collection, donc une classe de Python.
00:40:33 :Et en général, quand on est très proche de ce que fournit Python, que ce soit dans des packages,en plus, collection, c'est vraiment un package maintenu par les mainteneurs de Python,donc en général, c'est là où il y a l'optimisation la plus importante.
00:40:50 :Elle ne fait pas appel à une librairie comme collection?Oui, elle fait appel à collections, mais collections, c'est un module quasi natif,ce n'est pas un truc natif, mais c'est très proche du natif, par rapport à la distance du corps de Python, c'est vraiment très proche.
00:41:10 :Il faudrait que je regarde l'implémentation des collections, enfin des modules dans collections.Moi, ça ne m'étonnerait pas qu'il y ait des optimes en C ou en Cyton dedans.
00:41:20 :Il faut que je regarde là, je ne pourrais pas le dire maintenant.Mais oui, collection, c'est un très bon, il y a beaucoup de choses très intéressantes là-dedans à lire.
00:41:29 :C'est un must-to-read.Il y a beaucoup de choses, au lieu de refaire les trucs à la main, il y a beaucoup de choses déjà faites et qui sont super intéressantes.
00:41:37 :Ma collection.Une autre, là on ne l'utilise pas ici, mais un autre truc qui est super intéressant, c'est IterTools.C'est sur tout ce qui est itération et fonctionnel programming ou programmation fonctionnelle.
00:41:53 :Et là, pareil, ça a une source vraiment très intéressante de comment faire de l'algorithmie, surtout sur du fonctionnel.Ici, il y aura forte chance que vous trouviez votre bonheur avec des, donc c'est à lire aussi.
00:42:07 :IterTools, c'est collection.Hop, la solution, module collection explorer.Je ne peux que vous conseiller ardemment de lire, de toute façon, globalement lire les documentations, c'est bien.
00:42:25 :Et les documentations de ce type de librairie, c'est vraiment un truc à faire assez rapidement.Ça évite de refaire du code crac-crac qui marche souvent mal ou pas bien, qui résiste pas bien aux bugs.
00:42:38 :Il y a beaucoup de choses qui sont déjà écrites et plutôt très bien écrites.Vous avez des questions ou vous auriez vu une solution différente?
00:42:46 :Dans la première solution, tout le monde pense pouvoir l'écrire ou l'aura écrit.Celle avec set et les count.Ouais ouais, mais Jonathan, il dit peut-être en plus de ligne.
00:42:57 :Général, il me détaille trop.Oui, oui, mais Jonathan, il dit peut-être en plus de lignes, en général il détailletrop.Il y a une pep, je crois que c'est la pep 0, Python, qui donne le Zen of Code.
00:43:30 :Je ne sais plus c'est la combien, mais il y en a une qui dit explicit is better thanimplicit.En gros, d'être plus explicite ou de parler plus, c'est souvent mieux que de parler moinset de cacher des choses.
00:43:44 :Parce que quand quelqu'un après relit derrière toi, ou même quand toi tu relis, tu peuxavoir l'impression de regarder de la magie noire ou un truc un peu mystique.
00:43:52 :Donc des fois c'est bien, surtout au début en phase pédagogique et en phase d'apprentissage,de bien détailler, d'être bien explicite, d'avoir beaucoup de commentaires.Par exemple, moi souvent je mets de la documentation, des liens de documentation sur des chosesque j'utilise, des objets, des librairies.
00:44:09 :C'est un truc que je pourrais vous conseiller de faire quand c'est des trucs qui sortenten fait du Python général, quand vous commencez à entrer dans du spécifique, de vraimentpenser à documenter et à justifier.
00:44:19 :Je ne sais plus si j'en fais dans celui-là.Non, je n'en fais pas dans celui-là je crois.Non, mais je vais en faire peut-être dans le prochain des commentaires.
00:44:29 :En même temps avec de la doc.Yes.Du coup, ok, il nous reste 15 ou 20 minutes.On va essayer de faire l'autre exo.Je vais essayer peut-être d'aller un poil plus vite, comme ça on pourra voir le truc.
00:44:43 :Donc l'autre exercice c'est récupérer des éléments avec les slices.Donc les slices, un truc intéressant.Donc l'énoncé, tac, on va lire directement dans le fichier que j'ai préparé.
00:44:56 :Donc c'est le numéro 2, tac, et tac, c'est ça, ça va l'afficher.Donc, exercice doctrine mentora, récupérer des éléments avec les slices.Énoncé.Dans cet exercice vous devez récupérer différents morceaux d'une liste.
00:45:11 :Donc la liste de départ est la suivante.Donc c'est des prénoms, Maxime, Martine, Christopher, Carlos, Michael et Eric.L'objectif de cet exercice est de récupérer les informations suivantes grâce aux slices.
00:45:23 :Les trois premiers employés, Maxime, Martine, Christopher dans une liste 3 premiers.Les trois derniers employés, Carlos, Michael et Eric dans une liste 3 derniers.Tous les employés sauf le premier et le dernier dans une liste de milieu.
00:45:36 :Le premier et le dernier employé dans une liste première et dernière.Donc en aide, il nous dit pensez au fait que vous pouvez parcourir une liste en sens inverseavec des indices négatifs.
00:45:44 :Donc on va en parler.Donc c'est le fonctionnement de l'indicage, enfin comment on indice dans une liste etcomment on slice d'ailleurs aussi dans une liste.
00:45:52 :Pédagogie, donc le but de cet exercice c'est de revenir sur la notion de slice et voircomment elle fonctionne et pourquoi on en a besoin.
00:46:00 :Bon en l'occurrence là on en a besoin parce qu'on veut faire l'exercice.Mais après on peut voir, éventuellement on verra des usages plus généralistes.Donc on peut, comme je disais sur les exercices avant, le premier truc c'est l'analysede l'énoncé.
00:46:16 :Donc l'énoncé est assez explicite avec des indications en gras et des couleurs pourmarquer les éléments importants.Donc en gros en lisant l'énoncé on voit ce qu'il est important de faire.
00:46:26 :Donc là il nous donne des indices, par exemple les trois premiers, on voit que c'est engras.Il nous donne la solution, enfin la solution, il nous dit qu'est-ce qu'on est censérécupérer et dans quoi on est censé mettre notre résultat.
00:46:36 :Donc là en gros ça, ça écrit en fait une sorte de test, enfin ça a cette ligne d'écrireun test en fait.Pareil pour toutes les lignes, enfin pareil pour les deux premières lignes.
00:46:48 :Après il faut le faire à la main, mais bon c'est pas très compliqué de prendrele premier et le dernier, ça se fait vite et pareil, non tous les employés sauf lepremier et le dernier, et le premier et le dernier, ça se fait vite.
00:46:59 :On va pouvoir l'écrire assez facilement.Donc en fait, tous les élits se basent sur la compréhension et bonne utilisation del'outil slice, Python sur l'élise, donc on va essayer de voir ça.
00:47:13 :Donc là je vous ai mis des dates de documentation, donc sur le slice, d'ailleurs je fais unPS, la partie n'est pas documentée en français, parce que normalement c'est censépointer vers le site en français, mais on voit que c'est pas écrit en français ici.
00:47:27 :Donc ça pourrait être un truc intéressant si il y a un action show en traduction d'anglaiset ou qu'ils veulent commencer à faire de l'open source de la contribution, ça peutêtre un truc assez simple et assez sympa à faire, de traduire ça en français, oude rentrer dans le processus de traduire ça en français.
00:47:45 :Donc en gros le slice c'est un objet Python qui permet de donner des indications de commenton va regarder à l'intérieur de la liste.Donc ça se base sur range, que j'ai utilisé tout à l'heure pour générer des chiffres,donc là on peut l'utiliser pour générer des indices en fait.
00:48:01 :On peut lui dire qu'il y a un start, donc une valeur de début, un indice de début,un stop, un indice de stop qui va arrêter l'itération, et un step, de comment on vade start à stop, donc en incrément step.
00:48:12 :Donc the start and step argument default is not, donc là il nous donne les valeurspar défaut, si on ne spécifie pas par défaut c'est sur none, et slice of the year, theyhave no explicit functionality, bon après il parle le truc, bon bref.
00:48:31 :Et là il donne un exemple, sort after stop step, or after stop, ok, c'est à dire qu'onpeut l'écrire, ok.Là en gros il nous dit qu'il y a différentes notations, on peut soit utiliser les deuxpoints pour séparer les start, stop, step de range à l'intérieur du slice, donc l'indice
00:48:52 :dans la liste, ou on peut utiliser aussi virgule, c'est aussi un séparateur valide.Ok, bon j'ai jamais utilisé virgule personnellement, moi j'utilise toujours les deux points ici.
00:49:02 :Pub 20, IC import this, yes pour avoir la liste, oui bien vu Romain, pour avoir le zen, lezen bon on peut essayer, c'est marrant.
00:49:14 :Je vais le faire en terminale plutôt, parce que là dans des scott, donc là ici quandon est dans un interpréteur Python et on fait import this, on a la liste du zen ofPython par team Peters, et on a une liste de bonnes phrases à avoir en tête quand
00:49:31 :on fait du code Python, et donc c'est ordonné, donc c'est du plus important au moins importantentre guillemets, et genre c'est une priorité, celle là a plus de priorité que celle là,et des fois il y a des règles même qui prennent en compte qu'au dessus c'est plus prioritaire,
00:49:48 :je ne sais plus chez laquelle qui fait ça.Donc là par exemple il y a beautiful is better than ugly, quelque chose de beau c'est toujoursmieux que quelque chose de moche.
00:49:57 :Du coup je me demande si je n'ai pas inversé l'ordre.Explicit is better than implicit, donc c'est la seconde, celle que je vous parlais.Simple is better than complex, elle est super importante celle là, en gros quand tu asune solution simple autant faire simple que compliqué, complex is better than complicated,
00:50:13 :donc oui il y a un ordonnancement, donc complexe c'est mieux que compliqué, flat is betterthan nested, etc. etc. je vous les laisserai lire, c'est des trucs super intéressants
00:50:28 :à avoir en tête, et en général quand on a des checks verts sur chacune des lignes,c'est qu'on a un code plutôt bien.Ok, donc on revient sur les slice, donc après il y a la doc de slice qui réfère à e-slicequi est comment créer un itérateur sur les éléments sélectionnés, donc avec le range
00:50:53 :start, stop, step.D'ailleurs il y a une faute, ça pourrait être une bonne contribution, dans cette phraseil y a une faute, et cette phrase je l'ai copié-collé, donc créer un itérateur quirenvoie les éléments, donc là ici les éléments, donc j'imagine il manque un s ici, de sélectionner
00:51:17 :des termes.Et après là il y a dans Glossaire, comme je ne trouvais pas la version française deslice, j'ai vu dans Glossaire que en gros ça veut dire slice en anglais, un objet contenanthabituellement une portion de la séquence, donc il faut penser à ce truc en termes de
00:51:31 :portion, ce n'est pas forcément une portion continue, avec le step justement on peut sauterdes valeurs, mais du coup ça fait une vue sur une liste.
00:51:40 :Ok, tac, donc on va passer à l'implémentation, donc là on part de liste, qui est notre entréeavec les prénoms, et là j'ai fait des fonctions test, donc en gros qui prennent la liste etqui regardent si c'est les trois premiers, les trois derniers, milieu et premier dernier.
00:51:58 :Ok, juste assez rapidement, il y en a qui connaissent les slices déjà, ou qui lesont déjà utilisés.Yes, cool.Bah du coup Flavien, ou ceux qui connaissent, vous sauriez résoudre assez facilement l'exercice.
00:52:19 :Ok, cool.Bon, on va regarder, c'est cool comme ça on pourra aller un peu plus vite et finirdans le temps.Oui, oui, oui, ok, cool.
00:52:31 :Alors test des trois premiers.Bah tiens d'ailleurs, on va faire dans l'autre sens, les trois premiers comment vous l'écrivezpar exemple? Avec liste d'entrée, comment je fais pour avoir les trois premiers de liste.
00:52:47 :Ouais, ouais c'est marrant, ok.Vous avez presque chacun un truc différent, enfin des formes différentes de formulation,mais vous n'avez pas tous… bon.Ok, on va regarder la solution.
00:53:15 :Donc en gros, une façon d'écrire, donc là je mets en commentaire ce que ça doitfaire, et une autre façon d'écrire c'est d'écrire en explicite start, stop, incrémentet après d'utiliser le slice ici en explicite, donc avec start, stop, incrément.
00:53:32 :Donc pour les trois premiers, le start il est à default, il est à 0, donc comme onveut les trois premiers, on veut le premier, donc 0.
00:53:39 :Le stop est à 3, parce qu'on veut les trois premiers, donc la condition c'est que quandl'indice arrive à 3, on s'arrête, donc on aura 0, 1, 2 en termes d'indices.
00:53:48 :Et l'incrément est par défaut à 1, enfin on met 1, nous on veut 1, puisqu'on veutles trois premiers, donc ça avance de 1 en 1, et c'est la valeur par défaut.
00:53:58 :Donc si on écrit en explicite avec ces variables, on écrit liste, start, stop, incrément,et ça nous donne le résultat, donc 0, 3, 1.Donc là l'équivalent de ça en fait, je pourrais le mettre ici, l'équivalent, çaserait liste, 0, 3.
00:54:19 :Donc hop, et comme dans les slice quand on a des valeurs par défaut, on peut virer,ah oui c'est vrai, c'était ton erreur Flavien.Comme dans les slice quand on a une valeur par défaut, on peut virer, donc on peut simplifier,le 0 il peut sauter, le 1 il peut sauter, cet opérateur peut sauter parce qu'en fait
00:54:42 :ici on ne décrit rien, donc à la fin on peut juste écrire ça, liste, crochet, indice,2.3.Donc en gros ça dit start égale 0, ça dit stop égale 3, et ça dit implicitement incrémentégal à 1.
00:54:58 :Et donc là on fait le test et ça marche.On peut l'essayer dans l'interpréteur pour vous assurer que ça fonctionne.Donc on a ça, et on dit liste, 3, énormément, récupère, Maxime, Martin, Christopher quisont les trois premiers éléments de notre liste.
00:55:20 :Donc ça marche.Et pareil si on fait ce que je vous disais, avec de l'explicite, donc on démarre à 0,on va en 3 et on fait un incrément de 1, ça fait la même chose.
00:55:31 :Pareil si on fait comme ça, c'est à dire qu'on zappe le 0 et on dit qu'on en 1, çafait la même chose.Pareil si on enlève le 1 parce que c'est une valeur par défaut, ça fait la mêmechose.
00:55:44 :Et pareil si on vire le dernier 2 points parce qu'en fait il ne sert à rien, ça faitla même chose.Oula, je ne te suis pas trop Samuel là, mais bon, ce n'est pas grave, on en parlera après.
00:55:59 :Donc les trois premiers, facile.Les trois derniers, comment vous l'écrirez? Écrire, oui, bon bref, conditionnel.On a des gens qui sont bons.Bon là en même temps j'ai un peu spoilé.
00:56:26 :Donc là on utilise, on va regarder la solution, mais bien joué les gars.Les trois derniers, donc en start, donc là pareil on reprend la stratégie explicite,donc en start c'est moins 3, d'ailleurs ce n'est pas un default, c'est moins 3.
00:56:44 :Donc en gros quand on est en négatif, en fait on indice, on donne une indication d'indiceou de décalage par rapport au dernier élément.C'est à dire que si on part à 0, donc 0, 1, 2, 3, 4, 5, c'est du dernier élément,par exemple si on dit 2, c'est 0, 1, 2.
00:57:00 :Par contre si on dit moins 1, c'est on part du dernier et on va à gauche.Enfin, ouais, on va à gauche.On part du dernier et on recule d'un élément.
00:57:08 :Pareil, moins 2, on part du dernier, on recule de deux éléments.Moins 3, on prend le dernier élément, on recule de trois éléments.Donc là comme on veut les trois derniers, on part de la fin et on recule de trois éléments.
00:57:19 :Donc d'où le moins 3 en start.En stop, c'est non.Donc c'est le défaut, en gros on va jusqu'à la fin, on veut les derniers, donc on veuts'arrêter à la fin de notre liste.
00:57:29 :En incrément, c'est 1 parce qu'on part de l'avant-avant-avant-dernier, on va à l'avant-avant-dernier, on va à l'avant-dernier.Non, enfin j'avais fait trop.Non, enfin on fait avant-avant-dernier, avant-dernier et dernier.
00:57:40 :Donc on avance de 1 en 1 en partant du avant-avant-dernier.Et donc là si on l'écrit en explicite, ici, donc on est en liste 101 et là en équivalent,c'est moins 3, ouais ben il a bien écrit.
00:57:54 :Voilà non, ouais bon.Tac et 1.Donc ça, ça marche, on peut essayer.Donc c'est censé nous envoyer Carlos, Michael et Eric.Carlos, Michael et Eric, ça marche.
00:58:06 :Comme ce qu'on a dit avant, le non c'est la valeur par défaut du stop donc on peutle virer.Et le 1 c'est la valeur par défaut de l'incrément donc on peut le virer.
00:58:15 :Et le dernier 2 points il sert à rien aussi, il est un redondant donc on peut le virer.Donc on a toutes ces formes qui donnent la même chose.
00:58:26 :Donc c'est ce que vous aviez écrit, ouais, ce que vous avez quasiment tous écrit.Donc là il est facile pour vous les 3 derniers.Cool.
00:58:35 :Tac, maintenant on passe au milieu.Donc le milieu c'est, on ne prend pas le premier, on ne prend pas le dernier, on prendce qui reste au centre, au milieu.
00:58:43 :Comment vous l'écrirez, celui-là? Vous l'écrirez.Oui.Jonathan, ok, tu n'es pas très loin.Vous êtes mieux les derniers, ouais.Moins 2 c'est un peu trop loin.
00:59:14 :On va regarder le milieu.Donc là pareil, on repart avec le start, start, increment.Donc on ne veut pas le premier, donc on part de 1, qui zap le premier élément, l'élément0, enfin indice 0.
00:59:28 :On ne veut pas le dernier, donc on part de moins 1, le moins, ça veut dire qu'on partde la fin et on remonte d'un, donc on skip le dernier.
00:59:37 :Et l'incrément c'est 1, donc on veut partir du deuxième jusqu'à l'avant dernier et onavance de 1 en 1.Donc en liste ici, en équivalent, donc ça donnerait, est-ce que c'est bon ce qu'ilme conseille? 1 moins 1, 1 ouais, donc c'est ça, ouais, ok, on peut essayer.
00:59:56 :Donc normalement ça devrait nous renvoyer, d'ailleurs on peut l'écrire, il ne l'avaitpas mis dans son élan C, mais on peut l'écrire.Donc tac, on repart de ça.
01:00:05 :Et en gros ça vire Maxime et ça vire Eric.Donc on est censé récupérer Martin, Christopher, Carlos et Michael.Donc on va voir si ça marche.
01:00:19 :Martin, Christopher, Carlos et Michael, donc ça marche.Donc là pareil, là on n'a qu'un truc en default, donc c'est l'incrément en 1, doncon peut virer l'incrément.
01:00:33 :Donc là ça s'en vire au même que ça.Et comme le dernier il ne sert à rien, il ne spécifie rien, on peut le virer et çarevient au même que ça.
01:00:41 :Donc le 1, 2 fois en moins 1, c'est la solution finale, la forme finale de la solution.Donc vous étiez, oui vous l'aviez bien joué Romain, Oedi et Flavien.
01:00:59 :Et Daniel, oui mais parce que tu connais la, ça ne marche que parce que la liste faitcette taille.Le 4 en fait tu ne peux pas le définir de manière programmatique.
01:01:11 :Enfin tu pourrais, mais d'ailleurs on va le voir, bon je ne vais pas spoiler.Mais ta solution ne marche que pour cette liste en particulier.
01:01:18 :Si je vire un élément, genre ajouter un, ça ne marche plus.Donc dernier truc, c'est le premier et le dernier, donc on veut récupérer le premieret le dernier.
01:01:30 :Donc on veut récupérer Maxime et Eric.Comment on fait?Sans le slice ça marche, c'est bien vu Ousmane, c'est une solution.Mais il faut le faire avec le slice.
01:01:44 :Romain tente, ouais Romain tente pas mal, mais Romain il est trop fort.C'est le bon élève qui casse tous les exercices.Bon là j'ai spoilé, Romain a la bonne solution.
01:02:03 :Donc, enfin a une bonne solution.Donc si on fait que avec les slice, non celle d'Ousmane elle est pas mal aussi.Elle est même plus intéressante, moi j'aurais peut-être fait celle d'Ousmane si je n'étaispas imposé à devoir faire les slice.
01:02:21 :Donc en termes de start and stop, on veut le premier donc on démarre à 0, on veutle dernier donc on va jusqu'à non, par contre en incrément on veut zapper tout ce qu'ily a au centre.
01:02:34 :Donc ce qu'on peut faire c'est de prendre la taille de la liste et de sauter tous ceséléments, moins 1 parce qu'on veut quand même récupérer le dernier.
01:02:44 :Donc c'est l'n qui donne la taille de la liste, on peut voir, démonstration, l'n de liste,donc 6, moins 1 donc 5.Et donc on fait un saut de 5, donc on part du premier, on fait un saut de 5, il nousreste juste le dernier, on le prend et après on arrête parce qu'on est tombé sur le stop.
01:03:03 :Donc ici, en équivalent, tac, donc on peut essayer, donc ça doit nous renvoyer Maximeet Eric.Donc là on peut essayer ici, voir ce que ça fait, Maxime et Eric, ça marche.
01:03:26 :Donc le premier, le 0 ici il est par défaut, on fait toujours 0, le non aussi est par défaut,donc en fait notre forme finale c'est ça.
01:03:37 :Donc on vire le 0, on vire le non et on veut spécifier un crément donc on doit le laisser,et donc c'est ça notre forme finale.
01:03:44 :Ouais, ça devrait marcher aussi Arnold, mais du coup en forme finale, les deux premiersse font skipper en fait.Donc ça revient à ça en fait, à 2.2.ln de l'is moins 1.
01:04:04 :Et ta forme peut-être fonctionne aussi, je crois non, je pense que c'est valide aussipour start, on peut vérifier.Ouais, ça marche aussi.Que non équivalent à 0, à peu près.
01:04:21 :Ok, donc celui-là il est assez simple mais il est marrant.D'ailleurs c'est dommage que j'ai pas eu un peu plus de temps, j'aurais bien aimévous faire un graphique, là je vous l'ai fait en vue mentale entre guillemets, j'auraisaimé vous faire un graphique sur le start-stop et vous faire des curseurs graphiques en fait
01:04:38 :sur les listes.J'essaierai de le refaire, peut-être une petite vidéo qui parle de cet exo avec justementdes graphiques et des animations.Mais là j'ai pas eu le temps de vous le faire, désolé.
01:04:51 :Donc voilà, là on est sur les slices, sur les slices vous êtes vachement tous à l'aise,c'est cool, bien joué tout le monde.Mais en plus là il n'y a pas d'alternative, il y a juste Ousmane qui nous a trouvé unealternative, mais je n'y avais même pas pensé.
01:05:07 :D'ailleurs on peut la tester.D'ailleurs bien joué Ousmane.Donc normalement ça fait la même chose.Donc ça marche, bien joué Ousmane.Si vous avez des petites questions ou des remarques, c'est le moment.
01:05:25 :Ouais mais pareil je vais bientôt y aller aussi, je commence à avoir très faim.Bon j'espère que vous avez aimé.Désolé c'est un peu, moi j'ai pris le truc au vol, j'essayais de faire un truc assezrapide et qui soit un peu intéressant.
01:05:42 :Oh plein de chats, t'as trop de la chance.Ce sera bientôt pour moi, on va bientôt déménager à Marseille avec un petit extérieur.Ce sera plein de chats tout l'été.
01:05:51 :Si vous avez des questions, c'est le moment.Donc ce que je vais faire avec Thibaut, pareil que pour les autres mentorats que j'ai fait,c'est que je vais faire un GitHub et je mettrai les solutions avec les ressources et on pourraavancer avec un GitHub collaboratif, vous aurez accès aux sources, vous pourrez les
01:06:23 :télécharger et les récupérer.Vous pouvez même faire des soumissions si vous voulez, faire d'autres versions.Moi j'aime bien le travail un peu collaboratif.Pareil sur la doc Collection, Counter et Collection, Default Dick.
01:06:35 :Comme pour le dernier projet Goban, enfin le jeu Go, je ferai un wiki dans le projetet je mettrai de la documentation technique dedans.Avant de partir, petite question, quel doc exercez-vous? Ah oui, du coup Flavien, je
01:06:49 :vais en parler avec Thibaut, ça sera sûrement mon prochain mentorat sur comment mesurerl'efficacité d'un code.Après c'est un peu avancé parce qu'il faut déjà avoir des notions de comment faireles choses, etc.
Aucune occurrence trouvée pour « ».