Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Dans cette partie, on va enfin s'intéresser à la récupération des données à partir du code HTML de la page.Si vous allez voir le fichier HTML qui a été sauvegardé sur le disque, vous allez voir que c'est un petit peu bordélique.
00:00:11 :On a beaucoup de choses ici et le fichier n'est pas mis en forme.Si vous voulez remettre en forme pour avoir une structure HTML un peu plus lisible, vous pouvez aller dans Code, si je me souviens bien, ici.
00:00:22 :Et on va retrouver ici Reformat File ou Reformat Code.Et ça va remettre en forme le code pour qu'il y ait les bonnes orientations et tout ce qu'il faut.
00:00:30 :Donc ça se peut que ce soit un petit peu long parce qu'il y a énormément de contenu sur cette page.Si je descends, vous allez voir qu'on a beaucoup, beaucoup, beaucoup de lignes HTML.
00:00:38 :On est à 30 000 lignes ici de HTML, de JavaScript, etc.Et donc il y a beaucoup de choses ici dans lesquelles on va devoir faire une sélection.
00:00:46 :Également, vous allez voir quelque chose d'assez surprenant.Si je viens en haut à droite ici pour ouvrir le fichier dans un navigateur, on va prendre par exemple Chrome.
00:00:53 :Vous allez voir quelque chose d'assez surprenant, à savoir qu'on a le contenu qui est affiché mais qui semble disparaître tout de suite après.Alors ça, j'ai l'impression que c'est des précautions qui sont prises par Airbnb ou je ne sais pas si c'est voulu ou pas.
00:01:06 :Mais en tout cas, si je viens ici dans le inspect, ici on n'aura plus les données qu'on souhaite.Donc je pense qu'il y a un script quelque part ici qui doit modifier les informations une fois qu'on charge la page.
00:01:16 :J'avais essayé en préparant cette formation de supprimer tous les tags de script ici du fichier HTMLet j'avais réussi au final à avoir bien les données qui restaient.
00:01:24 :Mais ce n'était pas très pratique.Et ce n'est pas non plus très pratique de devoir aller analyser notre HTML directement dans ce fichier, dans PyCharm.
00:01:32 :Donc ce que je vais faire pour la formation, c'est tout simplement retourner sur le site de Airbnb.On va remettre notre Rio de Janeiro.On va choisir une date ici et on va inspecter en fait directement le HTML depuis la page Live.
00:01:45 :Et ça devrait être la même chose directement dans notre fichier.Donc ça ne devrait pas poser de problème puisque tout le code va être similaire.
00:01:52 :C'est juste que là on l'a en Live, en direct.Et on va faire notre étude à partir de ça.Donc la première chose qu'on va faire ici, c'est créer une fonction.
00:01:59 :Donc je vais la mettre tout de suite après le FetchContent.On va l'appeler GetAveragePrice puisque nous ce qui va nous intéresser,c'est de récupérer le prix moyen de la page à laquelle on va accéder.
00:02:09 :Donc on va lui passer en entrée le code HTML de la page.Et en sortie, on va retourner un nombre entier qui va être la moyenne du prix de toutes les locations.
00:02:17 :On pourrait également retourner un nombre décimal, un float.Moi dans ce cas-ci, je n'ai pas besoin de cette précision extrême.Je peux m'en tenir à un int.
00:02:25 :Donc on va dire ici, from the HTML, we get the average price tout simplement.Et ici, on va déjà faire une liste qui va nous permettre de stocker les prix.
00:02:33 :Et par la suite, on fera un petit calcul mathématique très simplepour retourner la somme de tous ces prix divisés par la longueur de la liste.
00:02:40 :Ce qui va nous donner la moyenne des prix sur la page.Donc ce qu'il faut faire déjà, c'est utiliser Beautiful Soup et le parser HTML de cette librairiepour pouvoir naviguer plus facilement à l'intérieur de la structure du HTML.
00:02:52 :Donc je vais rajouter l'import au début du fichier.D'ailleurs c'est une bonne chose de mieux séparer les imports.Vous pouvez là encore, si je me souviens bien, le faire en faisant reformat fileoù on avait directement le optimize import ici,qui va automatiquement remettre les imports comme il faut.
00:03:08 :C'est à dire enlever ceux qui ne sont pas nécessaires.Là, ils sont tous utilisés.Mais si jamais on avait quelque chose qui n'était pas utilisé, il serait en gris.
00:03:15 :Et avec cette option, il serait tout simplement enlevé du fichierpuisqu'il enlève les modules qu'on n'utilise pas.Et également, il y a cette séparation qui a été faite, vous voyez ici,entre les modules de la bibliothèque standard que sont logging et pathlibet les modules de bibliothèque tierce qu'on a installé comme request.
00:03:30 :Et on va continuer ici en mettant BeautifulSoup également à la suitepuisque c'est également une bibliothèque qu'on a dû installer en pluset qui ne fait pas partie de la bibliothèque standard.
00:03:39 :Donc je vais dire from bs4 import BeautifulSoupet on va utiliser ce BeautifulSoup pour transformer notre chaîne de caractère HTMLen arbre à travers lequel on va pouvoir naviguer plus facilement.
00:03:50 :Donc je vais dire soup="BeautifulSoup", on va lui passer notre HTMLet on va passer l'analyseur qu'on souhaite utiliser pour analyser ce HTML.Donc si vous allez voir dans BeautifulSoup,vous allez voir les différents parseurs qui sont disponibles.
00:04:03 :On a lxml, lxml.xml, htmlparseur et html5lib.Nous, dans notre cas, on va utiliser htmlparseurparce qu'il est un peu plus rapide que html5lib.Il va donner des résultats un peu moins bonssi vous avez un fichier HTML qui n'est pas correctement formaté.
00:04:17 :Mais là, dans ce cas-ci, on va faire confiance à Airbnbpour nous retourner du HTML qui est correct et qui ne comporte pas trop d'erreurs.
00:04:24 :Donc je vais passer avec celui-là, htmlparseur,pour analyser le HTML que je vais lui passer.Et ensuite, on va devoir récupérer les différentes informations de prix.
00:04:32 :Donc si je reviens sur mon site, on a tous les logements qui sont disponibles ici,avec dans ce cas-ci, presque tout le temps, un prix réduit.
00:04:39 :À part ici, donc ça c'est parfait, on va pouvoir gérer les deux cas de figure.Je vais commencer avec le premier cas de figure ici, avec le prix en réduction.
00:04:45 :On va reprendre notre outil d'inspection iciet on va aller voir la classe qui correspond à ce prix.Donc c'est la classe ici.Donc ça c'est le prix qui est réduit,donc ce n'est pas celui qui nous intéresse, nous ça va être celui-ci.
00:04:56 :Le 1Y74 etc.Donc je vais copier ce nom de classe, je vais retourner dans mon fichieret je vais le mettre ici en commentaire pour qu'on l'ait comme référence.
00:05:04 :Et je vais prendre également le prix ici, qui est le prix sans réduction.Donc c'est cette classe ici qui contient le prix.Je vais l'encore copier et le mettre ici.
00:05:12 :Donc en fait, ce qu'il va falloir faire ici,c'est vérifier si on a déjà celui qui existe ici,puisque ce n'est pas le cas dans le prix réduit.
00:05:19 :Si je reviens là, en fait, on va avoir la classe du prix originalqui ne nous intéresse pas.Ici, la classe du vrai prix qui est 1Y etc.
00:05:28 :Donc on va déjà vérifier si on a cette classe, si on a le 1Y.Et si ce n'est pas le cas, on va récupérer cette classe TYXJP1.
00:05:36 :Et ce que je vais faire, c'est remonter un petit peu plus haut,puisque moi je ne veux pas chercher sur toute la page au complet.
00:05:41 :Ce que je veux, c'est chercher dans chaque annonce cette information.Donc si je remonte un petit peu dans la hiérarchie,on va essayer de voir s'il n'y a pas un endroitoù on a quelque chose qui nous permettede récupérer la carte au completqui va contenir l'image, la description
00:05:55 :et ses classes avec le prix.Donc si je reviens un petit peu, là on est dans les descriptionsavec le nom de l'annonce.On voit un test ID ici qui pourrait être très pratiquepour aller récupérer le nom de l'annonce.
00:06:05 :Et si je remonte ici jusqu'à la carte,on va essayer de remonter le plus haut possible.Donc par exemple jusqu'à ce div.Donc là on a des divs et là on a un méta etc.
00:06:13 :Donc nous, c'est ce qui nous intéresse ici, le div.Donc là on a des divs qui n'ont ni classe ni IDdonc ce n'est pas très intéressant.
00:06:19 :Si on descend ici par contre, là on va avoir unData Test ID Card Container.Donc ça, ça pourrait être une bonne première option.Ensuite ici on a le lien pour cliquer sur l'allocation.
00:06:27 :Et si on descend ici,on va aller vérifier si on n'a pas des chosesqui pourraient être un peu plus spécifiques ici.Là on a le Card Title, donc là on est déjàun petit peu trop bas. Donc je vais remonter
00:06:37 :là où j'étais avec les deux divs. Là on a les métas.Et là, je vais essayer de remonterle plus haut possible.Encore on a des divs avec pas grand chose,des transitions, style.
00:06:47 :Et là on a un Item Prop, Item List Elementqui pourrait être pas mal aussi avec les métas.Donc je pense que je vais m'arrêterici au Item Prop. On va pouvoir
00:06:55 :récupérer les éléments qui ont ça. Je vais aller vérifierquand même que c'est bien quelque chose qui est uniqueet qui correspond à chaquecard. Donc je vais faire un CTRL F
00:07:03 :CTRL V pour pester ici.Là on a 1 sur 24, je vais descendreun petit peu. On a bien les carteset ça me semble être pas mal. On a à chaque fois
00:07:11 :les différentes cartes qui sont retournées, la première,la deuxième, etc.Et on va aller jusqu'à la fin j'imagine comme ça.Donc ça semble être pas mal. On a
00:07:19 :aussi d'autres annonces ici à des datessimilaires qui contiennent donc les différentesinformations dont on a besoin. Doncil y a celui-là et il y a le Card Containersi je me souviens bien qui étaitun autre endroit où on pourrait aller qui contient aussitoutes les informations. Ça je le vois
00:07:33 :puisque quand je mets en surbrillance on voit quele carré en surbrillance contient bien toutes lesinformations, l'image, le titre etle prix. Donc on pourrait utiliser
00:07:41 :le Data Test ID Card Container ou leItem Prop, Item List Elementqu'on avait au-dessus ici.A vous de voir. Le Data Test IDc'est pas mal puisque ça c'est des choses qui sont utiliséespar des outils de test.
00:07:53 :Donc c'est quelque chose qui ne devrait pastrop bouger. Donc dans mon cas je pense queje vais utiliser celui-ci pour ciblerles cartes puisque ça risque de ne pas bougermême avec d'autres mises à jour alors que leItem Prop, Item List Element, j'ai un peu plusde doute là-dessus. Donc je reviens dans
00:08:07 :MyCharm et on va récupérer tous les divsqui contiennent ce Data Test IDégale à Carte Container. Donc là encore je vais le mettredans un commentaire pour l'avoir en référence.
00:08:15 :On va créer une variabledivs et on va faire tout simplementsoup.findAll, donc findAll puisque làon va avoir plusieurs occurrences qui nous seront retournées.
00:08:23 :Si on voulait récupérer uniquement le premierpar exemple on pourrait faire un find. Là je veuxtous les récupérer donc je veux récupérer les divset qu'est-ce qu'on va récupérer ? On va récupérer
00:08:31 :le Data Test ID qui va être égal àCarte Container. Alors normalement si onavait pris le Item Prop on pourrait le mettre comme çaen propriété, comme ça, Item ListElement, ça marcherait, Elementcomme ceci. Là comme on a un
00:08:43 :paramètre ici avec un tiret, ça nemarchera pas de cette façon là puisqu'onne peut pas mettre des tirets comme ça et vousallez le voir avec la coloration syntaxiqueet les messages d'erreur. On ne peut pas mettre
00:08:53 :un tiret, ce n'est pas valide comme nomd'argument pour une fonction. Doncce qu'on peut faire ici c'est mettre un dictionnaireà la place avec des chaînesde caractère, donc une clé et une valeurcomme n'importe quel dictionnaire et ça vamarcher de la même façon que si on passait un
00:09:07 :argument avec sa valeur. Et là cequ'on va mettre donc c'est Carte Container à la placede Item List Element. Donc je ne vaispas aller plus loin pour l'instant et je vais faire tout simplementun return de 0pour terminer ma fonction ici. On
00:09:19 :retournera bien entendu le bon résultat par la suitemais je veux juste déjà tester que tout fonctionne.Donc là je vais retourner ici dans monname égale main, on va remettre le from disk égaleà true puisque comme on a vu, on ne veutpas faire des requêtes inutiles. Donc je vais
00:09:31 :partir du contenu qui est sur le disket je vais faire ungetAveragePrice, voilà, HTMLégale à content eton va mettre donc un point de debug comme je l'ai mis icipour voir ce que va contenir le divet je vais lancer mon script non plus cette fois
00:09:45 :avec la flèche verte mais avec le point dedebug ici puisqu'on va vouloir s'arrêterdans notre script après le div pour vérifierqu'on a bien récupéré ce qu'on souhaite. Donc là
00:09:53 :j'ai bien le point qui s'est arrêté icidonc on a récupéré le soupà partir du HTML et là on a biendes informations dans le div, donc si je vaisvoir dans la petite fenêtre ici, si elle n'est pas affichéevous pouvez aller dans le debug ici, ou aller
00:10:05 :dans view et c'est dans tout le windowdebug, vous allez pouvoir afficher les variablesqui sont contenues dans votre script au moment oùvous êtes arrêté au point de debug. Et si je vais
00:10:13 :voir dans le div, ici j'ai 18 résultatset on a bien les différents éléments quisemblent correspondre aux différents divsdonc là ça ne semble pas fonctionner, il ne veut pasl'afficher donc ce que je vais faire c'estaller dans le petit panneau iciet on va examiner un petit peu plus tout ça
00:10:27 :à la main, donc je vais afficheren string le div, doncle premier div, je vais appuyer surentrée pour valider et là vous voyez là j'ai bienrécupéré une chaîne de caractère puisque làon avait un objet tag et il nesemblait pas être trèscoopératif pour me montrer ce qu'il consommait
00:10:43 :donc là je récupère en chaîne de caractèrele premier div, on va aller dans viewet on va faire un petit search pour vérifierqu'on a bien le nom de la classe qu'on cherchaitdonc je fais un ctrl F là encore, alorson n'a pas cette classe ici, je vais essayer avec l'autre
00:10:55 :qui correspondait au prix sansréduction je crois, donc voilà, on a bien le256 euros ici qui correspondau prix, donc là on avait le prix sansréduction et le prix avec réductiondonc ça contient bien ce donton a besoin et on va pouvoir continuer pourboucler à travers ces divs et récupérer les informations
00:11:11 :qui nous intéressent. Donc maintenant qu'on estsûr d'avoir les bonnes données, on varécupérer les informations de prix qu'on avaitvu à l'intérieur des spans qui contenaientcette classe ou cette classedonc ce que je vais faire c'est boucler à travers chaque divdonc on va faire une boucle for très simple
00:11:25 :et on va créer une variable pricequi va être égale à div.findet là ce qui va nous intéresser c'est donc unspan qui va contenir la classedonc pour classe ici comme c'est un mot réservéil faut mettre un tiré du bas, c'est lenom de l'argument qui va nous servir à définir
00:11:39 :la classe qu'on souhaite cibler etici je vais mettre la première classe qu'onavait donc celle-ci et si jamais cediv n'est pas trouvé, donc là je crois que c'était dans le casd'un prix qui n'avait pas de réductiondonc si on a un prix qui a une réduction
00:11:51 :ça veut dire que ça, ça retourneranon ici, on n'aura aucun élémentdonc ce qu'on va faire c'est faire un or et on varefaire donc la même chose, donc je vais tout simplementcoller ce que j'avais déjà ici et on vamettre l'autre classe, donc la classe tyx
00:12:03 :ici, donc c'est à dire que làon va prendre l'un ou l'autre, si celui-là est trouvéon va prendre celui-là, sinon on va prendrel'autre tout simplement, donc ça va nous assurers'il y a un prix réduit de prendre le prixqui est réduit et s'il n'y a pas de prix réduit
00:12:15 :et bien de prendre le seul prix qui est disponiblesur la carte de l'annonceensuite qu'est-ce qu'on va faire, et bien on va tout simplementfaire une petite vérification ici puisqu'on pourraittomber dans des cas de figure ou pour une raisonou une autre, il n'y aurait aucune des deux classes
00:12:27 :et dans ce cas-ci on ne peut pas continueravec notre script puisqu'on ne peut pason n'a pas l'information de prix, donc on va direif not price, donc si price après tout çaest égal à none, et bien on va faireun warning cette fois-ci, on va juste
00:12:39 :faire un avertissement, on ne va pas faireune erreur, on va juste dire qu'on n'a pas réussidonc couldn't find price in divet on va mettre ici lecode du div en questiondonc là on fait juste un warning eton continue avec le prochain div pour récupérer
00:12:53 :le prix. Donc à ce niveau là je vais justefaire un print de price, on va abandonnerle debug pour le moment, je vais juste doncarrêter l'instance du script que j'avaisen cours et je vais relancer pour voir ce queça nous retourne, donc là on a bien les différents
00:13:05 :spans avec les informations qui nous intéressentavec les informations de prixet ce qui va nous intéressernous c'est bien sûr uniquement le prix et pastout ce qui est autour, donc le spanle symbole euro, etc. Donc pour
00:13:17 :récupérer déjà le texte à l'intérieur de labalise, je peux utiliser l'attribut textdonc je vais relancer, là vous allez voir que déjàon va enlever toutes les balises qui vont être autouret là ce qu'il reste c'est tout simplementà récupérer uniquement lesnombres et ne pas récupérer les
00:13:31 :espaces, le symbole d'euro et tout ce quipourrait être autre que lenombre brut du prix de la locationdonc pour ça moi ce que je vais faire c'estutiliser le module regexde Python qui est très pratique pour çaet qui va me permettre de supprimertout simplement tous les caractères qui ne sont pas
00:13:47 :des nombres de la chaîne de caractèresdonc je vais importer le module re qui signifieregular expression pour regexregex c'est un raccourcipour regular expressiondonc ces expressions régulières vont nous permettrede récupérer uniquement les nombresde notre chaîne de caractèrespour ça je vais utiliser la fonction sub
00:14:05 :qui va nous permettre de soustrairedes éléments d'une chaîne de caractèreset le pattern que je vais lui donnerc'est une expression régulière, je mets un r icidevant ma chaîne de caractères pour qu'elle soitinterprétée comme une chaîne de caractères brutedonc une raw string puisque dans les
00:14:19 :chaînes de caractères pour les expressions régulièreson va avoir beaucoup de symboles qui pourraient être interprétésdifféremment dans une chaîne de caractèressi on ne met pas le rpar exemple des retours à la ligne ou des choses qui pourraientperturber le bon fonctionnementde notre chaîne de caractères
00:14:33 :donc des caractères qui pourraient être interprétésnous on ne veut pas qu'ils soient interprétéson veut vraiment que ce soit juste les caractères tels qu'on les metc'est pour ça que pour les expressions régulièreson met le r ici pour indiquer qu'on veutune raw string, donc une chaîne de caractères brute
00:14:45 :donc là ce que je vais mettre c'estun slash si j'arrive à le trouverslash d qui signifie qu'on souhaitesupprimer tout ce qui n'est pas un digitdonc tout ce qui n'est pas un nombre, on souhaitele supprimer, en tout cas le remplacernous dans notre cas on va le supprimer, on pourrait mettre autre chose
00:14:59 :ici, on pourrait mettre Patrick pour remplacer par Patricknous ce qu'on veut ce n'est pas remplacer mais justeles supprimer, donc c'est un peu comme unreplace, le replace qu'on retrouve surles chaînes de caractères, dans ce cas-ci c'estla fonction sub qui nous permet de soustraireces éléments, en fait de les remplacer
00:15:13 :donc dans ce cas-ci de les soustraire puisque je mets une chaînede caractères vide, de l'élément qu'on va lui passerqui dans ce cas-ci va être price.txt
00:15:19 :je vais récupérer ça dans une variableque je vais appeler price tout simplement, donc je vais écraserle price qu'on avait icion pourrait si on le veut séparer pour que ce soit un peuplus clair dans le nom des variables, et mettreici price diff.txt pour ne pas clasher
00:15:31 :entre ces noms et que ce soit un petit peu plus clairdonc là je vais refaire un print deprice pour vérifier qu'on est toujours sur la bonne voieje relance le script et là ça fonctionnevous voyez qu'on a bien réussi à récupérerles prix sans les symboles euros
00:15:43 :sans les espaces et quoi que ce soitdonc ce qu'on va faire ensuite c'est tout simplementvérifier à ce stade là queon a bien quand même juste des nombrespuisque nous ce qu'on va vouloir faire c'est des opérationssur ces éléments, pour l'instant si on fait un print
00:15:55 :de type de pricevous allez voir qu'on est en présence de chaînes de caractèresdonc on ne va pas pouvoir additionner, soustraireetc. ces informations, pour ça il faut
00:16:03 :les convertir en nombre avecla fonction int, le problème c'est quesi on essaie de convertir, si jamaisen fait on a un problème quelque part, normalement ça ne devrait pasêtre le cas puisque ici on enlève tout ce quin'est pas un nombre mais on n'est jamais trop sûr
00:16:15 :donc moi je préfère rajouter une vérificationpour vérifier qu'on a bien quedes nombres à l'intérieur de cette chaîne de caractèresavec isDigit ici qui vavérifier qu'on a bien que des nombres de 0à 9, donc si c'est le caset bien tout simplement on va ajouterà notre liste, donc avec un append
00:16:31 :le price qui va être convertien nombre, ce qui va nous permettre ensuite de les additionneret de faire une moyenne de toutes ces informationset ici on va tout simplement faireun logger.debug
00:16:41 :pour indiquer qu'on a bien trouvé un prixcorrespondant, donc on va indiquer le prix ici, on va direprice find et on va avecles acolades ici insérer le prix qui a ététrouvé. On l'ajoute ensuite
00:16:51 :dans notre liste et si ce n'est pasle cas, donc si jamais on n'a pas de digitil y a un problème quelconque, là on va refaireun logger.warning en disant
00:16:59 :que le prix, et là on va intégrersa valeur ici avec les acolades, on va direis not a digit. Donc comme je vous dis, normalement
00:17:05 :il n'y a pas vraiment de cas de figure dans lesquels on devraitrentrer à l'intérieur de ça, puisqu'avec la regexon s'assure déjà de supprimer tout ce quin'est pas un nombre, mais je préfère quand mêmele faire de façon un peu plus claire ici, si jamaison changeait la regex ici pour quelque chose
00:17:17 :d'autre, et bien ça permettrait quand même de récupérerles erreurs potentielles si jamais quelqu'unchoisissait de modifier cette chaînede caractère dans la regex pour quelque chosequi soit un peu moins préciset qui permettrait potentiellementde laisser échapper des nombres dans notre chaîne de caractère.
00:17:31 :Et qu'est-ce que je vais faire, doncau final, je vais déjà relancer le script pour voirsi on a bien tout ce qu'il faut, donc làon a bien les price found avec les différentesvaleurs ici, et je vais faireun print à la fin de price pour voir
00:17:43 :si on a bien toutes les valeurs à l'intérieur de la listedonc ça semble bien être le cas.Donc ce que je vais faire ici tout simplement à la fin, et bienc'est retourner la moyenne de tout ça, donc je vaisenlever les bouts de code que j'avais ici
00:17:53 :et donc pour faire la moyenne des prixà l'intérieur de la liste, c'est assez simpleon va faire une somme de toutes les valeursà l'intérieur de la liste et divisertout ça par la longueur de la liste.
00:18:03 :Et on va également rajouter une petite fonctionround pour faire un arrondi de tout çaau cas où on ait des valeurs décimalesd'ailleurs il faudrait vérifier, je crois que surAirbnb de ce que j'ai vu, il n'y a que des valeursdonc que des nombres entierssi on avait des valeurs décimales, il faudrait probablement
00:18:17 :rajouter des vérificationspuisqu'on pourrait avoir selon les pays un pointou une virgule, et ça ne passerait pasforcément tous dans le int icilà j'ai vu que des nombres entiers donc ça ne devraitpas poser de problème, mais je préfère rajouterle round ici pour s'assurer d'avoirun contre rond à la fin. Et on va quand même
00:18:33 :rajouter une petite vérification, on vavérifier qu'on a bien des informations dansprice ici, parce que imaginez quepour une raison ou une autre, onpasse à chaque fois dans le continue iciet bien price serait une liste videet on ferait donc ici une division par 0et on se retrouverait donc avec une erreur
00:18:49 :de 0 division error. Donc je vaisquand même vérifier ici qu'on a bien l'endof price qui est défini, doncqui est plus grand que 0, sinon on va faire else 0tout simplement, on va retournerune valeur quand même, mais qui sera égale à 0.
00:19:01 :Donc voilà pour la récupérationde la moyenne de tous ces prix, on fait avecce petit if ici, donc c'est tout simplementune condition ternaire qui nous permetde faire un if else sur une seule lignequi nous permet donc d'évitercette 0 division error au cas oùon ne récupère aucun prix. Je vais refaire un petit
00:19:17 :reformat de mon code, là il y a des lignes un petit peutrop, moi j'ai mon raccourci clavier pour çaqui est option commande L sur Macsinon ça se trouve dans codeet vous allez retrouver le reformat de code iciqui va automatiquement remettre votre scriptet par la même occasion enlever les petits avertissements
00:19:31 :que vous aviez, qui si je ne me trompepas étaient juste des avertissementspar rapport au fait qu'il y a trop de lignesblanches ici, donc c'est des choses qui sontbien définies dans la pep 8 dePython, à savoir combiende lignes il faut avoir entre chaque élément
00:19:45 :entre chaque fonction etc. Donc là vous voyezj'en avais un petit peu trop, j'avais 3 lignes au lieude 2, donc moi je fais très souvent cepetit raccourci clavier qui me permet de tout remettreautomatiquement bien comme il fautet d'enlever ces avertissements dans le code.
00:19:57 :Donc voilà pour cette partie,normalement ça devrait être tout bon, on va quand même tester qu'on abien quelque chose de cohérent, donc je vaisfaire juste avant ici un printde price pour voir si c'est cohérentavec la liste qu'on a, et là on va faireune variable qu'on va appeler AveragePrice
00:20:11 :et on va l'afficher à la finpour voir si c'est cohérent comme je vous dis, donclà on a une moyenne de1005 et si on regarde avec les nombres qu'on a iciça semble être assezcohérent, on a 256,1200, 1600, donc on a aussientre des valeurs assez basses comme 256
00:20:27 :et assez hautes comme 1700donc ça me semble assez logiquequ'on se retrouve avec un nombre final qui soit de2005, donc on pourrait bien sûr faire le calcul quand même pourvérifier que tout est bon, mais normalement on a faittout ce qu'il faut ici comme il faut
00:20:39 :pour récupérer ce prix de la bonne façon.Donc voilà pour cette fonction,vous voyez il y a quand même pas mal de petites choses qui nous permettentde vérifier qu'on n'aura pas d'erreur, on pourrait simplifierle code avec quelque chose d'un petit peu plusbourrin, avec peut-être un try-except général
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.