Session du 28 janvier 2025 à 21h00
TOSA & Certifications
Algorithmique & Performance
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat TOSA
Session de mentorat TOSA. On va revenir en détail sur l'exercice des graph acycliques.
00:01:21 :Oui, alors, on va, oui oui je l'ai fait, et j'ai trouvé un truc pour visualiser parce que j'avais du mal au début, je vous mets dans le message, dans la conf, le chat, ça m'a bien aidé pour pouvoir visualiser le graphe en fait,Alors, hop, on va partir tout simplement déjà sur l'exercice en lui-même, alors, je vais essayer de grandir un petit peu ça, on va zoomer un peu plus, tac, voilà, comme ça je pense que ça va être bien lisible pour vous,
00:02:06 :Alors, on va reprendre le, on va prendre tout simplement déjà l'énoncé de l'exercice, et enfin, donc, le graphe acyclique dans cet exercice, on vous l'a placé dans une liste, d'accord, on va voir après comment est fait cette liste,Alors, je vais, on va aller voir déjà à quoi ressemble ce paragraphe, on va se l'expliquer proprement, donc un graphe acyclique, ça ressemble à ça, d'accord, qu'est-ce qui est dit ? C'est tout simple, 5 a pour enfant 11, d'accord, 7 a pour enfant 11 et 8, et ainsi de suite, 3, 8 et 10, et 11 a pour enfant 2, 9 et 10, ok ?
00:03:22 :Donc, pour symboliser cette liste, je vous ai préparé un petit truc, voilà, on va basculer sur, je vais devoir faire du jonglage, mais on va essayer d'y arriver,On bascule sur le, donc, on va représenter la liste comme ceci, d'accord, donc, on va reprendre, là, il va falloir que vous croyez sur parole, parce que je ne peux pas vous diffuser, malheureusement, les deux choses en même temps,
00:04:09 :Là, vous pourrez prendre en note la liste que je vais vous faire là, comme ça, je vous remontrerai l'image, vous pourrez voir en même temps que tout correspond bien, ok, donc, on avait dit 5 et le parent,Ah, qu'est-ce que c'est, qu'est-ce qu'il fait, ah, ok, je passe en clavier, donc, 5 et le parent de 11, ok, ensuite, 7, il avait deux enfants, qui sont 11 et 8,
00:04:50 :3, il avait aussi deux enfants, qui sont 8 et 10, ensuite, on avait 11, qui avait trois enfants, ok, qui sont 2, 9,et 10, et enfin, 8, pour enfant, 9, ok, pour tout le monde, vous avez eu le temps de reprendre la liste de votre côté, histoire que vous puissiez voir, allez, je vous laisse l'afficher deux minutes, si vous voulez faire un screenshot ou autre, peu importe,
00:05:48 :oui, merci, histoire que vous ayez bien cette liste sous les yeux, quand on va, je vais basculer sur votre écran, histoire que ce soit bien clair pour vous,je vous ferai un petit peu travailler ce soir, c'est bon pour tout le monde, ok, allez, je bascule, hop là, donc, on revient sur notre fenêtre, donc, on reprend, c'est bien ce qu'il y avait marqué dans la liste,
00:06:27 :donc, 5, c'est parent de 11, 7, parent de 11, 7 parent de 8, 3, 8, c'est 10, 11, c'est parent de 2, 9, c'est 10, et 8, c'est parent de 9, ok, donc, c'est ainsi que la liste est représentée,alors, maintenant, pour vous faciliter un petit peu la lecture de cette liste, je vais rebasculer sur la liste, vous m'arrêtez ainsi à la moindre question, quelque chose qui n'est pas clair, hop, on rebascule sur la liste, voilà, si on reprend cette liste, dans ce format-là, est-ce que ça ne vous rappelle pas une autre structure de Python ?
00:07:14 :C'est une liste de tuples.Voilà, alors, ça peut être une liste de tuples, mais comment est-ce qu'on pourrait la voir autrement ?C'est pas top top, parce qu'il n'y a pas d'unicité d'un côté ou de l'autre, mais en fait, on pourrait la voir comme une liste de dictionnaires, d'accord, où la clé est le parent, et l'enfant est la valeur.
00:07:48 :Est-ce que c'est clair pour vous ?On est sorti des clés avec plusieurs valeurs ?Voilà, c'est pour ça que j'ai dit qu'il y a un petit problème d'unicité, mais c'est histoire de vous imager le truc, en fait.
00:08:03 :C'est vrai qu'une liste de tuples comme ça, se mentaliser, ce n'est pas évident.Maintenant, si on s'imagine que c'est une liste de dictionnaires, je vais faire un peu la modif comme ça, histoire que ça soit un petit peu plus visible pour vous.
00:08:17 :Si on imaginait qu'en fait, on avait une liste de dictionnaires comme ça, et là, ça paraît un petit peu le plus clair.Je vais peut-être monter un petit peu.
00:08:28 :Là, on a la clé 5 qui a pour valeur 11.Donc là, si on reprend dans l'idée du graphique, on a 5 qui a pour enfant 11.
00:08:38 :La clé 5 a pour valeur 11, 5 a pour enfant 11.Est-ce que ça vous va cette petite gymnastique ?Oui.J'ai toujours perdu personne, c'est bon ?
00:08:51 :Non, mais il faudrait que tu refasses la même chose avec le 7-11 et le 7-8.Oui, oui, là, la liste là, on ne va pas l'utiliser de suite, on ne va pas l'utiliser en fait, cette liste là.
00:09:00 :Cette liste là, c'était vraiment pour vous imager le truc.D'accord ? Pour que vous ayez une visu du graphique et une visu de la liste.
00:09:08 :Parce que là, c'est toute la difficulté qu'il y a dans cet exercice là, en fait.C'est que lorsque vous faites l'exercice, vous n'êtes pas le graphe en visuel devant vos yeux.
00:09:17 :Donc en fait, c'est souvent ça qui pêche et qui nous empêche de bien comprendre le système.D'accord ?Donc, on a nos similis dictionnaires, on va dire,qui sont composés donc d'un parent et d'un enfant.
00:09:36 :Donc, ce qui est logique, pour vous faire un petit mémo technique pour vous rappeler dans quel ordreles éléments se placent dans cette fameuse liste qui est à l'origine de tout dans cet exercice.
00:09:47 :D'abord le parent et après l'enfant.C'est l'ordre logique des choses.Les parents viennent avant les enfants.C'est bon pour tout le monde ?D'accord.Ok.
00:09:59 :Alors, on va reprendre maintenant notre…On va reprendre l'énoncé.Je bascule, j'aurais fait beaucoup de gymnastique ce soir.C'est de la gymnastique des doigts, ça va, je ne serai pas trop fatigué.
00:10:23 :Donc, on reprend.Donc, le but de cet exercice, c'est de créer une fonction qui s'appelle hisAncestor.D'accord ?Donc, le but, c'est de savoir si un élément est l'ancêtre d'un autre.
00:10:39 :Donc, savoir si un élément est bien le parent d'un enfant.D'accord ?Quand c'est le cas, on retourne le trou.Sinon, false.Donc là, c'est important.
00:10:55 :B, si B est un ancêtre de A.Donc, qui de B et de A va être le parent et l'enfant ?B est le parent et A est l'enfant.
00:11:11 :Voilà. Exactement.Donc maintenant, on a déterminé.B, on l'affecte aux parents.A, aux enfants.Ok ?On continue.La liste est une liste de tuples entiers, X, Y, tel que le graphe a un arc au sommet, X au sommet Y.
00:11:30 :Ça, cette phrase-là, c'est la meilleure phrase pour vous embrouiller.D'accord ?Retenez que c'est une liste de tuples, comme on vient de le voir avec la petite visualisation que je vous ai faite avant,où X est le parent et Y l'enfant.
00:11:46 :Donc, les X seront des A ou des B.B.Voilà.Et les Y seront des A.Voilà.Donc maintenant, on a bien déterminé, bien compris comment notre liste s'organisait.
00:12:10 :Donc, on nous donne un petit exemple.Excuse-moi, la phrase, on peut la commenter ?Le graphe est garanti être un arbre.Ouais, alors celle-là, je suis passé, c'est pareil, c'est une phrase de plus qui va vous…Chaque sommet a au plus un arc entrant.
00:12:31 :Qui va plus vous embrouiller que vous apporter des réponses.C'est pour ça que je l'ai passée volontairement, cette phrase-là, c'est qu'en fait, c'est les deux phrases…Enfin, la fin de la phrase-là et cette partie-là,ça a plus notion pour moi de vous embrouiller que de vous apporter des éléments de compréhension.
00:12:52 :D'accord.Donc, on continue avec l'exemple qui nous est donné.On nous donne une liste L avec 0 et 1.Donc, maintenant, on a bien compris comment fonctionnait notre liste.
00:13:03 :Alors, j'attends votre réponse.0 est le…Parent.Voilà. Et 1 est…L'enfant.Ok. Donc, maintenant, c'est bon.On a bien compris notre liste. Je pense que c'est clair pour tout le monde.
00:13:20 :Maintenant, on va travailler la fonction.Je vous donne l'exemple.Ici, on a dit que IsAncestor prend comme paramètre la liste.D'accord.Et une valeur qui est un…L'enfant.
00:13:38 :Et une valeur qui est un…Parent.Et c'est là que se pose tout le problème de cet exercice.C'est-à-dire qu'en fait, la liste qui vous est fournie en entrée contient des tuplesqui sont englobés dans le sens parent-enfant, parent-enfant, parent-enfant.
00:13:55 :D'accord.Sauf qu'on a la fonction.On vous demande de faire en sorte qu'on prenne en paramètre la liste, un enfant et un parent.Et c'est là où on se fait souvent des dos au cerveau.
00:14:10 :D'accord.Donc, moi, ce que je vous conseille, comme on a ici dans l'exemple,alors c'est plus ou moins présenté de la même manière au Tosa,le B qui est un parent, le A qui est un enfant,c'est tout simplement d'écrire votre fonction en prenant les variables L, A, B.
00:14:32 :Vous avez déjà déterminé dans votre tête que B est le parent, A est l'enfant.Si dans votre fonction, quand vous la définissez, vous écrivez L, A, B,déjà c'est beaucoup plus clair pour vous.
00:14:44 :Vous êtes toujours sur la même ligne que vous avez définie.Donc là, on nous dit que, comme la liste ici nous dit que 0 est le parent et 1 est l'enfant,cette version-là doit nous retourner true.
00:14:56 :Et cette version-là nous retourne forcément false puisque l'enfant n'est pas l'ancêtre du parent.D'accord.On va rentrer un petit peu dans du code.Donc, on va commencer notre fonction.
00:15:12 :Donc, on a dit qu'on lui mettait en paramètres L pour la liste.D'accord.A pour l'enfant.B pour le parent.Ok.Donc maintenant, quelle stratégie on pourrait adopterpour déterminer si B est bien l'ancêtre de A ?
00:15:58 :Qu'est-ce qu'il faudrait faire en premier lieu à votre avis ?Vérifier que le tuple B, A se trouve dans la liste.Alors là, on part du principe que les valeurs qui sont interrogées sont fatalement dans la liste.
00:16:18 :Oui.Je ne sais pas du tout.Alors, vous allez comprendre mieux pourquoi je vous ai fait mon petit tour de passe-passe tout à l'heure.La première étape dans cet exercice, c'est de transformer cette liste de tuples en un dictionnaire.
00:16:40 :D'où ma relation, mon histoire de dictionnaire tout à l'heure pour vous amener sur cette réflexion dictionnaire.Donc, on va créer notre dictionnaire.Alors, on va l'appeler DicAncestor.
00:16:58 :Allez, on va l'appeler comme ça, peu importe.On va faire une liste de dictionnaire.Comment on va faire notre coup ?Alors, on va créer notre liste.
00:17:14 :Alors, on claque.Et on va dire que...Hop là !On va prendre notre clé Children, pour enfant.Pour an.Et là, on va boucler.
00:17:34 :On nous a dit que, en premier, c'était les parents.Ensuite, c'est l'enfant.Voilà.Donc là, sauf erreur de ma part, on a créé notre liste de dictionnaire.
00:17:58 :J'ai fait une erreur de ça.Une copie, oui.Oui, je viens de l'avoir.Sinon, c'est Child.Enfin bon, c'est pas grave.Ouais.On s'en fout.
00:18:09 :Voilà.Hop !Voilà.OK.Alors, le problème, c'est que là, on part du principe que l'enfant et le parent qui nous sont passés en A et en Bseront forcément dans le même tuple.
00:18:32 :D'accord ?Je pense que c'est ce que tout le monde a plus ou moins imaginé.Sauf que...Alors là, je vais reprendre mon graphe.Donc là, on reprend le graphe ici.
00:18:46 :Si on veut savoir si 5 est l'ancêtre de 9,la réponse est forcément oui.D'accord ?Sauf que dans les tuples, on va avoir un tuple 5-11 et un tuple 11-9.
00:19:05 :D'accord ?Est-ce que c'est clair pour tout le monde, ça ?Oui.Oui.Donc, il y a un chaînage.C'est une liste de chaînés, quoi.
00:19:17 :Voilà.Donc...Alors, attendez.Je me suis trompé sur un détail.Voilà, c'est une liste de dictionnaires avec une compréhension dictionnaire.Hop !C'est là.Hop là, voilà.
00:19:30 :Voilà.Ah oui, donc là, ce n'est pas une liste, alors.C'est un dictionnaire.C'est autant pour moi.Alors là, attends, c'est quoi ?Donc, c'est un dictionnaire qui a comme...
00:19:41 :En fait, on va...Enfant...Ah oui, d'accord.Voilà.Mais ça ne va pas planter, ça ?Alors non, parce que chacun...Un enfant a plusieurs parents.
00:19:52 :Alors, dans le concept du truc, on a la liste.On parle d'enfant et de parent.Mais il y aura toujours un enfant et un parent.
00:20:02 :Un enfant unique pour un parent.Je vais vous reprendre le graphe.Hop !Vous voyez, il n'y a pas deux chiffres qui sont identiques.Non, mais attends, le 8, tu es d'accord ?
00:20:14 :Il a deux parents, quoi, le 8 ?Le 8, il a deux parents ?Oui.Oui, dans ce cas-là, oui.Mais normalement, dans les graphes acycliques,vous n'aurez pas de relations doubles comme ça.
00:20:26 :C'est le cas de cet exercice-là.Si on prend la liste qui est ici, regardez.Vous voyez ?Vous avez bien des valeurs uniques en termes d'enfants.
00:20:39 :Vous n'avez pas de doublons sur les enfants.Ah, tu veux dire qu'un enfant...Si, un 3 et un 4, ça veut bien dire que le 1 a deux parents, c'est bien ça ?
00:20:49 :Oui.Mais là, on prend comme clé les enfants.Là, le 5, il apparaît qu'une fois.Le 5 qui est ici.Ah oui, c'est l'enfant.Il n'apparaît qu'une fois.
00:21:02 :Le 8, il n'apparaît qu'une fois.Le 2, pareil.Le 3, pareil.Le 6, et ainsi de suite.Donc, ce que je veux dire, c'est qu'un parent n'a qu'un enfant ?
00:21:15 :Un parent peut avoir plusieurs enfants différents.Alors, je vais essayer de vous trouver un exemple dans cette liste.Le 0, par exemple, il est parent de 2 et parent de 1.
00:21:25 :D'accord ?Oui.Mais 1 n'est l'enfant que de 0.Donc, c'est pour ça que dans cet exercice-là, on part en clé sur les enfantsqui renvoient vers des parents.
00:21:42 :Je vais faire ça pour que ça vous semble plus clair et que vous le voyez visuellement.Oui.Un petit instant.Je vais le passer en service wall.
00:21:57 :Hop là.Juste un petit instant de préparer ça.Hop là.Clac.Clac.Voilà.Je vais mettre une coquille au vol.Voilà.Oula.Oula.Oula.Calme-toi, Jelly Jumper, ça vient se passer.
00:22:29 :Voilà.Je vais vous basculer sur visual.Clac.Il est complexe cet exercice-là.Voilà.C'est bon ?Vous voyez bien ?Oui, oui.Donc là, j'ai bien repris la ligne.
00:22:51 :J'ai bien repris la liste qui est donnée dans l'exercice.D'accord ?Et j'ai repris ma boucle de dictionnaire.Excuse-moi d'assister.Le child 8, pour moi, il a deux parents.
00:23:05 :Donc je ne vois pas.Le child 8 qui est là, là ?Oui.Ah.Ah ben non.Attends, ce n'est pas le même que ce qu'on avait au début.
00:23:16 :Ce n'est pas le même que ce qu'on avait au début.Ceux qui ont noté, est-ce que vous pouvez me confirmer ?Moi, je vois.Dans l'autre, il y avait plusieurs parents.
00:23:26 :Plusieurs enfants, plusieurs parents.Dans l'autre, ce que tu nous as montré, le premier graphe avec les boules,il y avait bien le 7-8 et le 3-8.
00:23:34 :Oui, oui.Exactement.Exactement.L'autre, il était là juste pour vous montrer un petit peu la représentation graphique,pour que vous vous matérialisez un peu à quoi ressemblait cette liste.
00:23:45 :Oui, mais comment dire ?Avec cet exemple-là, 3-8, 7-8, ton dictionnaire, il explose, là ?Ah oui, oui.Oui, oui.L'exemple que je vous ai montré, c'est juste pour que vous vous représentiez graphiquement l'histoire.
00:23:58 :Ah oui, mais ça change.Ah oui, d'accord.Voilà.Excuse-moi, je n'ai pas été très clair, pardon.Oui, Baptiste, qu'est-ce que tu...C'était pour Pascal.Si tu veux visualiser l'exercice qui est sur Doctrine,l'exemple que j'ai envoyé permet de générer le graphe avec les bulles,comme on a sur l'exemple que présente Stéphane depuis tout à l'heure.
00:24:19 :D'accord.Voilà.Autant pour moi, je n'avais pas été très clair,mais les bulles et la liste que je vous ai montré au début,c'était juste pour vous permettre de visualiser la relationqu'il y avait entre cette fameuse liste et ce graphique.
00:24:32 :Ah oui, donc c'est peut-être ça qu'on appelle justement le graphe acyclique.Enfin, je ne sais pas si c'est ça, mais non, ce n'est pas ça.
00:24:40 :Mais est-ce que l'énoncé précise bien ?Est-ce qu'on arrive à voir quelque part dans l'énoncéqu'un enfant n'a pas de parents ?Sinon, tout est faux, quoi.
00:24:48 :Sinon, ça ne passe pas.Excusez-moi, il y en a un qui n'est pas d'accord avec vous.Hé !Tant pis.Tu te taies.Alors, si vous regardez bien la liste qui est fournie,celle que je viens de vous mettre là dans le visuel pseudocode,elle vous permet de le voir, parce que là, il faut bien partir.
00:25:11 :Comme donné, quand vous avez cet exercice-là,le premier chiffre, c'est le parent, le deuxième, c'est l'enfant.D'accord ?Hum.Et comme les enfants sont tous forcément uniques,contrairement aux parents,parce que par exemple, pour moi, il y a le 0 qui apparaît plusieurs fois,le 1 qui apparaît plusieurs fois, je ne sais pas.
00:25:29 :Ah oui, donc là, oui, il se permet de faire un dictionnaire.Voilà.Donc, je vais vous afficher ce fameux dictionnaire.Et là, vous voyez, je n'ai pas d'erreur.
00:25:40 :Et on se retrouve bien avec des clés uniques pour le dictionnaire.Est-ce que cet aspect-là, c'est bon pour vous ?Est-ce que c'est suffisamment éclairci ?
00:25:55 :N'hésitez pas.Le but, justement, c'est que vous posiez le maximum de questions sur cet exercicepour que vous l'appropriiez au mieux.Je suis un peu têtu, là, mais un grapha cyclique, ce n'est pas ça.
00:26:09 :Un fils qui a plusieurs parents, ça pourrait être dans l'exercice, quoi.Oui, ça pourrait.Et donc, ça ne se réglerait pas pareil, quoi.Voilà, ça ne se réglerait pas pareil.
00:26:23 :Là, c'est vraiment, on va dire, un exercice type.Le but de cet exercice, c'est vraiment de vous amener sur le terrain.Le but de cet exercice, c'est vraiment de vous amener sur une réflexion, justement,pour manipuler de la donnée.
00:26:36 :Là, si on voulait faire une application purement pratique dans Python,on serait clairement sur tout ce qui est Data Science avec Python.Parce qu'en fait, là, c'est presque un cas particulier.
00:26:49 :Voilà.Oui, exactement.C'est un cas particulier.Du coup, la règle du dictionnaire s'applique.Voilà.Le principe de cet exercice-là, c'est vraiment d'amener tout un chacunde réfléchir avec des méthodologies de Data Science en Python.
00:27:11 :D'accord ?Parce que si Python est beaucoup utilisé pour la Data Science,ce n'est pas un hasard.C'est bien parce que c'est un langage qui s'y prête très bien.
00:27:19 :OK ?D'accord.Le but de cet exercice, c'est de vous pencherà une petite réflexion de type Data Science avec Pythonet de vous dire comment je vais résoudre ce problème.
00:27:34 :C'est OK pour tout le monde ?Oui.Merci, Baptiste, pour le lien.Après, si vous tombez là-dessus, Thosa,avec tout ce qu'on avait touché aujourd'hui,n'hésitez pas à revenir dessus quand on aura fini.
00:27:49 :Moi, je vous garantis que derrière, après, ça va être assez simple.D'accord ?On rebascule sur l'exercice.Voilà.Donc, maintenant, on a fait notre dictionnaire.
00:28:08 :OK ?Le but, comme je vous l'ai dit tout à l'heure,je reviens sur mon graphe acyclique qui ne sert que d'imagerie.Si, par exemple, je voulais savoir si 5 était l'ancêtre de 9,je ne vais pas le trouver dans la première clé du dictionnaire.
00:28:24 :Je ne vais pas trouver une clé du dictionnaire qui me ditla clé 9 a pour valeur 5.On est bien d'accord ?Il va falloir d'abord que je trouve la clé 9 quelle valeur elle aet la valeur de la clé de 11, donc la valeur de 9,
00:28:37 :voir si elle existe comme cléet si elle a effectivement une... quelle valeur elle a.D'accord ?Donc, on part de notre premier enfant, qui est A.
00:28:51 :Donc, on va créer une variable qui s'appelleCureChild,qui est égale à A.OK ?Si il y a une question, allez-y.Non, c'est bon ?
00:29:10 :Je suis curieux de voir la suite.Alors,tant que notre CureChild existe dans le dictionnaire,c'est une...Si le CureChild existe dans le dictionnaire,ce que je viens d'écrire, c'est vrai.
00:29:32 :On est d'accord ?Par contre, si le CureChild,il n'y a aucune clé qui correspond à la valeur de CureChilddans le dictionnaire,on est sur un false, on arrête la boucle.
00:29:42 :Tout va bien ?Vous êtes impatient de voir la suite ?Oui.Alors, qu'est-ce qu'on va faire ?On va tout simplement donner à la valeur de CureChild.
00:30:02 :On aura peut-être pas dû l'appeler comme ça, c'est pas grave.Qu'est-ce qu'on va faire ?Eh bien, on va aller chercher, tout simplement,la clé.
00:30:13 :Donc, la valeur de la clé.Là, si je fais ça...CureChild, c'est un enfant ?Dans ton dictionnaire, c'est un enfant, le CureChild ?Voilà.
00:30:36 :C'est une clé.C'est une clé, donc c'est un enfant.Non, c'est un enfant.Non, c'est un enfant.Regarde les clés, là.Child, c'est ma clé.
00:30:44 :Parent, c'est ma valeur.Oui, oui, OK.OK ?Donc là, ce que je fais,c'est que, à CureChild, je vais lui donner comme valeurla valeur qui correspond à la clé A dans le dictionnaire.
00:31:01 :Donc, je vais reprendre mon graphe pour que ce soit plus clair.Admettons que mon CureChild, c'est à pour valeur 9.D'accord ?Ça veut dire que dans mon dictionnaire,j'ai forcément une clé 9 qui a pour valeur 11.
00:31:15 :Donc, je vais chercher la valeur de la clé 9 dans le dictionnaire.Ça va me retourner 11.C'est bon pour tout le monde ?OK, oui.
00:31:26 :Et donc, cette valeur, je l'attribue à CureChild.D'accord ?On va continuer un peu.Si CureChild est égale à B,donc B, je le rappelle,c'est l'ancêtre qu'on recherche.
00:31:48 :D'accord ?On veut savoir si B est l'ancêtre de A.D'accord ?Donc là, si quand j'ai basculé dans mon dictionnaire,je bascule sur mon graphe,parce que c'est vrai qu'avec le graphe, c'est plus clair.
00:32:00 :Si quand je vais chercher ma clé 9,si B a pour valeur 11,là, quand je vais chercher dans le dictionnaire la valeur de la clé 9,forcément, ça serait égal à 11.
00:32:11 :D'accord ?Donc, ça voudrait dire qu'on avait recherchépour savoir si 11 était le parent de 9.Donc, on l'a trouvé.Donc, qu'est-ce qu'on va faire ?
00:32:21 :Tout simplement,on renvoie Coup,Coup, comme il nous est demandé dans l'exercice.Ok ?Si ce n'est pas le cas,qu'est-ce qui va se passer ?
00:32:36 :Notre boucle va continuer.On reprend notre valeur,on vérifie si elle existe dans le dictionnaire.Si elle existe dans le dictionnaire,on va chercher quelle est sa valeur,et on compare, et ainsi de suite,jusqu'à ce qu'on arrive à trouversoit une valeur de B,soit que l'on tombe sur une valeur pour Kershide
00:32:58 :qui ne correspond à aucune clé dans le dictionnaire.D'accord ?Dans ce cas-là,à quelle conclusion on est arrivé ?C'est que B n'est pas l'ancêtre de A.
00:33:11 :Donc, on va sortir de notre boucle,et comme demandé dans l'exercice,on retourne False.Ok ?Et là, on vient de résoudre le graphe acyclique.
00:33:27 :Je vais exécuter.Voilà.On va reprendre.On va considérer que...Je vais le faire dans Visual Studio Codeparce que ce sera un peu plus...
00:33:45 :Je vais le mettre comme ça.On va considérer que...A est égal à 9,et B est égal à 5.D'accord ?Donc, là, on va créer notre dictionnaire.
00:34:08 :Celui que ça revient à la liste qu'on avait vue tout à l'heure,mais on ne va pas rentrer dans le détail de la validité du dictionnaire.
00:34:15 :On va considérer que tout marche bien et que ça va comme il faut.Là, la valeur de Kershide, ça va être 9.D'accord ?Maintenant, on va considérer que Kershide,donc ça s'avoit 9,correspond bien à une des clés du dictionnaire.
00:34:36 :Je reprends mon graphe qui est ici.Oui, on sait que comme il y a une flèche qui va vers 9,c'est bien une clé du dictionnaire.
00:34:44 :Donc, on va donner à Kershidela valeur qui correspond à cette clé du dictionnaire dans le dictionnaire.D'accord ?Et cette valeur, dans le graphe, on a vu que c'était 11.
00:34:58 :D'accord ?Maintenant, on va comparer la valeur de Kershide à B.Kershide, à cet instant-là, est égal à 11.B est égal à 5.Donc, c'est différent, manifestement.
00:35:17 :On continue la boucle.Donc, on a dit que notre Kershide était égal à,non plus à A maintenant, mais à 11.D'accord ?Donc, notre clé, elle existe dans le dictionnaire.
00:35:44 :Tout va bien.On va rechercher la valeur de la clé du consistant 11.D'accord ?On reprend le graphe.C'est égal à 5.Ok ?
00:35:55 :Donc là, maintenant, Kershide, notre valeur Kershide,reprend valeur 5.Donc, qu'est-ce qu'il se passe ?Kershide est égal à 5.B est égal à 5.
00:36:07 :Donc, ça renvoie tout.Fin de l'exercice.Ok ?Je vais vous refaire ça, mais avec deux valeurs différentes.Ce coup-ci.Où ça ne marche pas.
00:36:20 :Alors, on va dire 5 et, de mémoire, je crois qu'il y a un 8.Voilà.Donc, on va chercher cette fois à savoirsi 8 est l'ancêtre de...
00:36:38 :si 8 est l'ancêtre de 5.D'accord ?Alors, je ne vais pas prendre 5 parce que ça va échapper le playing.On va dire 10.
00:36:46 :Voilà.On va chercher à savoir si...Moi aussi, je m'en sors du père.Voilà.Si 10 est l'ancêtre de 8.D'accord ?Donc là, la valeur de Kershide est égale à 8.
00:37:06 :Ok ?La clé existe dans le dictionnaire.On va chercher sa valeur.On regarde dans le graphe.8, son ancêtre, c'est 7.D'accord ?Donc, à ce moment-là, Kershide est égal à 7.
00:37:25 :Je ne vous fais pas la fronde et réécrire toutes les valeurs.Kershide est égal à 7.B est égal à 10.L'égalité ne fonctionne pas.
00:37:35 :Donc, on retourne.Et là, on va aller voir si Kershide, qui est maintenant égal à 7,existe comme clé dans le dictionnaire.Et là, si on regarde notre graphe, on voit que 7, c'est l'enfant de personne.
00:37:53 :Donc, du coup, il n'y a forcément pas la clé 7 dans le dictionnaire.Pour le contre, pour le coup, ça, c'est égal à fausse.Du coup, on sort de notre boucle wild et on renvoie la valeur false.
00:38:09 :Donc, notre fonction nous dit bien que 10 n'est pas l'ancêtre de 8.Et si on regarde à nouveau le graphe physique, effectivement,on voit bien que 10 et 8 n'ont même, pour ainsi dire, aucune relation.
00:38:23 :Est-ce que ça vous semble un peu plus clair ?Oui.J'allais vous demander si c'est moi qui étais toujours làou si ma connexion s'était perdue comme la dernière fois.
00:38:42 :Oui.Est-ce que l'exercice semble plus clair à tout le monde ?N'hésitez pas, s'il y a des questions.Je participe sur le truc.Ce qui est perturbant dans l'énoncé, c'est qu'on parle de graphe acyclique.
00:38:59 :Voilà.Et que dans un graphe acyclique, un enfant peut avoir plusieurs parents.Exactement.Et dans ce cas-là, ça ne marcherait pas.Donc, l'énoncé n'est pas qu'un graphe acyclique,c'est un graphe acyclique particulier.
00:39:15 :Voilà.Et ça, ce n'est pas indiqué dans l'énoncé, dans la présupposée.Voilà.Et c'est là qu'est tout le piège dans cet exercice, en fait.C'est qu'on vous parle de graphe acyclique.
00:39:28 :Alors, oui, c'est, on va dire, un graphe acyclique particulier.Voilà.Voilà.C'est une exception qui confirme la règle, si on va jusqu'au bout de la définition.
00:39:40 :Et c'est justement ça qui est perturbant, parce qu'en fait, en plus,alors, je ne veux pas dire de bêtises,je ne sais plus si vous avez l'exemple imagé comme ça dans le tauseur.
00:39:52 :J'ai un méchant doute.Mais, enfin, passons.Mais, en tout état de cause,lorsqu'on vous affrontait à ces exercices-là pour la première fois,on vous renvoie vers cette image,parce que c'est une des rares images qui existent comme ça de graphe acyclique,qui est disponible, on va dire, assez facilement.
00:40:13 :Et du coup, ça vous envahit complètement les pinceaux.Ah oui, mais l'image, elle est fausse, par rapport à l'ancien.Elle est fausse.Et là, vous insistez de bien reprendre.
00:40:25 :Et je pense que c'est la chose la plus importante qu'il faut retenir de cet exercice,outre le code.Vous voyez, le code, finalement, il est quand même...
00:40:36 :Quand on commence à voir les mots graphe acyclique, il y a...Non, non, attends Stéphane, ça y est, je viens de trouver.C'est la phrase qui est en bas, là.
00:40:45 :Le graphe est garanti être un arbre ou une forêt.Chaque sommet a au plus un arc entrant.C'est ça qui garantit qu'un fils n'a qu'un père, n'a qu'un parent.
00:40:54 :Vous voyez, voilà, c'est cette phrase-là.Voilà, c'est cette phrase-là.Là, d'accord.Là, je suis OK.C'est un graphe acyclique qui est un arbre.Voilà.Ou une forêt, oui.
00:41:05 :Et donc, comme je vous le disais, le code en soi, il est extrêmement simple.Je ne sais pas si parmi vous, il y en a qui voient une grande difficulté,mais globalement, c'est un code qui reste simple.
00:41:18 :Vous voyez, il y a à peine 10 lignes, quoi.C'est un peu récursif, en fait, parce qu'on fait « cure child »quelque chose de « cure child ».
00:41:27 :Voilà.Exactement, c'est du récursif.Vous voyez, si on commence à faire des chaînes très très longues,ça peut être très vite redoutable comme code et très efficace.
00:41:41 :Encore une fois de plus, un exemple des possibilités de pitons, quoi.Donc, ce qu'il faut surtout retenir sur cet exercice-là,hormis le code que je disais, c'est justement...
00:41:58 :Et ça, c'est le piège dans lequel vous allez tomber dans beaucoup,beaucoup de questions face au Toza.Ça me fait penser à l'exercice du bateau où je me suis fait complètement avoiret en fin de compte, j'aurais bien un verre d'eau et j'aurais souffléet lu l'énoncé correctement, j'aurais compris.
00:42:15 :C'est bien lire l'énoncé et décortiquer bien chaque phrase.Prenez bien chaque élément, prenez bien le temps de comprendre la phraseet de comprendre comment fonctionne le truc.
00:42:27 :Et c'est comme ça que vous allez être le plus efficace, en fait.Mais par rapport à notre discussion qu'on avait juste avant de commencer,Pascal, tu vois, le truc, c'est pas tellement de savoir quelque chose par cœur, en fait.
00:42:43 :C'est de comprendre comment traduire, en fait, ce qui est écrit en bon français à côté,de traduire en code Python, en fait.C'est là que réside le plus gros de la difficulté.
00:42:53 :En l'occurrence, là, il faut avoir déjà été confronté à des graphes.Quelqu'un qui n'aurait pas fait de graphes, il ne sait pas ce que ça veut dire acyclique,il ne sait pas ce que c'est qu'un arbre.
00:43:07 :Ah oui, c'est sûr.C'est mon cas.C'est mon cas.C'est mon cas.Oui, voilà.Et ça ne peut pas s'inventer en 8 minutes.Tu ne peux pas intégrer ça, quoi.
00:43:20 :Non, mais c'est sûr.C'est pour ça.C'est là où ça me dépasse.Ce n'est pas du Python, c'est de l'algo avec, en plus, une culture à part.
00:43:28 :Bon, peut-être.Se faire rétamer là-dessus, je trouve ça bizarre, quoi.Que je ne sais pas faire un datetime.Ok, je ne sais pas faire un datetime.
00:43:36 :Que je ne sache pas faire ça, je ne vois pas le problème, quoi.Alors, je pense qu'il faut faire surtout abstraction du côté graphique acyclique.
00:43:45 :D'accord ?Il faut en faire complètement abstraction.Là, l'idée de cet exercice-là, comme je vous l'ai dit,c'est déjà de réfléchir un peu en mode Data Science Python.
00:43:55 :Ok ?C'est un premier point.Mais c'est surtout d'être capable de retraduire quelque choseauquel, comme tu l'as dit, J.C., à la base, vous n'y connaissez rien.
00:44:07 :Vous n'êtes pas tous...Tout le monde n'est pas censé savoir ce que c'est qu'un graphe orienté acyclique.Pour ne pas vous mentir, j'ai découvert ce que c'était un graphe orienté acycliqueavec cet exercice.
00:44:19 :D'accord ?Mais l'idée, c'est vraiment d'être capable,d'être confronté face à n'importe quelle situationet d'être capable de la résoudre avec du Python.C'est plus cet aspect-là qui est intéressant dans l'exercice, en fait.
00:44:35 :Oui, mais il y a un peu de fonctionnel.Enfin, il faut quand même piger les cycles, l'histoire des graphes.Là, par exemple, effectivement, si par exemple le graphe n'était pas acyclique,s'il était cyclique, ton script, là, il boucle à l'infini.
00:44:52 :Ah oui ?Vous êtes d'accord ?Ah oui, on est d'accord.Oui, voilà.Donc, il faut quand même réfléchir à tout ça.Il faut quand même bien comprendre la notion d'acyclique, je pense.
00:45:05 :C'est pas que du Python.C'est pas comme on vient de dire, c'est pas que du Python.Enfin, il faut avoir une couche au-dessus, quoi.Oui, mais c'est sûr que le contexte a son importance.
00:45:16 :Maintenant, je vous dis, moi, ce qui est vraiment important à retenir dans cet exercice,c'est d'être capable de traduire plus ou moins n'importe quoi en Python.
00:45:23 :C'est ça, vraiment, l'intérêt de cet exercice derrière.Voilà.Et je vous invite très clairement à refaire cet exercice en redécortiquant l'énoncé,comme on l'a fait ensemble, histoire de bien vous approprier le raisonnement.
00:45:41 :Dans l'exercice du grapha-cyclique, il y a deux solutions pour le résoudre le jour du taux d'or.C'est approprier ce raisonnement ou apprendre le code par cœur.
00:45:53 :La deuxième solution peut marcher.Maintenant, attention aux trous de mémoire le jour J, quoi.Oui, il suffit qu'il y ait une petite variante.Le code par cœur, il ne marche plus, quoi.
00:46:05 :Voilà.Acquérir un raisonnement, c'est beaucoup plus pérenne dans le long termeque d'apprendre quelque chose par cœur.Donc là, ce qu'il faut retenir dans l'exercice, c'est qu'il fallait inverser parents-enfants, déjà.
00:46:21 :Enfin, pas inverser, mais comment dire.On nous donne la fonction, elle part de enfants-parents,et il faut transformer ça, le AB, il faut le mettre en BA, quoi.
00:46:35 :Voilà.Alors, la clé principale, c'est d'être capable de faire abstraction de certaines variantes.C'est-à-dire que là, par exemple, la variable B correspond à la variable X,et la variable A correspond à la variable Y.
00:46:54 :Quand vous avez des exercices comme ça, qui commencent un petit peu à mélanger les valeurs,et où vous comprenez qu'effectivement B, c'est X et A, c'est Y,vous commencez déjà à remplacer ça.
00:47:07 :Soit vous ne marchez qu'avec des X et des Y, soit vous ne marchez qu'avec des B et des A,mais vous essayez d'harmoniser tout ça.
00:47:13 :Ça va grandement vous aider dans la compréhension de l'exercice.Et derrière, vous allez beaucoup moins vous mélanger les pinceaux,comme on fait pour les autres problèmes.
00:47:22 :Autre point qu'il faut faire abstraction, là, vous avez une valeur chiffrée, un premier exemple.On vous donne ce que doit retourner l'exemple avec la fonction que vous devez écrire.
00:47:35 :Ici, vous savez que 1, c'est un enfant.Pour que ça soit vrai, il faut que l'enfant soit au milieu.Donc là, si vous avez déterminé que vos A, c'était des enfants,vous savez que vous allez mettre A ici.
00:47:48 :Et ici, vous allez mettre B.Et là, déjà, vous savez déterminer les B, c'est des parents, les A, c'est des enfants.Et je travaille plus que comme ça.
00:48:00 :Les B, parents, les A, enfants.Au moment de commencer à écrire votre code, voyez, c'est ce que j'ai fait là.J'ai repris mes A et mes B, complètement.
00:48:12 :Et après, j'ai travaillé avec mes A et mes B.J'ai juste utilisé les termes enfants, parents, pour remettre mon dictionnaire dans l'ordre où je le voulais.
00:48:24 :C'est le seul moment où, techniquement, je retraite mes variables comme des valeurs parents et enfants.Derrière, c'est un A, un B, un A, un B.
00:48:34 :Je cherche si le A est égal à B, et ainsi de suite.Il faut essayer d'harmoniser un maximum vos variables,de sorte à ce que vous, dans votre esprit, ça soit le plus clair possible.
00:48:47 :Et ça, vous le retrouverez, alors on va aller un peu plus loin,vous le retrouvez dans beaucoup de scripts de programmation un peu plus complexes,où tout le monde fait l'erreur.
00:49:01 :Vous allez commencer à rentrer dans un développement de script un peu poussé,et quasiment à chaque fonction, vous allez renommer différentes variables.Mais vous allez vous rendre compte, au bout d'un moment,quels exemples je pourrais prendre.
00:49:19 :Par exemple, prenez...Imaginons que vous utilisez des variables nom et prénom.Un coup, vous allez mettre nom et prénom, un coup vous allez mettre last name, first name,un coup vous allez mettre patronyme principal, patronyme familial,toutes les variantes que l'on peut imaginer.
00:49:41 :Mais au bout du compte, tout au long de votre programme,vous aurez traité des noms et des prénoms.Mais ces noms et ces prénoms auront les mêmes valeurs,sauf qu'un coup, la valeur, vous allez la mettre dans la variable prénom,un coup vous allez la mettre dans la variable last name, et ainsi de suite.
00:49:57 :Et bien ça, c'est le genre de choses qu'il faut absolument éviter.Si vous savez, même si à l'instant T, ce n'est pas la même valeur qu'aura cette variable,mais que vous traitez d'un prénom, au travers de différentes fonctions,et bien au travers de vos différentes fonctions,il faut que cette variable qui va correspondre à un prénom,
00:50:15 :quel que soit le cas d'usage, s'appelle par exemple prénom.Savez-vous, ça va vous aider à vous retrouver dans votre scriptet savoir un petit peu qu'est-ce que vous traitez comme type de données à ce moment-là.
00:50:27 :Et ça va vous paraître beaucoup plus clair.Là, l'autre difficulté que vous avez aussi dans cet exercice-là, c'est ça.C'est ce mélange des genres, ce mélange des variables,on ne sait plus qui est qui et vous perdez un temps fou,rien qu'à essayer de comprendre qui fait quoi.
00:50:46 :Oui, il y a un autre élément auquel il fallait penser, je pense,c'est qu'un arc, ça se matérialise par un dictionnaire.Ça aussi.Voilà, spontanément, on ne pense pas au dictionnaire, c'est pour ça.
00:51:03 :C'est pour ça que je vous ai amené avec le premier truc,pour vous faciliter un peu la compréhension de l'exercice,à essayer de vous visualiser cette fameuse liste comme une sorte de dictionnaire.
00:51:13 :Ce n'est pas exact, ce n'est pas vrai.Quand je dis que c'est un dictionnaire, je raconte une grosse bêtise,on est bien d'accord, mais l'idée, c'est de vous amener à raisonner,vous dire qu'il faut faire un dictionnaire.
00:51:24 :Je vais vous prendre un exercice que je corrige très souvent.Non, ce n'est pas une bêtise.Excuse-moi, partant du fait que c'est un graphe acyclique,le dictionnaire, c'est pertinent dans ce cas-là.
00:51:36 :Non, ce n'est pas une bêtise.C'est la base de ton script, d'ailleurs.C'est une bêtise parce que c'est une liste de peuples.Oui, mais qu'on transforme en dictionnaire.
00:51:47 :On va transformer en dictionnaire.L'autre exemple pour vous dire que le dictionnaire,c'est quelque chose qui marche très, très bien en Pythonet qui permet justement d'amener beaucoup de choses.
00:51:57 :Un exercice que je corrige souvent, je ne sais pas si certains d'entre vous l'ont fait,c'est le tri des fichiers.Est-ce que vous avez tous eu l'occasion de le faire ?
00:52:08 :Oui.Typiquement, c'est un exerciceoù pour trouver la solution la plus simple à l'exercice,il faut commencer par passer par un dictionnaire.Vous verrez qu'en Python, les dictionnaires, c'est extrêmement utile,efficace, puisque vous avez des temps d'exécutionqui sont quand même assez courts pour trouver une valeur,puisque comme les clés sont uniques, H unique,
00:52:36 :du coup c'est beaucoup plus rapide à trouver.Et quand vous devez manipuler des gros volumes de données,quand c'est possible, parce que des fois la forme de la data ne permet pas,mais quand c'est possible, préférez toujours, toujours le dictionnaire.
00:52:51 :Vous ne serez jamais perdant avec un dictionnaire.C'est pour ça que je vous avais amené sur ce truc-là.On part sur un dictionnaire, on a des clés uniques,tant mieux, on va en profiter, ça nous permet de boucleret de trouver très rapidement qui est quiet de faire une chaîne qui existe dans ce graphe semi-acyclique,
00:53:16 :puisqu'il n'est pas tout à fait acyclique,pour résoudre le problème.Voilà, voilà, c'est bon pour tout le monde ?Ça marche.Est-ce que ça vous paraît plus clair ?
00:53:34 :Oui, oui, il faut apprendre le truc.Alors reprenez-le.Parce que ça c'est typiquement un exercice,si vous ne l'avez pas fait deux ou trois fois par vous-même,en vous mettant dans les conditions,sans avoir aucune annotation à côté, et ainsi de suite,et juste en essayant de reproduire le raisonnement,
00:53:54 :si vous ne l'avez pas fait deux ou trois fois par vous-même,en reproduisant le raisonnement,si vous tombez dessus au jour J, ça va être compliqué.
00:54:03 :Mais si on est au TAUSA, c'est une variante de ça,ou c'est vraiment celui-ci ?De mémoire, il est quasi identique.Comment dire ? On reste sur un arbre ?
00:54:15 :Voilà.Pas les mêmes valeurs, évidemment, mais ça reste sur la même structure.Le même principe, oui.Tant qu'on y est, est-ce que vous avez des questions sur le TAUSA,autre que le graphe acrylique,qui vous a bien fait mal à la tête ce soir ?
00:54:40 :J'avais une question, mais plus d'ordre général.Est-ce qu'il existe un outil qui ressemblerait à la commande trisous Linux, ou que tu dois avoir sur Mac aussi,qui dessine une arborescence de dossier ?
00:55:01 :Tu la vois, cette commande ?Oui. Sur Python ?L'idée, ce serait d'avoir un outil qui permettrait de tracer,quand on découvre une application,de tracer telle fonction utilise telle librairie et telle méthode.
00:55:25 :Et les imbrications de dessiner, les imbrications de fonctions,des choses comme ça.Tu vois ce que je veux dire ?Comme si on devait dessiner, pour revenir dans le thème des graphes,comme si on devait dessiner...
00:55:41 :Par exemple, pour un module ou autre ?Oui, les appels, les liens qu'il pourrait y avoir.Par exemple, le main va appeler la fonction que tu viens d'écrire.
00:55:56 :Imaginons que dans la fonction que tu viens d'écrire, tu utilises du JSON.Donc depuis le main, on verrait IsAssessor et un lien vers JSON.Est-ce que ça existe, un outil comme ça ?
00:56:14 :Pas à ma connaissance.D'accord.Je ne suis pas sûr que ça existe, je n'en ai jamais entendu parler.Maintenant, je ne pense pas que quelqu'un soit pris la tête là-dessus.
00:56:28 :Après, ça peut être l'objet d'un défi pour toi, j'y sais.Parce que pour la bonne et simple raison qu'aujourd'hui...Bonne nuit, Christophe.La plupart des IDE vont te proposer ça d'eux-mêmes.
00:56:48 :Donc je ne pense pas que quelqu'un soit amusé à programmer ça,dans le sens où ça viendrait un peu en doublon de ce que proposent 99% des IDE aujourd'hui.
00:56:58 :Dans PaintSharp Pro, on retrouve ça, quelque part ?Déjà, soit par l'autocompression, il va te le proposer.Ah oui, d'accord.Et par le contrôle B, tu pourras pouvoir aller voir un petit peu les définitions.
00:57:13 :Oui, d'accord.Oui, je suis d'accord.Donc, du coup, je ne suis pas sûr qu'il existe un outil qui ressemble à ce que tu décris,dans le sens où c'est déjà pas mal implémenté dans les IDE.
00:57:30 :Oui, l'idée, c'est de faire un complément à une documentation, par exemple.Je vois ce que tu veux dire.Faire un genre de graphe, un peu comme tu l'as retrouvé.
00:57:43 :Attends, je vais essayer de te trouver ça, rapidement.Il me semblait que sur le Channel Toza, il y avait eu un truc comme ça,qui permettait de faire la pile d'exécution en debug sur VS Code.
00:58:01 :Peut-être, oui.Après, j'ai pas entendu parler de...Je vais essayer de trouver un truc.Ah, ils ont changé leur...Tu vois, je pense qu'ils ont changé la présentation.
00:58:31 :Typiquement, ce que tu me dis dans la définition de Qt,t'avais à chaque fois des carrés avec des flèches,pour savoir de quoi Qt est hérité,et qu'est-ce qui est hérité de, par exemple, Qt Widget.
00:58:50 :Oui, très bien. C'est les deux, effectivement.Je sais pas si c'est Pierre qui parlait ou Baptiste.J'ai pas fait gaffe.C'est Baptiste.Je sais pas si tu retrouves le lien dans le Discord,si tu peux le retransférer.
00:59:06 :Oui, bien sûr, je suis en train de le chercher.Voilà.Retransfère le mot aussi, je suis preneur,parce que je suis toujours curieux de découvrir des choses,et j'ai dû passer à côté quand ça a été posté.
00:59:15 :Et je pense que le fait que c'est des fonctionnalitésqui quelque part existent,pas sous la forme que tu le dis,mais d'une manière assez intuitive dans les IDE,c'est pas très courant.
00:59:30 :Est-ce qu'il y a d'autres questions ?C'était celui-ci.Je vous copie-colle le lien vers le Discord.Ouais.Oui, ça correspond.Voilà.Ouais, ben ouais, tu vois.
Aucune occurrence trouvée pour « ».
00:00:00
Introduction et contexte de l'exercice TOSA sur les graphes acycliques
00:02:07
Présentation de l'énoncé et représentation du graphe (liste de tuples)
00:10:27
Présentation de la fonction is_ancestor et définition des paramètres (parent/enfant)
00:15:09
Développement de la fonction is_ancestor
00:28:08
Parcours du dictionnaire pour vérifier l’ancêtre (exécution et validation du code)
00:42:00
Synthèse des concepts et conseils pour décortiquer l’énoncé et raisonner en Python
00:56:00
Discussion complémentaire, échanges sur les bonnes pratiques et clôture de la session