Merci, peur de ne pas arriver jusqu'au bout des len(videos) :-D car il faut que je les enumerates() pour sort() le max(), j'en ferai un round() de tout ca pour bien les import() ;-)
Bonsoir mon ordinateur ne télécharge pas du tout le fichier automatiquement comme cela le fait pour vous.Lorsque je tape exactement le même programme que vous sur python python me dit "io.UnsupportedOperation: not readable". Comment cela se fait-il auriez-vous des solutions pour régler ce problème ?
Je récupère la série de vidéos sur le tard mais je tiens à vous remercier pour ce cours qui a dû nécessiter pas mal de préparation pour être aussi captivant et progressif. On a réellement l'impression de progresser et d'apprendre plein de choses en Python. MERCI pour tout !
Vos tutos sont d'une qualité exceptionnelle. Merci beaucoup. J'ai programmé vos exemples dans Spyder et l'utilisation de input() me pose des soucis (plantage de Spyder). Visiblement, il y a un bidouillage à faire si l'installation de Spyder s'est faite via Anaconda. Vous confirmez?
Pour moi aussi, spyder ne supporte pas la fonction input(). Je l'ai testée sur jupyter notebook et ça marche bien. Mais mon interface favorite est de loin spyder!!!
Bonjour, ne vous embetez pas trop avec la fonction input(). Elle ne sert a rien dans la pratique de la data science, je voulais juste la montrer car c'est une fonction de base de python.
Bonjour. Il a fallu que je mette : print(abs( )) pour que la valeur absolue soit affichée. Pas comme il est le cas sur la vidéo. Pouvez vous m'expliquer la raison? (Je travaille avec Spyder). MERCI
Merci ,c'est super, J'ai une remarque pour l'execise du dictionnaire comprehension des carrés des nombres de 0 à 20 pour le range il faut mettre range(0,21) pour que le 20 soit aussi compris ?
Salut à toi et MERCI pour tes excellentes vidéos. Tu es foutrement BONNNNN... Grace à toi je vais enfin apprendre PYTHON et la DATA SCIENCE pour mon travail et mes projets personnels.
Salut, J'ai travailler autrement l’exercice et j'ai aussi trouvé le même résultat nombre = [i for i in range (21)] nombre carré = [i**2 for i in range(21)] carré dico = { k:v for k, v in zip(nombre, carré) } dico
@@MachineLearnia dico = {k:k**2 for k in range(1,21)} le carré de 0 n'avait pas trop de sens (certes 1 idem !) mais pour le cast des keys en str je me demande si cela fait parti des bonnes pratiques sachant qu'après il faut faire l'indexing avec dico[3] et pas dico['3'] (pour mon code). Je serai content d'avoir la réponse à cette question, si vous avez un peu de temps pour y répondre. Et toujours merci pour le partage de connaissance, la clarté du propos ainsi que la consistance et la concision des informations. On ne se perd pas et on suit très bien. Chapeau ;)
Merci pour ce contenu si interessant . Pour l'exercice dans lequel vous demander de creer un fichier qui contient le carré des nbs de 0 à 10 ,il faut que dans range écrire range(11) au lieu de range(10). Merci
Bonjour! je suis nouveau dans ce monde de programmation et je tiens à remercier l'auteur de cette initiative , ma question : j'arrive exécuter "écrire tous les nombre au carré allant de 1 à 10" sur jupyter mais j arrive pas à afficher sur spyder pouvez m aidez svp. merci
Bonjour merci pour la vidéo. Lorsque je créé un fichier TXT avec open() , il n'apparait pas dans root courant , alors que si j'utilise POWERSHELL anaconda je le vois , et je sais également lire le contenu avec open(). ...? Merci
Bonjour, je ne comprends pas la situation que vous décrivez a 100%. Pouvez-vous nous rejoindre sur le discord pour en parler avec les autres membres ? C'est intéressant...
Bonjour, je vois deux manières de répondre à l'exercice : with open('fichier.txt','r') as f: texte = f.read() print(texte.split(' ')) qui lit le fichier entier dans la variable 'texte', puis la transforme en liste en le séparant par retour chariot ' ' Le problème, c'est qu'il trouve un dernier élément de la liste de type chaine vide "", puisque la dernière ligne se termine par un retour chariot. Donc un élément indésirable (on pourrait s'en débarrasser avec un .pop()). Pour pallier à cela, il faut utiliser le fait que f est un itérable, qu'on peut utiliser dans une boucle for..in pour extraire ligne par ligne le contenu du fichier, et en faire directement une liste (nonobstant le fait de supprimer le retour chariot sur chaque ligne avec la fonction strip) with open('exo.txt','r') as f: l =[line.strip(' ') for line in f] print(l) Pour les gros fichiers, c'est d'ailleurs beaucoup plus rapide comme méthode que de charger tout le contenu en mémoire si on ne doit par exemple que faire du traitement sur un fichier pour en écrire directement un nouveau ligne par ligne, sans jamais avoir besoin de la totalité du fichier. Merci Guillaume pour ces cours de qualité (+ exercices). A toutes fin utiles pour ceux qui veulent approfondir en python, en ressource gratuite, il y a la plateforme fun-mooc [France Université Numérique] et sa formation "Python3 : des fondamentaux aux concepts avancés du langage". Pour l'avoir suivie pour découvrir python, on retrouve vraiment ici toutes les notions essentielles. Python est vraiment un langage excellent ! L'exemple d'application des f-string à l'indexation d'un dictionnaire dans le cadre des modèles de machine-learning retourne presque le cerveau tellement ça peut être fait simplement. Encore merci de la part d'un ex-enseignant de physique en reconversion.
Merci beaucoup, c'est tres agréable de lire des commentaires aussi construits, avec autant d'informations. Vous faites une bonne analyse des 2 méthodes, je vais voir ce Mooc il a l'air sympa, et je le recommencerai surement a ma communauté
Bonjour Mr, j'espère que vous allez bien. j'ai un petit souci concernent l'usage de la fonction all que j'applique sur une liste, le résultat me donne erreur sur les jupyter ainsi que spyder pourquoi? liste_2=[true,true,false]; all(liste_2)= NameError: name 'true' is not defined????
Bonjour, et merci encore. J'ai un souci avec la fonction input. Dès que j'ai rentré une premier "input" dans mon notebook Jupiter , je n'arrive plus à executer aucun autre code dans la cellule où est mon "input", ni même dans une nouvelle cellule ajoutée. Je n'arrive pas à trouver ce qui cloche. Je vous remercie pour votre aide.
Bonjour, il faut remplir la cellule input qui a été générée par votre code, apres quoi le code reprendra (il attend en réalité votre input avant de continuer l'execution)
Bonjour je viens de découvrir vos Tutos. et c'est super bien fait. J'ai essayé d'avoir votre livre mais ne le retrouve. Le lien dans la description ne me donne pas de téléchargement. Merci pour ce beau travail.
Je reçois une série de vidéos tardives mais je tiens à vous remercier pour ce cours qui a dû nécessiter beaucoup de volonté pour être captivant et progressif. Nous avons vraiment l’impression de progresser et d’apprendre beaucoup chez Python. Merci pour tout ! J’ai une recherche, mais je n’ai pas pu commencer. Pouvez-vous m’aider il y a un an j’essaie ?
Incroyable travail et très belle chemise ! C'est très facile a comprendre et c très bien expliquer. Merci pour cette formation gratuite et efficace !! ❤🥰✌🏽
Bonjour Je débute et après avoir installer anaconda comme sur vos video, sous jupiter je n'arrive pas avoir la même présentation que vous . Dans vos cours apparaît in et out moi cela n apparaît pas Avez une idée Bravo encore pour vos cours
Merci pour tes cours ! J'apprends les ML avec Python et tes cours ont été mon point de départ. J'ai un problème avec la fonction tuple. Chaque fois que je tape tuple() on me sort un message d'erreur du genre : > Que faire?
Super boulot, néanmoins une petite erreur s'est glissée à 7:44. oct() permet de convertir un nombre entier en base 8 (en octal), pas de manipuler des octets.
Excellent tuto! Merci beaucoup. J'ai un petit problème avec la fonction input('....'), qui me bloque toutes les instructions sur Jupyter en m'affichant une montre en haut dans l'onglet. y a-t-il une solution ?
Salut et merci. C'est normal que ca interrompt les instructions, car il faut entrer qqch dans la message box pour continuer le programme (le programme attend ton input). En revanche je n'ai jamais vu ni entendu parler de "montre"...
Bonjour, A 13:16, aurait on pu mettre une virgule à la place du + entre "W" et str(i) à la dernière ligne ? Sinon, quelqu'un peut-il m'éclairer pour savoir quand dois-je mettre un + et quand dois-je mettre une virgule.
Bonjour, dans ce cas précis on ne peut pas mettre de virgule, un virgule sépare 2 éléments, alors que le plus les assemble pour ne former qu'une seule string.
Bonjour, c'est parce que vous essayer d'arrondir le résultat d'un tuple (un ensemble de nombres) et ca n'est pas possible. il vous faut a la place accéder aux éléments de ce tuple, pour ensuite leur appliquer round(). Ou si vous voulez arrondir tous les résultats de votre tuple d'un seul coup, je vous conseille de transformer le tuple en matrice Numpy (voir mes tutos sur Numpy)
oct n'est pas pour octet mais pour octal (les chiffres de 0 à 7, c'est fort utilisé dans les système de fichier par exemple pour définir les accès chmod 755 sera utilisé en base 8)
@@MachineLearnia Très bonne vidéos en tout cas, un ami cherchait des vidéos sur la data science, j'ai trouvé les votres qui me semblent excellente, et celà lui a permi de bien progresser avec python. Ça faisait longtemps que je n'avais plus fait de python, je boss sur ce qu'il y a en dessous (dev système donc principalement du C et assembleur).
Je pense que j'ai du me tromper dans l'installation. Après plusieurs tentatives je n'arrive pas à voir inscrit à gauche les in pour les saisies d entrees et les out pour résultats de sorties
oui il peut le faire, le principe est juste de calculer les distances et recopier les informations les plus proches (donc ca n'est pas le "mode" comme vous dites)
Salut Guillaume, je n'ai malheureusement découvert cette formation que maintenant! bon, vœux mieux tard que jamais. je reviens pour l'exercice sur le carré des nombres à mettre dans un fichier txt. je vous propose ma solution !!!!! with open('tester.txt','w') as f: liste2 = ["{}^2 = {}".format(i, i**2) for i in range(10)] f.write(str(liste2)) Merci une fois de plus pour votre formation et vos explications clair et net. Bien de choses à vous
Hello ML! Videos simples et efficaces c'est top.J'ai cependant un soucisavec cet exemple: Suite à la création du fichier et modification du txt avec ta methode: with open("fichier.txt', 'w') as f: for (...) Le contenu du txt lorsque je l'ouvre avec Jupyter est le message d'erreur suivant et non la suite voulue: Error (file) is not UTF-8 encoded J'ai regardé des sites de réponses sur le web qui restent flous, aurais tu une idée? Merci pour ton temps!
Désolé mais la solution à l'algorithme de la vidéo précédente n'est pas optimisée. Je propose la solution suivante : dico = {k:k**2 for k in range(20)} print(dico) A+ ;)
Merci pour toutes ces videos Guillaume. J'imagine que pour qqn qui a déjà un background en C, VB, VHDL, etc, on peut survoler cette partie n'est-ce pas? Au passage, tu ne ferais pas des videos sur l'apprentissage du Java dans le cadre de programmation d'applications pour Android? Des videos d'une telle clarté et d'une telle simplicité font particulièrement défaut sur la toile. :/ Pourquoi quand tu utilises la fonction random 2x de suite il te renvoie les mêmes valeurs? Elles ne devraient pas changer?
Salut ! Oui si tu es ok en programmation tu peux tout de suite passer a la vidéo 10/30 qui introduit le premier package important : Numpy. Apres si tu as des soucis avec les listes ou les dictionnaires tu peux revenir aux premieres vidéos. Je ne pense pas faire de videos sur Java, mais ca peut changer a l'avenir ! Si le résultat ne change pas, c'est parce que j'ai fixer le générateur de nombre aléatoire avec seed()
Bonjour, tout d'abord merci pour ces vidéos très pédagogiques. J'ai une question concernant la correction l'exercice. Pourquoi écrire str(k) alors que k suffit ? Quelle est la différence ? Merci
salut j'adore vraiment tes vidéos et tout ce que tu fais, j'ai une question , est ce qu'il y à une différence entre ' ' et " " ? encore merci pour tout
Bonjour, c'est juste une commande pour imprimer les parametres W des neurones dans un réseau de neurone. Ne vous en faites pas c'était juste un exemple parmi d'autre (la série sur le deep learning que j'ai commencé a produire vous permettra de comprendre cela)
Bonjour ! merci pour tes vidéos ! j'ai juste une petite question, avec la touche Tab, je n'arrive pas a fficher les arguments des fonctions etc .. est ce qu'il existe une commande ou un parametre pour l'activer ? j'utilise jupyter notbook version 6 ! Merci bcp
Parfois, il faut juste écrire un point pour avoir la liste des possibilités, comme ceci : model. (et la liste s'affiche au bout d'une seconde). Sinon je vous invite a en parler sur notre serveur discord, il arrive régulierement que des gens posent cette question
Ça m'avait tellement triggered de pouvoir passer d'un float à un int aussi facilement quand j'ai commencé le python x) rien que de pas avoir à déclarer le type d'une variable et de pouvoir la faire changer aussi facilement de type c'est limite surréaliste quand t'as appris le code avec le C/C++, déjà que j'ai du mal à pas vouloir malloc tout ce qui bouge ou à faire des destructeurs dans toutes mes class en POO, ça c'est vraiment le plus perturbant au début
Ahah ! Comme je te comprends ! J'ai moi ausi commencé par le C++. Python est tellement plus simple ! C'est pour ca qu'il est un formidable allié des ingénieurs et des scientifiques, qui n'ont pas forcément le luxe d'apprendre la syntax de C++ ! ^^
@@MachineLearnia Merci de votre réponse rapide, Je voudrais télécharger les données d'un fichier en format json que j'ai eu dans un zip, cependant je ne sais pas si mon erreur est a cause de mon cheminement qui pourtant me semble correct, ou alors s'il faut que j'ajoute des lignes de commande dans mon script python pour debloquer peut etre un accès admin
J'utilise des réseaux de neurones et dans mon code ça m'embête de devoir tout réapprendre au réseau a chaque fois. Grâce à cette vidéo je vais pouvoir le sauvegarder dans un fichier txt ! Merci beaucoup
Merci Guillaume Tu es le meilleur. tu fais prendre gout au langage python et tes explications sont limpides,tes exemples sont clair et precis. Merci encore et beaucoup de courage pour la la suite.
Par erreur, j'ai surchargé une fonction de base et j'ai un peu galéré à trouver comment corriger cette erreur. Peut-être que tu pourrais glisser dans ton tuto l'astuce de taper 'del' suivi de la fonction surchargée par erreur :)
Bonjour Guillaume, Par curiosité j'ai regardé s'il y avait des différences de temps de calculs entre ces 3 méthodes (en faisant 1000000 de fois chacune à l'aide d'une boucle): print("hey {} il est {} heures".format(y,x)) print(f"hey {y} il est {x} heures") print("hey "+y+" il est "+str(x)+" heures") Et je trouve toujours un temps similaire pour la concatenation et l'utilisation de .format(), et je trouve un temps significativement plus court en utilisant f"..." Tu saurais m'expliquer pourquoi?
Oui la f-string est plus rapide que la fonction .format(), je ne saurais pas expliquer précisément pourquoi, mais c'est en partie du au fait que cela fait intervenir moins d'opérations (c'est juste une string après tout, alors que les autres font intervenir des opérations ou des fonctions)
Merci énormément, j'aimerais bien savoir si tu vas introduire qq notion de tensorflow dans les prochaines vidéos. Encore merci pour la qualité de vidéo ( et la cuir chevelu soyeuse)
Salut et merci à toi ! :) Dans cette série je ne ferai pas de vidéo sur Tensorflow parce que c'est du Deep Learning et cette série est Python Machine Learning. Cependant j'ai prévu de faire une série Tensorflow avec la meme qualité d'explication et de détails d'ici quelques mois :)
@@yacinebelhadj9749 Le Deep Learning est une des sous branches du machine Learning. C'est la branche qui se focalise sur la création de réseaux de neurones pour faire de la reconnaissance d'images, la reconnaissance vocales, et autres applications très poussées. Le principe est le même que le machine learning: on nourrit la machine avec pleins de données et la machine apprend une fonction mathématique qui approche les données qu'on lui donne Mais en Deep Learning ces fonctions mathématiques sont très longues et compliquées : c'est les réseaux de neurones. Je t'invite à regarder ma playlist machine learning, tu comprendras :)
Je me suis engagé dans un projet nommé (Pattern recognition in structural health monitoring of large civil structures) et enfaite j ai pas bcp de connaissances en informatique ( j ai eu cours de python et js OO y a 3 ans) pourriez-vous me dirigé vers une formation ou un blog qui peux m être efficace en plus de votre formation
Hello :), Les cours sont magnifiques tout simplement, et j'ai un grand besoin d'explications sur le code ci dessous stp 🙏, lorsque j'écris : for v in range(0,20): print(v**2). Tout est ok, v représente bien le carré à chaque fois, par contre lorsque j'écris : v = {v**2 for v in range(0, 20)} print(v) Le résultat pour moi est incompréhensible: {0, 1, 256, 4, 9, 16, 144, 25, 289, 36, 169, 49, 64, 196, 324, 81, 225, 100, 361, 121}. Je me demande ce que fais le 256, 144, 289.... à ces places ? J'ai retourné le problème de tout les cotés et je ne comprends toujours pas 😅, pour moi les 2 codes sont identiques .... mais pas le résultat. Pourrais-tu m'expliquer cela ?? Un énorme merci à toi pour t cours 👌✅🙏
Bonjour. En écrivant {v**2 for v in range(0, 20)}, vous créez un "set". Il s'agit d'un type de structure non-ordonnée de Python, voila pourquoi les éléments contenus dedans ne suivent aucun ordre. Il y a 4 grands types de structures basique dans Python : - les listes : [ a, b, c ] - les tuples : (a, b, c) - les set : {a, b, c} - les dictionnaires : {key : a, key: b, key: c}
@@MachineLearnia Bonjour et merci pour cette réponse, en effet je me suis juste trompé de syntaxe, je voulais faire une liste... Avec l'habitude du langage swift la syntaxe est des fois légèrement différente et on ne voit pas un bug pourtant si logique. Merci pour vos formations qui sont d'une qualité rare, étant en reconversion professionnelle, j'ai appris le langage swift via plusieurs centre de formation mais votre formation sur python est de très loin la meilleure. Vous apportez de la valeur aux gens et ça c'est incroyable... Faites vous également des formations payantes ? Je pense que cela intéresserait beaucoup de monde !! Merci encore.
Merci pour ces vidéos claires et complètent : explication de concept avec utilisation des fonction. Les exercices applicatifs pour encrer l'apprentissage c'est parfait.
Merci beaucoup, un message de plus ca fait toujours plaisir, surtout que je me donne a fond et parfois j'ai un peu des doutes, alors ca fait du bien de lire des messages de soutien :)
Nous apprenons toujours. j ai commencé à m'interesser à machine learning et tout les gards me disent que c est toi la référence dans ce domaine en terme d'apprentissange
10:45 j'ai jamais réellement compris l'utilité de la fonction super() alors que je l'utilise dans mes programmes et ça me déplairait pas que tu en parles ^^ !
Oui je peux faire une vidéo a ce sujet. Super() est utilisé pour acceder aux méthodes d'une classe superieure a la classe actuelle. Il faut comprendre ce qu'est la programmation orientée objet (vidéo 9/30) et savoir qu'en programmation, on peut créer des classes qui héritent des méthodes et des attributs de leurs parents (par exemple une classe "voiture" a en partie les mêmes méthodes et attributs qu'une classe "véhicule") Et pour acceder aux méthodes des parents on peut utiliser super() Ne t'inquiete pas si tu ne comprends pas, je pourrais faire une video (ou bien un post instagram) a ce sujet
"Bonjour" je suis financier et je reçois plein de messages par swift ( moyen de paiement interbancaire ), esque c'est avec ses modules là que je peux organiser une réception des données puis leur donner un chemin pour se répertorier sur un fichier ecxel .? ps: formation super intéressante.
@ABOUBAKARI OUEDRAOGO vous pouvez utiliser cette méthode pour éviter d' écrire 2 fois la boucle for dictionnaire = {k:v for k,v in enumerate([i**2 for i in range(21)])}
moi aussi j'adore ses vidéos franchement. ses vidéos m'ont appris assez des choses. je travail un pfe su IA machine learning, ça m'a vraiment aide. tu es tunisien ?
Merci, peur de ne pas arriver jusqu'au bout des len(videos) :-D car il faut que je les enumerates() pour sort() le max(), j'en ferai un round() de tout ca pour bien les import() ;-)
OMG BEST COMMENT EVER ! WELL DONE ! ;-)
Salut ! pour l'ex de l'épisode 6, j'ai trouvé ça : dico = {k:v for k, v in enumerate([v**2 for v in range(20)])}
Avec 21 au lieu de 20 pour aller de 0 à 20
Rien est dire, tes cours sont excellent. Un ami me les avait recommandé. Merci infiniment !
Merci pour ton message, et remercie ton ami de ma part :)
Merci BEAUCOUP pour ces vidéos de qualités supérieurs, on a vraiment l'impression de progresser constamment !!
Bonsoir mon ordinateur ne télécharge pas du tout le fichier automatiquement comme cela le fait pour vous.Lorsque je tape exactement le même programme que vous sur python python me dit "io.UnsupportedOperation: not readable". Comment cela se fait-il auriez-vous des solutions pour régler ce problème ?
Je ne sais pas 🤔
Je récupère la série de vidéos sur le tard mais je tiens à vous remercier pour ce cours qui a dû nécessiter pas mal de préparation pour être aussi captivant et progressif. On a réellement l'impression de progresser et d'apprendre plein de choses en Python. MERCI pour tout !
Merci Sébastien ça fait très plaisir de savoir ça ! Si vous avez la moindre question surtout n'hésitez pas, je ferai de mon mieux pour vous aider :)
@@MachineLearnia merci pour toutes vos explications c'est super
Vos tutos sont d'une qualité exceptionnelle. Merci beaucoup. J'ai programmé vos exemples dans Spyder et l'utilisation de input() me pose des soucis (plantage de Spyder). Visiblement, il y a un bidouillage à faire si l'installation de Spyder s'est faite via Anaconda. Vous confirmez?
Pour moi aussi, spyder ne supporte pas la fonction input(). Je l'ai testée sur jupyter notebook et ça marche bien. Mais mon interface favorite est de loin spyder!!!
Bonjour, ne vous embetez pas trop avec la fonction input(). Elle ne sert a rien dans la pratique de la data science, je voulais juste la montrer car c'est une fonction de base de python.
Bonjour. Il a fallu que je mette : print(abs( )) pour que la valeur absolue soit affichée. Pas comme il est le cas sur la vidéo. Pouvez vous m'expliquer la raison? (Je travaille avec Spyder). MERCI
Merci ,c'est super,
J'ai une remarque pour l'execise du dictionnaire comprehension des carrés des nombres de 0 à 20 pour le range il faut mettre range(0,21) pour que le 20 soit aussi compris ?
Salut à toi et MERCI pour tes excellentes vidéos. Tu es foutrement BONNNNN... Grace à toi je vais enfin apprendre PYTHON et la DATA SCIENCE pour mon travail et mes projets personnels.
Merci ! Ca fait super plaisir de voir quelqu'un de motivé comme toi ! Bon courage je te soutiens a fond ! :D
Salut, J'ai travailler autrement l’exercice et j'ai aussi trouvé le même résultat
nombre = [i for i in range (21)]
nombre
carré = [i**2 for i in range(21)]
carré
dico = {
k:v for k, v in zip(nombre, carré)
}
dico
Tant que vous obtenez le meme résultat, c'est une bonne réponse, et bravo a vous d'avoir vraiment fait l'exercice !
@@MachineLearnia C'est moi qui vous remercie
Exactement même raisonnement sauf que j'ai fait range(20)...
pour ma part j'ai uniquement défini la liste carre puis j'ai tapé:
exo={k:v for k,v in enumerate (carre)}
@@MachineLearnia dico = {k:k**2 for k in range(1,21)} le carré de 0 n'avait pas trop de sens (certes 1 idem !) mais pour le cast des keys en str je me demande si cela fait parti des bonnes pratiques sachant qu'après il faut faire l'indexing avec dico[3] et pas dico['3'] (pour mon code).
Je serai content d'avoir la réponse à cette question, si vous avez un peu de temps pour y répondre.
Et toujours merci pour le partage de connaissance, la clarté du propos ainsi que la consistance et la concision des informations.
On ne se perd pas et on suit très bien. Chapeau ;)
Merci pour ce contenu si interessant .
Pour l'exercice dans lequel vous demander de creer un fichier qui contient le carré des nbs de 0 à 10 ,il faut que dans range écrire range(11) au lieu de range(10).
Merci
Bonjour! je suis nouveau dans ce monde de programmation et je tiens à remercier l'auteur de cette initiative , ma question : j'arrive exécuter "écrire tous les nombre au carré allant de 1 à 10" sur jupyter mais j arrive pas à afficher sur spyder pouvez m aidez svp. merci
merci pour l'effort et l'énergie que vous mettiez, remarquable et inlassable 👍🏻👍🏻👌🏻
de rien, c'est un plaisir de vous aider :)
Salut je n'arrive plus à coder sur spyder à cause d'une mise à jour qui est la 5.3.3 . Est ce possible de faire du machine learning sur replit ?
je suis peut-étre un trous de balle mais je trouve les Exo grv dur j'en est réussis aucun mdr
Vidéos très intéressante mais alors les exercices je n'en réussi aucun par moi même...
Merci beaucoup pour vos vidéos... J'aimerai en apprendre plus sur la fonction eval
Bonjour merci pour la vidéo. Lorsque je créé un fichier TXT avec open() , il n'apparait pas dans root courant , alors que si j'utilise POWERSHELL anaconda je le vois , et je sais également lire le contenu avec open(). ...? Merci
Bonjour, je ne comprends pas la situation que vous décrivez a 100%. Pouvez-vous nous rejoindre sur le discord pour en parler avec les autres membres ? C'est intéressant...
Bonjour,
je vois deux manières de répondre à l'exercice :
with open('fichier.txt','r') as f:
texte = f.read()
print(texte.split('
'))
qui lit le fichier entier dans la variable 'texte', puis la transforme en liste en le séparant par retour chariot '
'
Le problème, c'est qu'il trouve un dernier élément de la liste de type chaine vide "", puisque la dernière ligne se termine par un retour chariot. Donc un élément indésirable (on pourrait s'en débarrasser avec un .pop()).
Pour pallier à cela, il faut utiliser le fait que f est un itérable, qu'on peut utiliser dans une boucle for..in pour extraire ligne par ligne le contenu du fichier, et en faire directement une liste (nonobstant le fait de supprimer le retour chariot sur chaque ligne avec la fonction strip)
with open('exo.txt','r') as f:
l =[line.strip('
') for line in f]
print(l)
Pour les gros fichiers, c'est d'ailleurs beaucoup plus rapide comme méthode que de charger tout le contenu en mémoire si on ne doit par exemple que faire du traitement sur un fichier pour en écrire directement un nouveau ligne par ligne, sans jamais avoir besoin de la totalité du fichier.
Merci Guillaume pour ces cours de qualité (+ exercices).
A toutes fin utiles pour ceux qui veulent approfondir en python, en ressource gratuite, il y a la plateforme fun-mooc [France Université Numérique] et sa formation "Python3 : des fondamentaux aux concepts avancés du langage".
Pour l'avoir suivie pour découvrir python, on retrouve vraiment ici toutes les notions essentielles.
Python est vraiment un langage excellent ! L'exemple d'application des f-string à l'indexation d'un dictionnaire dans le cadre des modèles de machine-learning retourne presque le cerveau tellement ça peut être fait simplement.
Encore merci de la part d'un ex-enseignant de physique en reconversion.
Merci beaucoup, c'est tres agréable de lire des commentaires aussi construits, avec autant d'informations. Vous faites une bonne analyse des 2 méthodes, je vais voir ce Mooc il a l'air sympa, et je le recommencerai surement a ma communauté
Bonjour Mr, j'espère que vous allez bien. j'ai un petit souci concernent l'usage de la fonction all que j'applique sur une liste, le résultat me donne erreur sur les jupyter ainsi que spyder pourquoi? liste_2=[true,true,false]; all(liste_2)=
NameError: name 'true' is not defined????
Bonjour, Il faut mettre True et False avec des majuscules
Bon courage :)
liste_1=[1,14,10,48]
list(dict(zip(liste_1,list(tuple(liste_1)))).keys())
[1, 14, 10, 48]
ça marche bien ! :D
AHAHAH ! Tres bon commentaire :D
@@MachineLearnia :D
Bonjour, et merci encore. J'ai un souci avec la fonction input. Dès que j'ai rentré une premier "input" dans mon notebook Jupiter , je n'arrive plus à executer aucun autre code dans la cellule où est mon "input", ni même dans une nouvelle cellule ajoutée. Je n'arrive pas à trouver ce qui cloche. Je vous remercie pour votre aide.
Bonjour, il faut remplir la cellule input qui a été générée par votre code, apres quoi le code reprendra (il attend en réalité votre input avant de continuer l'execution)
Excellente vidéo. Je m'abonne et je les suis.
Bonjour je viens de découvrir vos Tutos. et c'est super bien fait. J'ai essayé d'avoir votre livre mais ne le retrouve.
Le lien dans la description ne me donne pas de téléchargement.
Merci pour ce beau travail.
Je reçois une série de vidéos tardives mais je tiens à vous remercier pour ce cours qui a dû nécessiter beaucoup de volonté pour être captivant et progressif. Nous avons vraiment l’impression de progresser et d’apprendre beaucoup chez Python. Merci pour tout ! J’ai une recherche, mais je n’ai pas pu commencer. Pouvez-vous m’aider il y a un an j’essaie ?
Incroyable travail et très belle chemise ! C'est très facile a comprendre et c très bien expliquer. Merci pour cette formation gratuite et efficace !! ❤🥰✌🏽
Bonjour
Je débute et après avoir installer anaconda comme sur vos video, sous jupiter je n'arrive pas avoir la même présentation que vous .
Dans vos cours apparaît in et out moi cela n apparaît pas
Avez une idée
Bravo encore pour vos cours
Je pense que vous pourriez venir poser votre question sur notre serveur discord, on aura besoin de plus d'infos pour vous aider :)
Merci pour tes cours !
J'apprends les ML avec Python et tes cours ont été mon point de départ.
J'ai un problème avec la fonction tuple. Chaque fois que je tape tuple() on me sort un message d'erreur du genre : >
Que faire?
Je remarque que int(y) ne change pas y, il faut faire une affectation y = int(y), par contre float(x) change x
Oui tout a fait !
Super boulot, néanmoins une petite erreur s'est glissée à 7:44. oct() permet de convertir un nombre entier en base 8 (en octal), pas de manipuler des octets.
Oui c'est vrai, c'est un trop gros abus de langage de ma part.
Excellent tuto! Merci beaucoup. J'ai un petit problème avec la fonction input('....'), qui me bloque toutes les instructions sur Jupyter en m'affichant une montre en haut dans l'onglet. y a-t-il une solution ?
Salut et merci. C'est normal que ca interrompt les instructions, car il faut entrer qqch dans la message box pour continuer le programme (le programme attend ton input). En revanche je n'ai jamais vu ni entendu parler de "montre"...
@@MachineLearnia Merci beaucoup. Je voulais dire un sablier...
Les meilleurs tutos que j'ai vu.
Merci infiniment!
Merci ! Je suis content de pouvoir être utile :)
Bonjour,
A 13:16, aurait on pu mettre une virgule à la place du + entre "W" et str(i) à la dernière ligne ? Sinon, quelqu'un peut-il m'éclairer pour savoir quand dois-je mettre un + et quand dois-je mettre une virgule.
Bonjour, dans ce cas précis on ne peut pas mettre de virgule, un virgule sépare 2 éléments, alors que le plus les assemble pour ne former qu'une seule string.
@@MachineLearnia merci beaucoup 😁
Jai un problème dans la fonction round quand j'exécute il m'affiche ce message ( type tuple doesn't define __round__ method)
Bonjour, c'est parce que vous essayer d'arrondir le résultat d'un tuple (un ensemble de nombres) et ca n'est pas possible. il vous faut a la place accéder aux éléments de ce tuple, pour ensuite leur appliquer round().
Ou si vous voulez arrondir tous les résultats de votre tuple d'un seul coup, je vous conseille de transformer le tuple en matrice Numpy (voir mes tutos sur Numpy)
@@MachineLearnia d'accord je vais essayer merci infiniment
oct n'est pas pour octet mais pour octal (les chiffres de 0 à 7, c'est fort utilisé dans les système de fichier par exemple pour définir les accès chmod 755 sera utilisé en base 8)
Merci !
@@MachineLearnia Très bonne vidéos en tout cas, un ami cherchait des vidéos sur la data science, j'ai trouvé les votres qui me semblent excellente, et celà lui a permi de bien progresser avec python. Ça faisait longtemps que je n'avais plus fait de python, je boss sur ce qu'il y a en dessous (dev système donc principalement du C et assembleur).
Je pense que j'ai du me tromper dans l'installation.
Après plusieurs tentatives je n'arrive pas à voir inscrit à gauche les in pour les saisies d entrees et les out pour résultats de sorties
mais je savais pas que c'était simple à ce point cette fonction format
Je suis content d'avoir pu t'aider Patrick ;)
bonjour j'aimerai bien obtenir votre livre "apprendre machine learning merci
oui il peut le faire, le principe est juste de calculer les distances et recopier les informations les plus proches (donc ca n'est pas le "mode" comme vous dites)
Encore une vidéo de qualité ! Bravo et surtout MERCI !
Salut Guillaume, je n'ai malheureusement découvert cette formation que maintenant! bon, vœux mieux tard que jamais.
je reviens pour l'exercice sur le carré des nombres à mettre dans un fichier txt.
je vous propose ma solution !!!!!
with open('tester.txt','w') as f:
liste2 = ["{}^2 = {}".format(i, i**2) for i in range(10)]
f.write(str(liste2))
Merci une fois de plus pour votre formation et vos explications clair et net. Bien de choses à vous
Comme vous dites : mieux vaut tard que jamais ! :)
Filter()
Hello ML! Videos simples et efficaces c'est top.J'ai cependant un soucisavec cet exemple:
Suite à la création du fichier et modification du txt avec ta methode: with open("fichier.txt', 'w') as f: for (...)
Le contenu du txt lorsque je l'ouvre avec Jupyter est le message d'erreur suivant et non la suite voulue:
Error (file) is not UTF-8 encoded
J'ai regardé des sites de réponses sur le web qui restent flous, aurais tu une idée?
Merci pour ton temps!
Hello !
Voila la réponse :
import codecs
f = codecs.open("fichier.txt", "w", "utf-8")
f.write()
f.close()
Désolé mais la solution à l'algorithme de la vidéo précédente n'est pas optimisée.
Je propose la solution suivante :
dico = {k:k**2 for k in range(20)}
print(dico)
A+ ;)
C'est la même réponse que dans la vidéo (a part pour str()) je ne comprends pas vraiment..
Bonjour ... Qu'il est la différence entre tuple et liste
Un tuple est immutable
Done
d={k:k**2 for k in range(21)}
BRavo
Merci pour toutes ces videos Guillaume.
J'imagine que pour qqn qui a déjà un background en C, VB, VHDL, etc, on peut survoler cette partie n'est-ce pas?
Au passage, tu ne ferais pas des videos sur l'apprentissage du Java dans le cadre de programmation d'applications pour Android? Des videos d'une telle clarté et d'une telle simplicité font particulièrement défaut sur la toile. :/
Pourquoi quand tu utilises la fonction random 2x de suite il te renvoie les mêmes valeurs? Elles ne devraient pas changer?
Salut ! Oui si tu es ok en programmation tu peux tout de suite passer a la vidéo 10/30 qui introduit le premier package important : Numpy. Apres si tu as des soucis avec les listes ou les dictionnaires tu peux revenir aux premieres vidéos.
Je ne pense pas faire de videos sur Java, mais ca peut changer a l'avenir !
Si le résultat ne change pas, c'est parce que j'ai fixer le générateur de nombre aléatoire avec seed()
Très bon travail. Dieu Merci et merci à toi Guillaume.
Bonjour, tout d'abord merci pour ces vidéos très pédagogiques. J'ai une question concernant la correction l'exercice. Pourquoi écrire str(k) alors que k suffit ? Quelle est la différence ? Merci
Ca n'était pas nécessaire dans ce cas en effet.
salut j'adore vraiment tes vidéos et tout ce que tu fais,
j'ai une question , est ce qu'il y à une différence entre ' ' et " " ?
encore merci pour tout
wow
Merci beaucoup !!
Merci vraiment ❤
salut, merci beaucoup pour la qualité de votre formation, j'ai pas compris comment interprété "print(parametres["w"+str(i)])
Bonjour, c'est juste une commande pour imprimer les parametres W des neurones dans un réseau de neurone. Ne vous en faites pas c'était juste un exemple parmi d'autre (la série sur le deep learning que j'ai commencé a produire vous permettra de comprendre cela)
❤🔥
Bonjour ! merci pour tes vidéos ! j'ai juste une petite question, avec la touche Tab, je n'arrive pas a fficher les arguments des fonctions etc .. est ce qu'il existe une commande ou un parametre pour l'activer ? j'utilise jupyter notbook version 6 ! Merci bcp
Parfois, il faut juste écrire un point pour avoir la liste des possibilités, comme ceci : model. (et la liste s'affiche au bout d'une seconde). Sinon je vous invite a en parler sur notre serveur discord, il arrive régulierement que des gens posent cette question
Ça m'avait tellement triggered de pouvoir passer d'un float à un int aussi facilement quand j'ai commencé le python x) rien que de pas avoir à déclarer le type d'une variable et de pouvoir la faire changer aussi facilement de type c'est limite surréaliste quand t'as appris le code avec le C/C++, déjà que j'ai du mal à pas vouloir malloc tout ce qui bouge ou à faire des destructeurs dans toutes mes class en POO, ça c'est vraiment le plus perturbant au début
Ahah ! Comme je te comprends ! J'ai moi ausi commencé par le C++. Python est tellement plus simple ! C'est pour ca qu'il est un formidable allié des ingénieurs et des scientifiques, qui n'ont pas forcément le luxe d'apprendre la syntax de C++ ! ^^
Challenge accepted : 7/30
Well done buddy
Je vous remercie pour cette video, je voudrais savoir un peu comment gerer la function load()
Bonjour, dans quel contexte voulez-vous l'utiliser ?
@@MachineLearnia Merci de votre réponse rapide, Je voudrais télécharger les données d'un fichier en format json que j'ai eu dans un zip, cependant je ne sais pas si mon erreur est a cause de mon cheminement qui pourtant me semble correct, ou alors s'il faut que j'ajoute des lignes de commande dans mon script python pour debloquer peut etre un accès admin
J'utilise des réseaux de neurones et dans mon code ça m'embête de devoir tout réapprendre au réseau a chaque fois. Grâce à cette vidéo je vais pouvoir le sauvegarder dans un fichier txt ! Merci beaucoup
C'est une bonne idée, mais pour sauvegarder les parametres d'un réseau de neurones, vous pouvez utiliser l'API de Tensorflow : Model.save_weights
merci monsieur
Merci Guillaume Tu es le meilleur. tu fais prendre gout au langage python et tes explications sont limpides,tes exemples sont clair et precis. Merci encore et beaucoup de courage pour la la suite.
c'est le meilleur cours que je vue de tt ma vie en programmation
Raté pour l'exo, range 20 donne les nombres de 0 à 19 ^^'
Oui oui petite pépite ahah
@@MachineLearnia Je commente surtout pour l'algo youtube, j'espère que tu ne le prend pas mal.
Au passage j'aime beaucoup tes vidéos =)
Par erreur, j'ai surchargé une fonction de base et j'ai un peu galéré à trouver comment corriger cette erreur. Peut-être que tu pourrais glisser dans ton tuto l'astuce de taper 'del' suivi de la fonction surchargée par erreur :)
Oui je vais voir si je rajoute un tel tutoriel a l'avenir.
excellent et très pédagogique
Merci.
Merci 👏
Bonjour Guillaume,
Par curiosité j'ai regardé s'il y avait des différences de temps de calculs entre ces 3 méthodes (en faisant 1000000 de fois chacune à l'aide d'une boucle):
print("hey {} il est {} heures".format(y,x))
print(f"hey {y} il est {x} heures")
print("hey "+y+" il est "+str(x)+" heures")
Et je trouve toujours un temps similaire pour la concatenation et l'utilisation de .format(), et je trouve un temps significativement plus court en utilisant f"..."
Tu saurais m'expliquer pourquoi?
Oui la f-string est plus rapide que la fonction .format(), je ne saurais pas expliquer précisément pourquoi, mais c'est en partie du au fait que cela fait intervenir moins d'opérations (c'est juste une string après tout, alors que les autres font intervenir des opérations ou des fonctions)
D'accord merci :-)
Merci énormément, j'aimerais bien savoir si tu vas introduire qq notion de tensorflow dans les prochaines vidéos. Encore merci pour la qualité de vidéo ( et la cuir chevelu soyeuse)
Salut et merci à toi ! :) Dans cette série je ne ferai pas de vidéo sur Tensorflow parce que c'est du Deep Learning et cette série est Python Machine Learning.
Cependant j'ai prévu de faire une série Tensorflow avec la meme qualité d'explication et de détails d'ici quelques mois :)
C est quoi la différence entre le deep learning et le machine learning ?
@@yacinebelhadj9749 Le Deep Learning est une des sous branches du machine Learning. C'est la branche qui se focalise sur la création de réseaux de neurones pour faire de la reconnaissance d'images, la reconnaissance vocales, et autres applications très poussées. Le principe est le même que le machine learning: on nourrit la machine avec pleins de données et la machine apprend une fonction mathématique qui approche les données qu'on lui donne Mais en Deep Learning ces fonctions mathématiques sont très longues et compliquées : c'est les réseaux de neurones.
Je t'invite à regarder ma playlist machine learning, tu comprendras :)
Je me suis engagé dans un projet nommé (Pattern recognition in structural health monitoring of large civil structures) et enfaite j ai pas bcp de connaissances en informatique ( j ai eu cours de python et js OO y a 3 ans) pourriez-vous me dirigé vers une formation ou un blog qui peux m être efficace en plus de votre formation
Et merci pour l explication 😅😅
Très pédagogique ! c'est le plus important je pense.. Merci en tout cas.
Merci.
Hello :), Les cours sont magnifiques tout simplement, et j'ai un grand besoin d'explications sur le code ci dessous stp 🙏,
lorsque j'écris :
for v in range(0,20):
print(v**2).
Tout est ok, v représente bien le carré à chaque fois, par contre lorsque j'écris :
v = {v**2 for v in range(0, 20)}
print(v)
Le résultat pour moi est incompréhensible:
{0, 1, 256, 4, 9, 16, 144, 25, 289, 36, 169, 49, 64, 196, 324, 81, 225, 100, 361, 121}.
Je me demande ce que fais le 256, 144, 289.... à ces places ?
J'ai retourné le problème de tout les cotés et je ne comprends toujours pas 😅, pour moi les 2 codes sont identiques .... mais pas le résultat.
Pourrais-tu m'expliquer cela ??
Un énorme merci à toi pour t cours 👌✅🙏
Bonjour. En écrivant {v**2 for v in range(0, 20)}, vous créez un "set". Il s'agit d'un type de structure non-ordonnée de Python, voila pourquoi les éléments contenus dedans ne suivent aucun ordre.
Il y a 4 grands types de structures basique dans Python :
- les listes : [ a, b, c ]
- les tuples : (a, b, c)
- les set : {a, b, c}
- les dictionnaires : {key : a, key: b, key: c}
@@MachineLearnia Bonjour et merci pour cette réponse, en effet je me suis juste trompé de syntaxe, je voulais faire une liste...
Avec l'habitude du langage swift la syntaxe est des fois légèrement différente et on ne voit pas un bug pourtant si logique.
Merci pour vos formations qui sont d'une qualité rare, étant en reconversion professionnelle, j'ai appris le langage swift via plusieurs centre de formation mais votre formation sur python est de très loin la meilleure. Vous apportez de la valeur aux gens et ça c'est incroyable...
Faites vous également des formations payantes ? Je pense que cela intéresserait beaucoup de monde !!
Merci encore.
MERCI
Merci pour ces vidéos claires et complètent : explication de concept avec utilisation des fonction. Les exercices applicatifs pour encrer l'apprentissage c'est parfait.
je suis content que ca vous plaise !
Merci, j'ai beaucoup profité d'un contenu utile et bon. J'écoute vos vidéos une fois et deux. Merci
Merci a vous !
je vous remercie énormément pour l excellence de formation
Qu'est-ce que je vais dire que les autres n'ont pas encore dit?
Excellent travaille, Guillaume!
Merci beaucoup, un message de plus ca fait toujours plaisir, surtout que je me donne a fond et parfois j'ai un peu des doutes, alors ca fait du bien de lire des messages de soutien :)
Nous apprenons toujours. j ai commencé à m'interesser à machine learning et tout les gards me disent que c est toi la référence dans ce domaine en terme d'apprentissange
Merci beaucoup ca fait bien plaisir d'avoir un tel retour, passe le bonjour a tes amis !
Tu es le meilleur s’il te plaît n’arrête pas
Je chante l'amour au mileu de cette guérilla parceque je t'aimerai forever my pythoniaaaa Xd Xd
ahah et bien merci :)
blablabla python python python
merci bcp super vidéos et super prof :)
Merci a toi ;)
Bonjour, j'aimerais bien savoir l'utilisation de la fonction ascii()!!!
Bonjour, cette fonction retourne une représentation ASCII d'un objet Python.
je tiens à vous remercier pour ce cours
Je ne suis pas perdu : je retrouve plein de trucs vus avec mon langage préféré, le Pascal. Vidéo sympa et toujours aussi claire.
Merci !
Comment j'ouvre mon fichier.txt si je suis dans Visual Studio Code au lieu de Jupyter ?
Bonjour, le code est sensé resté le meme, assurez-vous de mettre le fichier.txt dans votre repertoire de travail et tout devrait bien aller
Rien a dire excellent travaille , Merci bcp pour tes vidéos; J'adore tes cours, tjs bien expliqué.très pédagogique !!
Merci beaucoup !
10:45 j'ai jamais réellement compris l'utilité de la fonction super() alors que je l'utilise dans mes programmes et ça me déplairait pas que tu en parles ^^ !
Oui je peux faire une vidéo a ce sujet. Super() est utilisé pour acceder aux méthodes d'une classe superieure a la classe actuelle. Il faut comprendre ce qu'est la programmation orientée objet (vidéo 9/30) et savoir qu'en programmation, on peut créer des classes qui héritent des méthodes et des attributs de leurs parents (par exemple une classe "voiture" a en partie les mêmes méthodes et attributs qu'une classe "véhicule") Et pour acceder aux méthodes des parents on peut utiliser super()
Ne t'inquiete pas si tu ne comprends pas, je pourrais faire une video (ou bien un post instagram) a ce sujet
est ce que tu pourrais faire une vidéo sur la fonction global?
sinon rien a dire , tes vidéos sont excellentes
Je vais voir, je pense que c'est un peu en dehors du theme de la chaine RUclips.
formation de très grande qualité , simple, concise mais riche en connaissances. merci beaucoup Guillaume!
Merci beaucoup, ca me fait toujours plaisir d'avoir un retour positif :)
Merci infiniment pour tes videos. c est du top!!!
Merci
"Bonjour"
je suis financier et je reçois plein de messages par swift ( moyen de paiement interbancaire ), esque c'est avec ses modules là que je peux organiser une réception des données puis leur donner un chemin pour se répertorier sur un fichier ecxel .?
ps: formation super intéressante.
Je pense que vous pourrez réussir a faire cela avec les outils de sklearn en effet (on le voit dans cette série de videos)
Excellente vidéo...
Merci beaucoup !
Franchement, merci infiniment.
#Exercice sur les dictionnaires
listeun=[i for i in range(21)]
dictionnaire = {k:v for k,v in enumerate([i**2 for i in listeun])}
bravo !
@ABOUBAKARI OUEDRAOGO vous pouvez utiliser cette méthode pour éviter d' écrire 2 fois la boucle for
dictionnaire = {k:v for k,v in enumerate([i**2 for i in range(21)])}
@@benallelsaloua2854 Merci
un Grand merci Guillaume
De rien, merci pour le commentaire :)
Guillaume Saint-Cirgue Merci infiniment pour tes vidéos; J'adore tes cours, ils sont bien fait, bien expliqué. Rien a dire excellent travaille.
Merci beaucoup ! Ça fait très plaisir ! :)
moi aussi j'adore ses vidéos franchement. ses vidéos m'ont appris assez des choses. je travail un pfe su IA machine learning, ça m'a vraiment aide. tu es tunisien ?
@@MachineLearnia merci infinement Guillaume, on attends les vidéos sur les métriques en entrées et sorties
@@Massar_Formation non je suis marocain
@@SoufianeBALLOUKENSEM ah d'accord , pouvons nous entrer en contact ?
Merci à toi pour le partage
De rien !
bravo tu es le meilleur
Merci beaucoup :)
Franchement mille BRAVO pour cette qualité de formation 😍 Merci encore pour ce grand effort👏
Merci a vous !