Cours complet sur Python avec 10 projets réels (NOUVEAU) | Ardit Sulce | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Cours complet sur Python avec 10 projets réels (NOUVEAU)

teacher avatar Ardit Sulce, Python Instructor, Founder of PythonHow

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Vidéo d'introduction

      1:53

    • 2.

      Présentation des premières étapes

      1:39

    • 3.

      Installer Python et l'IDE

      0:57

    • 4.

      Instructions d'installation sur Windows+

      5:56

    • 5.

      Instructions d'installation sur Mac +

      5:12

    • 6.

      Instructions d'installation sur Linux +

      2:11

    • 7.

      Créer et exécuter un programme Python

      9:29

    • 8.

      Qu'est-ce que Python étonnamment ?

      3:35

    • 9.

      Commencer avec les bases de Python

      1:39

    • 10.

      Variables : Pourquoi et comment utiliser des variables +

      6:05

    • 11.

      Utilisation du shell interactif Python

      7:03

    • 12.

      Utiliser le terminal

      4:17

    • 13.

      Types simples : nombres entiers, chaînes et flottants

      3:21

    • 14.

      Liste des types de données

      1:31

    • 15.

      Utiliser des plages

      5:18

    • 16.

      Quels sont les attributs des types de données

      2:54

    • 17.

      Comment savoir du code dont vous avez besoin

      3:33

    • 18.

      Types de données du dictionnaire

      3:43

    • 19.

      Qu'est-ce qui fait d'un programmeur un programmeur

      2:10

    • 20.

      Types de données tuplées

      2:26

    • 21.

      Utiliser les types de données dans le monde réel +

      1:07

    • 22.

      Opérations avec des types de données

      0:55

    • 23.

      Messages d'erreur dans Python 3.10

      4:00

    • 24.

      Faire plus d'opérations avec des listes

      5:56

    • 25.

      Comment accéder aux éléments de la liste

      2:04

    • 26.

      Comment accéder aux tranches de liste

      2:49

    • 27.

      Comment utiliser les indices négatifs

      2:02

    • 28.

      Comment accéder aux caractères et aux tranches des chaînes

      1:30

    • 29.

      Comment accéder aux éléments des dictionnaires +

      1:52

    • 30.

      Plus de bases de Python : fonctions et conditions

      1:39

    • 31.

      Comment créer vos propres fonctions +

      5:25

    • 32.

      Quand utiliser l'impression et le retour +

      3:59

    • 33.

      Introduction aux conditionnels

      0:58

    • 34.

      Utiliser la condition If

      3:48

    • 35.

      Une explication conditionnelle ligne par ligne

      3:09

    • 36.

      Plus d'informations sur les conditionnels +

      2:21

    • 37.

      Utiliser le conditionnel Elif

      1:15

    • 38.

      Espace blanc +

      3:30

    • 39.

      Plus de bases de Python : Traiter les entrées utilisateurs

      0:38

    • 40.

      En savoir plus sur la saisie utilisateur

      7:55

    • 41.

      Formatage des cordes +

      4:51

    • 42.

      Formater des chaînes avec plusieurs variables +

      4:17

    • 43.

      Introduction à For Loops +

      0:59

    • 44.

      Comment et pourquoi utiliser pour les boucles

      5:46

    • 45.

      Comment faire une boucle dans un dictionnaire +

      1:12

    • 46.

      Comment et pourquoi utiliser While Loops

      2:59

    • 47.

      Boucles pendant avec entrée utilisateur

      3:12

    • 48.

      Pendant les boucles, les pauses et la poursuite +

      3:22

    • 49.

      Créer un programme Python

      0:59

    • 50.

      Déclaration de problème en Python

      3:48

    • 51.

      Aborder le problème

      1:46

    • 52.

      Créer la fonction Maker

      5:14

    • 53.

      Construire la boucle

      4:39

    • 54.

      Rendre la sortie conviviale

      3:28

    • 55.

      Introduction à la compréhension des listes

      0:50

    • 56.

      Une compréhension simple des listes

      3:27

    • 57.

      Compréhension des listes avec une condition Si

      1:22

    • 58.

      Compréhension des listes avec une condition si-else +

      1:37

    • 59.

      Plus sur les fonctions

      0:35

    • 60.

      Fonctions avec plusieurs arguments

      1:45

    • 61.

      Paramètres par défaut et non par défaut, arguments relatifs aux mots-clés et autres que les mots-clés

      3:00

    • 62.

      Fonctions avec un nombre arbitraire d'arguments non clés

      3:32

    • 63.

      Fonctions avec un nombre arbitraire d'arguments de mots-clés +

      1:34

    • 64.

      Introduction au traitement de fichiers

      1:30

    • 65.

      Traiter les fichiers avec Python

      1:12

    • 66.

      Lire du texte à partir d'un fichier +

      3:07

    • 67.

      Curseur de fichier

      1:49

    • 68.

      Fermer un fichier

      1:34

    • 69.

      Ouvrir des fichiers à l'aide de

      1:45

    • 70.

      Utiliser différents parcours de fichiers

      1:25

    • 71.

      Rédiger du texte dans un fichier

      3:59

    • 72.

      Joindre du texte à un fichier existant +

      3:30

    • 73.

      Modules intégrés dans Python

      5:53

    • 74.

      Modules Python standard

      8:34

    • 75.

      Modules tiers

      6:28

    • 76.

      Exemple de modules tiers

      2:45

    • 77.

      Introduction à l'utilisation de Python avec des fichiers CSV, JSON et Excel

      0:35

    • 78.

      La bibliothèque Pandas pour + l'analyse des données

      3:07

    • 79.

      Démarrer avec Pandas

      8:37

    • 80.

      Configurer le carnet de notes Jupyter +

      9:05

    • 81.

      Charger des fichiers Csv dans Python

      4:20

    • 82.

      Charger des fichiers Excel dans Python

      0:58

    • 83.

      Charger des fichiers texte dans Python

      2:30

    • 84.

      Introduction à Numpy++

      8:07

    • 85.

      Comment convertir des images en tableaux Numpy

      5:40

    • 86.

      Indexer, découper et itérer des tableaux Numpy

      4:07

    • 87.

      Empiler et diviser des tableaux de nombres

      5:44

    • 88.

      Appli 1 : carte Web avec Python et HTML +

      1:05

    • 89.

      HTML et Python : Créer une carte HTML avec Python +

      11:35

    • 90.

      HTML&Python Ajout d'un marqueur à la carte

      8:23

    • 91.

      HTML et Python : utiliser des boucles de for-loops lorsque vous ajoutez plusieurs marqueurs

      4:43

    • 92.

      HTML et Python : Traitement des fichiers en ajoutant des marqueurs à partir de fichiers

      13:06

    • 93.

      HTML et Python : manipulation de chaînes

      5:07

    • 94.

      Utiliser des fonctions - Créer une fonction de génération de couleur pour les marqueurs ++

      7:55

    • 95.

      HTML et Python : comment ajouter et styliser des marqueurs

      1:53

    • 96.

      HTML et Python : travailler avec des données JSON

      5:34

    • 97.

      Python et JSON : ajouter une couche de carte de population

      3:20

    • 98.

      Python et JSON : Styliser la couche de population

      9:34

    • 99.

      Python et JSON : ajouter un panneau de contrôle des calques +

      6:23

    • 100.

      Appli 2 : Thesaurus anglais +

      4:10

    • 101.

      Comprendre votre ensemble de données en Python +

      4:54

    • 102.

      Charger des données JSON dans Python

      3:52

    • 103.

      Faire en sorte que l'application retourne la définition d'un mot

      3:25

    • 104.

      Comment l'application gère les mots qui ne existent pas

      2:51

    • 105.

      Comment l'application traite les mots sensibles

      3:09

    • 106.

      Calculer la similarité entre les mots

      4:39

    • 107.

      Trouver les mots les mieux correspondants dans une liste de mots

      6:07

    • 108.

      Trouver le mot le plus similaire dans un groupe de mots

      9:42

    • 109.

      Obtenir la confirmation de l'utilisateur

      10:17

    • 110.

      Optimiser la sortie finale +

      7:51

    • 111.

      Comment corriger les erreurs de syntaxe dans Python

      8:22

    • 112.

      Comment corriger les erreurs d'exécution dans Python

      10:58

    • 113.

      Comment corriger les erreurs difficiles

      5:38

    • 114.

      Comment poser une bonne question en matière de programmation

      5:59

    • 115.

      Réaliser les erreurs de gestion du code par vous-même

      7:59

    • 116.

      Introduction à la vision par ordinateur avec Python +

      2:29

    • 117.

      Charger, afficher, redimensionner et créer des images ++s avec OpenCV

      14:00

    • 118.

      Explication de l'exercice précédent

      4:29

    • 119.

      Détecter des visages dans les images avec OpenCv et Python

      19:38

    • 120.

      Capturer des vidéos avec OpenCv et Python

      19:45

    • 121.

      Application 3 : Application de détection de mouvement par webcam

      1:58

    • 122.

      Détection des objets en mouvement depuis le Webcamp avec Python

      29:57

    • 123.

      Stocker les horodatages de détection d'objets dans un fichier CSV ++

      20:38

    • 124.

      Introduction à la bibliothèque Bokeh +

      2:02

    • 125.

      Créer votre premier tracé bokeh

      13:52

    • 126.

      Utiliser le bokeh avec Pandas +

      4:51

    • 127.

      Créer une série chronologique +

      6:36

    • 128.

      Plus d'exemples de visualisation avec bokeh

      4:21

    • 129.

      Tracage des intervalles de temps à partir des données générées par l'application Webcam

      14:05

    • 130.

      Mettre en œuvre une fonction de survolement

      9:57

    • 131.

      App 4 Partie 1 - Analyse et visualisations des données avec Pandas et Matplotlib +++

      2:52

    • 132.

      Explorer l'ensemble de données avec Python et Pandas +

      9:17

    • 133.

      Sélectionner des données avec Python

      13:32

    • 134.

      Filtrer l'ensemble de données

      7:58

    • 135.

      Filtrage par temps

      9:55

    • 136.

      Transformer les données en informations

      11:00

    • 137.

      Agréger et tracer les notes moyennes par jour

      14:43

    • 138.

      Rééchantillonnage et traçage des notes moyennes par semaine

      9:42

    • 139.

      Rééchantillonnage et traçage des notes moyennes par mois

      2:16

    • 140.

      Évaluations moyennes par cours par mois

      10:44

    • 141.

      Quel jour de la semaine les gens sont-ils les plus heureux ?

      9:45

    • 142.

      Autres types d'intrigues +

      6:06

    • 143.

      Appli 4 (Partie 2) : analyse et visualisation des données avec des tracés interactifs dans le navigateur

      2:55

    • 144.

      Créer une application Web simple

      12:24

    • 145.

      Créer une application Web de visualisation de données

      23:26

    • 146.

      Modification des étiquettes de graphiques dans l'application Web

      2:59

    • 147.

      Ajouter un graphique des séries chronologiques à l'application Web

      5:20

    • 148.

      Plusieurs séries temporelles

      18:59

    • 149.

      Création de plusieurs flux de séries chronologiques

      6:55

    • 150.

      Ajouter un graphique circulaire à l'application Web +

      9:29

    • 151.

      Démo de l'application 5 : développement Web avec Flask : créer un site Web personnel

      1:41

    • 152.

      Votre premier site Web Flask avec ajout d'un avertissement de serveur

      8:07

    • 153.

      Préparer des modèles HTML +

      4:09

    • 154.

      Ajouter un menu de navigation de site Web

      8:32

    • 155.

      Améliorer l'interface de site Web avec CSS++

      5:59

    • 156.

      Créer un environnement virtuel Python

      6:22

    • 157.

      Comment utiliser le service PythonAnywhere

      7:47

    • 158.

      Déployer l'application Flask sur PythonAnywhere +

      7:52

    • 159.

      Introduction à la bibliothèque Tkinter

      2:35

    • 160.

      Créer une fenêtre GUI et ajouter des widgets

      9:11

    • 161.

      Connecter des widgets GUI avec des fonctions ++

      9:32

    • 162.

      Comment Python interagit avec les bases de données

      3:00

    • 163.

      Se connecter à une base de données SQLite avec Python

      13:11

    • 164.

      SQLite : sélectionner, insérer, supprimer et mettre à jour des enregistrements SQL

      6:53

    • 165.

      Base de données PostgreSQL avec Python

      8:46

    • 166.

      PostGreSQL : sélectionner, insérer, supprimer et mettre à jour des enregistrements SQL

      12:51

    • 167.

      Application 6 : Application d'inventaire de livres

      2:25

    • 168.

      Concevoir l'interface utilisateur

      5:54

    • 169.

      Codage de l'interface frontale

      13:28

    • 170.

      Codage du backend de l'application

      24:28

    • 171.

      Connecter l'front-end au back-end, 1ère Partie

      17:30

    • 172.

      Connecter l'front-end au back-end, 2e Partie ++

      21:59

    • 173.

      Créer des fichiers exécutables .exe et .app à partir du script Python

      5:00

    • 174.

      Qu'est-ce que la programmation orientée objet (POO)

      4:59

    • 175.

      Utiliser le POP dans un programme, Partie 1

      13:01

    • 176.

      Utiliser le POOP dans un programme

      14:05

    • 177.

      Créer une page de connexion d'utilisateur

      21:55

    • 178.

      Créer un cours de compte bancaire

      21:10

    • 179.

      Créer des cours par héritage

      12:08

    • 180.

      Glossaire OOP +++

      8:12

    • 181.

      Appli 7 : Démonstration d'une application mobile de bien-être +

      1:27

    • 182.

      Créer une page d'inscription d'utilisateur

      9:52

    • 183.

      Capturer l'entrée de l'utilisateur

      6:25

    • 184.

      Traitement des inscriptions des utilisateurs +

      11:22

    • 185.

      Créer une page de réussite pour l'inscription

      4:27

    • 186.

      Basculer entre les pages

      2:55

    • 187.

      Traiter les informations de connexion de l'utilisateur

      16:52

    • 188.

      Afficher la sortie à l'utilisateur +

      15:10

    • 189.

      Styliser la page de connexion

      14:22

    • 190.

      Styliser la page d'inscription

      1:11

    • 191.

      Rendre les boutons interactifs

      9:01

    • 192.

      Créer une zone faisant défiler

      8:22

    • 193.

      Préparer l'environnement pour déployer l'application mobile

      13:10

    • 194.

      Créer un fichier APK pour Android

      10:29

    • 195.

      Installer le fichier APK sur Android

      3:52

    • 196.

      Web scraping avec Python et Beautiful Soup

      1:57

    • 197.

      Comment fonctionne le Web scraping +

      4:30

    • 198.

      Exemple de Web scraping avec Python

      16:22

    • 199.

      Application 8 : Démonstration de l'application Web scrapping ++

      2:28

    • 200.

      Charger la page Web dans Python

      7:15

    • 201.

      Extraire les éléments Div

      11:34

    • 202.

      Gratter les adresses des propriétés

      14:39

    • 203.

      Gratter des éléments spéciaux

      12:06

    • 204.

      Enregistrer les données extraites dans des fichiers CSV

      8:26

    • 205.

      Naviguer sur plusieurs pages Web +

      17:15

    • 206.

      Appli 9 : Blog Django & Bootstrap et application Translator +

      10:56

    • 207.

      Configurer un environnement virtuel

      12:42

    • 208.

      Créer un projet Django

      11:12

    • 209.

      Créer un modèle de base de données pour l'application de blog

      12:22

    • 210.

      Les vues dans Djago

      4:41

    • 211.

      Modèles d'URL

      15:16

    • 212.

      Créer des affichages de l'interface d'administration

      8:51

    • 213.

      Créer la page d'accueil

      7:32

    • 214.

      Créer la page À propos

      2:44

    • 215.

      Référencer les articles de blog sur la page d'accueil

      8:04

    • 216.

      Ajouter Bootstrap à Django

      16:28

    • 217.

      Héritage de modèle

      12:37

    • 218.

      Appliquer le style Bootstrap au menu de navigation

      4:14

    • 219.

      Démo de l'application de traduction Django

      3:11

    • 220.

      L'étape du développement d'une application Django

      3:29

    • 221.

      Créer une structure d'application vide pour Translator App

      2:39

    • 222.

      Créer une forme Django

      7:45

    • 223.

      Obtenir et traiter les données des utilisateurs par le biais d'un formulaire

      10:09

    • 224.

      Compléter l'application Translator

      6:12

    • 225.

      Démo de l'application 10 : application Web de Géocoder +

      7:31

    • 226.

      Partie 1 de la création de l'application Web Geocodeur

      16:21

    • 227.

      Partie 2 de la création de l'application Web Geocodeur +

      5:51

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

112

apprenants

--

À propos de ce cours

À propos de ce cours

Si vous avez toujours voulu apprendre Python mais n'avez aucune expérience préalable en programmation, ce cours est fait pour vous !

Ardit a passé des années à enseigner Python aux débutants et a développé une approche pratique, basée sur des projets, qui rend l'apprentissage à la fois amusant et pratique. Vous acquerrez des compétences essentielles en programmation tout en travaillant sur des applications réelles, ce qui vous aidera à gagner en confiance et en indépendance en codage.

Dans ce cours, je vais vous expliquer :

  • Les principes de base de Python, notamment la syntaxe, les variables, les boucles et les fonctions.

  • Comment créer 10 applications réelles du début à la fin

  • Développement Web avec Flask et Django

  • Techniques d'analyse et de visualisation des données

  • Développement d'applications GUI de bureau

  • Techniques de web scraping pour extraire des données des sites web

  • Déployer des applications sur des serveurs live et créer des exécutables autonomes

  • Meilleures pratiques pour écrire un code propre, efficace et gérable

Vous allez créer : Un portefeuille de 10 applications pratiques, notamment :

  1. Un générateur de carte Web des volcans

  2. Un détecteur d'objets utilisant des flux de webcam en direct

  3. Un site web personnel Python et Flask

  4. Une application de bureau d'inventaire de livres avec une base de données SQL

  5. Un tableau de bord d'analyse et de visualisation des données

  6. Une application mobile compatible avec Android et iOS

  7. Un web scraper immobilier

  8. Une application Web basée sur des formulaires qui collecte et envoie des e-mails aux données des utilisateurs

  9. Un blog et une application web de traducteur construite avec Django

  10. Un processeur de fichiers Excel pour la gestion des données

Même si vous êtes complètement novice en codage, vous trouverez ces techniques étape par étape faciles à suivre et à appliquer à vos propres projets !

Comment trouver les ressources liées aux leçons ? 

Si le nom d'une leçon est suivi d'un signe « + », veuillez consulter les fichiers joints disponibles sur ce lien pour trouver une ressource portant le même numéro que la leçon portant le signe « + ». Vous y trouverez également le code source des 10 applications construites pendant le cours.

Vous pouvez également trouver Ardit ici :
Site Web : https://pythonhow.com/

Rencontrez votre enseignant·e

Teacher Profile Image

Ardit Sulce

Python Instructor, Founder of PythonHow

Enseignant·e

Hi, I am Ardit! I am a Python programmer, and a top Python instructor on Udemy having taught over 500,000 students through my courses. I have used Python together with companies from various countries, such as the Center for Conservation Geography, to map and understand Australian ecosystems, image processing with the Swiss in-Terra, and performing data mining to gain business insights with the Australian Rapid Intelligence.

Teaching is my passion and you will find that I love to explain everything using real-world examples.

Happy learning!

Voir le profil complet

Level: All Levels

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Vidéo d'introduction: Bonjour, je suis Ardit, un développeur et instructeur Python avec des années d' expérience dans l'enseignement de la programmation à plus de 500 000 étudiants dans le monde entier Je suis également le fondateur et l' auteur de pythonhow.com, un hub dédié à J'ai créé certains des cours de Python les plus populaires en ligne, et dans ce cours Skillshare, je vais vous aider à acquérir des compétences Python de niveau débutant à avancé en créant des projets concrets cours commence par les fondamentaux, aucune expérience préalable n'est donc requise. Nous aborderons Python à partir de zéro et, au fur et à mesure de notre progression, nous appliquerons ce que nous avons appris en créant dix applications réelles. Vous acquerrez une expérience pratique analyse de données à l'aide de Pandas, travaillant avec des ensembles de données essentiels avec Python tels que JSO, SQL, CSV, et même en développant des applications Web et des applications et Vous allez même créer une application mobile à l' aide de la bibliothèque Kev en Python Ce sont des applications du monde réel avec des données réelles et de nombreuses fonctionnalités. Vous allez acquérir une véritable expérience pratique, prêt à appliquer ces compétences pour un poste de programmeur par la suite. Alors, à qui s'adresse le cours ? Ce cours est parfait pour les débutants qui souhaitent apprendre Python de A à Z, ainsi que pour les apprenants de niveau intermédiaire souhaitent créer des projets pratiques. Aucune expérience de codage n'est donc requise, juste un ordinateur et une volonté d'apprendre La meilleure façon d'apprendre la programmation est par la pratique C'est donc exactement ce sur quoi nous nous concentrons dans ce cours. Chaque projet que vous construisez renforcera vos compétences et vous donnera quelque chose de tangible à mettre en valeur. Donc, si vous êtes prêt à apprendre Python manière engageante et pratique, commençons. Je te verrai au premier cours. 2. 2. Introduction aux premiers pas: Bonjour, bienvenue dans une nouvelle vidéo, et ceci est une vidéo d'introduction à la section des fonctions et des conditions. Vous entrez maintenant dans une section plus avancée de Python. fonctions et les conditionnels sont des concepts de base avancés de Python, et ce sont des blocs très fondamentaux que vous pouvez utiliser pour rendre vos programmes plus intelligents et plus faciles à gérer Ainsi, vous rendez vos programmes plus intelligents en leur faisant prendre des décisions que vous pouvez mettre en œuvre via des conditionnels. Donc, si votre programme reçoit des entrées et que vous voulez réfléchir, vous voulez lui faire savoir si vous voulez lui faire savoir si ces entrées sont correctes ou non, et vous voulez faire quelque chose si cette entrée est vraie et autre chose si cette entrée est fausse. Vous prenez donc des décisions dans votre programme par le biais d'un blocage conditionnel. Et puis vous avez les fonctions , d'autre part, les fonctions sont utilisées pour encapsuler des blocs de code, donc des blocs de code similaires. Il vous aide à organiser votre code. Ainsi, une fonction, par exemple, pourrait convertir des dollars américains en euros. Cette fonction fait donc certaines choses et le fait bien. Il obtient donc l'USD en entrée, et il vous donne des euros en sortie. Ainsi, à l'intérieur de la fonction, vous avez les opérations mathématiques qui effectuent la conversion. conditions et les fonctions sont donc deux choses que vous allez apprendre dans cette section à travers des exemples, bien sûr. Je vous verrai donc dans la prochaine vidéo. 3. Installer Python et l'IDE (pas de filigrane)c: Bonjour. Dans cette conférence, je vais vous montrer comment installer Python et l'IDE de code Visual Studio. Maintenant, si Python est installé et si vous avez déjà un IDE, vous pouvez ignorer cette vidéo. Vous pouvez donc également utiliser d'autres IDE. Le code Visual Studio est juste ma préférence, et je recommande d'utiliser le code Visual Studio. Où sont donc les instructions ? Eh bien, si vous préférez les instructions sous forme de texte, vous pouvez télécharger les PDF à partir des ressources du cours Si vous voulez des instructions vidéo, les vidéos sont plus longues. Donc, si vous rencontrez des problèmes avec une version texte , vous voudrez peut-être télécharger les vidéos par la suite. Mais les versions textuelles devraient suffire. Et les instructions sont destinées aux utilisateurs de Windows, Mac et Linux. Ainsi, en fonction de votre système d'exploitation, vous pouvez choisir de télécharger les fichiers correspondant à votre propre système d'exploitation. Merci donc, et je vous parlerai lors de la prochaine conférence. 4. 4. Instructions d'installation sur Windows +: Bonjour, dans cette partie, je vais vous montrer comment installer Python sous Windows et également le code Visual Tudo sous Windows Commençons donc par installer Python. Il suffit de rechercher Python sur Google, et la première page devrait être le site officiel de Python, python.org Sur python.org, allez dans Téléchargements et cliquez sur ce bouton Donc, actuellement, la version actuelle est Python 3.10 0.3. Dans votre cas, cela pourrait être Python 3.11 peut-être. Donc, peu importe ce que vous y voyez, téléchargez-le. Une chose, si vous utilisez Windows 7 ou une version antérieure, cliquez sur ce lien pour consulter la liste des téléchargements et télécharger Python 3.8 ou une version antérieure, car 3.10 ne fonctionnera pas pour Windows 7 ou une version antérieure de Maintenant, je vais cliquer sur Python 3.10 0.3. Ce fichier exécutable sera téléchargé, alors vous devez installer cet exécutable. Cette fenêtre devrait apparaître. Maintenant, si vous avez déjà installé Python, ce bouton indiquera «   mise à niveau » au lieu de « installer ». Donc, si c'est le cas, il suffit de procéder à une mise à niveau. Si vous n'avez pas de Python sur votre système, vous devez appuyer sur Installer maintenant, mais vous devez également vérifier cela dans Python 3.10 pour accéder au chemin Assurez-vous donc que cette case est cochée et accédez à Installer maintenant ou à effectuer une mise à niveau. Ma configuration a réussi. Je vais donc fermer cette fenêtre, cliquer sur le bouton de recherche Windows et ouvrir l'invite de commande. Recherchez donc Command Prompt ou simplement CMD et ouvrez cette application Il s'agit maintenant d'une interface en ligne de commande qui vous permet d'interagir avec votre système d'exploitation Windows. Maintenant, nous allons nous assurer que Python a été correctement installé. Pour cela, vous devez taper P Y, espace moins trois. Appuyez sur Entrée, et si cela apparaît avec ces trois flèches, cela signifie que Python a été installé. Ce que vous voyez maintenant, c'est le shell interactif Python, également connu sous le nom de console Python. Donc, maintenant, vous pouvez taper du code Python. Par exemple, 3.4, appuyez sur Entrée et vous obtenez le résultat sept. C'est ce qu'on appelle un mode de programmation interactif. Pour quitter cette option, vous pouvez appuyer sur Quitter entre parenthèses, ouvrir et fermer les parenthèses, appuyer sur Entrée et revenir à la ligne de commande Windows Maintenant, si nous fermons cette fenêtre, nous perdrons le code que nous y avons écrit, nous ne l'avons donc pas enregistré. s'agissait simplement d'une session interactive laquelle vous saisissiez simplement au cours de laquelle vous saisissiez simplement des codes à des fins de test et vous ne vouliez pas enregistrer le code. Si vous souhaitez enregistrer le code, vous avez besoin d'un IDE. C'est donc ce que nous allons faire ensuite. Nous allons installer un IDE. Passez donc à la recherche de code Visual Studio sur Google. Mais si vous souhaitez utiliser un autre IDE, par exemple Pycharm, n'hésitez pas à l'utiliser Le code Python que j'écrirai sur le code Visual Studio sera le même que celui que vous allez écrire vous-même. IDE préféré. L'IDE n'est qu'une question de préférence. Allons-y et cliquons sur les premiers résultats. Code Visual Studio. Ne confondez pas le code Visual Studio avec Visual Studio. Il s'agit de deux IDE différents. Code Visual Studio, téléchargez-le pour Windows et attendez que le fichier exécutable soit téléchargé. Ensuite, vous devez cliquer sur l' exécutable pour l'installer. Il suffit donc de passer en revue le processus d'installation. Suivant, suivant. Ensuite, je préfère cocher ces options. Il vous donne la possibilité d'ouvrir des fichiers Python sur du code Visual Studio en cliquant avec le bouton droit sur vos fichiers Python sur votre Windows Exploder Cliquez ensuite sur Suivant et sur Installer. Mon installation a réussi, je vais donc terminer, et maintenant je vais ouvrir le code Visual Studio. Je vais donc simplement rechercher le code Visual Studio, ou si vous utilisez uniquement VSC, c'est l'acronyme généralement utilisé pour le code Visual Studio Vous devez donc ouvrir le code Visual Studio. Vous y trouverez quelques notes de publication. Si vous voulez les lire, je vais également fermer cette fenêtre. Et c'est donc le code de Visual Studio. L'installation du code Python et Visual Studio s'est bien déroulée sur mon ordinateur. Le code Python et Visual Psudio fonctionnent bien. Maintenant, dans la vidéo suivante, je vais vous montrer comment utiliser les deux ensemble, donc comment utiliser Python dans le code Visual Studio. Je vous le dirai dans la prochaine vidéo. 5. 5. Instructions d'installation sur Mac +: Bonjour. Dans cette vidéo, je vais vous montrer comment installer Python et l'IDE de code Visual Studio sur Mac. Nous allons commencer par installer Python. Donc, si vous recherchez Python sur Google, les premiers résultats devraient vous diriger vers la page Web officielle de Python. Et si vous passez au téléchargement puis cliquez sur ce bouton, cela devrait télécharger la dernière version de Python. Dans mon cas, il s'agit de 3,10 0,3. Dans votre cas, il pourrait être encore plus récent, par exemple 3.11. Quelle que soit la version, il suffit d'appuyer sur le bouton télécharger le package d'installation. Cliquez ensuite sur le fichier pour l'installer. Maintenant, si une autre version de Python est installée sur votre ordinateur, vous pouvez toujours installer cette nouvelle version. Les deux versions se comporteront comme des logiciels indépendants distincts, et vous pourrez les utiliser toutes les deux. Je vais vous montrer comment faire. Appuyez donc sur « Continuer », «   Continuer », « Continuer ». D'accord. Installez. Mon installation de Python a réussi. Alors maintenant, pour vérifier si Python a vraiment été installé avec succès, je peux ouvrir le terminal. Donc, pour cela, vous devez utiliser Spotlight pour rechercher Terminal ou Alfred. Si vous utilisez Alfred, ouvrez le programme du terminal, et sur le terminal, vous voulez taper Python 3.10 ou 0.11 si vous avez installé Python 3.11 Donc, en fonction de ce que vous aviez ici, vous souhaitez saisir cette version. Juste comme ça, sans espaces. Donc 3.10 dans mon cas, appuyez sur Entrée et cela devrait apparaître. Vous voyez donc ces trois flèches ici. Ici, vous pouvez écrire des codes, par exemple, trois plus quatre, et vous obtenez le résultat sept. C'est ce que l'on appelle shell interactif Python ou la console Python. C'est un moyen rapide d'écrire du code. Vous pouvez quitter le shell, le shell Python pour retourner au terminal. Alors, on y va. Et maintenant, nous sommes dans le terminal. Si vous souhaitez utiliser une autre version de Python que vous avez installée, vous pouvez utiliser Python 3.9, par exemple, si Python 3.9 est installé, et cela devrait ouvrir cette autre version de Python comme vous le voyez ici. Encore une fois, vous pouvez sortir, retourner au terminal. Vous pouvez fermer cette fenêtre, et maintenant le code est également perdu. Nous n'avons donc enregistré le code dans aucun fichier. Nous pouvons le faire en utilisant un IDE, et c'est ce que nous allons faire ensuite. Nous allons télécharger et installer le code de Visual Studio. Le code Visual Studio est un IDE. Maintenant, l'IDE est une question de préférence. Donc, si vous avez un identifiant favori, par exemple, vous utilisiez Pycharm auparavant, n'hésitez pas à utiliser Pycharm car le code que j'écrirai dans les vidéos sera le même Dans mon cas, j'utiliserai le code Visual Studio. Il suffit donc de rechercher cela sur Google, d' accéder aux premiers résultats, et cela devrait vous mener au code Visual Studio. Maintenant, ne confondez pas le code Visual Studio avec Visual Studio. Il s'agit de deux IDE différents. Le code Visual Studio est celui que nous utilisons. Appuyez donc sur ce bouton pour télécharger code Visual Studio et attendez que l'installation soit téléchargée. Cela m'a donc permis de télécharger un fichier Zip. Le fichier zip a été extrait, et maintenant j'ai ce fichier si je double-clique dessus et que j'appuie sur Ouvrir. Cela ouvrira le code Visual Studio. C'est donc le code de Visual Studio. Notez que l'application se trouve actuellement dans mon dossier de téléchargements. Vous pouvez donc faire glisser ce fichier vers le dossier des applications. Vous pouvez fermer cette fenêtre de code Visual Studio, et normalement vous pouvez l'ouvrir avec Spotlight ou, si vous utilisez Alfred vous pouvez rechercher Visual Studio Code, et vous le verrez dans mon dossier d' applications maintenant visualsudio code Ouvrez-le et c'est encore une fois Visual Studio Code. Dans la vidéo suivante, je vais vous montrer comment utiliser Python dans le code de Visual Studio afin créer des programmes dans des fichiers que nous pouvons enregistrer et réutiliser. Je vous parlerai donc dans la prochaine vidéo. 6. 6. Instructions d'installation sur Linux +: Voici comment installer Python et l' IDE de code Visual Studio sur des ordinateurs Linux. Vous pouvez installer Python sous Linux à l'aide du terminal. Recherchez donc un terminal parmi vos programmes, ouvrez le terminal et vous souhaitez d'abord effectuer une mise à jour de l'application Psudo Entrez le mot de passe de votre Linux pour sudo et appuyez sur Entrée Une fois la mise à jour terminée, vous devez installer Python Three par l'application sudo Et cela devrait installer Python sur votre ordinateur. Et la dernière version de Python disponible a été installée. C'est pourquoi j'ai reçu ce message ici qui dit que Python 3 est déjà la nouvelle version, donc tout va bien. Nous allons maintenant installer l'IDE de code Visual Studio. Ouvrez donc votre navigateur, rendez-vous sur le site officiel de Visual Studio Code, à savoir code.visualstudio.com Sinon, recherchez Visual Studio Code sur Google. Mais ne confondez pas le code Visual Studio avec Visual Studio. Visual Studio et Visual Studio code sont deux IDE différents, et celui que nous utilisons dans le cours est le code Visual Studio. Alors, sur le site Web, accédez au téléchargement du fichier en profondeur. Attendez que le fichier soit téléchargé, puis double-cliquez sur le fichier. Le code Visual Studio peut également être installé sous forme de package Snap, ce serait donc une alternative à son installation. Sinon, tu peux suivre mes instructions. Entrez vos mots de passe Linux et attendez que l' installation soit terminée. Une fois l'installation terminée, vous pouvez rechercher le code Visual Studio Visual Studio devrait donc apparaître, que vous pouvez ouvrir et qui devrait ressembler à ceci. C'est ainsi que l'on installait le code Python et Visual Studio sous Linux. Dans la vidéo suivante, je vais vous montrer comment créer votre premier programme Python dans le code Visual Studio. Merci. 7. Création et exécution d'un programme Python (pas de filigranes): Bonjour, bon retour. Dans cette vidéo. Je vais vous montrer comment créer un programme Python et comment exécuter ce programme Python afin que vous puissiez obtenir le résultat. Évidemment, ce programme sera très simple car l' objectif ici est de vous montrer le processus de création d' un programme et de son exécution. Pour créer un programme en Python, vous avez besoin de deux choses. L'un est Python et l'autre est un IDE ou un éditeur de texte. Un IDE n'est qu'un éditeur de texte avancé. Je vais donc utiliser le code Visual Cilia comme IDE. C'est celui-ci ici, puis je créerai un projet ici. Un projet n'est rien d'autre que la création d'un répertoire vide. Tout d'abord, vous devez accéder à votre système de fichiers, Windows Explorer ou à MacFinder et vous assurer que le dossier est vide Le premier projet est le nom de ce répertoire vide. Dans l'Explorateur Windows, puis vous souhaitez revenir au code Visual Studio. Si vous utilisez un autre IDE, le processus est fondamentalement le même. Vous allez dans le fichier, puis vous allez dans OpenFoldero Make it could be written just open. Alors cliquez dessus. Ensuite, vous voulez accéder à ce dossier vide, double-cliquer dessus, puis sélectionner le dossier. Un code Visual Studio ouvrira ce dossier en tant que répertoire racine du projet. Vous avez cet avertissement ici, c'est bien de dire, oui, je fais confiance aux auteurs. Vous pouvez voir maintenant que pour le premier projet, le nom d'un dossier est également le nom du projet. Ce que je vais faire maintenant, c'est écrire un programme, un programme Python. Et cela consiste à créer un fichier texte dans lequel vous écrivez le programme lui-même. Pour créer ce fichier texte, vous pouvez accéder à nouveau à votre dossier et le créer ici, ou normalement, nous créons ce fichier à partir de l'IDE. Donc, si vous cliquez ici, écrivez un nom pour le fichier, tel que M underscore program Il n'est pas recommandé d'utiliser des espaces dans les noms des fichiers. Veuillez donc toujours utiliser des traits de soulignement plutôt que des espaces. Ensuite, essayons TXT et voyons si cela fonctionnera. L'extension réelle est point PY, mais ce n'est pas obligatoire. Bien entendu, nous utiliserons le point PY, toujours, toujours. Mais pour l'instant, restons-en au point TXT afin que vous compreniez un concept très crucial à propos de Python. Je vais donc appuyer sur Entrée, et ici je vais imprimer trois plus quatre, et c'est notre programme. Ce programme produit donc simplement la somme de trois et quatre. Comment puis-je exécuter ce programme maintenant pour obtenir les résultats ? Eh bien, vous voyez cet élément de menu du terminal ici, vous appuyez dessus et vous passez au nouveau terminal, ce qui devrait ouvrir un nouveau terminal ici. C'est donc comme la ligne de commande dans laquelle vous interagissez avec votre ordinateur. Et maintenant, on peut écrire Py moins trois si vous êtes sous Windows. Si vous êtes sur Mac, vous devez écrire Python 3. Je suis donc sous Windows, donc je vais utiliser l'espace Pi moins trois, puis mon programme de soulignement. En fait, je peux utiliser l'onglet maintenant Si j'appuie sur l'onglet, cela complétera automatiquement le nom du fichier. Cette partie ici n'est pas nécessaire : les points et la barre oblique inversée Tu peux le laisser. C'est bon Mais même si vous le supprimez comme ça, il fonctionnera toujours. Alors maintenant, si vous appuyez sur Entrée ici, nous obtenons que nous passons à la ligne suivante. Peut-être attendiez-vous que le résultat apparaisse ici. Il ne s'est pas affiché car le fichier est toujours vide. Nous n'avons pas enregistré les modifications. Donc, après avoir écrit cette ligne de code, je n'ai rien enregistré. Donc, ce que vous voulez faire, c'est accéder à File Save ou aux commandes, puis appuyer sur la flèche supérieure pour obtenir la commande précédemment exécutée et appuyer sur Entrée. Ensuite, nous obtenons la sortie sept. Comme vous pouvez le voir, un programme Python n'est rien d'autre qu' un simple fichier texte que vous écrivez puis que vous exécutez à l'aide de la commande Python. Mais il existe une meilleure façon d'exécuter des programmes Python au moins sur du code Visual Studio Et c'est en utilisant un bouton Exécuter. Actuellement, il n'y a pas de bouton Exécuter ici car nous devons installer une extension Python. Donc, si vous passez à cela, l'icône entend les extensions. Et ici, si vous voulez rechercher Python, appuyez sur Entrée. Et ce premier résultat est l'extension que nous voulons installer. Appuyez donc sur le bouton Installer. Et cela installera l'extension Python. Mais qu'est-ce que l'extension Python ? Eh bien, je vous ai dit que cela affichera le bouton Exécuter quelque part ici. Il ne l'a pas affiché car mon fichier n'a pas d'extension PY. L'extension Python recherche donc les fichiers PY. Donc, ce que vous voulez faire, c'est cliquer ici avec le bouton droit de la souris, renommer en point PY Et maintenant, nous voyons ce bouton. Nous recevons également ce message indiquant que nous devons sélectionner un interpréteur Python. Donc, pour sélectionner un interpréteur Python, soit vous appuyez sur ce bouton , soit, si vous n'avez pas cette fenêtre, vous voulez aller sur cette icône ici, ce crochet, puis sélectionner Interprète Ensuite, vous devez sélectionner l'interpréteur Python 3.10 0.3, que nous avons installé dans la vidéo précédente Dans votre cas, il s'agit peut-être d'une autre version. Donc, quel que soit l'interpréteur Python que vous utilisez, sélectionnez-le, puis vous êtes prêt à exécuter ce programme en utilisant ce bouton. Appuyez donc sur ce bouton. Et c'est le résultat 7 ici. Comme vous pouvez le constater, il existe deux manières d'exécuter vos programmes Python. Soit vous utilisez la commande Python comme nous l'avons fait avec PY moins trois, puis vous avez mentionné le nom du fichier. Ou vous utilisez le moyen le plus simple, qui consiste à utiliser ce bouton. Mais au fur et à mesure que vous cousez, pour pouvoir utiliser ce bouton, vous devez nommer vos fichiers avec le point PY à la fin. Et c'est en fait la meilleure pratique. Tout le monde nomme ses fichiers point PY. C'est comme une convention. Ce n'est pas une obligation, mais c'est une convention cardiaque. Et comme vous le voyez, des éléments tels que les extensions, extensions IDE fonctionneront également mieux si vos fichiers sont nommés avec un point PY. L'autre avantage de l'utilisation de ce bouton est que si vous avez plus de codes, par exemple quatre plus neuf, vous n'avez pas à enregistrer le code. Il suffit de l'exécuter et vous obtiendrez les résultats 7 et 13. Donc, la somme de cette ligne et la somme de cette ligne également. Si vous souhaitez créer un autre programme, vous devez à nouveau accéder à Fichier, ouvrir le dossier et vous assurer que vous avez un dossier vide ou simplement en créer un à la volée ici. Donc dossier, deuxième projet. Double-cliquez dessus pour sélectionner le dossier, cela fermera la fenêtre actuelle du projet en cours et ouvrira le deuxième projet. Donc, ici encore une fois, vous créez un fichier. Myprogram point py point PY Always, sélectionnez un interpréteur en utilisant sélectionnez un interpréteur en utilisant ce crochet et allez-y Choisissez toujours le même interpréteur que celui que vous avez utilisé précédemment, sauf si vous souhaitez en sélectionner un autre. Si vous avez de nombreux interpréteurs et que vous écrivez du code, exécutez-le et vous devriez voir le résultat ici sur la ligne de commande Sur ce, je vous remercie d'avoir regardé cette vidéo, et je vous parlerai dans la prochaine. 8. Qu'est-ce que Python étonnamment (PAS DE FILIENNE): Supposons que vous vous promeniez dans la forêt amazonienne. Dans la forêt, vous rencontrez une tribu qui a un cuisinier. Vous voulez dire au cuisinier que vous avez faim, vous devez donc manger. Le problème, c'est que tu ne connais pas la langue. Donc, ce que vous voulez, vous obtenez, c'est un interprète. C'est donc l'interprète. Vous parlez anglais à l'interprète, et celui-ci parle amazonis au cuisinier Et le cuisinier vous sert. Le repas. Python fonctionne de la même manière. C'est à nouveau vous, et vous souhaitez communiquer avec le processeur de votre ordinateur. Par exemple, vous voulez connaître la somme de trois et quatre. Le problème, encore une fois, est que le processeur parle un langage très difficile appelé langage machine. Et cette langue est très difficile à parler ou à écrire pour les humains. Nous obtenons donc un interpréteur appelé C Python. Alors, qu'est-ce que C Python ? C Python est le logiciel que nous avons installé dans les vidéos précédentes. Ainsi, lorsque vous téléchargez Python depuis python.org et que vous l'installez, vous installez en fait du Python C. C'est un interprète. Cet interpréteur obtient le langage Python de votre part, il traduit ce langage en langage machine, et il parle ce langage machine au processeur. En retour, le processeur utilise l'écran de l'ordinateur, de sorte que l' écran de votre ordinateur portable affiche les résultats, par exemple, sept, et vous voyez que sept. Comme vous pouvez le constater, Python est comme l'anglais. Ce n'est qu'une langue. Le logiciel que vous installez et que vous utilisez pour exécuter Python n'est qu'un logiciel écrit en langage Seal. Il se trouve qu'il est écrit en langage des sceaux. C'est pourquoi on l'appelle C Python, même si la plupart des gens l' appellent simplement Python. Quand vous dites, avez-vous installé Python ? Oui Eh bien, vous parlez d'installer C Python. Le langage Python lui-même n'est qu'un savoir. Il est stocké dans la documentation. Si vous allez sur python.org puis dans le menu de documentation, vous devriez voir la documentation de Python La documentation de Python est donc l' équivalent d'un dictionnaire, un dictionnaire anglais, tel que le dictionnaire Oxford, où la langue anglaise est documentée. Il y a cependant une différence. Dans le cas où nous avons parlé au cuisinier, nous avons utilisé le langage parlé. Pour communiquer avec l'interprète ici, nous utilisons des fichiers texte. Nous écrivons donc la langue dans un fichier texte, et l'interpréteur lit ce fichier texte. Bien entendu, nous donnons l'extension point PY à ces fichiers texte, mais ils restent des fichiers texte. L'extension est différente. Et c'est l'idée. C'est ce qu'est Python. Python est donc le langage. Merci d'avoir suivi cet exemple, cette comparaison, et je vous en parlerai dans la prochaine vidéo. 9. 9. Commencer par les bases de Python: Bonjour, bienvenue dans une nouvelle vidéo, et ceci est une vidéo d'introduction à la section des fonctions et des conditions. Vous entrez maintenant dans une section plus avancée de Python. fonctions et les conditionnels sont des concepts de base avancés de Python, et ce sont des blocs très fondamentaux que vous pouvez utiliser pour rendre vos programmes plus intelligents et plus faciles à gérer Ainsi, vous rendez vos programmes plus intelligents en leur faisant prendre des décisions que vous pouvez mettre en œuvre via des conditionnels. Donc, si votre programme reçoit des entrées et que vous voulez réfléchir, vous voulez lui faire savoir si vous voulez lui faire savoir si ces entrées sont correctes ou non, et vous voulez faire quelque chose si cette entrée est vraie et autre chose si cette entrée est fausse. Vous prenez donc des décisions dans votre programme par le biais d'un blocage conditionnel. Et puis vous avez les fonctions , d'autre part, les fonctions sont utilisées pour encapsuler des blocs de code, donc des blocs de code similaires. Il vous aide à organiser votre code. Ainsi, une fonction, par exemple, pourrait convertir des dollars américains en euros. Cette fonction fait donc certaines choses et le fait bien. Il obtient donc l'USD en entrée, et il vous donne des euros en sortie. Ainsi, à l'intérieur de la fonction, vous avez ces opérations mathématiques qui effectuent la conversion. conditions et les fonctions sont donc deux choses que vous allez apprendre dans cette section à travers des exemples, bien sûr. Je vous verrai donc dans la prochaine vidéo. 10. 10. Variables : pourquoi et comment utiliser les variables +: Bonjour, bon retour. consulter ce programme ici. Voyez-vous un problème avec ce programme ? Eh bien, le programme fonctionne bien. Si nous l'exécutons, nous obtenons sept en sortie, ce qui est le résultat attendu. Donc trois plus quatre, ça donne sept. Mais il y a un problème avec le programme, et le problème est que nous n'avons aucune idée de ce que trois signifie et de ce que quatre signifie. Donc, en tant que programmeurs, nous ne savons pas ce qui se passe ici, qui rend ce programme illisible Maintenant, laissez-moi vous montrer comment je vais résoudre ce problème immédiatement en utilisant des variables. Je vais donc le supprimer complètement et dire que les dépenses sont égales à trois. Le don est égal à quatre. Le montant total est égal à dépenser plus le don, puis à imprimer le montant total. Si j'exécute ce programme maintenant, j'obtiendrai le même résultat, donc ça fait à nouveau sept. Mais cette fois, en tant que programmeurs, nous pouvons comprendre ce programme Nous pouvons donc donner ce programme à d'autres personnes, d' autres programmeurs, ou nous pouvons revenir à ce programme Plus tard, nous pourrons toujours comprendre ce programme car nous avons maintenant des noms pour les valeurs, appelées variables. Les montants dépensés, donnés et totaux sont donc tous des variables. La syntaxe est assez simple. vous suffit donc de choisir un nom qui vous vient à l'esprit pour une variable. J'ai donc choisi d'utiliser les dépenses comme première variable. C'est donc le montant que j'ai dépensé pour acheter des choses, par exemple, puis c' est le montant que j'ai donné. Puis j'ai calculé le montant total. Maintenant, ce programme a plus de sens. Et bien sûr, il existe d'autres exemples tels que des articles égaux à dix et un prix égal à deux au total. Le prix est égal aux articles multipliés par le prix. Il y a donc maintenant cet astérisque ici, qui signifie opérateur de multiplication Imprimez le prix total, et nous en obtenons 20 en sortie ici. Encore une fois, nous avons une variable ici, deux et trois. Maintenant, il existe certaines règles concernant la syntaxe des variables. La première règle est que vous ne devriez pas avoir de chiffres devant vos variables, mais vous pouvez avoir des nombres au milieu quelque part ou à la fin, mais pas devant elles. Vous pouvez utiliser des traits de soulignement, comme je l'ai fait ici, mais vous ne pouvez pas utiliser d'espaces Cela ne fonctionnera donc pas en Python, ce qui signifie que si vous avez des variables contenant plus d'un mot, vous devez utiliser un trait de soulignement La meilleure pratique consiste à utiliser un trait de soulignement. Enfin, vous pouvez placer autant d'espaces que vous le souhaitez autour de l'opérateur d'affectation. Cela fonctionnera donc. Mais il est recommandé, selon le guide de style officiel de Python, avoir un espace chaque côté de l'opérateur d' assignation pour rendre les codes plus lisibles. Les espaces ne servent ici qu' à des fins de lisibilité. Il en va de même pour ces opérateurs. Il est bon d'avoir des espaces autour de l'opérateur. Encore une fois pour la lisibilité. Maintenant, notre programme prend plus de sens. Nous savons ce qui se passe ici. Nous comprenons le code, et c'est l'un des avantages des variables. Il y a également un deuxième avantage. Les variables servent de compartiments pour transporter des données ou des objets. Dix est donc une valeur de donnée, ou vous pouvez également l'appeler objet. Donc dix est un objet, deux est un objet, et items est le nom de cet objet, ou vous pouvez dire la variable de cet objet. Ces noms, ces variables sont donc comme des compartiments Ils sont utilisés pour transporter des objets. Par exemple, supposons que nous en placions dix dans le compartiment d'articles, puis que nous obtenions ce panier et que nous le multiplions par un panier de prix contenant deux articles. Donc, au lieu d'écrire dix ici et deux, nous travaillons en fait sur la base d'un bucket, sur une base variable. Cela présente un avantage car, par exemple, supposons que nous décidions de changer la valeur de ce paramètre à trois, qui signifie que les éléments actuellement présents seront également trois. Donc, trois fois deux, nous allons en avoir six. C'est pourquoi nous ne voulons pas avoir d' objets, de codex durs, par exemple Si c'était dix, si nous l' exécutons, nous obtiendrions l'ancienne sortie 20. J'espère donc que c'est clair. Utilisez toujours des variables, et c'est fin de cette leçon sur les variables. Je suis entré dans beaucoup de détails parce que les variables sont utilisées dans chaque programme que vous écrivez. Assurez-vous donc de les comprendre. Si ce n'est pas le cas, posez des questions dans le cadre des questions-réponses, et je vous parlerai dans la prochaine vidéo Merci. 11. 11. Utiliser l'enveloppe interactive Python: Bonjour, bienvenue à une nouvelle conférence. Auparavant, nous avons écrit ce script, et nous pouvons l'exécuter en utilisant ce bouton triangulaire, et nous en obtenons six en sortie. Donc, trois fois deux nous donnent six. Nous avons donc écrit le script dans un fichier PY à points, puis nous l'avons envoyé à l'interpréteur. Nous envoyons donc l'intégralité du fichier point PY à l'interpréteur. Mais il existe un autre moyen d'exécuter du code Python. C'est en faisant appel à l'interprète sur demande. Permettez-moi de vous montrer ce que je veux dire par là. Vous devez donc accéder au terminal à la ligne de commande. C'est ici que vous exécutez les commandes du système d'exploitation. Je suis donc sous Windows, donc je peux exécuter PY space moins trois. Si vous êtes sur Mac ou Linux, vous devrez écrire Python 3.10 ou Python 3.9 selon la version de Python que vous utilisez Je vais utiliser l'espace Pi moins trois et appuyer sur Entrée. Cette commande lance donc l'interpréteur Python. Maintenant, comme je l'ai dit, l'interpréteur est à la demande, ce qui signifie qu'il attend maintenant que le code Python l' interprète . Pensez donc aux méthodes précédentes comme l'embauche d'un interprète sur une base contractuelle. Vous envoyez donc l'intégralité du script à l'interpréteur, et il vous renvoie le résultat. Mais ici, l'interprète est un employé, disons qu'il est sur place et qu'il attend votre avis. Ils t'écoutent. Donc, vous dites que éléments est égal à trois. Par exemple, vous écrivez du code, votre présentateur et l'interprète vous écoutent. Il enregistre donc la variable items en mémoire. Et tu peux continuer à écrire du code. Le prix est égal à deux, le prix total est égal aux articles multipliés par le prix. Et si vous imprimez le prix total, vous obtenez le résultat six , soit le même résultat que cela. Maintenant, vous vous demandez probablement quand utiliser une méthode et quand utiliser l'autre. Devriez-vous donc coder dans un fichier Python ou dans un shell interactif Python ? C'est ce que l'on appelle désormais un shell interactif. Permettez-moi donc de répondre à cette question. Mais avant de vous répondre, je tiens à souligner les différences entre les deux méthodes de codage. La plus grande différence est que le code vous écrivez dans le shell interactif n'est pas enregistré. Donc, si je quitte ce shell maintenant, ce code sera perdu et il n'y a aucun moyen de le sauvegarder. Et cela nous amène à l'autre point, savoir que cette méthode de codage ne concerne que le code jetable Donc, si vous voulez simplement tester des choses rapidement, vous voudrez peut-être effectuer des opérations mathématiques telles que l'addition, la multiplication, etc. Et vous n'êtes pas intéressé par la création d'un programme réutilisable, alors ce shell interactif convient. C'est plus rapide que de devoir créer un fichier PY puis d'y écrire le code. Je pense donc avoir répondu à la question. Vous devez utiliser le fichier point PY chaque fois que vous souhaitez créer des programmes réutilisables. Et vous utilisez le shell interactif Python pour les doublures Quick One Il suffit donc d'écrire une ligne, peut-être une autre ici. Donc des opérations mathématiques. Maintenant, je tiens à souligner une différence entre les deux. Maintenant, une autre différence dont vous devez être conscient est que dans le shell interactif Python, vous n'avez pas besoin d'utiliser de fonction d'impression. Vous pouvez simplement indiquer le prix total. Et vous obtenez le résultat. Il n'est pas nécessaire d' imprimer le prix total. Cependant, dans un fichier PY à points, vous devez être très explicite. Donc, si je supprime la fonction d'impression et que j'exécute ce programme, nous n'obtiendrons aucune sortie. Permettez-moi donc d'exécuter ce programme maintenant, mais je vous préviens que nous allons avoir une erreur. Alors lancez le programme, c'est l'erreur. Alors, que s'est-il passé ici ? Ce code est correct, mais le code de Visual Studio exécute cette commande Windows dans le Python Shell. Le Python Shell n' accepte que le code Python, mais pas les commandes du système d'exploitation Windows ou Mac. s'agit donc d'une commande Windows car elle démarre, elle essaie de démarrer le programme Python, et elle essaie d'exécuter ce fichier point PY de mon programme. Donc, ce que vous devez faire, c'est quitter le shell chaque fois que vous souhaitez exécuter un fichier PY à points. Donc, si vous êtes dans un shell Python interactif, et que vous savez que c'est le cas chaque fois que vous voyez ces trois flèches, vous devez sortir entre parenthèses et appuyer sur Entrée, ce qui vous ramènera au shell du système d'exploitation, au terminal, à la ligne de commande Cela signifie que vous pouvez désormais exécuter votre programme. Alors laissez-moi appuyer sur ce bouton triangulaire, et nous n'avons eu aucune erreur. Cependant, il n'y a aucune sortie non plus, comme vous pouvez le constater, car comme je l'ai indiqué plus tôt, nous n' imprimons rien ici. Donc, ce que fait l' interpréteur, c'est qu'il assigne simplement une variable de 32 éléments Il en va de même pour le prix. Il calcule le prix total, puis ici il ne fait rien Donc, pour obtenir une sortie, nous devons dire « imprimer à nouveau » la variable et vous en obtenez six. Si vous voulez revenir au shell Python, écrivez la commande Py moins trois, puis revenez au shell, et vous pouvez réexécuter le code ici. Je vais donc revenir au shell, qui concerne le shell interactif Python. Merci de m'avoir suivi. 12. 12. Utilisation du terminal: Avant de passer au codage, je voudrais vous montrer un conseil de productivité concernant l'IDE. Maintenant, cette astuce concerne l'IDE Visual Sudo Code, mais elle s'appliquera probablement également à d'autres IDE Il s'agit du terminal, de la manière de l' utiliser plus efficacement, ce qui vous aidera à coder et à apprendre. C'est donc ce que je veux vous montrer. Mon terminal est ouvert ici. Donc, tout d'abord, ce que je veux faire, c'est supprimer tous les terminaux à l'aide cette icône, sinon l'icône pourrait se trouver quelque part ici. Il suffit donc de tout supprimer. Oui, l'icône qui nous montre ici maintenant, appuyez dessus ou sur l'autre jusqu'à ce que le terminal disparaisse. Ensuite, vous voulez afficher à nouveau le terminal, et vous pouvez le faire en appuyant sur ce bouton. Cela exécutera donc le code. Cela créera une nouvelle fenêtre de terminal. Et puis c'est bien d'avoir également un shell Python ouvert sur le côté. Vous avez donc à la fois la ligne de commande où vous exécutez le code, mais également le shell interactif Python dans lequel vous pouvez écrire des lignes rapides. Pour ce faire, vous devez appuyer sur cette icône. Et cela va diviser le terminal. Nous avons donc maintenant un terminal ici sur la gauche et un terminal ici sur la droite. Ici, à droite, nous voulons exécuter la commande Python qui ouvre le shell interactif Python. Sous Windows, c'est l'espace PY moins trois, ou Macan Linux, ce serait Python 3.10 ou Python 3.11, etc. Cela ouvrira donc le Shell interactif Python. Nous avons maintenant à la fois la ligne de commande où nous exécutons les fichiers point PI et le Python Shell, où vous pouvez exécuter du code de manière interactive Cela vous aidera dans votre apprentissage. Permettez-moi donc de vous montrer rapidement si cela fonctionne bien ou non, afin que je puisse me concentrer sur ce point. Peu importe, et j'appuie sur ce bouton, mais le code sera envoyé à ce terminal. Et ce terminal est indépendant de cela. Encore une fois, si cela ne fonctionne pas, assurez-vous à nouveau de tout supprimer. Donc pas de terminaux. Alors n' ouvrez pas de terminal ici. Donc, au lieu de le faire, laissez le terminal s'ouvrir à l'aide de ce bouton. De cette façon, vous vous assurez que ce terminal est connecté au processus en cours d'exécution de ce fichier, puis vous divisez le terminal, puis vous avez ces commandes pour ouvrir Python. Un autre conseil avant de fermer cette vidéo sur la ligne de commande où sont envoyées les commandes Windows, Mac ou Linux. Donc, ici, lorsque nous exécutons le fichier point PY, vous pouvez effacer le terminal en utilisant CLC, y écrire CLC Si vous êtes sous Windows, sur Mac, ce serait clair ou Linux également. Appuyez sur Entrée en appuyant sur le bouton de commande et cela effacera le terminal. Cela fonctionne donc sur la ligne de commande, pas sur le shell Python. En ce qui concerne la fenêtre divisée ici sur le côté, vous pouvez voir le nombre de terminaux dont vous disposez. Nous avons donc ceci, qui pointe vers cela sur le côté, sur le côté gauche, puis sur l' autre sur la droite. Essayez également de ne pas avoir plus de deux terminaux ici car les choses peuvent confusion, car si vous appuyez sur l'icône plus, vous aurez un troisième terminal qui sera caché derrière ces deux terminaux et les choses deviendront confuses. Assurez-vous d'en avoir toujours deux. Si vous en avez plus, supprimez tout et recommencez le processus autour de celui-ci, autour de PY, moins trois à nouveau, etc. Vous êtes donc prêt à programmer dans les prochaines vidéos, et cela vous aidera vraiment dans votre apprentissage. Je vous parlerai donc dans la prochaine vidéo. 13. 13. Types simples : entiers, cordes et flottants: Laisse-moi te montrer quelque chose. Je vais créer la variable X. Stockez dix dans cette variable X, Y, stockez le texte dix dans cette variable, puis créez deux nouvelles variables. Donc, un est égal à deux. X plus X, et deux sont égaux à deux, Y plus Y. Et puis imprimez un et deux Enregistrez le script, ne l'oubliez pas et exécutez-le. Il s'agit de la sortie. Nous avons donc obtenu 20 sur X plus X et 1010 sur Y plus Y. Quel est mon point Ce que je veux dire, c'est que les ordinateurs sont nuls. Pour qu'ils vous comprennent, vous devez être très clair, très explicite dans ce que vous allez dire dans votre langage, en Python dans ce cas. Il ne suffit pas de dire dix, il faut déclarer ce que c'est que dix. S'agit-il d'un chiffre ou d'un texte ? C'est pourquoi dans certaines langues, dans la plupart des langues, nous avons des déclarations de type. Ainsi, dans d'autres langages, vous diriez quelque chose comme int, qui signifie entier. Vous dites donc qu'il s'agit d'un entier. Dix est un entier, ce qui serait comme STR Y sans guillemets. indique donc à Python qu'il s'agit en fait d'un texte et qu' il doit être traité comme tel. Ainsi, en Python, lorsque vous appliquez un opérateur plus, Python concaténera ce texte, il en ajoutera donc dix après dix, et il créera cette Maintenant, ce n'est pas ainsi que cela fonctionne en Python. En Python, au lieu de faire ces déclarations explicites, nous avons une déclaration implicite, qui est celle-ci ici. Ainsi, lorsque le nombre est sans guillemets, il s'agit d'un entier. Eh bien, cela peut aussi être un flotteur, mais permettez-moi d'en parler dans quelques secondes. Et s'il est entre guillemets, cela signifie qu'il s'agit d'un texte. S'il est égal à 10,1, par exemple, cela signifie qu'il s'agit d'un flottant. Et si vous ne me croyez pas, vous pouvez utiliser la fonction type X, tapez Y et tapez. La fonction type affiche le type de chaque valeur. Il s'agit donc d'une classe int, une classe STR, qui représente des chaînes. Tout ce qui est entre guillemets est une chaîne de caractères flottante, ce qui signifie float Avec les chaînes, vous pouvez également utiliser des guillemets simples de ce type. Sauvegardez-le, et vous obtiendrez le même résultat. Donc, si votre intention est de traiter du texte, vous devez utiliser des guillemets Si votre intention est de traiter des nombres, donc pour pouvoir faire calculs mathématiques avec eux, vous devez les utiliser sans des comme ça ou comme ça. 14. 14. Lister les types de données: Vous connaissez maintenant trois types de données en Python, vous connaissez les entiers, les chaînes et les flottants et Il s'agit de types de données simples. Nous avons également ce que l'on appelle des types de données composés, types composés de différents objets Et la liste est la plus populaire. Ainsi, dans une liste, vous pouvez réellement stocker plusieurs objets. Supposons que vous soyez enseignant et que vous souhaitiez calculer la note moyenne de vos élèves. Vous utilisez donc Python pour cela, et vous avez besoin d'une structure de données pour stocker ces valeurs en Python. Vous avez besoin du type approprié en Python pour représenter les notes de vos élèves, et une liste serait un bon choix. Créons une liste. Stockez-le dans une variable comme d'habitude. Notes des étudiants. Égal aux crochets ouverts, crochets fermés. Les objets vont donc maintenant entrer dans cette syntaxe. Vous avez donc vu qu'avec les entiers, vous utilisiez un nombre sans guillemets pour les chaînes pour indiquer à Python qu'il s'agit d'une chaîne, vous utilisiez des guillemets doubles ou simples Et avec les listes, vous utilisez ces crochets, sorte que chaque type possède sa propre syntaxe. Disons 9.1, 8.8 et 7.5. Ce sont les notes de votre élève. 15. 15. Utiliser des plages: Dans cette vidéo, vous allez vous familiariser avec les listes. Auparavant, nous stockions trois types de données flottants dans une liste, mais vous pouvez stocker n'importe quel type d'objet, pas seulement des flottants, de sorte que nous pouvons stocker un entier tel que neuf Vous pouvez enregistrer une chaîne, telle que hello. Vous pouvez même stocker des listes dans une liste. Il vous suffit d'écrire entre crochets, puis saisir les éléments de cette liste. Donc, cette liste contient toujours trois éléments : cet entier, cette chaîne et cette liste. Et bien sûr, vous pouvez imprimer cette liste en pointant sur la variable associée à la liste. Et c'est le résultat que nous obtenons. Non, les opérations mathématiques avec des listes, que supportent les listes ? Eh bien, pas grand-chose, vraiment. Vous pouvez effectuer des multiplications avec un entier, par exemple deux ou trois, et voyons ce qui va se passer Je vais imprimer cette expression directement ici au lieu de la mettre dans une variable. Ainsi, quelle que soit votre préférence, vous pouvez créer une nouvelle variable, stocker dans la variable, puis placer la variable dans la fonction d'impression ou placer directement cette expression dans la fonction d'impression. Les deux fonctionneront. Donc, si vous l'exécutez, vous allez obtenir cette sortie. C'est donc la même liste répétée trois fois. Si c'était plus, cela n' est pas pris en charge car Python ne sait pas quoi faire avec une liste et un entier. Cela vous donne donc un type d'erreur. Seule une erreur peut concaténer des listes en listes. Il peut donc concaténer des listes en listes. Donc, si vous notez les étudiants, plus des notes des étudiants, cela fonctionnera également. Alors lancez-le et vous obtiendrez les résultats suivants. La liste s'est répétée deux fois , soit l'équivalent de deux fois. Encore une fois, nous allons obtenir les mêmes résultats ici et là. Enfin, il existe également un moyen de générer automatiquement des listes d' entiers ayant un certain ordre Supposons que vous vouliez avoir une liste de 1 à 10, un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix. Comment pouvons-nous le faire ? Bien sûr, une méthode consiste à l'écrire, mais il existe une meilleure méthode, à savoir utiliser une plage. La plage est un autre type d'objet, tout comme nous avons des listes, des entiers Nous avons également des gammes. Alors, entre zéro et 11, analysons les notes des élèves pour voir quelle est la valeur actuelle de cette variable. Alors lancez-le, et c' est un objet range. Il n'y a donc pas grand chose à voir pour l'instant. Mais si vous le convertissez en liste et que vous l'exécutez à nouveau. Enfin, nous allons obtenir ce résultat. Donc zéro, un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix. Désormais, les notes des étudiants sont un objet de liste. Et ce mot-clé de liste est une classe. Il représente donc le dernier type de données, et il est utilisé ici pour convertir un type de données de plage en un type de données ist car une plage s'affiche simplement comme ceci. Il n'est donc pas très avantageux de voir que le résultat n'est pas aussi clair, nous le convertissons donc au moins en type de données. Et alors, comment ça marche ? Eh bien, cela commence à zéro jusqu' au chiffre qui précède ce nombre, qui est dix, donc de zéro à dix. C'est pourquoi nous en avons de zéro à dix. Bien sûr, vous pouvez tout avoir ici. Donc un à huit, il faudrait que j'en écrive neuf pour obtenir un à huit. Donc au moins un à huit. Vous pouvez également avoir un autre argument ici, deux, et voyons ce que cela change dans la sortie. Nous obtenons donc ces résultats. Ces deux étapes sont l'étape. Donc un, trois, cinq, sept, cela signifie que vous commencez par un, puis que vous passez par un pas de deux. Donc un plus deux, vous avez trois, trois plus deux, vous avez cinq, cinq plus deux, vous avez sept, sept plus deux, vous en avez neuf, mais neuf n'est pas inclus dans la fourchette. La gamme va jusqu'à huit, donc la liste finira à sept. Bien sûr, vous pouvez suivre n'importe quelle étape ici, par exemple trois, et vous obtiendrez des résultats différents. Il s'agissait donc d'informations plus avancées sur les listes et les plages. Sur ce, je vous remercie et je vous parlerai dans la prochaine vidéo. À bientôt. 16. 16. Quels sont les attributs des types de données: OK, donc vous connaissez les chaînes, vous savez, flottants, vous savez, les entiers, vous savez, D'accord, vous savez, les types de données. Mais comment pouvez-vous réellement faire quelque chose en Python ? Que pouvez-vous faire avec ces types de données ? Eh bien, pour répondre à votre question, vous devriez consulter la commande Deer. Eh bien, permettez-moi maintenant de commencer à utiliser un peu plus le shell Python pour faire les choses plus rapidement. Je vais donc le scinder en deux. C'est pour exécuter le fichier Python, c'est pour le shell Python interactif. Alors, que pouvons-nous faire avec une liste ? Tu peux le découvrir en faisant Deer. Dear est une fonction en Python qui vous donnera tout ce que vous pouvez faire avec un type spécifique. Donc, avec une liste, dans ce cas, tous ces éléments sont des attributs de liste. Vous pouvez faire de même pour vérifier int. Vous pouvez faire de même pour vérifier float, dear float, dear STR, par exemple, arrêtons-nous au SDR avant de passer à la liste Avec les chaînes, vous pouvez, par exemple, les transformer en majuscules en utilisant ces méthodes Pour savoir ce que fait upper, vous devez utiliser help STR, c' est-à-dire le type qui possède l'attribut upper. Maintenant, les attributs sont tous ces éléments et ils peuvent être des méthodes ou des propriétés. Vous ne le saurez pas tant que vous n'aurez pas vérifié auprès de l'aide. Il s'agit donc d'une documentation d'aide pour la méthode supérieure. C'est une méthode, comme vous pouvez le voir ici, Q pour quitter et revenir au shell. Alors allons-y et utilisons-le. Bonjour, cette partie supérieure. Vous utilisez une méthode entre crochets entre parenthèses. Et cela renverra la version majuscule de hello. Si nous utilisons plutôt le titre, cela ne mettra en majuscule que la première lettre Bien entendu, vous pouvez utiliser des variables. Et vous obtenez le même résultat. Maintenant, qu'avons-nous pour les listes ? Pourquoi ne pas calculer la moyenne des notes des étudiants ? C'est ce que nous allons faire dans la vidéo suivante. 17. 17. Comment savoir de quel code vous avez besoin: Pour calculer la moyenne de ces notes, nous voulons voir si un type de liste possède une méthode de moyenne ou de moyenne qui nous permet d'obtenir la moyenne de ses valeurs. Pour cela, nous allons vérifier auprès de la liste des cerfs. List est le nom qui représente toutes les listes. Il s'agit donc d'un type, et il s'agit d'une instance ce type de liste . Chère liste. Et jetons un coup d' œil ici. Avez-vous une méthode moyenne ou moyenne ? Je ne crois pas. Il n'existe donc aucune méthode du type liste pour nous permettre de calculer la moyenne des valeurs de liste. Cependant, cela ne signifie pas qu'il n'existe pas de méthode méchante en Python pour le faire. L'homme ou la moyenne n'est pas une méthode, mais cela peut être une fonction. Tu te souviens de la fonction d'impression ? Donc, imprimez comme ça, vous voyez que l'impression n'a pas besoin de la notation par points pour être utilisée. Par exemple, la méthode supérieure nécessitait une notation par points car la méthode supérieure est une méthode attachée au type de halo. Et l'impression est une fonction. C'est une fonction indépendante qui fonctionne avec de nombreux types, pas seulement avec des chaînes, pas seulement avec des entiers ou des flottants Vous pouvez imprimer n'importe quoi avec print. C'est pourquoi il n'est pas attaché à un type spécifique. Alors, où voyons-nous la liste complète des fonctions que nous pouvons utiliser ? Vous pouvez le faire à nouveau en utilisant le trait de soulignement, le trait de soulignement, le trait de soulignement, le trait soulignement, les parenthèses Et voici une liste complète de ce que vous pouvez utiliser avec les fonctions intégrées. Voyons donc pour une fonction moyenne ou une fonction moyenne. Non, ce n'est pas le cas, mais il existe une fonction de somme. Donc ce que nous pouvons faire, disons ma somme, c'est ne pas utiliser sum comme nom de variable car vous pouvez voir que sum est un mot clé réservé. Donc, additionnez les notes des étudiants, cela nous donnera la somme de ces trois nombres. Vous voulez ensuite compter le nombre d' éléments contenus dans cette liste. Alors, avons-nous quelque chose à dénombrer ? Peut-être pas. Eh bien, je sais qu' il n'y a pas de méthode de comptage. Mais nous avons cette lentille, qui signifie que vous pouvez vérifier ce que cela signifie. Retournez donc le nombre d' articles contenus dans un conteneur. Une liste est donc également appelée conteneur. Disons la longueur, égale à la longueur, les notes des étudiants. Enfin, nous pouvons obtenir la moyenne, qui est ma somme divisée par la longueur et imprimer la moyenne, sauf qu'il s'agit de la valeur moyenne de ces trois nombres. 18. 18. Types de données de dictionnaire: Vous êtes donc enseignant et vous vouliez calculer les notes moyennes de vos élèves, et nous l'avons fait en utilisant cet algorithme ici et cette structure de données pour stocker les notes. Le problème, c'est que vous ne savez pas quel est le grade de qui. Ainsi, bien qu' une liste soit une bonne structure de données pour stocker un ensemble d'éléments, elle ne suffit pas lorsque ces éléments sont associés à une sorte d' identité. Dans ce cas, vous souhaitez utiliser un dictionnaire. Disons la note de l'étudiant, entre crochets. C'est la syntaxe d'un dictionnaire. Ensuite, vous utilisez les noms de vos élèves. Supposons que Mary soit une colonne, créez de l'espace ou pas d'espace, où vous préférez, mais il est bon d'avoir un espace à cet endroit pour le rendre plus lisible Ensuite, tu écris le grade de Mary. Disons S 8.8 et colonne John, 7.5. La différence entre le dictionnaire et la liste réside dans les crochets, les différents crochets. Et puis cela est considéré comme un élément d'un dictionnaire. Ceci est considéré comme un élément d'une liste. Les éléments d'un dictionnaire sont donc constitués de clés. C'est une clé et des valeurs, c'est une valeur. Une liste serait plus appropriée si nous devions stocker, par exemple, un tableau de valeurs de température. Disons que le lundi, il y a eu ces températures du lundi. Et enfin, comment calcule-t-on la moyenne quand on a un dictionnaire ? Comme il s'agit de paires de clés et de valeurs, vous ne pouvez pas simplement faire la somme comme ça. Vous devez spécifier la somme de ce que vous voulez obtenir. Donc, les notes des étudiants. Et si vous vérifiez leur dictionnaire pour dictionnaire, vous verrez que les dictionnaires ont ces valeurs, ce qui est une méthode Dictez les valeurs. C'est une méthode, et elle fournit une vue des valeurs du dictionnaire. En termes simples, il vous donne les valeurs d'un dictionnaire. Donc, si vous obtenez ce dictionnaire, faites la queue pour quitter ici, collez-le ici et voyez les élèves noter ces valeurs. Cela vous donnera ce type de données. Il s'agit toujours d'un type de données. Cela ressemble à une liste. Ce n'est pas exactement une liste, mais elle se comporte comme une liste contenant ces trois valeurs C'est un type de valeurs dict. Cette méthode produit ce type. Par conséquent, vous pouvez l' ajouter, n' oubliez pas les parenthèses, n'oubliez pas de sauvegarder et n' oubliez pas d'exécuter pour obtenir le résultat. Il s'agit la valeur moyenne des valeurs du dictionnaire Pour obtenir les clés du dictionnaire, il suffit de faire des clés. Et vous obtenez ce type de clés mortes avec les clés du dictionnaire en tant qu'éléments de ce tableau de clés mortes. 19. 19. Ce qui fait d'un programmeur un programmeur: Qu'est-ce qui fait d'un programmeur un programmeur ? En d'autres termes, quelles sont les choses que vous devez savoir pour pouvoir programmer une application informatique ? C'est ce que je vais vous raconter dans cette vidéo. Il y a trois choses que vous devez savoir pour programmer, pour coder n'importe quel programme. Et le premier est que vous devez connaître la syntaxe. Par exemple, vous devez savoir que pour imprimer certaines sorties, vous devez utiliser des impressions suivies de parenthèses, puis vous devez placer l'entrée entre ces parenthèses Cela fait donc partie de la syntaxe, savoir si vous voulez utiliser des parenthèses ou des virgules, etc. C'est la première chose. Ensuite, supposons que nous construisions un programme qui calcule la moyenne à partir d' une série de valeurs Ensuite, vous voulez savoir quel type de données vous devez utiliser pour représenter ces données. Ainsi, par exemple, si vous avez des données sous forme de noms d'étudiants suivis de la note de chaque élève, vous savez que vous devez utiliser un dictionnaire car un dictionnaire est composé de clés et de valeurs. La structure de données correcte ici serait donc un dictionnaire. Mais si vous n'aviez que des valeurs sans noms d'étudiants, vous penseriez à une liste, car une liste n'est qu'une série d'éléments, des valeurs sans clés. Donc, les structures de données, vous devez connaître les structures de données et vous devez connaître la syntaxe. Ce sont deux choses. La troisième chose est que vous devez connaître l'algorithme que vous devez utiliser pour produire le résultat attendu. Donc, dans ce cas, vous devez connaître les méthodes que vous pouvez utiliser ou vous devez savoir comment créer ces méthodes si elles n'existent pas. Dans notre exemple, vous devez donc savoir comment créer cette méthode moyenne. Voici donc les trois choses que vous devez savoir pour créer un programme. Ce sont là les principes fondamentaux. J'espère donc que cela clarifie le chemin de la programmation, et je vous en parlerai dans les prochaines vidéos. À bientôt. 20. 20. Types de données Tuple: Voici une liste. Et maintenant c'est un renversement. Un tuple est donc comme une liste, mais avec des parenthèses, pas des crochets Si vous l'imprimez, bien sûr, vous obtiendrez la même représentation qu'ici. Donc 14, cinq, 145. Cependant, les crochets et les parenthèses ne sont pas la seule différence entre les listes et les tuples En fait, il ne s'agit que d'une différence de syntaxe. La vraie différence est que les tuples, comme celui-ci ici, sont immuables et listes comme celle-ci sont Cela signifie qu'aux températures du dernier lundi, vous pouvez ajouter d'autres éléments à la liste en utilisant, par exemple, les méthodes d'ajout Donc, si vous vérifiez les températures du lundi jusqu'à maintenant, vous obtiendrez une liste mutée. Cette mutabilité la rend très dynamique. Vous verrez plus tard comment, lorsque nous effectuons ces opérations par lots et à chaque opération, nous ajoutons des éléments à la liste au fur et à mesure que nous générons ces éléments, ces valeurs avec certaines fonctions. Mais ce n'est pas le cas des tuples. Si vous essayez d'ajouter un tuple, vous recevrez une erreur car un tuple n'a pas du tout de méthode d' ajout. De même, il n' a pas de méthode de suppression comme le fait la liste. Il n'y en a donc plus quatre. Les tuples ont cependant l'avantage un peu plus rapides que les listes, mais vous devez réfléchir à ce qu'il faut utiliser Donc, que vous utilisiez List ou topples, vous devez vous demander si le tableau que vous créez va être modifié au cours du programme ou non Donc pour l'instant, je ne vais pas entrer plus loin dans les renversements et c'est le cas. Mais lorsque nous créerons ces dix applications pendant le cours, vous comprendrez les principales différences entre les deux en voyant comment elles fonctionnent dans de vrais programmes. 21. 21. Utiliser les types de données dans le monde réel +: D'accord, vous connaissez maintenant certains des types de données Python les plus importants, mais je parie que vous ne savez toujours pas comment ces types de données sont utilisés dans le monde réel Normalement, par exemple, ces données sont stockées dans un fichier Excel ou un fichier texte. Alors, est-il logique de les écrire dans un dictionnaire Python comme ça ou comme ça ? Liste ? Non, ça ne l'est pas. Il existe en fait des moyens de charger automatiquement les données de votre feuille de calcul Excel vers Python pour créer ce dictionnaire Vous devez toujours créer le dictionnaire, mais vous n'avez pas à taper les données dans le fichier python point py comme je l'ai fait ici. Vous allez utiliser des extensions Python spécifiques pour charger les données ici. Ensuite, vous traitez ce dictionnaire comme nous l'avons fait ici. Mais ne t'inquiète pas. Je vais aborder cette question et nous aurons de belles candidatures plus tard dans le cours, dans la partie des applications. Restez à l'affût. 22. 22. Opérations avec les types de données: Supposons que vous ayez une liste de produits d' épicerie, que vous ayez créé un programme et que vous ayez stocké ces articles dans une liste Python entre crochets. Maintenant, dans votre programme, les utilisateurs peuvent supprimer et ajouter des éléments de cette liste. Supprimer et ajouter sont donc deux exemples d'opérations que vous pouvez effectuer avec des listes. La liste est donc un type de données et elle peut avoir différentes opérations, vous pouvez appliquer à un type de données de liste Ensuite, il se peut que vous ayez du texte ailleurs dans votre programme, et que vous puissiez mettre ce texte en majuscules. La mise en majuscule est donc une autre opération que vous pouvez appliquer à un type de données de flux Chaque type de données possède donc ses propres opérations. C'est donc ce que vous allez apprendre dans cette section. Il s'agissait donc d'une vidéo d'introduction. Je vous verrai dans la prochaine vidéo. 23. Messages d'erreur dans Python 3: Dans cette conférence, nous allons examiner les nouveautés de Python 3.10 concernant les messages d'erreur Python 3.10 est sorti en octobre 2021, et il comporte quelques améliorations concernant les messages d' erreur ainsi que d'autres améliorations, dont je parlerai dans prochaines vidéos dans les sections suivantes Donc, pour les messages d'erreur, supposons que vous ayez une expression très accentuée. Par exemple, vous souhaitez avoir une chaîne et remplacer le caractère I par un caractère Y dans cette chaîne. Mais si vous manquez une parenthèse et que vous exécutez le programme avec Python 3.9, nous obtenons une erreur de syntaxe, bien sûr, car la syntaxe n' est pas correcte, mais l'erreur n'est pas si explicative Nous obtenons donc l'erreur de syntaxe inattendue EOF lors de l'analyse. Vous ne savez donc toujours pas ce que vous avez mal fait dans votre code. Vous devez donc y retourner et le relire. Maintenant, comparez cela à Python 3.10. Donc, si je passe à Python 3.10 en tant qu' interpréteur et que j'exécute le code avec 3.10, cette fois, l' erreur de syntaxe est plus claire Donc erreur de syntaxe, cette parenthèse ici n'a jamais été fermée. Donc celui-ci. Nous savons maintenant que si nous commençons une parenthèse ici, nous devons la fermer à la fin Il s'agit de la première parenthèse, la parenthèse ouverte. Je devrais avoir une parenthèse fermante. Ajoutons donc cela. Un autre exemple serait si vous avez une liste, par exemple, un, deux, et que vous oubliez une virgule, et si vous exécutez Python 3.10, vous allez avoir à nouveau cette erreur de syntaxe : syntaxe non valide Peut-être avez-vous oublié la virgule, nous indique avec ces flèches l'endroit où doit se trouver la virgule Si vous comparez cela à 3,9, ce n'est pas la meilleure explication. Cela indique une syntaxe invalide, mais cela ne dit pas explicitement qu'il manque une virgule ici Pourtant, Python 3.10 est meilleur pour détecter les virgules manquantes. L'idée est que dans Python 3.10, vous obtenez l'erreur de syntaxe et vous obtenez également des informations supplémentaires Terminons cette vidéo avec un troisième exemple. Si vous faites une faute de frappe, disons que vous avez écrit un rythme réel au lieu de remplacer, et ajoutons la virgule ici Donc tout est correct, sauf cette faute de frappe. Donc, si vous l'exécutez d'abord avec 3.9, vous obtenez cette erreur d'attribut. Il indique que l'objet chaîne n' a pas d'attribut remplacé. Donc, aujourd'hui, on n'a pas vraiment l'attribut d'un rythme réel. Et vous commencez à vous demander si replace n'est pas du tout un attribut des chaînes. Comparez donc cela avec 3.10, 3.10 run, et voici l'erreur d'attribut Vouliez-vous dire que remplacer est une erreur très explicite et cela nous aide à corriger rapidement cette erreur. C'est pourquoi je voulais comparer Python 3 avec Python 3.10 pour souligner les différences en termes d'erreurs Maintenant, dans le cours, nous allons avoir une section dédiée aux erreurs, à savoir comment les gérer, comment les lire, comment ne pas être frustré par les ne pas être frustré par erreurs de programmation parce que chaque programmeur fait des erreurs Vous devez donc savoir comment les corriger. Pour l'instant, vous êtes encore débutant, alors continuez à regarder des vidéos et vous deviendrez de mieux en mieux en Python. Rendez-vous dans la prochaine vidéo. 24. 24. Effectuer plus d'opérations avec des listes: Permettez-moi maintenant de vous familiariser un peu plus avec types de données de liste en vous montrant ce que vous pouvez en faire Vous savez déjà que ce que vous pouvez en faire, vous pouvez consulter DR List. Vous pouvez ignorer les attributs qui commencent par double trait de soulignement et se terminent par un double trait de soulignement Ce sont essentiellement des attributs utilisés par Python en interne, et vous aurez rarement à les utiliser. Donc pour l'instant, vous pouvez simplement les ignorer et vous concentrer sur ce que vous allez réellement utiliser , à savoir cet ensemble ici. Permettez-moi d'ouvrir un autre shell Python et je vais appliquer quelques opérations à cette liste dans ce shell Python. Nous pouvons donc voir quelles méthodes nous pouvons appliquer dans cette fenêtre et nous pouvons appliquer les méthodes de cette autre fenêtre ici. Et je ne veux pas juste que tu te montres ce que ça fait dans le noir. Je veux vous montrer comment vous pouvez découvrir par vous-même ce que font ces choses. Utilisez donc toujours la fonction d'aide. Liste, essayons la méthode d'ajout. Maintenant, je vais taper la variable, mais il n'est pas nécessaire de la saisir en entier. Une fois que vous avez commencé à taper le nom de cette variable, vous pouvez utiliser la touche tab, ce qui complétera automatiquement le nom de la variable. Utilisez ensuite une notation par points et ajoutez, puis deux parenthèses Donc, entre parenthèses, vous verrez que cela prend deux arguments En fait, ce n'est qu'un argument. Ce n'est que l'objet lui-même. Self fait référence à la liste elle-même, et l'objet est en fait ce que vous souhaitez ajouter à cette liste Supposons que vous souhaitiez ajouter 8.1 comme ça Si vous vérifiez les températures du lundi, vous verrez qu'il y a maintenant un autre article C'est donc la syntaxe de append. Vous ignorez toujours self car self est automatiquement transmis en tant qu'argument à cette méthode, et self est essentiellement la liste elle-même. Essayons une autre méthode. Que ici pour arrêter, liste d'aide, effacer. Comment fonctionne-t-il ? Eh bien, dans ce cas, vous voyez qu'il n' y a aucun argument. Donc, les températures du lundi sont claires comme ça. Et ce qu'il fait, il efface simplement la liste, il supprime tous ses éléments Permettez-moi également d'essayer l'index et de vous laisser essayer la liste. L'index obtient en fait une valeur, un début et un arrêt, et il renvoie l'indice de la valeur. Qu'est-ce qu'un indice ? Essayons-le avec un index à points, la valeur avec valeur que signifie Python est l'une des valeurs de la liste. Maintenant que nous avons une liste sans valeurs, je vais recréer la liste à nouveau comme ça Voici maintenant notre liste. Permettez-moi d'essayer l'index entre parenthèses et la valeur, disons 8,8 Cela en retournera un. Pourquoi ? C'est parce que les listes ont une synchronisation des index en arrière-plan. Même si nous ne le voyons pas, chacun de ces éléments est associé à un index. Le premier a un indice de zéro. Le second a un indice de un et le dernier un indice de deux. Dans ce cas, et ainsi de suite. Maintenant, dans ce cas particulier, nous voyons également cet argument et cet autre pour la méthode d'indexation. Toutefois, si vous ne souhaitez pas transmettre ces valeurs, vous pouvez simplement transmettre une seule valeur. Donc, comme je l'ai fait ici, 8.8, cela signifie que 8,88 sera la valeur, par défaut, start sera égal à zéro, et stop sera égal à cette valeur Alors, qu'est-ce que Start and Stop ? Eh bien, quand c'est zéro comme c'est le cas par défaut, cela signifie que vous recherchez 8,8, commençant par le premier élément de la liste. L'interpréteur lancera donc la recherche à partir du premier élément, donc de l'élément dont l'indice est zéro, et nous chercherons 8,8, et il le trouvera, et il vous indiquera qu'il a un index de un. Cependant, si vous voulez dire à Python de partir de l'élément avec l' index deux, disons lancer une recherche d'ici et avancer vers la droite de 7.5, qui ne contient plus d'éléments. Quoi qu'il en soit, vous sautez donc cette partie de la liste. Dans ce cas. L'interpréteur vous indiquera que 8.8 ne figure pas dans la liste avec ce début. Vous avez également le stop, qui est par défaut, ce grand chiffre. Donc, si vous souhaitez limiter la recherche à l'index de droite, vous pouvez le faire également. Mais par défaut, vous allez garder ce zéro. Et cela vous indiquera que le nombre possède cet indice. Plus d'informations sur l'indexation dans la vidéo suivante. 25. 25. Comment accéder aux éléments de la liste: Précédemment, je vous ai montré que pour obtenir l' index d'un élément, vous pouvez utiliser la méthode de l'index. Maintenant, comment pouvons-nous faire l'inverse ? Comment obtenir un article compte tenu de son index ? Eh bien, pour cela, nous devons examiner une fois de plus la liste des attributs que nous pouvons appliquer à la liste. Et je sais que nous pouvons utiliser la méthode underscore get item underscore underscore D'accord, je sais que je vous ai dit plus tôt que vous utiliserez rarement ces méthodes, et en fait, nous n'en avons pas besoin pour ce que je vais faire maintenant, mais laissez-moi vous expliquer pourquoi dans un instant, vous comprendrez. C'est l'un des secrets de Python. Permettez-moi donc utiliser get item avec des traits de soulignement doubles, et bien sûr, c'est une méthode, elle a donc besoin de cette parenthèse entre crochets Essayons donc d' obtenir l'élément avec l' index 1. Qu'est-ce que ce serait ? Eh bien, 8,8. Maintenant, le secret, c'est que vous n'avez pas à utiliser cette méthode moche avec ces doubles soulignements Tout ce que vous avez à faire est d'utiliser cette syntaxe, appeler le nom de la variable comme ça , puis d'ajouter des crochets ouverts et fermants, puis d'entrer l'index à l'intérieur de ceux-ci. Cela vous donnera à nouveau la valeur, l'élément correspondant à cet index. Même si vous faites cela, Python en arrière-plan appelle en fait cette méthode et transmet cet élément, cette valeur en entrée pour cette méthode. C'est donc ce qui se passe en arrière-plan, mais Python vous permet de le faire d' une meilleure façon, comme ici. 26. 26. Comment accéder aux tranches de liste: J'ai une liste de cinq articles ici. Laissez-moi vous montrer pourquoi utiliser une fonction n et vous verrez qu' elle comporte en réalité cinq éléments. Désormais, en plus d'accéder à des éléments uniques de votre liste, comme cet élément avec les index trois, zéro, un, deux, trois, 6,6, vous pouvez également accéder à des parties de la liste. Disons, 1-4, cela vous donnera une autre liste. Les résultats de cette opération sont donc également une liste, et elle contiendra les éléments avec l'index un, l' index deux et l'index trois. La limite supérieure n'est pas incluse. Il n'est jamais inclus dans une tranche Python. Il s'agit donc d'une tranche, et voici le résultat de la tranche. Essayons d'obtenir les deux premiers éléments de la liste. Les deux premiers éléments ont un indice de zéro et un. Nous allons donc commencer par zéro. Puisque nous voulons également l' élément avec l'index un, nous allons y écrire deux pour en obtenir un. C'est le résultat. L'index deux n' est donc pas inclus, 7,5 n'est pas inclus. Vous pouvez également utiliser un raccourci pour cela. Vous n'avez pas besoin de taper zéro si vous voulez que tout commence par le premier élément, et cela vous donnera le même résultat. De même, si vous voulez obtenir, disons, les deux derniers éléments, vous pouvez commencer à compter zéro, un, deux, trois. Trois, commencez par trois, cela a un indice de quatre, donc nous allons écrire cinq ici. Même si nous avons obtenu le résultat attendu, vous feriez mieux d'utiliser le raccourci pour cela. C'est donc plus intuitif car cela vous indique que vous extrayez à partir d'un élément avec un index trois jusqu'au dernier élément de la liste Donc, sans savoir combien d' éléments il y a dans la liste. De même, ici, vous extrayez du tout premier élément vers l'élément dont l'index est un Maintenant, pour les grandes listes, lorsque vous souhaitez extraire les derniers éléments, cela n'a peut-être pas beaucoup de sens de compter depuis le début, un, deux, trois, quatre, cinq, six, etc. Mais Python possède un autre système d'indexation, et je vais vous le montrer dans la prochaine vidéo. 27. 27. Comment utiliser les indices négatifs: Alors, comment obtenir le dernier élément de cette liste ? Eh bien, vous pouvez le faire en vous référant à la liste , puis aux crochets, puis vous référant à l'index de l'élément souhaité. Donc, 9,9 a un indice de zéro, un, deux, trois, quatre, quatre OK. Mais une méthode plus intelligente consiste à utiliser une indexation négative, ce qui signifie qu'au lieu de compter, vous pouvez simplement écrire moins un et vous obtenez 9,9 Ainsi, chacun des éléments d'une liste Python possède deux index, un indice négatif et un indice positif Donc moins un pour ceci, moins deux pour cela, moins trois, moins quatre, moins cinq. Donc, moins cinq est le premier élément, en fait, 9.1. Et bien sûr, vous pouvez découper des listes en utilisant une indexation négative Essayons de récupérer les deux derniers objets. Donc, pour faire le découpage, il faut mettre l'index du premier élément de la tranche Le premier élément de la tranche est donc 6,6 et 6,6 a un indice négatif de deux. Utilisez une colonne, puis vous ne voulez rien assigner ici, car vous voulez tout ce qui vient après 6.6. Donc, juste comme ça, et tu retires la queue de la liste. De même, vous pouvez faire moins quatre moins deux, par exemple, ce qui vous donnera 8,8 moins quatre moins trois, et moins deux n'est pas inclus dans la tranche, parce que je vous ai dit que la limite supérieure n' est jamais incluse dans la tranche. Donc, vous n'avez que ceci et cela. Vous pouvez également commencer par le début de la liste pour obtenir 9.1, le premier élément de ce type. 28. 28. Comment accéder aux personnages et aux tranches de cordes: À votre grande surprise ou non, les chaînes disposent également d'un système d'indexation. La bonne nouvelle est qu'ils ont exactement le même système que les listes. Ils ont donc une indexation positive et négative, et vous pouvez les découper et accéder aux éléments qu'ils contiennent. Permettez-moi de faire une démonstration rapide. String hello qui vous donnera la chaîne E, qui est toujours une chaîne. Hello est une chaîne, E est aussi une chaîne, une indexation négative et aussi un découpage Une chose intéressante que vous pouvez faire est de me donner cette liste. Il s'agit donc d'une liste contenant différents types d'objets. Et ce que vous pouvez faire, c'est accéder à Devine it ? Eh bien, c'est la chaîne jaune, donc le premier élément de la liste. Ensuite, vous pouvez utiliser une chaîne d'indexation, par exemple, si vous en tapez deux , devinez ce que vous allez obtenir Eh bien, vous allez obtenir le premier L parce qu'il a un indice de deux, donc zéro pour H un, pour E, deux pour L. Parce que cette partie est une valeur à part entière, et cette autre partie obtiendra l'élément avec l'index deux de cette valeur, qui se trouve être une chaîne. C'est aussi simple que cela. 29. 29. Comment accéder aux éléments dans les dictionnaires +: Les dictionnaires ont-ils le même système d'index que les listes et les chaînes Découvrons-le. J' ai ce dictionnaire ici sur mon shell Python, grade étudiant. Essayons donc d'obtenir le deuxième article, peut-être. Non, cela indique une erreur clé, ce qui signifie que le dictionnaire n'a pas de clé nommée one Alors, quelles sont les clés du dictionnaire ? Peut-être la même clé. Ainsi, les dictionnaires, au lieu d'entiers, ont des clés comme index Une liste serait donc un accès. Les éléments de la liste seraient accessibles via des nombres entiers, qui commencent à zéro et se terminent par le dernier élément de la liste, l'index du dernier élément de la liste Avec les dictionnaires, c'est différent, comme vous pouvez le constater, et c'est en fait ce qui fait des dictionnaires un Voyons un autre exemple de son utilité. Disons que vous avez ce dictionnaire, de l' anglais vers le portugais. C'est un véritable dictionnaire humain. Vous avez quelques mots là-dedans. Disons qu'à Suva en portugais, il y aura du soleil. Désolée, j'ai une faute de frappe. Des codes. Alors maintenant, si vous voulez la version portugaise de sun, vous l'écrivez, et cela vous donnera cette version. Donc, avoir des entiers comme index dans ce cas serait très inutile Chaque cas d'utilisation possède donc sa propre structure de données à utiliser en Python. 30. 30. Plus de bases de Python : fonctions et modalités: Bonjour, bienvenue dans une nouvelle vidéo, et ceci est une vidéo d'introduction à la section des fonctions et des conditions. Vous entrez maintenant dans une section plus avancée de Python. fonctions et les conditionnels sont des concepts de base avancés de Python, et ce sont des blocs très fondamentaux que vous pouvez utiliser pour rendre vos programmes plus intelligents et plus faciles à gérer Ainsi, vous rendez vos programmes plus intelligents en leur faisant prendre des décisions que vous pouvez mettre en œuvre via des conditionnels. Donc, si votre programme reçoit des entrées et que vous voulez réfléchir, vous voulez lui faire savoir si vous voulez lui faire savoir si ces entrées sont correctes ou non, et vous voulez faire quelque chose si cette entrée est vraie et autre chose si cette entrée est fausse. Vous prenez donc des décisions dans votre programme par le biais d'un blocage conditionnel. Et puis vous avez les fonctions , d'autre part, les fonctions sont utilisées pour encapsuler des blocs de code, donc des blocs de code similaires. Il vous aide à organiser votre code. Ainsi, une fonction, par exemple, pourrait convertir des dollars américains en euros. Cette fonction fait donc certaines choses et le fait bien. Il obtient donc l'USD en entrée, et il vous donne des euros en sortie. Ainsi, à l'intérieur de la fonction, vous avez ces opérations mathématiques qui effectuent la conversion. conditions et les fonctions sont donc deux choses que vous allez apprendre dans cette section à travers des exemples, bien sûr. Je vous verrai donc dans la prochaine vidéo. 31. 31. Comment créer vos propres fonctions +: Plus tôt dans le cours, nous recherchions une fonction moyenne ou moyenne que Python pourrait avoir pour nous permettre de faire la moyenne des éléments des nombres d'une liste. Et nous avons découvert que Python possède des fonctions plus fondamentales telles que la longueur pour obtenir un certain nombre d'éléments d'une liste et la somme pour faire la somme des nombres d' une liste, mais il n'a pas de fonction de moyenne. Nous avons donc fini par le faire. Nous avions cette liste. Nous avons calculé la somme à l'aide de la fonction de somme, calculé la longueur, donc le nombre d'éléments à l' aide de la fonction de longueur, puis avons fait la division entre somme et longueur pour obtenir la moyenne. Cependant, le fait que Python n'ait pas fonction de moyenne ne signifie pas que nous ne pouvons pas créer notre propre fonction de moyenne. Ce que nous allons faire maintenant, c'est créer notre propre fonction moyenne. Pour créer des fonctions en Python, vous devez utiliser le mot clé def , puis choisir un nom pour votre fonction. Le nom doit suivre les mêmes règles de dénomination que pour les variables. Il ne peut donc pas commencer par un nombre, il ne peut pas commencer par un opérateur mathématique. Supposons que vous utilisiez parenthèses rondes et qu'à l'intérieur celles-ci, la première ligne se termine par une colonne À l'intérieur de la parenthèse, vous pouvez éventuellement saisir certains paramètres de votre fonction En d'autres termes, les paramètres sont des entrées que votre fonction obtiendra et qui traiteront cette entrée et produiront une sortie. Dans notre cas, l'entrée serait une liste. Cependant, vous devez ici donner un nom, suivant à nouveau les mêmes règles que pour les variables. Disons ma liste. OK, alors vous devez appuyer sur Entrée, et vous verrez automatiquement le code Visual Studio. L'éditeur a donc indenté la ligne suivante avec quatre espaces, un, deux, trois, quatre C'est ce que la syntaxe exige qu'après la première ligne, donc après avoir défini le nom que vous voulez pour votre fonction et les paramètres que vous voulez, vous deviez indenter les lignes suivantes Donc, soit votre éditeur le fera automatiquement, mais s'il ne le fait pas, un, deux, trois, quatre, indentifiez quatre espaces dedans Vous pouvez également le créer avec un seul espace ou un seul espace. Cela fonctionnerait également, mais il est recommandé d'utiliser quatre espaces. Tout le monde utilise quatre espaces, car le code en retrait est plus visible, ce qui le rendra plus drevable Ensuite, vous pouvez commencer à calculer la moyenne. Disons le moyen. Je vais l'appeler comme ça pour ne pas confondre avec le nom de la fonction. Ce serait la somme de ma liste, divisée par la longueur de ma liste. Ensuite, ce que nous voulons faire, utiliser le mot clé return. Et cela est suivi par ce que vous souhaitez retourner. Eh bien, nous voulons rétablir la moyenne. Maintenant, sauvegardez ça. Et laissez-moi ouvrir un terminal. Je veux exécuter ce script maintenant. Alors laissez-moi vous montrer ce qui va se passer. Rien ne va vraiment se passer. Rien ne se passe parce que Python ne fait que lire cette définition. C'est comme un plan. Vous avez déclaré ce que devait faire votre fonction, mais vous n'avez pas demandé à Python de l'exécuter. Pour exécuter votre fonction, vous devez appeler la fonction transmettre une valeur d'entrée pour le paramètre que vous avez défini. Lorsque vous souhaitez imprimer, ouvrez les parenthèses, fermez-les, enregistrez, n' oubliez pas et exécutez Et c'est la moyenne de ces trois chiffres. Donc, comme ça, je peux facilement essayer avec de nombreuses valeurs d'entrée. Juste comme ça, je n'ai rien à réécrire ici. C'est ce qui fait la beauté d'une fonction. Vous pouvez donc voir la similitude ici. Tout comme nous utilisons la fonction sum, nous utilisons la fonction Mint de la même manière. Donc sum obtient cette valeur d'entrée Man obtient cette valeur d'entrée. Il se trouve qu'il s'agit d'une variable. Il se trouve qu'il s'agit d'une valeur directe, mais cela n'a pas d'importance. Si vous vérifiez le type de moyenne, type de moyenne et le type de somme, vous verrez que Mean est une fonction. Cela a donc été imprimé. Ceci a été imprimé par celui-ci. Donc, la moyenne est une fonction et encore une fois la somme, c'est une fonction, mais c'est une fonction intégrée. Il est donc intégré à l'interpréteur Python. Elle a été conçue par l'équipe de développement principale de Python, et cette fonction a été conçue par moi, le programmeur. C'est ainsi que vous créez et appelez une fonction en Python. 32. 32. Quand utiliser l'impression et le retour +: Il faut souligner que lorsque votre fonction n'a pas d'instruction return, save, execute, elle renvoie implicitement un non-objet Aucun n'est un objet spécifique en Python, ce qui ne veut rien dire. Ce n'est pas un entier, ce n'est pas un flottant, ce n'est pas une chaîne, c'est juste aucun. Cela ne signifie rien. Python, s'il ne trouve pas l' instruction return en arrière-plan, il renvoie none. Donc, si vous l'exécutez, oups, une erreur d'indentation. C'est une bonne chose. Vous voyez que tout ce bloc doit avoir le même niveau d'indentation Si vous avez indenté quatre lignes ici, vous devez également indenter quatre lignes ici L'indentation doit donc être cohérente. Cela semble correct. Nous avons donc obtenu les mêmes résultats, aucun ici et aucun là. Certaines personnes commettent cette erreur. Au lieu de retourner, ils utilisent l'impression. Au lieu d'utiliser le retour, ils utilisent une fonction d'impression. La moyenne, qui fonctionne à moitié. Il renvoie donc toujours la valeur et n'en renvoie aucune. Donc, ce qui se passe ici, c'est que lorsque vous appelez la fonction ici, Python exécute toutes ces lignes, donc il calcule la moyenne, puis il passe à la ligne suivante Donc, ligne par ligne, il imprimera la moyenne, donc il imprimera la moyenne ici, puis il recherchera un relevé de retour. Il ne le trouve pas, il n'en renverra donc aucun. Le problème est que si vous essayez d' effectuer d'autres opérations avec votre valeur moyenne, disons que ma moyenne est égale aux fonctions de moyenne zéro, trois et quatre. OK. Et je voudrais imprimer ma moyenne plus dix. Je m'attendrais donc à ce que cela me donne la valeur de sept, soit la somme divisée par trois, deux points plus dix ou 12 points. Mais voyons ce que cela va m'apporter. Cela me donnera donc une erreur de type à la place. J'ai essayé d'ajouter le type non, qui n'est aucun. Ce n'est donc pas un type. C'est le type de cette valeur. Il essaie de l'ajouter à dix. Donc, ma moyenne est aucune car elle n'en renvoie aucune. Un interprète essaiera de l' additionner à dix. Ce n'est pas possible. C'est pourquoi vous ne devriez pas utiliser l'impression. Si je le remplace par return à la place, supprimez les parenthèses, enregistrez, exécutez, cela me donnera 12,3 C'est la moyenne plus dix. Toutefois, cela ne signifie pas que vous ne pouvez pas utiliser l'impression dans vos fonctions. Tu peux vraiment le faire. Supposons que vous souhaitiez simplement imprimer des informations. Étudiez-le Fonctionne, étudie et exécute cela. Vous obtenez le résultat de print ici, puis Python renvoie la moyenne. Vous obtenez la moyenne, vous la stockez ici, la sortie de votre fonction, mais la valeur de la fonction est toujours celle que vous renvoyez ici. Si vous voyez que c'est utilisez toujours return dans vos fonctions, sauf si vous avez une raison très particulière de le faire. 33. 33. Introduction aux contifs: Nous avons défini cette fonction dans les cours précédents, qui permet de calculer la moyenne d'une liste. Cependant, que se passe-t-il si au lieu de passer une liste en entrée, nous transmettons un dictionnaire ? Les notes des étudiants se trouvent dans ce dictionnaire ici. Voyons ce qui va se passer. Eh bien, cela indique un type d'opérande non pris en charge. Une erreur se produira donc avec la fonction sum car elle essaiera d' additionner des chaînes et des entiers, et cette fonction n'est pas conçue pour traiter des dictionnaires Il est conçu pour traiter la liste. Alors, comment pouvons-nous faire en sorte que cette fonction traite à la fois des listes et des dictionnaires ? Nous pouvons le faire en utilisant des conditionnels. Voyons comment procéder dans les prochaines vidéos. 34. 34. Utiliser le système: Cette fonction renvoie la valeur moyenne d'une liste, mais nous voulons la rendre plus intelligente. Nous voulons que la fonction renvoie la moyenne même si la valeur d'entrée est un dictionnaire. Ainsi, lorsque la valeur d'entrée est une liste, elle va appliquer un algorithme spécifique et renvoyer la valeur spécifique, ce qui est un roman moyen, c'est quand il s'agit d'un dictionnaire, elle va vérifier s'il s'agit d'un dictionnaire et appliquer l'algorithme correspondant qui calcule la valeur moyenne d'un dictionnaire Nous savons donc que certaines températures du lundi divisées par la durée des températures du lundi vous donnent la moyenne de la liste. De même, les notes des étudiants, qui sont un dictionnaire, ses valeurs, la somme de ses valeurs divisée par la longueur du dictionnaire des notes des étudiants, vous donneront la moyenne Nous voulons donc que notre fonction vérifie et prenne une décision. Il s'agit d'un paramètre. Permettez-moi de le remplacer par valeur. Value est un nom plus significatif puisque ce que nous traitons ne sera pas seulement une liste, mais il peut également s'agir d'un dictionnaire. Et puis sous la fonction, tout doit être indenté Vous pouvez voir que tout le corps de la fonction est en retrait. Le bloc conditionnel que je vais écrire ici sera également indenté Cela commence par, si vous vous en souvenez, nous avons utilisé une fonction de type plus tôt dans le cours, qui renvoie le type d'un objet. Par exemple, il s'agit d'un dictionnaire vide, mais c'est toujours un dictionnaire. Donc, ce que vous pouvez faire ici, c'est dire, je tape une valeur, opérateur de double affectation, ce qui signifie égal. C'est un opérateur de comparaison, je vérifie l'égalité. S'il s'agit d'un dict, d'une colonne, entrez, et il doit être indenté de quatre espaces Vous voyez donc qu'il s'agit d'un autre niveau d'indentation. C'en est un pour moi, et celui-ci est pour la fonction. Ici, la moyenne sera égale à la somme de la valeur que les valeurs divisent par la longueur de la valeur. Il s'agit donc d'un dictionnaire, qui indique les valeurs des points et la longueur du dictionnaire. Je dois fermer l'appel de la fonction somme comme ça et entrer si vous en avez fini avec I block. Donc, si c'est tout ce que vous voulez vérifier, alors vous dites autre chose, et nous avons ce code, qui doit également être indenté sous s, et c'est tout Laisse-moi essayer ça. Donc, avec les notes des étudiants, le dictionnaire comme entrée, nous avons obtenu cette valeur ici. Si j'ai utilisé les températures du lundi dernier, cela me donnera l'autre valeur, qui est la moyenne des températures du lundi. C'est donc une condition « si » et «   sinon ». Mais laissez-moi l'expliquer ligne par ligne dans la vidéo suivante. 35. 35. Une explication subséquente ligne par ligne: Alors, que se passe-t-il dans ce script ? Permettez-moi de l'expliquer ligne par ligne. Python exécute la définition de fonction, mais il ne fait rien car il s'agit simplement d'une définition de fonction Python fait des choses lorsqu' il trouve un appel de fonction, comme celui-ci ici. Nous appelons donc ici la fonction et la valeur d'entrée de cette fonction sera la température du lundi, ce qui est équivalent à cette liste. Cette liste sera stockée dans cette variable. Une valeur est donc égale à cette liste. Ce qui se passe, c'est que l' interprète vérifie si le type de cette liste est périmé. Si c'est vrai, il exécutera cette ligne ici. Je vais affecter le résultat de cette expression à la variable moyenne. Cependant, cela n'est pas vrai dans ce cas car le type de liste n'est pas addictif Python n' exécutera donc pas cette ligne. Il passera à la ligne suivante. Donc, si ce n'était pas vrai, il fera ce truc ici. La moyenne sera donc égale à la somme de la liste divisée par la longueur de la liste , soit 9,26. Et c'est donc la valeur actuelle de la moyenne, donc l' indentation se termine ici Le retour se fait donc en dehors du bloc I and else. Vous pouvez le voir ici. Il faut que ce soit à l'extérieur. Le bloc conditionnel s'arrête donc ici et la valeur actuelle de la moyenne sera renvoyée par l'instruction return. Vous obtenez donc cette valeur moyenne pour cette liste. S'il s'agit plutôt de la note de l'étudiant, ce qui se passe, c'est que ce dictionnaire sera stocké sous forme de valeur et si le type de valeur est dict, oui, c'est dict. La moyenne sera égale à cela. Passons donc à la signification du dictionnaire. Et si cette condition est vraie, elle est exécutée, et Python ignorera tout ce qui se trouve sous autre condition. J'ai dit tout ce qui est en dessous de ls, c'est-à-dire tout ce qui est en retrait sous le reste. Donc, les enfants d' Else, pour ainsi dire, le retour de la moyenne n'est pas un enfant de L. Il n'est pas indenté sous ls, il est indépendant. Il possède son propre niveau d' indentation. Donc, la valeur actuelle de la moyenne est celle-ci ici. Donc, renvoyez la moyenne, nous renvoyons en fait la moyenne du dictionnaire. Celui-là dedans. 36. 36. Plus d'informations sur les consommaires +: Maintenant, ce bloc conditionnel se trouve à l'intérieur d'une fonction, mais il peut également être à l'extérieur d'une fonction comme celle-ci. Et disons trois plus qu'un, imprimez plus, imprimez plus sinon Imprimez, pas plus. Et tu t'amélioreras. Ce qu'un bloc conditionnel vérifie, c'est vérifier si cela est vrai. Donc true est en fait un autre type en Python, tout comme les entiers, les leads et les chaînes La vérité est un autre type. C'est donc en fait l' équivalent de si c'est vrai, imprimer plus grand, sinon, imprimer, pas plus grand. Donc, la vérité est toujours vraie. De même, le type trois, par exemple, égal à t renverra vrai. C'est donc ce que nous faisons ici également. Cependant, il existe un autre moyen considéré comme meilleur en Python : instance is instance value, et vous voulez vérifier les dictionnaires ici comme ça Exécutez et vous obtiendrez le même résultat. Par exemple, three int vous donnera le même résultat. Vous pouvez utiliser l'un ou l'autre, mais pour des raisons avancées, je ne vais pas expliquer pour le moment car c'est hors contexte. À ce stade, bien sûr, il vaut mieux utiliser son instance. Maintenant, vous avez vu cet exemple où j'ai utilisé si trois est supérieur à un, et j'ai imprimé une valeur supérieure et non supérieure. Nous pourrions également avoir ces trois cas trois est supérieur à un, trois est égal à un et trois est inférieur à un. Dans ce cas, si un autre ne suffit pas, il nous faut autre chose. Je vais vous montrer comment nous pouvons le faire dans la prochaine vidéo. 37. 37. Utilisation de l'accord Elif: J'ai ces deux variables ici, chacune d'elles a une valeur et laissez-moi écrire une condition qui fera quelque chose de différent selon que X est supérieur, égal ou inférieur à Y. Si X est supérieur à Y, imprimez X est supérieur à Y. Si X est égal à Y, imprimer A S est égal à Y. Et que reste-t-il donc, quel est le Si X n'est ni supérieur ni égal, eh bien, s. Donc, si vous avez plus de conditions à vérifier, vous pouvez continuer avec si cela et L ceci et cela et ainsi de suite Mais si vous avez terminé, vous pouvez utiliser Ls. Imprimer, il faut donc que X soit inférieur à Y. Et nous obtenons donc que X est supérieur 38. 38. Espace blanc +: Dans cette conférence, j'aimerais clarifier l'utilisation des espaces blancs. Ainsi, quand utiliser un espace blanc, quand en utiliser plusieurs et quand ne pas utiliser d'espace blanc. Pour vous expliquer cela, j'ai ici un script en trois parties. Chacune des parties fera la même chose. Donc, le premier affiche A, aA et trois comme, puis B, ici, puis C. Donc le premier, ici, j'ai saisi un, deux, trois, quatre, cinq, six, six, six espaces Cela fonctionnera donc. Comme vous pouvez le voir ici, vous obtenez le résultat correctement, mais ce n'est pas une bonne pratique. Même si cela fonctionnera, n'est pas une bonne pratique car le code n'est pas très lisible. C'est donc un problème avec ce premier bloc. Et ici, dans le deuxième bloc, je corrige ça. L'espace ici est parfait. En gros, vous voulez séparer les choses par des espaces. En ce qui concerne les opérateurs tels que les opérateurs de comparaison, plus ou moins ou de multiplication, le code fonctionnera même si vous n'avez pas d'espaces comme celui-ci. Cependant, pour rendre le code plus lisible, il est préférable d'avoir également des espaces entre les opérateurs. L'espace entre un I et un chiffre est indispensable. Si vous l'avez, le code ne fonctionnera pas. Vous obtiendrez une syntaxe non valide. Cependant, aucun espace entre les opérateurs n'est acceptable. fait que vous ayez cette expression sans espaces pose donc un problème dans ce bloc . Dans certains cas particuliers, je n'utilise pas d'espaces dans les vidéos parce que je souhaite afficher le texte dans de plus grandes polices Je dois donc faire des sacrifices avec moins d'espaces afin de pouvoir placer plus de textes à l'écran. Donc, à moins que vous n'ayez une bonne raison de le faire, veuillez utiliser des espaces, un espace. Alors voilà, c'est bon. Un espace ici, un ici et un là, puis après la colonne, voici ce que vous devez savoir. Je vous ai déjà parlé de l'indentation. Après une colonne, il y a toujours une indentation. L'indentation signifie au moins un espace. Cela fonctionnerait également comme ça, mais une bonne pratique consiste à avoir quatre espaces, quatre. C'est exact. Et lorsque votre script contient plus de code , il est préférable de séparer les éléments à l'aide ligne de rupture pour séparer les logiques. Donc, si vous avez un bloc conditionnel, vous devez l' écrire ligne par ligne. Il n'y a pas de ligne de démarcation comme ça. Cela fonctionnerait également, mais veuillez ne pas utiliser de lignes de rupture pour rendre votre code plus lisible. Cependant, une fois le bloc conditionnel terminé, vous avez un autre bloc logique Il n' y a pas de règles claires ici, mais utilisez simplement la logique. J'ai donc pensé qu'il était bon d'avoir ces fonctions d'impression sans ligne de démarcation entre elles. Donc ici, si j' ajoutais une autre fonction, je tracerai une ligne de brique, puis créerai une fonction ici et ainsi de suite. Et bien sûr, utilisez également l'indentation pour les fonctions. Donc, après la colonne, vient toujours l'indentation C'est plus ou moins tout à propos de space wide space en Python. 39. 39. Plus de bases de Python : traitement des entrées utilisateur: Bienvenue dans une section du cours. Ici, vous allez apprendre à interagir avec l'utilisateur via votre programme Python. Ainsi, votre programme Python peut obtenir des informations de la part de l'utilisateur. Il peut demander à l' utilisateur certaines entrées, et l'utilisateur entre certaines entrées, et le programme de sorte que votre script Python obtienne ces entrées, obtienne ces entrées, traite et donne ensuite des résultats. Voyons donc dans cette section comment vous pouvez obtenir l'entrée de l'utilisateur, traiter et produire une sortie. Je vous parlerai dans la prochaine vidéo. Merci. 40. 40. Apprendre davantage sur les entrées d'utilisateur: Comme vous le savez, lors des conférences précédentes, nous avons défini cette fonction, et nous l'appelons ici pour qu' elle vérifie si la température donnée est supérieure sept et qu'elle redevienne chaude si c'est vrai et froide si la température est égale à sept ou inférieure à sept. C'est très bien. Mais à quoi sert cette fonction dans la vie réelle ? Par exemple, qui donne cette contribution ? En tant que programmeur, vous écrivez cette fonction pour quelqu'un d'autre afin qu'il puisse l'utiliser. Mais vous ne vous attendez pas à ce qu'ils modifient le fichier Python comme s'ils avaient un éditeur de code Visual Studio ou d'autres éditeurs. Ensuite, vous ne pouvez pas simplement leur dire d' aller à la ligne sept et de modifier la valeur, puis d'exécuter ce code pour obtenir des sorties différentes en fonction de la valeur. Alors, pourquoi ne pas inviter l' utilisateur à saisir une valeur ? Ensuite, l'utilisateur saisit la valeur, puis nous obtenons cette valeur et la puis nous obtenons cette valeur et la traitons dans notre fonction. Dans ce cas, nous obtenons cette valeur et la mettons ici dans l'appel de fonction. Faisons-le. Nous y avons donc une fonction. Nous voulons obtenir une valeur de la part de l'utilisateur. Pour obtenir une valeur de l'utilisateur, utilisez la fonction de saisie. La fonction d'entrée reçoit un argument, et c'est le message que vous souhaitez afficher à l'utilisateur sur la ligne de commande. Par exemple, entrez Entrez la température. Mettez-y peut-être une colonne si vous le souhaitez, vous pouvez écrire ce que vous voulez. Laissez-moi enregistrer le script et l'exécuter. Vous voyez maintenant que je l'ai exécutée, et cette fonction de saisie bloque l'exécution d' un programme et attend l' entrée de l'utilisateur sur la ligne de commande Donc, si je saisis ici quelque chose comme sept, dans ce cas, ce qui va se passer, c'est que cette expression sera égale à sept. Cependant, comme nous n'avons rien fait ici, rien ne se passera si nous imprimons cette valeur. Par exemple, sept, vous obtiendrez la valeur de celle-ci, qui est sept. Vous pouvez donc y mettre tout ce que vous voulez. Bonjour, et vous vous défoncez, c'est imprimé. Ce que out suggère, c'est qu'au lieu de l'imprimer, vous devriez d'abord le mettre dans une variable. Cela le rendrait plus lisible. Utilisez donc votre entrée, puis vous pourrez faire ce que vous voulez avec cette variable, comme la réduire. Imprimez-en donc la version minuscule. Salut, lui. Donc, vous le saluez en lettres minuscules. Bien, revenons à notre fonction. Permettez-moi maintenant d'essayer d'imprimer sortie de la fonction météo avec une valeur de, eh bien, entrée par l'utilisateur, quelle que soit la valeur saisie par l'utilisateur en entrée. Je vais donc exécuter le programme maintenant. Le programme me demandera de saisir la température. Le programme me demandera de saisir une température, l'exécution est donc gelée à ce stade. Cette ligne n'a pas encore été exécutée. Il sera exécuté après avoir donné une valeur ici et appuyé sur Entrée. Alors laissez-moi en noter six. Voyons ce que nous allons obtenir cette fois. Nous avons un message d'erreur. Lisons attentivement l'erreur. Il s'agit du fichier Basics point PY, qui est notre fichier, d'accord ? L'erreur s'est d' abord produite sur cette ligne ici. Donc ici, imprimez les conditions météorologiques, les entrées de l'utilisateur. Lorsque Python a essayé d' exécuter cette ligne, il n'a pas pu le faire. Et pourquoi ? Eh bien, vous devez suivre l'erreur. Donc, toujours Line Basics, c'est la deuxième ligne. Cette ligne. Ainsi, lorsque Python a essayé d'exécuter cette ligne, cette ligne a appelé d'autres éléments du script. Et l'erreur était dans cette deuxième ligne. Ainsi, lorsque l'appel de fonction a essayé d'appeler la fonction, il a essayé d'exécuter cette ligne. Donc, s'il s'agit de la température, elle a essayé de comparer cinq à sept. Et puis il a eu cette erreur lorsqu'il a essayé de comparer cinq à sept. Donc, quand il a essayé d'exécuter cette ligne, en d'autres termes, voyez ce qu'il dit. Erreur de saisie. Cet opérateur n'est pas pris en charge entre les instances de chaîne et d'entier. Donc string et int, ce qui signifie que c'était une chaîne, et c'était un int. Notre saisie utilisateur était donc que sept ont été transmises ici, et cela a été comparé à sept. Il semble que notre entrée, l'utilisateur, était une chaîne, et c'est vrai, et c'est ce que j'essayais de faire valoir ici parce que quelle que soit l'entrée que l'utilisateur écrit ici, même s'il s'agit d'un nombre, Python la convertira en fait en chaîne. Donc, sept, en fait, seront convertis en une chaîne comme avec des guillemets ou des guillemets doubles en Python. Mais il existe une solution simple. Ce que vous pouvez faire, c'est convertir cette valeur, qui est une chaîne de sept, vous pouvez la convertir en un flottant. Fais attention aux parenthèses. Donc, float est une fonction. Il y a une parenthèse ouverte ici et une parenthèse fermante La saisie est également une fonction avec ses propres parenthèses ouvrantes et fermantes Alors maintenant, si je fais ça, température de cinq, je vais obtenir la bonne réponse. Et permettez-moi d'être transparent avec vous. Encore une fois, saisissez l'entrée de l'utilisateur , entrez une entrée. Permettez-moi maintenant d'imprimer le type d'entrée utilisateur. Exécutez et six, vous verrez que six est en fait une chaîne. C'est pourquoi je suis en train de le convertir flotteur pour que six cette fois soient réellement un flotteur, qui ressemble à ceci. Vous pouvez imprimer le nombre réel ici, le nombre converti réel, la version flottante du nombre, exécuter à nouveau, 6.0. Vous pouvez également utiliser int ici si vous le souhaitez, six, donc vous obtiendrez six, ce qui est égal à 6,0, bien sûr. Mais les chars seraient un meilleur choix car je peux vous montrer pourquoi Si vous entrez 6.3, par exemple, il ne pourra pas le convertir car cela revient à faire Int, 6.3 en double code. Donc Int sera confus, il ne saura pas comment le convertir en un entier. Il convertit toutefois six s'il s'agit d'un simple six sans décimale Float convertira, désolé, six et 6.3. C'est ainsi que vous utilisez les entrées utilisateur en Python. 41. 41. Formatage de chaîne +: Comment créeriez-vous un programme qui se comporte ? Ainsi, il vous demande votre nom, et vous entrez votre nom en tant qu'utilisateur, et le programme vous accueillera affichera un message « bonjour et votre nom, ainsi qu' un point d'exclamation à la fin de la chaîne Eh bien, tu le fais avec deux choses. d'abord, vous avez besoin de la fonction de saisie pour demander à l'utilisateur de saisir des informations, puis vous avez besoin d' un formatage de chaîne. Voici à quoi ressemble le formatage des chaînes en Python. Donc, dans la première ligne, nous obtenons l'entrée utilisateur, stockons sous forme de chaîne dans l'entrée utilisateur, puis nous créons une variable. Dans cette variable, nous allons stocker le message que nous sommes en train de construire. Et voici une expression de formatage de chaîne. Nous voulons donc imprimer hello, puis avoir un espace, puis nous voulons imprimer le nom de l'utilisateur, donc la valeur saisie par l'utilisateur. Et ici, les pourcentages sont une chaîne spéciale en Python. Ensuite, nous avons un point d'exclamation, qui est une chaîne normale Et une double citation. C'est donc spécial ici. Ensuite, après la chaîne, vous ne voulez pas mettre de virgule , vous devez utiliser cet opérateur de pourcentage, puis utiliser une variable Maintenant, la valeur de cette variable remplacera le pourcentage S. Donc, ce que vous obtenez place, c'est bonjour et votre nom. Maintenant, cette méthode de formatage de chaîne utilisant ce pourcentage S ici et l'opérateur de pourcentage ici est également valide pour Python 2 et Python 3. Il existe maintenant une autre méthode qui a été introduite dans Python 3.6. La méthode que je vais présenter maintenant ne fonctionnera donc pas si vous l'exécutez avec une version de Python antérieure à 3.6. La méthode est la suivante. Stockons à nouveau la chaîne entière dans une variable Ce sera donc une chaîne avec guillemets doubles ou des guillemets simples, selon votre préférence. J'utilise des guillemets. Alors bonjour, et vous utilisez ces crochets. Et à l'intérieur, vous mettez le nom de la variable, quelle valeur souhaitez-vous mettre à cet endroit ? Maintenant, ce n'est pas tout. Donc, si je enregistre, que j'exécute le code et que je dis «  Ajoutez-le », il renverra cette chaîne. Nous devons donc faire autre chose ici. Ce que nous devons faire, c'est ajouter un préfixe F juste à l'extérieur du code Voici donc la chaîne. Ce F sort du code. Si je sauvegarde le script , exécutez-le à nouveau, écrivez mon nom, et maintenant nous obtenons le résultat attendu. Notez que nous avons deux variables portant le même nom ici, et ce qui se passera, c'est que le premier Python exécute un script de haut en bas, donc il exécute la première ligne, il exécute la deuxième ligne, donc il stockera hello audit dans la Mais ensuite, nous sommes en train de remplacer cette variable. Dans ce cas, la chaîne sera écrite dans cette variable de message. Ainsi, où que vous créiez ici, quel que soit l'objet que vous stockez ici dans la variable, cet objet sera l'objet actuel auquel cette variable fera référence. Dans ce cas, nous imprimons l'objet que vous avez créé ici, qui se trouve être Hello Audit. Lequel devriez-vous utiliser ? Eh bien, si vous pensez que votre projet sera exécuté avec Python 3.6 ou supérieur, utilisez cette version plus agréable C'est plus lisible. Si vous pensez que votre projet et vos fichiers Python seront exécutés avec Python deux, 3.1, deux ou trois, vous pouvez opter pour cette méthode. Parce que parfois, lorsque vous déployez votre script sur un serveur, par exemple, supposons que vous souhaitiez exécuter un script tous les jours à une certaine heure, que vous souhaitiez le déployer sur un serveur Web et que ce serveur Web dispose d'une version spécifique de Python. Parfois, cette version est Python 2. Dans ce cas, vous devez ajuster vos scripts pour qu'ils fonctionnent avec Python 2 et que le serveur Web, le serveur et l' ordinateur exécutent votre script avec une version particulière de Python. Nous y reviendrons plus tard lorsque nous déploierons les applications Web. Donc, pour l'instant, ce sont les deux méthodes de formatage des chaînes. 42. 42. Formatage de chaîne avec plusieurs variables +: Précédemment, je vous ai expliqué comment insérer dynamiquement la valeur d'une variable dans une chaîne. Nous avons donc construit ici hello et la valeur saisie par l'utilisateur dans la fonction de saisie. Cela a donc fonctionné avec Python deux et trois. Cela fonctionne avec Python 3.6 et les versions ultérieures. Maintenant, que faire si nous voulons insérer plus d'une valeur dans la chaîne, comment faire ? Par exemple, supposons que la première fonction de saisie nous demande le nom et la seconde le nom de famille. Appelons le nom de cette variable et celui-ci le nom de famille. Pour utiliser cette version du formatage de chaîne avec deux variables, vous devez procéder comme suit. Au lieu d'une seule variable, vous devez utiliser crochets, puis saisir toutes les variables que vous souhaitez insérer dans le nom et le prénom de la chaîne dans ce cas. Maintenant, si vous l'exécutez, vous allez obtenir une erreur. Vous devez donc faire quelque chose de plus là-bas. Disons audit. Ulce et tu as une erreur de frappe Tous les arguments ne sont pas convertis lors du formatage des chaînes, ce qui signifie que les arguments sont le nom et le prénom. pas tous été convertis car seul le nom a été converti car vous n'aviez qu' un seul espace réservé ici, les pourcentages Vous souhaitez avoir deux espaces réservés, un pour le nom de famille, deux Si vous l'exécutez, nous obtenons une autre erreur, mais cela n'est pas lié à cette ligne ici. Cette ligne est parfaitement fine. Cela fonctionne. Pourquoi est-ce que ça marche ? Eh bien, parce que vous pouvez voir que l'erreur s'est produite. C'est donc ici que commence le traçage. Vous voyez que l'erreur se produit dans filebsics point i, qui est le fichier où se trouve le code à la ligne cinq, ce qui signifie qu'au-dessus de la ligne cinq, tout va bien Cette ligne a donc passé avec succès la vérification des erreurs. Il est exempt d'erreur. C'est donc la ligne qui contient l'erreur, et c'est une erreur de nom, saisie du nom par l'utilisateur n'est pas définie. Cette entrée utilisateur ici n'a donc pas été définie dans notre code. Nous n'avons pas de variable portant ce nom. Nous l'utilisons simplement ici, mais nous ne l'avons pas défini. Et voici un truc. Si vous ne souhaitez pas exécuter cette ligne, vous pouvez la commander. Donc, en ajoutant ce symbole ici, Python ignorera cette ligne. Il le traitera comme un commentaire. Pas sous forme de code. Enregistrez donc le script, exécutez-le. Entrez votre entrée en tant qu'utilisateur, et c'est le résultat que nous obtenons cette fois. C'était donc un bon exercice sur la façon de corriger les erreurs. Revenons maintenant à nos opérations de formatage de chaînes. Voyons maintenant comment cela va fonctionner avec deux variables. La saisie par l'utilisateur n'est donc plus une variable. Nous voulons utiliser le nom. Alors bonjour, nom, puis nous voulons avoir un espace ici. Il s'agit donc d'un espace blanc. Donc nom, espace blanc, prénom. Et c'est aussi simple que cela. Exécuter. Et vous obtenez le résultat hello ou suche C'est donc la variable de message, la chaîne de la variable de message. Ainsi, vous pouvez mettre autant de variables que vous le souhaitez. Par exemple, quoi de neuf ? Quand peut être une variable. Aujourd'hui, la chaîne d'aujourd'hui fait partie de la variable wind, la variable win sera remplacée ici par la valeur qu' elle possède actuellement, qui est aujourd'hui, exécutez-la. Et c'est ainsi que cela fonctionne. Et c'est ce que vous devez savoir sur formatage des chaînes en Python. 43. 43. Introduction aux boucles For +: Bonjour, bienvenue dans cette nouvelle section. il y a des lacunes dans vos connaissances en Python jusqu'à présent en ce qui concerne les bases de Python que vous avez apprises tout au long de ces sections, alors dans cette section, j'essaie combler ces lacunes afin que vous sachiez ce qui se passe. Nous allons donc le faire en assemblant toutes les pièces en créant une application plus grande avec les blocs de code que vous avez appris afin que tout commence à plus de sens et que vous sachiez comment créer des programmes concrets. Il s'agit donc de la première étape vers la création de programmes concrets. Et ce n'est pas vraiment un programme concret, car nous allons donner d'autres exemples concrets dans les sections suivantes. C'est donc juste pour vous assurer que vous avez bien appris les concepts de base de Python. Commençons donc par la vidéo suivante. Je t'y verrai. 44. 44. Comment et pourquoi utiliser des boucles pour les boucles: Dans cette conférence, j'expliquerai l'un des concepts les plus importants de la programmation Python, savoir les quatre boucles. Je vais utiliser un exemple, afin que vous compreniez non seulement la syntaxe, comment écrire une boucle à quatre boucles, mais aussi pourquoi vous devriez utiliser quatre boucles. Disons que nous avons ces températures pour lundi. Peut-être que cela a été enregistré le matin à midi et cela le soir Comment pouvons-nous créer un programme qui imprime les valeurs arrondies de chacune de ces valeurs ? Comme ça. Ce serait donc le résultat attendu. Vous pouvez voir ici que vous obtenez neuf, car 9,1 arrondir à un nombre entier serait neuf, puis 8,89 à nouveau et 7,68 Comment pouvons-nous le faire ? Nous devons donc trouver un moyen d'accéder aux éléments de la liste. Et vous connaissez déjà une méthode pour accéder aux éléments d'une liste, qui utilise des index. Donc, si vous voulez le premier, vous devez utiliser zéro. Vous voulez donc imprimer le premier élément, qui, cependant, imprimerait 9.1. Vous voulez la version ronde de 9.1, ce qui est peut-être utile pour voir quelles sont les fonctions dont vous disposez. Comme ça. Alors jetez un coup d'œil ici et vous pourrez trouver un surround rond, ce qui signifie que vous voulez arrondir un nombre, surround 9.1, vous obtenez neuf. Et dans notre cas, le nombre que nous aimerions arrondir est cette expression. Nous voulons donc appliquer ici et mettre cette expression entre parenthèses , donc c'est le numéro 9.1 Alors essayez-le avant d' écrire le code entier, et c'est très bien. Fais-le encore une fois. Mais avec un et avec deux. Exécutez, et vous obtenez le résultat attendu. OK, c'est bon. Cela fonctionne. Mais si vous aviez une longue liste de 100 éléments, vous vous retrouveriez avec 100 lignes de code. Eh bien, je peux vous montrer comment faire cela avec seulement deux lignes de code à la place. C'est comme ça que tu le fais. Vous utilisez une boucle à quatre pour la température, choisissez un nom pour une variable. Pour la température, vous pouvez voir comment ces mots clés sont mis en évidence. Ce sont donc en fait des mots réservés à Python. La température n'est qu'une variable. C'est pourquoi il est en noir. Pour ce qui est des températures du lundi, utilisez une colonne, et que se passe-t-il après une chronique dont je vous ai parlé dans la vidéo précédente ? Eh bien, l'indentation, qui se produit automatiquement dans le code de Visual Studio pour les espaces Que voulons-nous faire pour chacune des températures ? Eh bien, nous voulons imprimer la forme ronde de la température. Juste comme ça, enregistrez, exécutez, et voici le résultat. Ainsi, en seulement deux lignes de code, nous pouvons exécuter des commandes pour tous les éléments d'un tableau, qui est une liste dans ce cas, mais il peut également s'agir d'une chaîne. Par exemple, pour une lettre dans Hello Print Letter. Et Hello est imprimé là-bas. Et bien sûr, tu peux y faire ce que tu veux. Titre, obtenez le premier élément, qui est une lettre. La lettre sera donc mise en majuscule comme ça. Permettez-moi donc de revenir une fois de plus ces deux lignes pour leur expliquer ce qu'elles signifient. Donc, ce que fait la boucle, c'est la température dans les températures de Monte Vous créez donc une variable, et la boucle passe en revue tous ces éléments un par un avec des boucles. Ainsi, lors de la première itération, la température sera égale, donc la variable sera égale à 9,1 Par conséquent, la fonction arrondira 9.1 et l' affichera ici. Et s'il y a plus de lignes ici, par exemple, imprimez, c'est fait. Si vous faites cela, vous voyez, s'il y a une autre ligne , par exemple après neuf, cette ligne est exécutée, donc la chaîne est imprimée. S'il y a plus de lignes, celles-ci seront exécutées. S'il n'y a plus de lignes, l'exécution recommence en haut des quatre boucles, et la boucle obtient le deuxième élément cette fois. La température sera donc cette fois égale à 8,8. Et la même chose se reproduit, arrondissez-le, imprimez-le. D est également imprimé, passe à la ligne suivante, 7.6, etc. Ensuite, après 7.6, la boucle essaie de voir s'il y a d'autres éléments dans ce tableau. S'il n'y a plus d'éléments, ce qui se passe, c'est que ce bloc indenté, l'exécution de ce bloc, se termine et Python passe aux lignes suivantes pour exécuter ce qui reste dans le script 45. 45. Comment faire une boucle dans un dictionnaire +: Vous avez vu qu'il est facile de parcourir une liste en boucle. Tu le fais juste comme ça. Cependant, si vous avez un dictionnaire, il est un peu plus complexe. Encore une fois, vous en faites quatre, choisissez un nom de variable dans le dictionnaire, vous voulez itérer, mais ici vous voulez spécifier ce que vous voulez itérer Voulez-vous itérer sur des éléments, des clés ou des valeurs ? Donc, si vous souhaitez itérer sur des éléments, vous devez appliquer ces éléments à cet endroit N'oubliez pas la colonne et l'impression. Génial. Voyez ce qui se passe. Vous obtenez donc ces articles imprimés sous forme de tuple. Ce sont des tuples. Donc, la clé et la valeur pour chaque itération. Si vous vouliez les clés à la place, vous suffit d'y écrire des clés et si vous vouliez les valeurs, vous écrivez simplement ces valeurs et vous obtenez les valeurs. C'est ainsi que vous parcourez les dictionnaires. 46. 46. Comment et pourquoi utiliser les boucles While: Vous apprenez donc qu' une boucle à quatre itérations parcourt un conteneur, qui peut être une liste , une chaîne ou un tuple, et que la boucle se termine lorsque le conteneur est épuisé Ainsi, par exemple, il en imprime un, deux et trois. Et lorsqu'il n'y a plus d' objets, la boucle se termine. Donc, une boucle à quatre boucles fonctionne jusqu'à ce qu'un conteneur soit épuisé, et une boucle de fil fonctionne tant que cette condition est vraie, laissez-moi l'exécuter et voir ce qui va se passer Vous verrez donc que 11 est imprimé tout le temps. Donc, si je fais défiler la page vers le haut, je ne pourrai pas trouver où était le point de départ, car il y en a maintenant un million d'exemplaires imprimés chaque fraction de seconde. Donc, ce qui se passe ici, c'est qu'une boucle Y est un mot-clé, suivi d'une condition. Dans ce cas, la condition est que A soit supérieur à zéro, ce qui est vrai. Donc A est en fait trois, cela signifie que cette condition est vraie. Et tant que cette condition est vraie, elle sera imprimée. Ainsi, dans le cadre de la boucle de Wile, vous pouvez effectuer autant d' opérations d'actions que vous le souhaitez Par exemple, permettez-moi d'interrompre cela avec Control C sur votre terminal, puis d'ajouter une autre ligne ici, d'en imprimer deux, de sauvegarder, d'exécuter. Donc, un, deux, un, deux, un, 21, deux sont imprimés. OK, je vais interrompre ça. À présent, le taux d'impression de ces numéros dépend de la vitesse du processeur de votre ordinateur. Ainsi, plus votre processeur est rapide, plus vite vous exécuterez les actions ici, ces opérations étant exécutées. Maintenant, bien sûr, cela sera toujours vrai pour toujours, car il s'agit simplement d'une déclaration statique d'une variable ici, donc personne ne la modifie ici. Par conséquent, la condition sera toujours vraie. Vous pouvez voir dans le site Python que lorsque vous vérifiez que quelque chose de trois est supérieur à zéro, vous devenez vrai. C'est donc fondamentalement vrai et vous le verrez parfois comme ça. Supprimez donc simplement la première ligne. Sortez d'ici, réexécutez le code. Encore une fois, la même chose se produit parce que le vrai est toujours vrai. Cependant, ce n'est pas ainsi les boucles sauvages sont utilisées dans le monde réel. Cela n'a aucun sens de vérifier si c'est vrai et d'imprimer quelque chose tout le temps. Permettez-moi donc d'expliquer Will Loops dans un meilleur exemple dans la vidéo suivante. 47. 47. Boucles avec entrée utilisateur: Nous avions donc un script qui vérifie si a est supérieur trois et affiche ces opérations si c'est vrai. Permettez-moi maintenant d'utiliser un exemple plus concret. Créons ici une variable appelée username et donnons-lui la valeur d'une chaîne vide. Et ici, vérifions si le nom d'utilisateur est différent du nom d'utilisateur réel, supposons qu'il s'agisse de Pi Pi. Maintenant, bien que cela soit vrai, nous voulons demander à l'utilisateur de saisir un nom d'utilisateur. Voyons donc ce qui va se passer. Entrez le nom d'utilisateur, nous avons reçu l'invite ici par la fonction de saisie. Pi. Non, nous obtenons à nouveau le nom d'utilisateur Enter. Pi Pi, peut-être. Non Pi Pi. Et donc cette fois, nous n'avons plus de message. L'exécution du programme, alors laissez-moi vous expliquer ce qui s'est passé ici. Nous avons déclaré la chaîne vide à la variable username. Ensuite, nous vérifions ici si la valeur de la variable nom d'utilisateur est différente de celle de Pi Pi. Dans ce cas, c'est différent car il s'agit d'une chaîne d'entrée, et il s'agit de Pi Pi. Par conséquent, la première itération aura lieu, qui est celle-ci ici Ainsi, dans la première itération, nous demandons à l'utilisateur de saisir certaines entrées C'est ce qui s'est passé ici lors de la première itération. Donc, entrer le nom d'utilisateur a été demandé, et nous avons entré Pi. Pi est maintenant une chaîne qui sera assignée au nom d'utilisateur. Et la boucle passe par la deuxième itération. Donc, bien que le nom d'utilisateur soit différent de Pi Pi, qui est vrai dans ce cas, car nom d'utilisateur pour le moment, c'est Pi, la chaîne Pi. Pi est donc différent de Pipi. Par conséquent, continuez et exécutez à nouveau le corps de la boucle de fil. C'est celui-ci ici. Demandez donc une fois de plus le nom d'utilisateur à l'utilisateur. Donc nom d'utilisateur, l'utilisateur saisit Pi P cette fois. La boucle repasse par la tête depuis le début et vérifie si Pi P est différent de Pipi C'est vrai, retrouvez le nom d'utilisateur. Dans ce cas, nous avons obtenu Pi Pi. Le nom d'utilisateur est donc Pipi maintenant. La boucle recommence alors que le nom d'utilisateur est différent de Pi Pi, dans ce cas, ce n'est pas vrai car dans ce cas, le nom d'utilisateur est égal à Pi Pi. Donc Pi Pi. Est-ce différent du Pi Pi ? Non, c'est faux. Ainsi, lors de la troisième itération, ce sera égal à faux, et c'est à ce moment-là que la boucle se termine Ainsi, quatre boucles se terminent lorsque le conteneur est épuisé et une boucle se termine lorsque la condition est fausse. 48. 48. Boucles tout en longueur, rupture et poursuite +: Dans la vidéo précédente, nous avons créé ce code. Le code est le suivant. Nous assignons la chaîne vide à la variable username. Ensuite, nous construisons une boucle de fil qui vérifie si cette condition est vraie. Si la condition selon laquelle le nom d'utilisateur est différent de Pi Pi, si le nom d'utilisateur est différent de Pi Pi, cela va être exécuté. Dans la première itération, le nom d'utilisateur est en fait différent de Pipi car le nom d'utilisateur est une chaîne vide. Par conséquent, cela va être exécuté. Le programme demande le nom d'utilisateur. Si l'entrée est A, par exemple, A sera attribué au nom d'utilisateur puis la deuxième itération commencera, alors que A est différent de Pi Pi, ce qui est vrai Cela va être exécuté à nouveau. C'est pourquoi cette invite s'affiche à nouveau ici. Si vous entrez Pi Pi, la boucle se termine car à la troisième itération, Pipi n'est pas différent de Pipi, cela ne se produira donc Maintenant, il existe une autre façon de le faire en utilisant une instruction break au lieu de faire ce qui précède, laissez-moi le faire d'une autre manière, encore une fois, en utilisant la boucle Wile Mais cette fois, vous voulez vérifier si c'est vrai, alors que c'est vrai, ce qui est toujours vrai, afin que la boucle s' exécute toujours jusqu'à ce que nous l'interrompions. Donc, bien que cela soit vrai, vous voulez demander le nom d'utilisateur. Entrez, entrez le nom d'utilisateur. Maintenant, nous voulons créer un conditionnel ici pour vérifier l'intérieur de la boucle Wile Si le nom d'utilisateur est Pip Pi, rompez la boucle, sinon, continuez Voyons ce que cela va nous apporter. Python trois, B ce Pi. C'est le script de droite. Entrez le nom d'utilisateur. Hum, non, non. Pippi ? Oui Laisse-moi réessayer. Si vous entrez Pi Pi tout de suite, la boucle se termine à nouveau Je préfère cela en fait, car cela vous permet de mieux contrôler le flux de travail. C'est donc ce qui se passe ici. Bien que cela soit vrai, ce qui est toujours vrai. La première itération se produit donc parce que true est vrai, et nous demandons le nom d'utilisateur lors de la première itération Donc, dans la première itération, le nom d'utilisateur était ASFD Donc, si ASFD est égal à Pipe Pi, rompez la boucle. Ce n'est pas le cas car l' ASFD est différent du pipi. Cela ne se produira donc pas car cette condition est fausse. Sinon, elle sera exécutée. Poursuivre. Maintenant , continue déplace à nouveau le contrôle en haut de la boucle. C'est ainsi que vous utilisez break and continue in while loop. Les deux méthodes sont correctes, mais je trouve cela plus lisible. 49. 49. Créer un programme dans Python: Bonjour, bienvenue dans cette nouvelle section. il y a des lacunes dans vos connaissances en Python jusqu'à présent en ce qui concerne les bases de Python que vous avez apprises tout au long de ces sections, alors dans cette section, j'essaie combler ces lacunes afin que vous sachiez ce qui se passe. Nous allons donc le faire en assemblant toutes les pièces en créant une application plus grande avec les blocs de code que vous avez appris afin que tout commence à plus de sens et que vous sachiez comment créer des programmes concrets. Il s'agit donc de la première étape vers la création de programmes concrets. Et ce n'est pas vraiment un programme concret, car nous allons donner d'autres exemples concrets dans les sections suivantes. C'est donc juste pour vous assurer que vous avez bien appris les concepts de base de Python. Commençons donc par la vidéo suivante. Je t'y verrai. 50. 50. Énoncé de problème dans Python: Bonjour, c'est Arditi, votre professeur. Si vous suivez les vidéos précédentes du cours, cela signifie que vous apprenez les bases de Python, à savoir les variables, les types de données, les fonctions, les conditionnels, les boucles et les entrées utilisateur C'est le cœur de Python. Quelle que soit l'application que vous allez créer, qu'il s'agisse d' un script de science des données , d'une application Web ou de quelque chose qui automatise vos tâches quotidiennes, vous aurez presque toujours besoin de tous ces éléments fondamentaux Avant de passer aux fonctionnalités plus avancées de Python dans cette section, prenons le temps de méditer sur ce que nous avons appris Par méditation, je veux dire réfléchir un peu à ces principes fondamentaux que vous avez appris. Et le meilleur moyen d' y parvenir est de créer un programme qui utilise toutes les fonctionnalités de base de Python. Sans vous faire perdre plus de temps, laissez-moi vous présenter le programme que nous allons créer. J'ai enregistré le code dans un script. Je ne vais pas vous montrer le code tout de suite. Je vais vous montrer le résultat. Donc, lorsque j'exécute le code, je reçois un message imprimé, je dis quelque chose. Il s'agit donc d'une invite qui demande l'entrée de l'utilisateur. Disons qu'il fait beau aujourd'hui. Entrez dans le programme, demandez à nouveau la saisie. Quelle est la météo ? Il n'y a que quelques nuages ici. Entrez et maintenant, si vous voulez terminer ce programme, vous devez appuyer sur la barre oblique inverse, appuyer sur Entrée, et voici le résultat Ce programme vous demande des informations. Vous entrez l'entrée encore et encore et dès que vous entrez se termine par une barre oblique inverse, le programme s'arrête et les phrases que vous avez saisies sont en majuscules La première lettre est donc en majuscule, et un point est ajouté à ce genre de phrases, et un point d'interrogation s'il s' agit d'une question comme celle-ci ici Et pareil pour ce qui est des règles. Et voici notre fil secret. Il s'agit donc d'une barre oblique inverse d. Lorsque le programme obtient cette chaîne, cela signifie qu'il est temps de terminer le programme et d' obtenir le résultat Ce n'est donc pas l'une des dix applications du monde réel que je promets de développer dans ce cours. La première application arrive plus tard dans le cours, mais il s'agit simplement de mettre en pratique ce que vous avez appris jusqu'à présent. Donc, même s'il s'agit d'un programme inutile, évidemment, qui en aura besoin, mais cela vous aidera beaucoup à savoir comment utiliser les conditions, les fonctions et les boucles. Donc, s'il vous plaît, faites-le une fois cette vidéo terminée J'aimerais que vous preniez le temps de réfléchir à la manière dont vous pouvez résoudre le problème, manière dont vous pouvez coder ce programme. Vous connaissez maintenant le résultat. Essayez de réfléchir et essayez peut-être d'écrire du code. Pourquoi pas ? Je ne m'attends pas à ce que tu résolves ça en fait. Mais quand même, si vous vous mettez en mode résolution de problèmes, puis que vous voyez ma solution dans les vidéos suivantes, dans les vidéos suivantes, je vais vous expliquer le code étape par étape, comment le créer. Alors tu vas avoir un moment ah. Et c'est à ce moment-là que vous mémorisez mieux les choses parce que dans votre esprit, c'était quelque chose que vous deviez savoir lorsque vous essayez de comprendre comment vous pouvez le faire. Ensuite, vous voyez comment cela se fait, puis vous l'apprenez mieux. Alors oui, je vous parlerai dans les prochaines vidéos. 51. 51. Approche du problème: Génial. Allons-y et développons ce programme dès maintenant. Regardons donc le résultat, car lorsque vous créez un programme, vous voulez avoir une vision très claire de ce à quoi ressemblera le résultat, puis essayez de diviser la grosse tâche en tâches plus petites. Par exemple, supposons que ce programme demande des entrées aux utilisateurs à maintes reprises. Et il reçoit des chaînes dans ce format de ligne, sans point avec une petite lettre au début. Et puis si l'utilisateur saisit la barre oblique inverse d, le programme connaît cette chaîne et renvoie les sorties Le programme est donc en train mettre ces chaînes en majuscules La première lettre est donc en majuscule, et elle ajoute un point ou un point d'interrogation Maintenant, vous voyez qu'il s'agit d'une liste d'expressions, ici de phrases. Mais comme je l'ai dit, essayez de diviser la tâche en tâches plus petites. Essayez donc de diviser la sortie en plus petits morceaux de sortie. Dans ce cas, ne réfléchissez pas à la manière de générer cette liste, mais à la manière d'obtenir le résultat minimum viable. Dans ce cas, voici comment obtenir une chaîne de ligne comme celle-ci ici et comment la convertir en cette chaîne. Et la meilleure façon de le faire est d'utiliser une fonction pour définir votre propre fonction qui obtient cette chaîne et produit celle-ci ici. La première chose à faire est donc de créer une fonction. C'est ce que nous allons faire dans la vidéo suivante. 52. 52. Créer la fonction de créateur: Commençons donc par créer une fonction qui transforme ce type de chaînes sous cette forme. Définissez, appelons ce générateur de phrases. Il crée donc des phrases à partir de chaînes de lignes. Appelons les chaînes des phrases. Expression. Donc, il y a une phrase et d'abord, vous voulez mettre cette phrase en majuscule, n'est-ce pas ? pouvez donc créer une variable dans cette fonction, appeler en majuscules ou où vous le souhaitez, prononcer une phrase et utiliser la méthode des chaînes en majuscules En attendant, vous pouvez utiliser votre shell interactif Python pour essayer des méthodes afin de voir comment elles fonctionnent tout créant une fonction dans votre éditeur. Par exemple, disons que je souhaite mettre cette chaîne en majuscule Tout d'abord, j'aimerais essayer le fonctionnement de la méthode des majuscules Alors maintenant, je suis sûr que la première lettre est en majuscule, donc c'est bon Non, nous voulons ajouter ou concaténer un point ou un point d'interrogation à ces phrases Mais cela dépend. Nous parlons donc d'une condition ici. Le programme doit décider de mettre un ou un point d'interrogation à la fin de la phrase. Allons-y et construisons la condition. Si la phrase. Alors, comment faire la différence entre les questions et les phrases simples qui se terminent par un point ? Eh bien, il peut y avoir différentes méthodes, donc cela dépend du programmeur et sophistication avec laquelle vous souhaitez le faire. Mais restons simples. Et disons que les questions sont toutes celles qui commencent par des mots interrogatifs tels que comment, pourquoi et quoi Et vous pouvez vérifier cela disant : «  Comment allez-vous encore ? » Vous pouvez utiliser la méthode start with, qui obtient un tuple en entrée Donc, un tuple et à l'intérieur de l'outil, vous pouvez avoir des chaînes dont vous pouvez vérifier si la phrase commence par l'une de ces chaînes à l'intérieur de ce Alors disons comment, quoi ? Et pourquoi. Cela redeviendra donc vrai, car comment allez-vous commence par l'une de ces chaînes. Un autre scénario, s'il fait beau, vous allez vous tromper. Nous pouvons donc en faire usage et dire si phrase commence par Comment ? Quoi ? Et pourquoi ? Vous pouvez le faire, ou encore mieux serait d'obtenir ce tuple et de l' enregistrer dans un très puits Disons des interrogatoires et mettons-les là. Alors ici, il vous suffit de mettre la variable, et cela rendra le code plus lisible. Donc, si la phrase commence par des interrogatifs, ce que nous voulons faire dans ce cas, c'est construire une chaîne Disons donc return que la fonction renverra cette chaîne. C'est donc capitalisé. utilisateur sera version majuscule de la phrase saisie par l' donc en majuscule, puis nous voulons y ajouter un point d'interrogation comme celui-ci Cela sera donc remplacé par une majuscule par cette chaîne, ce qui ajoutera un point d' interrogation à cela Cela se produira donc si la phrase commence par l'un des interrogatifs, sinon elle revient. Dans ce cas, nous renverrons une phrase marquée d' un point et d'un point. Encore une fois, capitaliser est ce que nous avons mis ici. Permettez-moi de vous montrer ce que nous avons fait jusqu'à présent. Créateur de phrases. Nous voulons donc exécuter la fonction, non ? Avec un mot, avec une phrase. Comment allez-vous ? Enregistrez, exécutez. Nous avons donc correctement compris la phrase. Comment allez-vous ? C'est ça. Nous avons maintenant une fonction qui fait quelque chose et qui le fait bien. Réfléchissons maintenant aux autres aspects d' un programme dans la vidéo suivante. 53. 53. Réaliser la boucle: Dans la vidéo précédente, nous avons créé cette fonction ici, qui obtient une phrase en entrée, donc une chaîne, et si vous exécutez la fonction, elle renverra cette version de la chaîne. Maintenant, le résultat du programme que vous créez dans cette section va demander ces phrases encore et encore sous forme de saisie utilisateur. Nous parlons donc de recueillir les informations de l'utilisateur. Et comme cela se produit, à plusieurs reprises, nous avons ici l'impression que nous parlons d'une boucle. Et puisque cette boucle, lorsque l'utilisateur entre une barre oblique inverse, se termine par cette chaîne Cela signifie que nous parlons d'une boucle conditionnelle, ce qui nous fait penser aux boucles wile, car les boucles wile fonctionnent sur la base de conditions Supposons donc que la boucle Wile fonctionne en permanence, elle demande donc l' entrée de l'utilisateur Entrez, dites quelque chose, une colonne et faites-y de la place juste pour la décoration. Alors, que se passe-t-il si l'utilisateur saisit une entrée ? Hum. Eh bien, d'abord, nous voulons vérifier si cette entrée utilisateur est réellement la chaîne spéciale. Si c'est le cas, nous voulons rompre la boucle. Sinon. Qu'est-ce que nous voulons faire ? Sinon ? Hum. Vous y avez donc vu ces phrases. Ils ressemblaient à une liste. Il y en avait donc plusieurs. Cela signifie que nous parlons d'un tas d'articles. Et lorsque vous pensez à de nombreux éléments, vous pensez à une liste. Peut-être voulons-nous stocker les phrases que l'utilisateur entre dans une liste. Comment pouvons-nous le faire ? Eh bien, nous pouvons le faire en commençant par une liste vide en dehors de la boucle. Python exécutera donc la définition de la fonction. Nous n'en avons plus besoin car nous l'avons simplement utilisé lorsque nous avons testé la fonction. Ainsi, une fois que la définition de la fonction est lue par Python, nous n'appelons pas la fonction ici. Nous allons créer une liste vide , puis démarrer la boucle. Un message sera envoyé à l'utilisateur. Si c'est la chaîne saisie par l'utilisateur, nous allons tout casser. La boucle se terminera donc, sinon, si cette chaîne n'est pas celle saisie par l'utilisateur, sinon, nous voulons ajouter la chaîne utilisateur, donc entrée par l'utilisateur dans la liste des résultats Donc, à la fin de la boucle, ce qui n'est pas prévu ici, c'est après la fin de la boucle, ce qui n'arrive que lorsque la rupture Ainsi, lorsque l'utilisateur saisit ceci, fois la boucle terminée, nous aurons une liste contenant de nombreuses données Imprimez donc les résultats. Comment allez-vous ? Si c'est bon et c'est ce que nous avons obtenu. OK, je sais. Il s'agit des chaînes saisies par l'utilisateur. Alors, comment pouvons-nous obtenir les chaînes réelles ? Eh bien, c'est très simple. Nous ajoutons ici à la liste les chaînes de lignes entrées par l'utilisateur Mais nous avons une fonction qui permet convertir ces chaînes en phrases. Utilisons cette fonction. Nous allons ajouter le résultat de la fonction. Pour obtenir le résultat, vous devez appeler la fonction. Pour appeler la fonction, vous avez besoin d' une entrée pour la fonction. L'entrée ici est celle de l'utilisateur. Juste comme ça, exécutez à nouveau. Et nous avons obtenu ce résultat comme prévu. Nous faisons donc de bons progrès. Cependant, nous ne voulons pas au moins une sortie ici. Nous voulons juste une sortie de chaîne sans ces crochets. Alors, comment pouvons-nous réellement fusionner ou concaténer toutes ces chaînes pour créer un seul texte sous forme C'est ce que nous allons faire dans la vidéo suivante. 54. 54. Rendre la sortie facile: Ainsi, pour concaler toutes les chaînes en une seule chaîne, vous pouvez utiliser la méthode de jointure des Il s'agit donc d'une méthode de chaînes de caractères. Il s'agit d'une chaîne ici. Par exemple, laissez-moi mettre cette chaîne. Ce n'est qu'un tiret, mais c'est quand même une corde. Cette méthode conjointe obtient une liste en entrée. Comment allez-vous ? Bien, bien. Il s'agit donc d'une liste de chaînes. Si vous l'exécutez, ces éléments de la liste seront joints par cette chaîne que vous déclarez ici. Donc, si vous en ajoutez d'autres pour que ce soit plus clair, vous obtiendrez un tiret joignant toutes ces chaînes, ces éléments de la liste, le premier élément, le deuxième élément, le troisième élément. Nous pouvons nous en servir ici en disant «  rejoignez la liste des résultats ». Enregistrez cette exécution. Il fait beau, alors comment allez-vous ? Il fait beau ? Nous avons un petit problème ici. Nous avons probablement besoin d'un espace entre ces chaînes. Nous pouvons donc le faire très facilement. Vous pouvez simplement mettre un espace dans la chaîne , puis exécuter à nouveau. Et ce sont les résultats que nous attendions pour notre programme. Voici donc comment vous créez ce programme dans cette section. Vous définissez une fonction au-dessus de votre script qui fait quelque chose et qui le fait très bien. Ensuite, vous itérez, vous créez une boucle. Vous demandez à l'utilisateur de saisir des informations à chaque itération. Vérifiez immédiatement si l' entrée est la chaîne. Vous ne voulez pas ajouter d'abord, puis vérifier si l' entrée de l'utilisateur était égale à cela Vous ne voulez donc pas que cela la première condition, car si vous l'ajoutez, cela signifie que si l' utilisateur entre ici, barre oblique inverse, puis que vous obtenez les résultats ajoutés, cette chaîne de fin de barre oblique inverse sera ajoutée à la sera ajoutée n'est pas ce que tu veux. Par conséquent, vous devez vérifier immédiatement si la chaîne est une barre oblique inversée d et interrompre le programme si tel est le cas, sinon faites-le Stockez donc le résultat du générateur de phrases dans la liste des résultats. Enfin, il suffit de concaténer les éléments de cette liste et d'imprimer les résultats, c'est-à-dire celui-ci J'espère que ce programme vous a été utile et que vous avez appris à assembler des pièces. Dans les prochaines vidéos, nous allons apprendre des choses plus avancées sur Python, puis nous allons passer en revue la première application du monde réel. A la prochaine application après cela et la suivante, et vous aurez donc dix applications. Et je sais que si vous prenez ces applications au sérieux, vous deviendrez un bon programmeur. Je vous souhaite de continuer à apprécier mes enseignements dans les prochaines vidéos. 55. 55. Introduction à la compréhension de liste: Bonjour, bon retour. Dans cette section, vous découvrirez comment comprendre les listes. Désormais, les compréhensions de listes sont similaires à quatre boucles. La principale différence est que dans la compréhension d'une liste, vous écrivez le code sur une seule ligne Et avec quatre boucles, vous avez plusieurs lignes. De plus, les compréhensions de listes sont un cas particulier de quatre boucles Ils sont utilisés lorsque vous souhaitez créer une liste. Une compréhension de liste est donc une boucle qui construit une liste. Vous pouvez également construire une liste avec une boucle à quatre boucles, mais comme je l'ai dit, les compréhensions de la liste ne sont que d'une ligne Cela rend le code plus élégant, plus pythonique. Découvrons donc la compréhension des listes dans cette section à l'aide d'exemples, voir 56. 56. Une compréhension simple de liste: Tout au long de mon expérience de travail avec de grands ensembles de données, j'ai remarqué certaines techniques utilisées instituts de collecte de données pour économiser de l'espace de stockage et réduire l'espace de stockage de leurs données sur les disques informatiques Une technique courante consiste à ne pas utiliser de décimales. Par exemple, si vous recherchez des données de température, vous ne verrez pas les températures réelles disons qu' elles sont en degrés Celsius, vous ne les verrez pas comme ça, mais vous les verrez sans les points, car cela permettra d'économiser de l'espace sur les serveurs. Donc, un caractère de moins, cela signifie quelques octets de moins. Votre devoir en tant que programmeur est diviser toutes ces valeurs par dix afin d' obtenir les données réelles. Supposons donc que ces données se trouvent dans des fichiers texte, que nous les ouvrons avec Python, et que le cours explique en fait comment gérer l'ouverture de fichiers texte en Python. Mais laissons cette partie de côté pour le moment. Supposons donc que nous les ayons chargés sous forme de liste ici. Maintenant, nous voulons réellement diviser par dix, n'importe lequel d'entre eux. Alors, comment faites-vous cela ? Eh bien, une technique consiste à itérer sur les TAM. Donc, pour la température en temps, et à chaque itération, vous voulez diviser la température par dix Mais où stockons-nous cette température divisée par dix ? Eh bien, nous pouvons le stocker dans une nouvelle liste. Disons, de nouvelles températures. C'est une liste vide pour le moment. La boucle parcourra donc cette liste et à chaque itération, nous ajouterons cette valeur aux nouveaux TEM Ajoutez donc cette valeur. Ça a l'air d'aller bien. Et puis imprimez de nouveaux TEM. Permettez-moi de l'exécuter. Il s'agit donc de la sortie souhaitée. C'est tout à fait correct, mais il existe un moyen plus simple de le faire en une seule ligne de code Python Et c'est en utilisant des compréhensions de listes. Ça se passe comme ça. Vous n'êtes pas obligé de créer une liste vide car une liste sera générée dynamiquement, vous pourriez dire, Temp divisé par dix, quatre temp in temp in temp in temp Imprimez de nouveaux temps pour voir ce que nous obtenons, exécutez-les et vous obtenez exactement le même résultat. Il s'agit donc d'une compréhension de liste. C'est un moyen de créer une liste sans avoir à créer une boucle à quatre, une boucle à quatre standard car nous avons en fait une boucle à quatre en ligne ici Donc, ce qui se passe ici, c'est que nous avons une itération ici et à chaque itération, nous allons stocker cette valeur dans la liste de la nouvelle liste TEMS Cela revient donc à dire que la température du magasin est divisée par dix, mais Python dira : « D'accord, mais qu'est-ce que le TEM ? Il s'agit d'une nouvelle variable. Non, nous ne l'avons défini nulle part. Et puis nous disons : « Eh bien, pour la température dans les TEM, température est une variable des TEM C'est ainsi que vous créez une liste avec ces valeurs pour chacune des valeurs de TAMS C'est une compréhension de liste. 57. 57. Compréhension de liste avec un: Maintenant, si vous avez travaillé avec observations telles que les observations météorologiques, par exemple les températures, vous avez peut-être remarqué que ces données contiennent parfois ce type de valeurs, ce qui signifie qu'aucune valeur, aucune valeur valide n'a été détectée pour cette observation, et les organisations utilisent cette valeur spéciale pour signifier l'absence de données. Donc, si nous voulions utiliser une compréhension de liste où nous divisons par dix toutes ces valeurs, nous voulons faire attention à ne pas diviser cette valeur par dix Nous voulons ignorer cela. Pour cela, nous avons besoin d'un I conditionnel dans la compréhension de la liste. Nous pouvons le faire comme ça. Créez donc une nouvelle variable dans laquelle vous stockerez la nouvelle liste. Et encore une fois, disons la température divisée par dix pour la température en temps Si la température est différente, par exemple, le moins 9999 Imprimez de nouveaux TEM, exécutez-les sur le terminal et nous obtenons le résultat attendu. C'est donc exactement comme la simple boucle que nous avons vue dans la vidéo précédente avec l'ajout du conditionnel I. C'est donc conditionnel. Nous vérifions si la température est différente de moins 9999. 58. 58. Compréhension de liste avec une clause If-Else +: Auparavant, nous avons créé cette compréhension de liste, qui parcourt cette liste et divise par dix chaque élément de cette liste, et elle n'ignore que si la température est différente de moins 9999 Alors, que se passe-t-il si la température est égale à ce nombre ? Eh bien, la boucle, la compréhension de la liste ignoreront cette valeur, comme vous l'avez vu dans le résultat C'était donc le résultat. Et si vous vouliez mettre une autre valeur à la place de celle-ci ? Supposons que vous vouliez mettre zéro au lieu de ce nombre négatif. Dans ce cas, si vous pensez pouvoir simplement utiliser ici, zéro, vous essayez, vous vous trompez car cela produira une erreur de syntaxe. Lorsque vous avez un Is dans la compréhension de la liste, l'ordre des composants est légèrement différent Vous devez obtenir les quatre températures en temps, donc la boucle doit suivre le conditionnel, juste comme ça Si vous l'exécutez, vous obtiendrez les résultats escomptés. Vous y voyez donc le zéro au lieu de moins 9999. Donc, cette fois, la compréhension de la liste est la suivante. Donnez-moi la température divisée par dix, uniquement si la température est différente de ce nombre, sinon, donnez-moi zéro pour la température en temps. Rappelez-vous donc toujours que si vous devez un Is dans la liste, la boucle for se déroule à la toute fin comme ça 59. 59. Plus d'informations sur les fonctions: Bienvenue dans une nouvelle section. Vous en apprendrez plus sur les fonctions dans ces vidéos. vous avez appris à définir cours, vous avez appris à définir une fonction et à l'appeler . Mais ici, vous apprenez des concepts plus avancés sur les fonctions, et vous devez vraiment en apprendre davantage sur les fonctions, car sont des blocs de code très fondamentaux. Vous écrivez donc vos programmes en utilisant des fonctions qui font certaines choses. Apprenons-en donc plus sur les fonctions. Rendez-vous dans la prochaine vidéo. 60. 60. Fonctions avec des arguments multiples: Peut-être vous souvenez-vous de la fonction len et de la fonction is instance. La fonction len ne prend qu'un seul argument et la fonction de position vous, elle en prend donc deux. Vous pouvez également le constater dans la documentation d'aide. Obj, c'est le seul argument que prend la longueur. Et si vous regardez la position, obtiendrez obj et class ou tuple Certaines fonctions ont donc besoin d'un argument, d'autres de deux. Maintenant, ces deux fonctions ont été intégrées dans des fonctions Python. L'équipe de développeurs Python a donc conçu ces fonctions. Alors, comment pouvons-nous créer nos propres fonctions avec plusieurs arguments ? Assez facile. Supposons qu'une fonction de surface qui calcule l'aire d'un rectangle ait plusieurs arguments, vous suffit de séparer les paramètres par une virgule Donc paramètre et argument. Un paramètre est ce que nous appelons ces variables lorsque nous définissons la fonction, et lorsque nous appelons la fonction comme ici, nous les appelons arguments dans le site d'appel de la fonction, pour ainsi dire. Renvoie donc A fois B qui renverra l' aire d'un rectangle. Et bien sûr, lorsque vous appelez la fonction, vous transmettez simplement des valeurs pour ces arguments. Et vous obtenez correctement la valeur de sortie. 61. 61. Paramètres par défaut et non-par défaut, arguments de mots-clés et autres arguments: En Python, les arguments peuvent être principalement de deux types. Nous avons des arguments autres que des mots clés et nous avons des arguments par mots clés. Ces deux arguments ne sont pas des arguments liés à des mots clés. Le mot clé ne leur est pas associé. Cependant, si c'était le cas, les choses fonctionneraient toujours de la même manière. Mais ces deux arguments seraient désormais appelés arguments de mots clés. Les arguments autres que des mots clés, à savoir celui-ci , deux, sont également appelés arguments positionnels Ils sont appelés arguments positionnels car la façon dont vous communiquez ces deux arguments à la définition de la fonction est basée sur la position Donc, la première position, quatre, correspond à A et les cinq secondes à B. Donc, les arguments positionnels et non liés aux mots clés sont identiques s'il s' agissait d'arguments par mots clés La position n'a pas vraiment d'importance. Vous pouvez donc passer la valeur de B comme premier argument si vous le souhaitez, et quatre iront à B et cinq à A. Donc, tant que vous les transmettez comme ça, des arguments de mots clés, la position n'a pas d'importance, vous obtiendrez toujours le même résultat. Maintenant, nous avons également des paramètres par défaut, pas des paramètres d'arguments. Cela signifie qu'un paramètre peut avoir une valeur par défaut comme celle-ci, ce qui signifie que vous n'avez pas à spécifier la valeur de cet argument lorsque vous appelez la fonction. Nous attribuons donc cinq à A et B est six par défaut. Par conséquent, nous en obtenons 30. A ne doit pas nécessairement être un argument de Kord. Il peut également s'agir d'un argument non kurde ici dans l'appel de fonction, vous obtenez toujours le même résultat Bien entendu, vous pouvez également attribuer une valeur différente à B. Juste comme ça. Enfin, vous pouvez également le laisser ainsi à des arguments autres que des mots clés, et vous obtiendrez toujours le résultat correctement. que vous devez savoir, c'est qu' un paramètre par défaut ne peut pas être antérieur à des paramètres autres que ceux par défaut. Si vous l'exécutez, vous obtiendrez une erreur. Il indique que l'argument non par défaut suit l'argument par défaut. Donc, la valeur non par défaut suit l'argument par défaut, qui est A. Et je pense que c'est une très bonne information sur les arguments et les paramètres des fonctions. 62. 62. Fonctions avec un nombre arbitraire d'arguments non liés aux mots clés: Certaines fonctions en Python, telles que la fonction len, n' obtiennent qu'un seul argument. Si vous essayez d'en transmettre plusieurs, un message d'erreur indiquant qu'il ne prend qu'un seul argument sera renvoyé . Certaines autres fonctions, telles que l'instance, prennent exactement deux arguments. Deuxièmement, si vous essayez de transmettre trois arguments ou un seul, vous obtenez une erreur. Certaines autres fonctions telles que impression prennent un nombre indéfini d'arguments, et vous avez vu comment nous pouvons définir de telles fonctions avec un ou plusieurs arguments seulement, mais je n'ai pas encore expliqué comment créer ce type de fonctions Créons-en un. Définissez, appelons cette moyenne pour calculer la moyenne d'une série de nombres. Imaginez donc que c' était notre fonction. Nous voulons transmettre autant d'articles que nous le souhaitons. Nous avons en fait créé une fonction de moyenne plus tôt, que nous pouvions appeler comme ça, mais elle n'avait toujours qu'un seul argument, donc c'était une liste comme ça. C'est toujours un objet, un argument. Dans ce cas, nous ne voulons pas transmettre de liste. Nous voulons transmettre autant d'articles que nous le souhaitons. Donc, Min, puis ce que vous faites, vous utilisez un astérisque puis des arcs Cela peut être n'importe quoi après l'astérisque. N'importe quel nom de variable fonctionnerait, mais c'est une bonne pratique car chaque programmeur utilise des arcs. Il est donc bon que vous utilisiez des arcs pour que les autres puissent lire votre code. Et vous vous habituez également à lire le code des autres en utilisant des arcs tout le temps. Tu sais de quoi parlent les autres. Maintenant, laissez-moi vous montrer quelque chose avant appliquer l'algorithme qui calcule la moyenne Renvoie des arcs. Voyons ce que nous allons obtenir ici. Maintenant, laissez-moi appeler la fonction. Donc un, trois, tu peux aussi passer des chaînes, comme tu veux, comme ça. Et ce que vous obtenez est en fait un poteau supérieur contenant tous les objets, tous les objets que vous avez passés dans la fonction charbon. Il s'agit donc en fait d'un pôle supérieur. Alors, que pouvons-nous faire avec un tuple où l'on peut calculer la somme des arcs L'arc est donc une variable, et non un arc astérisque, divisé par la longueur des arcs Dans ce cas, il y aurait une erreur car nous avons A là. Supprimez donc A de là et réessayez. A est une chaîne, il n'est donc pas logique d'avoir la moyenne d'une chaîne. Nous venons donc de créer une fonction avec un nombre arbitraire d'arguments de mots clés connus uniquement. Je dis uniquement parce que vous ne pouvez pas avoir d' arguments par mots clés ici. Vous voyez, X égal à trois ne fonctionnerait pas ici. Si vous voulez des arguments par mots clés, regardez la vidéo suivante. 63. 63. Fonctions avec un nombre arbitraire d'arguments de mots clés +: Ainsi, cette fonction que nous avons développée dans la leçon précédente acceptait un nombre arbitraire d'arguments autres que des mots clés. Pour les arguments liés aux mots clés, vous devez ajouter un autre astérisque à l'astérisque puis transmettre un nom de variable, mais les arcs de Kew sont Veuillez donc l'utiliser même si vous n'en avez pas besoin , puis voyez ce qu'est KeyWRC, qui signifie keyword args Si vous essayez d'appeler la fonction ici, nous obtiendrons une erreur car il s'agit d'une fonction avec un nombre arbitraire arguments de mots clés uniquement. Par conséquent, tous ces arguments doivent être nommés arguments, arguments mots clés, ayant le mot-clé, le nom de l'argument. B et C aiment ça et exécutent et vous obtenez un dictionnaire. Le dictionnaire contiendra des éléments où chaque clé sera le nom des arguments que vous avez utilisés lorsque vous avez appelé la fonction, et la valeur sera la valeur de cet argument. fonctions avec un nombre arbitraire d'arguments de mots clés sont plus facilement utilisées que les fonctions avec un nombre arbitraire d'arguments autres que des mots clés, comme la fonction d'impression dont je vous ai parlé plus tôt, où vous pouvez simplement transmettre autant d'arguments sans mot-clé. Voilà, vous l'avez. 64. 64. Introduction au traitement de dossiers: Vous avez découvert les différents types de données que vous pouvez utiliser en Python Par exemple, vous avez appris que vous pouvez avoir des chaînes, des listes, des chiffres, etc. Et nous avons enregistré ces types de données dans une variable. Ainsi, une variable a été associée à une chaîne, par exemple. Le problème, c' est que vous stockez des données dans votre programme Python. Si vous voulez vraiment stocker le temps des points, par exemple, vous souhaitez stocker des prévisions météorologiques, vous ne voulez pas écrire ces valeurs de prévision sous forme chaînes ou de nombres dans votre script PY à points. Vous voulez plutôt avoir ces données dans des fichiers externes, par exemple des fichiers texte ou des fichiers CRC, ou plus tard, vous en apprendrez davantage sur les bases de données, sur la façon de stocker des données dans des bases de données, d'obtenir ces données via Python et de les traiter en Python Mais dans cette section, vous apprendrez comment stocker des données dans des fichiers texte et comment obtenir des données à partir de fichiers texte, comment créer des fichiers texte avec Python, comment lire les données à partir de fichiers texte et les traiter avec Python. Il s'agit donc d'un concept de programmation très, très crucial. Il s'agit donc d'un concept avancé, et vous l'apprendrez dans cette section. Alors amusez-vous bien, je vous verrai dans la prochaine vidéo. 65. 65. Traitement des dossiers avec Python: Ici, sur mon bureau, j'ai un fichier texte, flout dot TXT Si je double-clique dessus, il s'ouvre avec l'un des éditeurs de texte que j'ai installés sur mon ordinateur. L'éditeur de texte est un programme, et dans ce programme, je peux lire ce fichier, donc je peux lire ces lignes. Je peux écrire plus de lignes ici, je peux les copier et les coller, les multiplier pour avoir un grand nombre de lignes dans ce fichier texte, et je peux faire tout cela avec cet éditeur de texte que j'ai ici sur mon ordinateur. Maintenant, nous pouvons faire de même avec Python, ce qui signifie que nous pouvons lire le fichier avec Python, nous pouvons écrire plus de contenu dans ce fichier. Nous pouvons multiplier cela et nous pouvons le faire de manière très efficace. Si je devais le multiplier, je devrais peut-être les copier-coller 1 000 fois. Mais avec Python, vous pouvez le faire très facilement. Allons-y, faisons la même chose avec Python et commençons par lire le fichier. Alors, comment lire un fichier avec Python. Je vais vous le montrer dans la prochaine vidéo. 66. 66. Lecture de texte à partir d'un dossier +: Voici comment ouvrir un fichier texte avec votre éditeur de texte préféré, et laissez-moi vous montrer comment faire de même avec Python. Bien sûr, l'expérience est un peu différente. Il ne s'agit pas de double-cliquer sur le fichier, il s'agit d'écrire du code. Ainsi, lorsque vous ouvrez ce fichier avec votre éditeur de texte, un objet est créé dans la mémoire temporaire de votre ordinateur en RAM. Le fichier était donc sur le disque dur. Lorsque vous l'ouvrez, il est créé sous forme d' objet dans la RAM. La même chose se produit avec Python. Dans ce cas, vous souhaiterez peut-être stocker cet objet, cet objet fichier que vous allez créer en Python. Vous souhaiterez peut-être le stocker dans une variable. Appelons ça mon dossier. La fonction d'ouverture permet de créer des objets de fichier. Et comme il s'agit d'une fonction, elle aura un argument. Maintenant, ce fichier point py de base se trouve dans le même répertoire que le fichier fruit point TXT. Veuillez télécharger le fichier TXT fruits point, qui ressemble à ceci. Permettez-moi de le partager ici. Vous pouvez faire glisser un fichier sur le côté pour avoir deux fenêtres sur l'éditeur de code Visual Studio, mais vous pouvez le faire même dans d'autres éditeurs, j'en suis sûr, si vous utilisez d'autres éditeurs. Ce fichier pour l'instant , placez-le dans le même dossier que Basics point py. Une fois que vous avez fait cela, l'entrée de cette fonction est le chemin d'accès au fichier. Dans ce cas, il s'agit du fruit point TXT, puisque le fichier DTX des fruits se trouve dans le même répertoire que celui de Basics point pi Non, pour lire le contenu de fruits DL TXT dans votre éditeur de texte comme nous l'avons fait graphiquement, il suffit de double-cliquer sur le fichier, puis vous voyez le contenu sur l'interface de l'éditeur de texte. En Python, les choses sont un peu plus compliquées, elles doivent être un peu plus explicites. Vous devez spécifier ce que vous voulez faire car ce fichier, nous venons de créer un objet fichier. Si nous l'exécutons, rien ne se passera. Un objet va être créé dans la mémoire temporaire et à la fin de l'exécution du programme, il sera supprimé de la mémoire. Tout comme lorsque vous ouvrez le fichier texte avec l' éditeur de texte puis que vous le fermez, objet, le fichier objet est supprimé de la mémoire temporaire. Si tu veux lire, tu devrais peut-être imprimer mon dossier. Maintenant, mon fichier a une méthode de lecture. Il s'agit de l'objet fichier, qui possède une méthode de lecture. Il ne prend aucun argument, alors laissez-le comme ça, enregistrez, exécutez, et vous obtenez le résultat du fichier. C'est ainsi que l'on lit un fichier en Python. 67. 67. Curseur de dossier: Maintenant, vous devez savoir le concept du curseur. Ce qui se passe ici, c'est que vous créez un fichier, un objet de fichier est créé, puis lorsque vous appliquez les méthodes de lecture, avant d'appliquer la méthode de lecture, le curseur se trouve sur le tout premier caractère du fichier texte. Lorsque vous appliquez la méthode de lecture, le curseur se place à la fin du fichier texte. Maintenant, une fois que la méthode de lecture a été appliquée, le curseur se trouve ici. Si vous appliquez une autre opération de lecture comme celle-ci, enregistrez, exécutez. Ce qui va se passer, c'est que vous vous attendiez peut-être à ce que ces lignes soient imprimées deux fois. Au lieu de cela, ils sont imprimés une seule fois, puis il ne s'agit que d'une chaîne vide car le curseur après la première exécution de lecture se puis il ne s'agit que d'une chaîne vide car le curseur après la première exécution de trouvait à ce point et en dessous de ce point, il n'y a rien, donc vous obtenez cette chaîne vide là. Ce que vous pouvez faire, c'est que si vous souhaitez imprimer le contenu plusieurs fois, vous pouvez enregistrer le contenu dans une variable, puis imprimer le contenu autant de fois que vous souhaitez et vous obtiendrez le résultat deux fois, comme vous pouvez le voir ici. C'est parce que la méthode de lecture a été exécutée qu'une seule fois ici. C'est quelque chose que tu dois savoir. 68. 68. Fermeture d'un dossier: Lorsque vous créez un objet fichier, un objet fichier est créé dans la RAM et il y restera jusqu'à l'exécution de votre programme. Par conséquent, il peut être judicieux fermer le fichier afin qu'il soit supprimé de la mémoire une fois que vous avez terminé de le traiter. Par exemple, dans ce script, vous créez l'objet fichier, et vous lisez ici le contenu de cet objet fichier et le stockez sous forme de chaîne. Donc, mon fichier Read produit une chaîne qui représente le texte du fichier. Cette chaîne sera stockée dans cette variable de contenu. J'en ai donc fini avec le traitement du fichier, puis je peux ensuite traiter la chaîne que j'ai enregistrée dans cette variable. Par conséquent, il est logique d'appliquer le point de fermeture de mon fichier. Même si ce n'est pas strictement obligatoire, c'est une bonne idée de l'utiliser. Donc, si vous le faites, vous obtiendrez toujours le bon résultat. Ce que vous devez savoir maintenant, c'est que si vous appliquez mon fichier qui se lit à nouveau après avoir fermé le fichier, vous allez obtenir une erreur. Il indique que cette opération est effectuée sur un fichier fermé, vous ne pouvez donc pas le faire. Voici donc comment créer un fichier et le fermer, mais il existe une meilleure façon de faire tout cela. Je vais vous le montrer dans la prochaine vidéo. 69. 68. Ouverture de dossiers utilisant avec: Une meilleure façon de le faire pour créer le fichier, lire le contenu et fermer le fichier consiste à utiliser le gestionnaire de contacts With. La façon de le faire est, encore une fois, d' utiliser la fonction open, qui fonctionne avec les mêmes fruits TXT. Maintenant, vous dites « myfile ». Mon fichier n'est qu'une variable, et vous devez ensuite le mettre en retrait. Donc, ce que vous avez fait ici, c'est que vous avez créé ce myfile égal à open fruits point TXT, exactement pareil La différence ici est que vous allez écrire tout ce qui a trait au traitement de cet objet de fichier. Vous devrez tout écrire sous cette ligne, en retrait sous cette ligne, sous forme de bloc. Cela permettra de mieux organiser les choses. Donc, dans ce cas, ce que nous voulons faire le fichier, c'est le lire comme ça. Une fois que vous avez terminé, il vous suffit de fermer l'indentation Les lignes suivantes ne seront donc pas indentées, comme la ligne d'impression. Voyez ce qui va se passer ici. Il s'agit du résultat attendu du contenu imprimé. Même si vous le supprimez, pour ne pas vous embrouiller, encore une fois, vous obtenez le même résultat. Donc, cette sortie est en fait de cette ligne. Et la fermeture du fichier n'est pas nécessaire ici car le gestionnaire de contexte With appliquera implicitement la méthode de fermeture Votre dossier sera donc fermé une fois ce bloc terminé. Veuillez donc utiliser le gestionnaire de contacts With , et voici comment procéder. 70. 69. Utiliser différents chemins d'accès: Jusqu'à présent, notre fichier PY de base et notre fichier TXT à points de fruits se trouvaient dans le même répertoire, dans le même dossier, ce qui nous permettait écrire uniquement le nom du fichier dans le fichier PY de base. Cependant, si les fruits de ce fichier TXT se trouvaient, par exemple, dans cet autre répertoire, j' ai simplement déplacé les fruits TXT dans les fichiers. Fichiers est un dossier qui se trouve dans le même répertoire avec le point Basics PY. Donc Basics, c'est PY dans le même dossier avec des scripts avec des fichiers, et des fruits dans des fichiers. Dans ce cas, si vous exécutez le fichier PY de base, vous obtiendrez une erreur «   fichier introuvable ». Aucun fichier ou répertoire de ce type, fruits point TXT. Et c'est vrai. n'y a pas de fruits DTXT dans le dossier où se trouve Basics Dt PY Ce que vous devez faire, c'est spécifier le chemin complet du fichier par rapport au fichier par rapport au point de base PY, c'est-à-dire files slash fruits point TXT Exécutez cela et les choses fonctionneront. 71. 70. Écrire du texte dans un dossier: Jetons un coup d'œil à la documentation d' aide d'Open. Et vous verrez que la fonction open reçoit un tas d'arguments. Les deux premiers sont les plus importants. Nous avons déjà utilisé le fichier, qui est le chemin d'accès à l'objet du fichier. Et pour les autres, nous utilisons leurs valeurs par défaut, ce qui signifie que pour les modes, nous avons utilisé R, R signifie lecture. Par conséquent, ce code est le même que celui-ci. Vous obtenez donc le même résultat. Lesquels devriez-vous utiliser ? Eh bien, pour rendre le code plus simple et plus court, c'est très bien. Pour rendre le code plus explicite en termes de facilité afin que les autres puissent voir qu'il s' agit de lire le code, vous devez l'utiliser Dans les deux cas, c'est bien. Maintenant, que pouvez-vous utiliser pour écrire ? Pour écrire, vous devez utiliser W pour écrire. Et laissez-moi créer un nouveau fichier dans le dossier des fichiers. Appelez ça des légumes. Donc, aucun fichier de légumes n' existe actuellement dans mon dossier de fichiers. Il sera créé par la fonction d'ouverture. Ensuite, dans ce fichier vide, nous allons écrire quelque chose que nous appelons Tomato. Bien entendu, la variable de contenu n'a aucun sens ici car nous ne récupérons pas certaines données du fichier Nous sommes juste en train d'écrire ici. Alors gardons-le comme ça, sauvegardons-le. Exécutez et un légume, le fichier TXT a été créé sur mon ordinateur avec une chaîne de caractères tomate. Laissez-moi le mettre ici. La méthode de lecture recherche donc un fichier existant. La bonne méthode crée un nouveau fichier, et je dois vous prévenir que si le fichier existe, comme dans ce cas, c'est le fruit que Tix est là Si tel est le cas, Python remplacera le fichier existant Donc, si vous ouvrez Fruits DTixti maintenant, vous verrez que vous avez ce nouveau contenu du Le contenu existant est donc supprimé. Comment écrire plus de lignes ? Eh bien, vous devez utiliser la chaîne spéciale backslash N, qui crée des lignes de rupture Onion, exécute. Voici donc Fruits TXT. Et vous obtenez ces trois lignes comme nous nous y attendions. Ce que vous devez savoir, c'est que vous pouvez appliquer plusieurs méthodes au fichier ouvert. Écrivons l'ail ici. Maintenant, intentionnellement, je n'ai pas fait ce que j'étais censé faire pour vous montrer ce qui se passe. gaélique a donc été immédiatement mis après l'oignon parce qu'il n'y avait pas d'espace ou qu'il n'y avait pas d'opérateur N à cet endroit. Si je mettais un espace ici, vous obtiendrez bien sûr un espace entre l' oignon et le gaélique Mais ce que vous voulez au contraire, c'est qu'après chaque ligne que vous écrivez, vous vouliez une barre oblique inverse N. Et dans ce cas, vous obtiendrez le bon résultat Alors maintenant, vous vous demandez probablement, eh bien, j'ai ce fruit que Tixifle Je ne veux pas le remplacer. Comment puis-je réellement ajouter une autre ligne sous ces lignes existantes ? Je vais vous montrer comment procéder dans la prochaine vidéo. 72. 71. Rajouter Tex à un dossier existant +: OK, donc j'ai ces fruits dans ce fichier CX ici, qui contient ces quatre lignes qui ne sont pas des fruits de toute façon, mais vous voyez l'idée C'est un texto. Nous voulons ajouter deux lignes supplémentaires à ces fruits existants dans le fichier CX Nous ne savons pas ce qu' il y a actuellement. Si vous regardez la documentation ouverte et que vous faites défiler la page vers le bas, vous verrez ici que vous pouvez passer différents modes dans cet argument ici. Donc, ce que nous utilisons déjà, nous utilisons W, puis vous avez X. Si vous utilisez X et que vous essayez d' écrire, disons Okra Si vous l'exécutez, cela indiquera que le fichier existe. Ainsi, contrairement au mode W, qui remplace un fichier, X ne remplacera pas le fichier s'il existe Cependant, il ne peut pas ajouter contenu à un fichier existant car il indique que le fichier existe. Nous passons donc au mode suivant, qui est A. Vous voyez que Okra y a été ajouté, bien sûr, avec un petit problème car il n'y avait pas ligne de brique ici dans le fichier texte existant sont des informations que vous devez connaître, et si vous savez qu'il n' y a pas de ligne de démarcation, vous devez me laisser parler de ce fichier texte, puis vous devez y ajouter une ligne de rupture pour obtenir le résultat correct. Chaque fois que vous ajoutez une nouvelle ligne, vous devez ajouter une ligne de brique devant. Maintenant, que diriez-vous de lire ce contenu ? Peut-être l'enregistrer dans une variable et imprimer le contenu. Est-ce que ça va marcher ? Je ne crois pas. Il indique que l'opération n' est pas prise en charge. Le fichier n'est pas lisible. C'est A, qui sert à ajouter. Si vous voulez écrire et lire en même temps, vous devez ajouter un avantage. Juste comme ça. Exécuter. Vous obtenez une sortie vide. Pourquoi ? À cause du curseur. Donc, ce qui s'est passé, c'est que lorsque nous y avons ajouté la ligne Oca, donc au début, vous avez créé le fichier ici à ce stade, le curseur est là, d'accord ? Ensuite, vous écrivez le fichier. Sur cette ligne, le curseur passe à la fin du fichier. Donc, quand vous lisez maintenant, vous lisez ce qui reste sous la dernière ligne, ce qui n'est rien. Ce que vous pouvez faire, c'est que mon fichier, Sk, applique une méthode Sk pour remettre le curseur à la position zéro. Dans ce cas, le curseur ira jusqu'à la fin. Cette ligne repassera à la position zéro, puis vous lirez tout à partir de là et vers le bas pour obtenir le bon résultat. 73. 72. Modules intégrés dans Python: Si vous suivez les sections précédentes du cours, vous avez parcouru un long chemin. Vous connaissez donc maintenant les principes fondamentaux de Python. Vous savez comment résoudre des problèmes fondamentaux. Supposons, par exemple, que vous vouliez connaître le nombre de caractères de la chaîne. Vous avez donc des méthodes et des fonctions que vous pouvez utiliser. Donc, pour les méthodes, vous pouvez effectuer une recherche avec Deer SDR, vous verrez ici le tas de méthodes qui peuvent être appliquées aux chaînes, puis vous pouvez voir les fonctions intégrées Par exemple, les méthodes n seraient utiles ici. Cela renverrait le nombre de caractères de la chaîne Pi Pi, qui est de six. Maintenant, tout cela est là. Donc, ces fonctions et les méthodes de chaîne sont toutes intégrées. Il s'agit donc de méthodes et fonctions écrites dans le logiciel Python que vous téléchargez et installez depuis python.org Ce logiciel est écrit en langage C. Par conséquent, ces méthodes et fonctions sont également écrites en langage C. Et comme vous le voyez, ces noms sont disponibles immédiatement dans votre interpréteur Python. Cela signifie qu'ils sont intégrés. Ils se trouvent dans cet interpréteur, et vous pouvez simplement les appeler sans les importer. Et si nous avions d'autres problèmes, comme, disons, vous voyez le script ici. Ce que fait ce script, c'est que c'est une boucle. C'est une longue boucle. Donc, bien que cela soit vrai , cela signifie qu'il fonctionnera pour toujours. Il lit donc ce fichier, le point végétal TXT dans le répertoire des fichiers, qui se trouve dans le même répertoire que le point pi de base. C'est donc le chemin du fichier. Et ce fichier texte contient une chaîne. Je le lis donc sous cette variable, et j'imprime le contenu ici. Donc, si j'exécute ce fichier, vous allez imprimer le contenu à chaque fraction de seconde et cela dépend vitesse de votre processeur, de celle de votre ordinateur. Et si nous ne voulions pas que cela se produise à chaque fraction de seconde ? Et si vous voulez lire le contenu toutes les 10 secondes ? Permettez-moi d'interrompre ceci avec Control C. Vous vous rendrez vite compte que vous n'avez aucune fonction intégrée qui implémente une sorte de méthode de veille dans votre script. Il n'y a donc aucune fonction que vous pouvez utiliser immédiatement. Dans ce cas, vous voudrez peut-être rechercher des modules intégrés. Pour ce faire, veuillez utiliser cette syntaxe. Importez CS, qui signifie système, puis CS a intégré les noms de modules. Et vous trouverez ici une liste de modules, modules intégrés, c'est-à-dire des modules qui sont réintégrés dans le logiciel Python. Profitons donc de l'une d'entre elles. La façon dont vous l'utilisez consiste à importer le nom du module. Encore une fois, vous pouvez utiliser DR pour voir ce que vous avez pour ce module. Par exemple, vous verrez ici que nous avons une méthode de sommeil. Utilisez l'aide pour savoir comment utiliser cette méthode en particulier. Il dit donc qu'il prend le second comme argument. Alors essayons-le. C'est le sommeil. Disons trois, un, deux, trois, et donc à quelle heure ce sommeil interrompt l'exécution du script pendant un certain nombre de secondes, trois, dans ce cas Cela signifie que nous pouvons l'implémenter dans le script. Il est recommandé d' importer des modules dans la première ligne du script. Ensuite, utilisez ce module dans votre script partout où vous en avez besoin. Dans ce cas, ce que nous voulons faire, c'est supposer que ce légume qu'est le fichier TX est généré sur notre serveur toutes les 10 secondes. Supposons donc qu'un logiciel installé sur le serveur obtienne ces données de quelque part et qu'il écrit un nouveau contenu toutes les 10 secondes. Par exemple, maintenant c'est de la tomate, plus tard ce sera de l'ail 10 secondes. Après cela, ce serait de l'oignon et ainsi de suite. Nous recevons donc du nouveau contenu toutes les 10 secondes. Nous voulons donc imprimer le contenu du fichier, puis avoir le bordereau d'exécution pendant 10 secondes. Maintenant, je vais enregistrer le script, aller sur la ligne de commande, l'exécuter. Vous obtenez donc de la tomate tout de suite. Maintenant, si je change cela en onion, disons que le logiciel l'a changé et qu'en sauvegardant, cliquez sur Enregistrer. L'oignon y a été imprimé au bout de 10 secondes. Si je le remplace par de l'ail, sauvegardez. Attendez, attendez quelques secondes. L'ail y est imprimé. Ainsi, toutes les 10 secondes, le script récupère les données des légumes du CXC et imprime sur une ligne de commande Donc, contrôlez C pour l'interrompre. C'est ainsi que vous utilisez un module. Maintenant, tout n'est pas intégré dans votre logiciel d' interprétation Python. Certaines choses, en fait, beaucoup d'entre elles se présentent sous une forme différente que je vais expliquer dans la prochaine conférence. 74. 73. Modules Python standard: Auparavant, vous avez appris que vous pouviez obtenir une liste de modules intégrés à Python en utilisant les noms de modules intégrés en C. À titre d'exemple, nous utilisons le module time, qui bloquerait l'exécution du script pendant un certain nombre de secondes. Maintenant, laissez-moi vous montrer quelque chose. Je vais exécuter un script. L'oignon sera imprimé car il se trouve dans les légumes du fichier CXT Cependant, si je supprime maintenant ce fichier, vous verrez que la prochaine fois que le script vérifiera la présence des fichiers, les légumes parsèment le chemin TXT. Il s'agit donc d'un chemin de fichier. Cela va générer une erreur « fichier introuvable », aucun fichier ou répertoire de ce type. Imaginez donc que ce programme s'exécute sur un serveur 24 heures sur 24 et 7 jours sur 7 et que, pour une raison ou une autre , le logiciel qui générait ces fichiers ne génère pas le fichier, donc l'exécution de votre script se terminera et peut-être que dans une minute, votre logiciel recommencera à générer les fichiers, mais votre script Python ne reprendra pas car il contient une erreur ici. Donc, ce que nous voulons faire, c'est continuer à exécuter le script Python même si le fichier ne se trouve pas dans le répertoire qui s'y trouve. Pour ce faire, nous voulons utiliser le module OS. Importez le système d'exploitation, et vous remarquerez que exploitation ne fait pas partie des modules Python intégrés. En effet, OS est un module écrit en Python. Tous ces modules sont intégrés, ce qui signifie qu'ils sont écrits en langage C dans l'implémentation logicielle Python. Le système d'exploitation n'est pas l'un d'entre eux. Pour savoir où se trouve le système d'exploitation, vous pouvez utiliser le préfixe Vous y trouverez un chemin de répertoire, qui peut être différent selon le système d'exploitation que vous utilisez. Veuillez donc accéder à ce répertoire. Je préfère aller dans ce répertoire en le copiant sans les codes. Donc, copiez tout sans le DES, comme ça. Accédez à votre terminal de ligne de commande, et si vous êtes sous Windows, utilisez Démarrer et collez le répertoire qui s'y trouve, puis appuyez sur Entrée. Si vous utilisez Mac ou Linux, utilisez Ouvrir au lieu de Démarrer et collez à nouveau le répertoire. Appuyez sur Entrée pour ouvrir votre explorateur Windows ou votre Finder, peu importe ce dont vous avez besoin pour ouvrir des dossiers. Pour que le dossier 3.7 que vous voyez ici et que vous allez ensuite dans Lib double-clique. Recherchez ensuite le dossier, Python 3.7 ou toute autre version que vous avez. Python a donc quelque chose à trois points. Double-cliquez dessus. Et ici, vous verrez un certain nombre de fichiers Python point pi. Ce sont tous des fichiers Python. Ce sont tous des modules Python standard, et le système d'exploitation en fait partie . Cliquez sur Oh ici, double-cliquez dessus ou ouvrez-le avec n'importe quel éditeur de texte, et vous verrez qu'il s' agit en fait de code Python. Assurez-vous de le fermer avant de le changer. Donc, ne changez pas, ne modifiez pas les modules standard de Python. Je vais donc le fermer et vous pourrez utiliser DR pour voir ce dont vous disposez pour ce module. Parmi eux, par exemple, je vais utiliser l'objet path. Donc, avec ce chemin, Path possède une méthode appelée exists. La méthode exist obtient un argument qui doit être une chaîne, et c'est censé être le chemin du fichier vous voulez vérifier s'il existe dans le répertoire actuel. Écrivons donc le chemin du répertoire vers le fichier, et je reçois faux car le fichier ne se trouvait pas dans le répertoire actuel. Si j'y vais et que je crée ce fichier dans le dossier des fichiers, j' ai maintenant un chemin de fichier TXT avec des fichiers slash vegetables point point Si je l'exécute à nouveau, je vais devenir vrai. Et nous pouvons utiliser ce fait dans notre programme Python. Donc, avant d'ouvrir le fichier en mode réel, nous voulons vérifier si le fichier existe, car si nous ne le faisons pas et que le fichier n'est pas là, cette ligne va générer l'erreur « fichier introuvable ». Donc, avant de faire cela, nous voulons vérifier si c'est le chemin qui existe. Les fichiers slash vegetables point TXT. Et comme il s'agit d'une condition, nous voulons y utiliser une colonne. Et après cela, quoi que vous vouliez faire, il faut le mettre en retrait Donc, ce sera en dessous si cela fait également partie du bloc W, alors indentez-le également Et puis s rentre à nouveau dans la boucle du fil. Ce que vous voulez faire sous ls, eh bien, peut-être que nous voulons imprimer Le fichier n'existe pas. Et alors fais attention ici. Le time slip doit se trouver en dehors du bloc IL car vous souhaitez exécuter indépendamment du bloc conditionnel, ce qui signifie que si le fichier existe, il sera exécuté. Si le fichier n'existe pas, il sera exécuté. Et une fois l' une ou l'autre exécutée, nous allons toujours exécuter ce lapsus. Permettez-moi donc de sauvegarder le script et de l'exécuter. Et nous avons une erreur, le système d' exploitation n'est pas défini. Je suis content que cela soit apparu car les modules doivent être importés. Sinon, vous allez obtenir cette erreur de nom car le système d'exploitation, avant d'être utilisé ici, n'a pas été importé et il ne s'agit pas d'une fonction ou d'une méthode intégrée telle que l'impression que vous n'avez pas besoin d'importer. Son nom n'est donc pas immédiatement disponible dans l'espace de nom. Enregistrez à nouveau le script, exécutez-le et nous obtenons une chaîne vide car les légumes sont actuellement vides. Maintenant, si je supprime des légumes comme ça, attends un peu. Et nous le faisons imprimer. Si vous créez à nouveau le fichier, écrivez-y quelque chose, enregistrez le fichier. N'oubliez pas de prétendre que le logiciel génère ce fichier Donc, vous y introduisez le gaulois. Maintenant, je peux interrompre l' exécution du script avec Control C, et ce sont deux modules Python standard, et ils sont exactement les mêmes, vous pouvez donc utiliser JR avec eux. Toutes les règles de Python s'appliquent donc à ces modules. La seule différence est que le temps est écrit en langage C et intégré au logiciel Python, et que le système d'exploitation est fourni sous la forme d'un script point pi, et il est arrivé ici lorsque vous avez installé Python. Il a donc été copié dans l'un des répertoires de votre ordinateur, et vous pouvez importer tous ces modules, modules standard en Python. Maintenant, bien sûr, tout n'est pas inclus dans votre installation de Python. Donc, des choses que vous devez installer. Je vais donc vous le montrer dans la prochaine vidéo. 75. 74. Modules tiers: Dans les conférences précédentes, nous avons créé un programme qui passe en revue les légumes du fichier TXI toutes les 10 secondes et en imprime le contenu Donc, les programmes qui s'exécutent ici. Maintenant, vegetables point TXT n'est qu'un simple fichier texte contenant des données inutiles comme l'ail et l'oignon. Que se passerait-il si nous disposions d' autres données du monde réel, telles que le Temps soulignait le fichier CSV ? Il s'agit donc d'un fichier CSV, qui est essentiellement un fichier texte. Et il a une structure de plusieurs colonnes. Chaque colonne contient donc des données. Vous voyez ici qu'il s'agit d'un en-tête. Il comporte deux colonnes, SD une pour la station un et SD deux pour la station deux. Nous avons donc deux stations d'observation météo, et elles ont enregistré ces données, ces températures. Disons que ce sont des observations faites en une journée. C'est le matin, c'est plus tard dans l'après-midi et dans la nuit. Nous avons donc deux colonnes. Notre devoir est maintenant de lire ce fichier toutes les 10 secondes, comme nous le faisons avec les légumes dans ce fichier TXT. Mais au lieu d' imprimer son contenu, nous devons imprimer la valeur moyenne de toutes ces valeurs. Nous devrions donc le faire toutes les 10 secondes. Eh bien, normalement, vous devriez le faire toutes les 24 heures parce que c'est plus logique. Comme ces données sont des données quotidiennes, des données de température quotidiennes, elles sont modifiées tous les jours. Il est judicieux d'imprimer la valeur, la valeur moyenne, toutes les 24 heures. Et bien sûr, vous pouvez le faire facilement en modifiant simplement la valeur de 10 secondes à 24 heures. Vous pouvez facilement le calculer. Mais pour des raisons de simplicité, utilisons simplement 10 secondes. Maintenant, bien que nous puissions le faire en utilisant la méthode open pour charger les données en Python, cela chargerait les données sous forme de chaîne. Ce texte entier serait donc chargé sous forme de chaîne en Python. Ensuite, nous devrons appliquer des opérations de traitement de chaînes pour diviser toutes ces valeurs et les convertir en valeurs flottantes. Mais cela reviendrait à réinventer la roue. Ce que j'essaie de dire, c'est que quelqu'un d' autre a écrit du code Python qui le fait très facilement en une ou deux lignes de code. Et ceux qui ont écrit ceci ont construit en tant que bibliothèque tierce. Donc, tout comme nous avons utilisé le temps et le système d'exploitation en les important dans Python, nous pouvons également utiliser une autre bibliothèque dans ce cas pour charger ces données dans un format agréable en Python. Laissez-moi vous montrer comment faire. Le nom de la bibliothèque que je connais est Pandas, et Pandas n'est pas fourni par défaut avec Python Ainsi, lorsque vous installerez Python, Pandas ne sera pas là, mais vous pouvez l'installer avec PIP PIP est une autre bibliothèque installée par défaut en Python et utilisée pour installer d'autres bibliothèques tierces Un point très important que je tiens à souligner est que la commande PIP peut varier entre les différents systèmes d'exploitation et les différentes installations de Python Par exemple, si vous utilisez la version 3.8 de Python, vous devrez peut-être taper PIP 3.8 au lieu de simplement PIP Si vous utilisez Python 3.9, vous devrez saisir PIP 3.9 Si vous utilisez Python 3.10, qui est plus récent que 3.9, vous devez saisir PIP Donc, pour résumer, vous devez utiliser vos propres commandes. Chaque fois que je tape le PIP trois, vous devez utiliser votre propre PIP 3.8 ou PIP 3.9, etc., sur votre ordinateur Je vais donc utiliser Pip Three, puis installer des pandas. Notez que vous ne devez pas modifier la partie install pandas de la commande Vous ne devez modifier que la partie PIP comme je vous l'ai expliqué OK, Pandas est donc le nom de la bibliothèque que nous voulons installer Les barres se remplissent donc. Cela signifie que la bibliothèque Pandas est installée avec succès. Génial. Maintenant, allons-y et utilisons Pandas dans notre script ici Importez des pandas, comme nous l'avons fait avec d'autres bibliothèques. Donc, ces deux-là, c'était une bibliothèque standard. Il est intégré à l'interpréteur Python. Et c'est, encore une bibliothèque standard, mais elle n'est pas intégrée, elle est écrite en Python. Ce pandas est également écrit en Python, et maintenant il vient d'être installé dans nos fichiers d'installation Python Laissez-moi vous montrer où se trouvent ces pandas. Ouvrons une session Python. Donc, si vous importez le SIS puis le préfixe sys point, vous obtiendrez ce répertoire Quel que soit le répertoire que vous avez, copiez-le sans les codes, puis vous démarrez sous Windows et vous payez le répertoire sur Mac, puis vous ouvrez et payez le répertoire, appuyez sur Entrée, pour ouvrir le répertoire, passez à Lib to Python. Et puis OS, par exemple, était là, Os point pi. Il s'agissait de bibliothèques standard. Maintenant, quoi que vous installiez avec PIP, cela se trouvera dans le répertoire des packages du site, qui se trouve quelque part ici, oui Donc, des pandas, ce sont des pandas. Nous venons d'installer des pandas. Dans ce cas, il ne s'agit pas d'un module, mais d'un ensemble de modules. Et c'est ce qu'on appelle un package. Lorsque vous avez plusieurs modules, cela s'appelle un package. Mais vous pouvez toujours l'appeler bibliothèque. Une bibliothèque est donc un nom généralement utilisé pour désigner à la fois des modules et des bibliothèques. Donc, codez lorsque vous utilisez Pandas, cela ne fait aucune différence S'il s'agit d'un module ou d' un ensemble de modules, donc un package. Tout le code de Pandas est donc là, et nous pouvons maintenant utiliser ce code dans notre script Permettez-moi donc de vous montrer dans la prochaine conférence comment nous utilisons cette bibliothèque tierce de Pandas 76. 75. Exemple de module tiers ++: Alors allons-y et lisons le contenu de ce fichier avec Pandas Une bibliothèque d' analyse de données très puissante. Nous aborderons plus en profondeur les pandas plus tard. Nous avons une section dédiée aux pandas et nous avons des applications dans lesquelles nous allons beaucoup utiliser les pandas Mais pour l'instant, permettez-moi de vous donner une brève démonstration du fonctionnement des pandas Assurez-vous de l'importer. J'ai importé ici, puis en cours de route, gardons cela conditionnel pour vérifier si le fichier s'y trouve Dans ce cas, ce serait Temps today point C SV. Ensuite, si le fichier existe, nous voulons charger les données dans cette variable de données. Pour ce faire, nous utilisons la méthode de lecture CSV de Pandas Et voilà, vous avez deviné le chemin du fichier. Comme ça. Donc, si le fichier existe, lisez les données, puis imprimez la moyenne des points des données. Cet objet a donc une méthode moyenne. Je vais vous montrer plus tard ce qu'est cet objet. Mais pour l'instant, allons-y et exécutons ce script. Nous obtenons donc la moyenne de chacune des colonnes. C'est un moyen pour la station 1, et c'est un moyen pour la station 2. Donc ça marche. Maintenant, si vous vouliez obtenir la moyenne d'une seule colonne ST, il vous suffit de le faire. Cela vous donnera donc la moyenne de la colonne ST de la colonne Station 1. Et ainsi de suite. L'idée ici est d'importer des pandas, et lorsque vous l'exécutez, l'exécutez un objet appelé trame de données est créé Vous pouvez constater que vous disposez d'une vue structurée de ces données. Il s'agit donc d'un type d'objet spécifique. Tout comme nous avons des nombres entiers et des nombres flottants, nous avons également ces autres types que vous pouvez trouver dans les bibliothèques de ces bibliothèques tierces, afin que chacun puisse créer ses propres Et il s'agit de bibliothèques, donc de bibliothèques intégrées, de bibliothèques standard, écrites en Python et de bibliothèques tierces, qui sont presque toujours écrites en Python. Cela concerne les bibliothèques. 77. 76. Introduction à l'utilisation de Python avec CSV, JSON et Excel Files: Bonjour, bienvenue dans une nouvelle section, et ce sera très intéressant à enseigner pour moi et aussi des informations très, très utiles à apprendre. Nous travaillerons donc avec des fichiers CSV externes, des fichiers Excel, des fichiers JSON. Il s'agit donc de fichiers externes dans lesquels vous pouvez stocker des données et accéder à ces fichiers. Vous pouvez les manipuler depuis votre programme Python. Votre programme peut donc interagir avec ces fichiers, et c'est ce que vous allez apprendre dans cette section. Alors préparez-vous, et je vous parlerai dans la prochaine vidéo. 78. 77. La bibliothèque de pandas pour + l'analyse de données: Bonjour, bienvenue dans cette nouvelle section. Et dans cette section, vous apprendrez à utiliser Pandas , une bibliothèque Python très importante, et vous ne voulez vraiment pas la manquer Alors, qu'est-ce que Pandas ? Eh bien, Pandas est une bibliothèque fournissant des structures de données et des outils d'analyse de données en Python Ou si le mot outils vous embrouille, vous pouvez dire que Pandas est une bibliothèque fournissant des structures de données et du code d'analyse de données Pandas vous permet donc de charger des données provenant de différentes sources dans Python, charger des données provenant de différentes sources dans puis d' utiliser du code Python pour analyser ces données et produire des résultats, qui peuvent prendre la forme de tableaux, de texte visualisation à l' aide de bibliothèques de visualisation telles que book, book, qui seront abordées plus loin dans le cours Pour l'instant, nous allons nous concentrer sur les données sans les visualiser, et Panas est parfait pour cela Alors, en pratique, comment utilisons-nous les pandas ? Eh bien, vous apprendrez à ouvrir des fichiers texte à l'aide des méthodes de gestion de fichiers intégrées à Python plus tôt dans le cours. Maintenant, ce que nous avons ouvert à partir de TextFils n'était que du texte brut. Mais que faire si vous souhaitez charger des fichiers texte contenant des données constituées de lignes et de colonnes ? Ou les choses se compliquent un peu. Mais c'est là que Pandas entre en jeu. Vous pouvez donc probablement le faire en utilisant les méthodes Python intégrées que vous avez apprises dans le cours. Mais pour être plus efficace et beaucoup plus efficace, vous devez disposer d'une bibliothèque de haut niveau telle que Pandas, capable de reconnaître automatiquement ces structures de données J'utilise des pandas pour charger des données issues d'activités d'exploration de données telles que le scrapping sur le Web Vous supprimez donc les données d' un site Web avec Python , puis vous les stockez dans ces blocs de données. Vous utilisez donc des pandas pour vous fournir des structures de données en Python Et j'utilise des pandas pour charger des données à partir de fichiers Excel, et j'utilise également des panneaux pour analyser ces données au lieu d'utiliser Excel Excel peut être utile pour analyser un petit tableau de données adapté à l'écran de votre ordinateur. Mais pour des données plus volumineuses, vous devez vraiment utiliser du code. Vous écrivez du code Python une fois, puis vous l'utilisez également avec d'autres données. Et vous ne voulez pas effectuer de sélections, de glisser-déplacer et de nombreuses autres opérations fastidieuses que vous effectuez normalement dans un programme graphique tel qu'Excel code est donc la voie à suivre si vous voulez être efficace avec les données, et Python est parfait pour cela avec Pandas Vous voulez vraiment bien vous familiariser avec les panneaux, et vous l' apprendrez dans cette section et vous vous entraînerez également avec des applications du monde réel que nous développerons avec des applications du monde réel que nous développerons au fur et à mesure de votre progression dans le cours. Allons-y et plongeons-nous dans un peu de code dans les prochaines conférences. On se voit. 79. 78. Débuter avec les pandas: Génial. Encore une fois, Pandas est une bibliothèque qui fournit des structures de données et des outils d'analyse de données en Python Dans cette conférence, vous verrez ce que je veux dire par structures de données et analyse de données. Vous verrez donc l'objet Pandas principal, qui est une structure contenant les données Et vous verrez que nous obtenons des données de la structure et que nous les analysons. Je vais donc ouvrir une ligne de commande simple, et pour l'instant, nous utiliserons IPython, ce qui est idéal pour analyse des données et le travail avec Mais le bloc-notes Jupiter est encore meilleur. Jupiter Notebook est comme un Python Shell. Il s'agit en fait d'une combinaison d' un shell Python et d'un éditeur Python. Et c'est un outil basé sur un navigateur dans lequel vous pouvez écrire du code Python Il est très efficace, ce qui augmente vraiment votre productivité Mais pour cette conférence, je vais commencer par des choses simples, une étape à la fois, et je vais vous présenter les pandas utilisant uniquement IPython Ensuite, dans la prochaine conférence, je vais vous montrer comment configurer un bloc-notes Jupiter auparavant connu sous le nom de bloc-notes iPython Vous allez donc configurer Jupiter, et je vais vous montrer comment travailler avec Jupiter. Donc pour l'instant, allons-y et utilisons la simple console IPython Importez des pandas. Et, normalement, la première chose à faire est d'importer des données, par exemple, à partir d' un fichier CSV ou d'un fichier TextFile ou même d'un fichier Excel, JSON ou d'autres formats, que nous aborderons plus tard Mais il existe également d'autres moyens de créer une structure de données Pandas Maintenant, la première chose que vous devez savoir, c'est que cette structure de données dont je parle s'appelle un bloc de données. Il s'agit donc d'un objet spécial qui contiendra les données. Et tu peux en créer un. Vous pouvez stocker un bloc de données dans une variable, disons une variable DF. Cadre de données Mm Pandas. Je crée donc un bloc de données manuellement, en transmettant des valeurs manuellement via Python. Normalement, vous souhaitez utiliser d' autres fichiers, comme je l'ai mentionné. Ainsi, le cadre de données considère désormais le bloc de données comme une table. Vous pouvez donc transmettre une liste de listes où chaque liste sera une ligne de ce tableau. Passons donc quelques données deux, quatre, six et dix, 20, 30. Vous l'exécutez, cela a réussi car vous n'avez pas reçu d'erreur. En avez-vous un, et voici le bloc de données. Donc 246 est la première ligne, dix, 20, 30 est la deuxième rangée. Ces zéro, un, deux sont les noms des colonnes, appelés index. Donc 01 voici les index des lignes, et voici les noms des colonnes L'avantage des panneaux est que vous pouvez également avoir vos propres noms de colonnes si vous le souhaitez. Je vais donc appeler à nouveau cette expression, et je veux passer ici un paramètre appelé columns qui attend une liste de noms. Qui doit avoir le même nombre d' éléments que le nombre de colonnes de votre bloc de données. Donc, si vous transmettez une liste avec trois éléments, vous devez également transmettre trois colonnes ici. Disons que le prix est aléatoire, l'âge et la valeur. Vous l'exécutez et laissez-moi développer ce PDF. Cette fois, vous voyez que vous y avez vos propres noms de colonnes. De même, vous pouvez également transmettre des noms personnalisés pour les index en passant un index en tant que paramètre, puis vous voudriez transmettre une liste avec deux éléments car nous n'avons que deux lignes, disons la première, deuxième, DF, et vous avez des index personnalisés Cependant, normalement, vous n' aurez pas à transmettre d'index personnalisés. Les données ont normalement un nombre défini de colonnes, mais les lignes peuvent contenir des centaines et des milliers de lignes, voire des millions. Vous ne voulez donc vraiment pas vous embrouiller avec les noms d'index. Cependant, la fonctionnalité n'est que cela dans des cas particuliers. Il existe donc un moyen de créer un bloc de données de panneau, et vous en avez également d'autres. ne sont pas très courants à utiliser, mais je voulais juste savoir s'ils existent. Encore une fois, vous passez une liste ici, puis vous pouvez transmettre deux dictionnaires à l'intérieur de cette liste Vous pouvez donc voir la similitude. Ici, nous avons utilisé une liste de listes. Ici, nous transmettons également un objet de liste, mais il s'agit d'une liste de dictionnaires. Et, ce que vous pouvez faire ici, c'est transmettre des valeurs, des clés et des valeurs pour un dictionnaire, et ici aussi. Disons que le nom John s'appelle Jack, exécutons ce DF deux. Et oui, il s'agit d' une autre trame de données. Si vous souhaitez y ajouter plus de colonnes, telles que le nom de famille, vous devez ajouter ici une autre clé et une autre valeur pour le dictionnaire. Donc quelque chose comme le nom de famille et maintenant, si vous l'exécutez et DF deux, vous y ajouterez la colonne du nom de famille. Mais pour Jack, vous n'en obtenez aucun parce que vous n' avez pas inscrit de nom de famille dans le deuxième dictionnaire. Donc, si vous faites de même pour Jack, si vous transmettez un nom de famille, vous obtiendrez la valeur ici. Ce sont donc deux méthodes de base pour créer des blocs de données à la volée. Comme je l'ai dit, normalement, ces valeurs seront extraites de fichiers CSV, Excel, etc. Je le ferai au cours des prochaines conférences. Et encore une chose que je veux que vous sachiez, c'est qu' il s' agit d'une structure de données, et maintenant que le sens de l'analyse des données sort de cette structure de données, vous voulez en extraire des informations. Vous voudrez peut-être extraire, par exemple, la moyenne de toutes ces valeurs. Donc deux, quatre, six, dix, 20, 30. Nous entrons donc ici dans la phase d'analyse des données. Et l'approche pour y parvenir est, vous savez, maintenant, cet objet de trame de données, que vous pouvez voir comme un objet de type DF. Il s'agit donc d'une trame de données de pandas. Maintenant, des méthodes sont associées à cet objet de trame de données. Si vous faites de la DR et que oui, vous voyez qu'il existe de nombreuses méthodes que vous pouvez appliquer. Trouvons ici la méthode de la moyenne. Voici méchant. Donc, ce que vous pouvez faire, c'est pointer sur DF 1, puis sur la moyenne et les crochets, et vous obtenez la moyenne de toutes les colonnes. Et si vous voulez obtenir la moyenne de l'ensemble du bloc de données, vous pouvez ensuite appliquer à nouveau la méthode de la moyenne. Donc, cela permet d' appliquer la méthode de la moyenne à cette série ici. Donc, ce type d'objet est un objet de la série Panda. Les séries utilisent plus ou moins les mêmes méthodes que celles que vous allez appliquer à un bloc de données. Donc, DF one et DF one point Price, et vous obtenez la série de la colonne de prix. C'est donc aussi le cas si vous vérifiez le type, il s'agit également d'une série de panneaux. Le bloc de données est donc constitué d'une série. Et bien entendu, vous pouvez également appliquer la méthode de la moyenne au prix. De même, vous pouvez également appliquer d'autres méthodes qui y sont disponibles. Donc, Max et toi obtenez la valeur maximale. Et oui, il s'agit de l' introduction aux pandas. Lors de la prochaine conférence, vous découvrirez Jupiter. C'est très agréable de travailler avec Jupiter. Alors ne manquez pas ça. Ensuite, nous allons ouvrir des trames de données, créer des trames de données à partir de fichiers. Je te verrai donc plus tard. 80. 79. Mise en place du carnet Jupyter +: Eh bien, dans cette conférence, je vais vous montrer comment configurer le bloc-notes Jupiter ou Jupiter en abrégé, et aussi comment l'utiliser. Jusqu'à présent, vous avez travaillé à la fois avec Python ou un shell interactif e Python, mais vous avez également travaillé avec un éditeur tel qu'Atom. Parfois, vous pouvez avoir besoin d'un hybride entre un shell interactif et un éditeur pour entre un shell interactif et tester des éléments, mais vous souhaitez également enregistrer les blocs de code que vous écrivez , car un shell interactif est idéal pour tester des choses rapidement, mais vous pouvez enregistrer le code, et l'éditeur est bon pour enregistrer le code, mais il n'est pas idéal pour tester des choses. Mais je peux vous dire qu'un tel outil hybride existe, appelé Jupiter notebook. Et c'est un outil formidable qui augmentera votre productivité. Jupiter est particulièrement efficace lorsque vous travaillez avec des données. C'est un environnement idéal pour explorer les données, et vous verrez son utilité dans un instant. Bien entendu, vous souhaitez toujours utiliser des éditeurs tels qu'Atom lorsque vous travaillez avec plusieurs scripts Python qui interagissent les uns avec les autres. C'est le cas des applications Web, par exemple, lorsque vous développez des applications Web, vous devrez gérer plusieurs scripts Python fichiers HTML, ainsi que des fichiers HTML, CSS et autres. Créez une application Web plus tard dans le cours et vous verrez en quoi Atom est utile pour cela. Mais pour les données, utilisez Jupiter. Alors Jupiter, voyons comment l'installer. Eh bien, vous pouvez passer à l'installation, alors installez et vous pouvez suivre ces instructions. Mais au lieu de passer par là, je vous conseille d' utiliser votre ligne de commande pour installer Jupiter et de taper PIP install Jupiter Nous téléchargeons donc Jupiter et il l'installera dans votre système. Ensuite, pour démarrer une session Jupiter, une bonne pratique consiste à accéder à un dossier. Disons, testez-en trois. Et ici, vous pouvez ouvrir une invite de commande, puis taper Jupiter No book. Et cela ouvrira une session Jupiter dans le navigateur. Le bloc-notes Jupiter est donc en fait un bloc-notes de navigateur. La raison pour laquelle j'ai ouvert le bloc-notes Jupiter en ligne de commande était qu' au moins sous Windows, lorsque vous faites Shift puis que vous cliquez avec le bouton droit sur le dossier, votre invite de commande s'ouvre dans le dossier actuel, donc dans celui-ci ici. Et puis, lorsque vous créez un fichier de bloc-notes maintenant, chaque fichier sera enregistré dans ce répertoire ici. Vous pouvez également ouvrir votre invite de commande où vous le souhaitez, puis vous pouvez accéder par CD au dossier dans lequel vous souhaitez enregistrer vos blocs-notes Jupiter Très bien, maintenant nous n' avons rien ici. Donc, ce que vous pouvez faire, c'est créer un bloc-notes. Et nous avons installé Jupiter Earth en tant que bibliothèque Python. Donc, dans la catégorie des ordinateurs portables, nous avons Python trois disponibles. Le noyau sera donc Python 3. Si vous avez associé d'autres langues ici, vous les verrez ici sous Carnets Il s'agit donc d'un carnet vide. Et c'est le nom d'un bloc-notes et vous pouvez le modifier pour, par exemple, tester. Appuyez sur OK. Et si vous allez dans le dossier, vous verrez que le fichier portant nom de test et l'extension de bloc-notes IPython a été créé Cela est donc créé automatiquement chaque fois que vous tapez quelque chose ici, que vous apportez des modifications ou quelque chose comme ça. Maintenant, laissez-moi vous montrer comment vous pouvez travailler avec le bloc-notes iPython Vous pouvez donc prendre en compte chaque cellule. Il s'agit d'une cellule, et vous pouvez considérer chaque cellule comme une ligne dans un shell Python normal. Mais ici, dans ce shell, vous pouvez réellement écrire plusieurs lignes de code. Disons en imprimer un, puis si vous ne voulez pas l'exécuter suite, vous pouvez appuyer sur Entrée. Ainsi, avec Enter, vous entrez une nouvelle ligne dans la cellule , puis vous en imprimez deux et ainsi de suite. Et si vous voulez exécuter la cellule maintenant, vous pouvez appuyer sur Ctrl Enter pour obtenir le résultat. Maintenant, si vous souhaitez créer une nouvelle cellule, Alt Enter le fera. Et ici, vous pouvez écrire un autre bloc de code. Avec la touche Entrée, vous passez à la ligne suivante, et ainsi de suite. Et si tu veux passer tout de suite à la cellule suivante. Donc, avant d'appuyer sur Ctrl Enter, vous pouvez maintenant appuyer sur Shift Enter pour passer automatiquement à la cellule suivante. Et avec Shift Enter, vous pouvez également exécuter la cellule sur laquelle vous travailliez. Vous pouvez créer de nouvelles cellules avec Alta Enter et les supprimer en appuyant d'abord sur Escape, puis en appuyant à nouveau deux fois sur DD. C'est donc assez flexible. Ce que vous devriez remarquer, c'est que nous avons essentiellement deux modes. Nous avons le mode commande. Ainsi, lorsque vous êtes en mode commande, vous voyez un rectangle gris autour de la cellule. Et lorsque vous devez passer en mode édition, vous appuyez sur Entrée. Ainsi, pendant que vous vous concentrez sur la cellule actuelle, vous appuyez sur Entrée, puis vous modifiez la cellule. Ainsi, en mode édition, lorsque vous tapez des choses, vous insérez du texte dans la cellule, vous insérez du code dans la cellule, mode Escape et commande, DD et vous supprimez la cellule, entrez, et vous entrez dans une nouvelle Ce sont donc les raccourcis clavier les plus utilisés. Mais si vous souhaitez en savoir plus sur les raccourcis, vous pouvez accéder à l'aide , puis aux raccourcis clavier. Et puis vous voyez une liste ici. Mais ce sont de bons points de départ. Lorsque vous avez terminé, vous pouvez simplement fermer un onglet et vous pouvez également fermer l'arborescence des répertoires ici. Notez donc que Jupiter s'ouvre en fait dans une session hôte locale. Et si vous souhaitez ouvrir à nouveau votre bloc-notes, vous pouvez revenir ici et ouvrir fenêtre de commande ici et le bloc-notes Jupiter. Voici le dossier, tel que nous l'avons laissé. Désormais, il est préférable d'utiliser un bloc-notes Jupiter pour effectuer des explorations, en particulier des explorations de données Donc, si vous travaillez, par exemple, sur l' analyse ou la visualisation de données, le bloc-notes Jupiter est parfait à utiliser Vous pouvez utiliser le bloc-notes Jupiter, par exemple, pour charger une table de données au cours de la session. Pour cela, vous utiliseriez des pandas. Vous importez donc la bibliothèque, vous appuyez sur Entrée ou Shift Enter pour passer à la cellule suivante, et vous appuyez à nouveau sur Entrée pour écrire quelque chose. Supposons donc que DF est égal à Pandas, Dal Fred CSV. Et j'ai un fichier CSV quelque part dans mon système. Centre de presse et Whoa. Vous obtenez ainsi un joli tableau HTML chargé à partir du fichier CZ, et vous pouvez également tracer des graphiques dans le bloc-notes Jupiter C'est donc aussi quelque chose que vous apprenez dans le cours. Ainsi, pour l'analyse des données et les visualisations, vous pouvez également utiliser le bloc-notes Jupiter pour le scrapping Web C'est très pratique parce que vous avez ces blocs de code et que vous devrez ensuite continuellement modifier le code. Vous voudrez peut-être changer quelque chose ici, puis vous obtiendrez un bel affichage Pas exactement celle-ci parce que c'est une chaîne foirée, mais celle-ci, par exemple, vous avez un curseur ici, qui vous permet de faire défiler la page vers le haut et vers le bas dans une fenêtre séparée qui n' affecte pas votre fenêtre principale en général J'espère donc que vous avez une bonne idée des règles de Jupiter. Prenez simplement note des raccourcis clavier pour exécuter le code, l'édition et du mode commande, vous savez, Enter escape et Enter à nouveau et ainsi de suite. Et si vous les pratiquez un peu, vous vous habituerez très rapidement à Jupiter . Rendez-vous lors de la prochaine conférence. 81. Charger des fichiers Csv dans Python: Maintenant que vous avez une connaissance de base des pandas et que vous savez comment utiliser les ordinateurs portables Jupiter, nous pouvons continuer et apprendre à charger différents types de fichiers en Python, en utilisant des pandas J'ai donc cinq fichiers ici. Ils contiennent exactement les mêmes sites de données. Et ceci est une version texte, ou laissez-moi ouvrir la version Excel qui montrera un joli aperçu des données, comme vous pouvez le voir. Nous avons donc sept lignes de code, en-tête compris, et nous avons également sept colonnes. Il ne s'agit donc que de quelques données de base sur les supermarchés, l'adresse, la ville, l'État, le pays , le nom du supermarché et le nombre d'employés. De même, nous avons exactement les mêmes données, mais dans des formats différents. Nous avons donc CSV et CSV signifie des valeurs séparées par des virgules. Il s'agit donc essentiellement d'un fichier texte où les valeurs, les colonnes sont séparées par des virgules, comme vous pouvez le voir ici Chaque colonne est donc séparée par une virgule. Mais il a une extension CSV, et il peut être ouvert avec Excel. Donc, si je l'ouvre maintenant, vous verrez le même jeu de données que celui que vous avez vu dans le fichier ELS. Nous avons également les mêmes données séparées par des demi-colonnes, comme vous pouvez le voir ici. Et oui, si vous travaillez avec des données, vous connaissez probablement ce type de fichiers. Voici donc comment stocker les données. Vous devez avoir certaines conventions, et en utilisant ces conventions, vous pouvez utiliser d'autres programmes tels que Python pour charger ces données. Ainsi, lorsque vous chargez un fichier CS, Python sait que les valeurs seront séparées par virgules et sait comment les séparer. Il sait comment extraire des valeurs. Nous allons donc les ouvrir une par une. Nous avons également un fichier JSON. C'est un autre format pour stocker des données, et cela ressemble à un dictionnaire Python, en fait. Nous allons donc également apprendre à les convertir en dataframe de Panda Tous ces éléments seront donc convertis dans les dataframes de Panda. Oui, je vais commencer le bloc-notes Jupiter Jupiter. Voici mes dossiers. Je vais créer un nouveau bloc-notes Jupiter pour Python 3. Avant de charger ces fichiers en Python. Il y a un truc que je fais habituellement. Importez le système d'exploitation, puis une liste de points, et je vais entrer, exécuter cela. Vous passez à la ligne suivante. Et vous obtenez une liste de fichiers et de dossiers ainsi que des noms de fichiers que vous avez dans le répertoire actuel. Donc maintenant, je n'ai pas besoin de passer à mon dossier pour regarder les noms. J'ai tout ici. Maintenant, je peux importer des pandas. Et commençons à charger ces fichiers un par un. Disons DF un, donc le bloc de données un, et cela équivaudrait à Pandas Je vais lire le CSV. Ensuite, vous devez passer le nom du fichier que vous souhaitez ouvrir. Superplantez le fichier CSV, saisissez-le simplement et vous voudrez peut-être l' imprimer. Donc, DF, là. Et oui, ce que nous avons obtenu, c'est que nous avons d' abord chargé le bloc de données , puis nous l'avons imprimé. Nous avons donc mis cette jolie table là-dedans. Voilà à quel point il est facile de charger des données à partir d'un fichier CS. Maintenant, l'avantage d'avoir les données en Python est qu'une fois que vous les avez chargées en Python, vous pouvez effectuer de très nombreuses opérations avec vos données. Vous pouvez faire des statistiques et ajouter de nouvelles colonnes. Vous pouvez fusionner des colonnes. Vous pouvez ajouter les numéros d' une colonne aux numéros des autres colonnes. Et à la fin, vous pouvez réexporter ces données vers des formats tels que CSV, Excel, etc. Nous allons donc le faire plus tard. Mais d'abord, voyons comment nous chargeons les données de plusieurs formats de fichiers dans la vidéo suivante. 82. Charger les fichiers Excel dans Python (PAS DE FILIENOME): Et allons-y et chargeons le fichier Excel X, en fait, un fichier Excel. Les Pandas lisent donc Excel et vous leur transmettez le nom du fichier Excel Et normalement, vous devez également transmettre un autre paramètre ici pour les fichiers Excel car, vous savez, les fichiers Excel peuvent contenir plusieurs feuilles. Vous voulez donc spécifier le nom de la feuille qui commence à zéro, vous devez donc transmettre l'index. Si vous voulez la première feuille, vous devez passer à zéro. Si vous voulez une deuxième feuille, vous devez en transmettre une et ainsi de suite. Je vais donc passer zéro. Je n'avais qu'une seule feuille dans le fichier Excel. Faites trois exécutions. Et nous avons également réussi à lire le fichier Excel. Passons donc à autre chose. 83. Charger des fichiers texte dans Python: Oui, passons au fichier TXT. C'est donc un supermarché séparé par des virgules. Il s'agit donc d'une structure de données séparée par des virgules. Pour cela, donc pour le fichier TXT séparé par des virgules, encore une fois, vous utilisez R CSV. Juste comme ça, D quatre. Et voici le bloc de données. Ainsi, le CSV des supermarchés en fait que certains disent qu'il s'agit d'un fichier séparé par des virgules, mais pour être plus précis, vous diriez des valeurs séparées par des caractères Donc C est pour le personnage. Et il se peut qu'il y ait différents personnages là-bas. Dans ce cas, lorsque vous avez des virgules comme séparateurs, vous n'avez pas à passer de paramètre de séparateur ici Mais lorsque vous aurez d'autres valeurs comme séparateurs, vous devrez les transmettre C'est le scénario suivant. Donc DA 5, les pandas pointent en rouge, CSV. Nous parlons donc de supermarchés, de points-virgules, ou de supermarchés, les points-virgules point-virgules point-virgule point-virgule sur TXT Oui, laissez-moi essayer ce SiS maintenant. Donc, si je l'exécute, Python ne pourra pas y reconnaître le point-virgule Cela est dû au fait que le paramètre de séparation a une valeur de virgule par défaut Vous voulez donc remplacer cela par votre séparateur, qui est un point-virgule. Dans ce cas, Dans ce cas Nous avons reçu une erreur, un séparateur d'arguments de mots clés inattendu . Il semble donc que read underscore, CSV n'ait pas de paramètre séparé Dans ce cas, vous devez demander de l'aide. Alors oui, voici les paramètres que vous souhaitez transmettre. Il s'agit donc en fait d'un SAP, et vous pouvez voir que la valeur par défaut de SAP est une virgule Alors fermez-le et allez ici, changez-le en SAP, exécutez, et voici le bloc de données. Génial. Que reste-t-il à faire ? Oui, nous avons tout consommé. Et il s'agit de lire des fichiers locaux. 84. 83. Introduction à Numpy ++: Considérez cette image en niveaux de gris. Maintenant, cette image est composée de pixels. Celui-ci en a trois sur cinq, il a donc 15 pixels. C'est donc une image assez petite. Maintenant, chaque pixel a une valeur, et c'est ce qui définit l'intensité de la couleur grise pour chaque pixel. En réalité, ce sont des chiffres, mais l'écran de notre ordinateur les affiche dans un format couleur , lisible par les humains. Ce que j'essaie de comprendre, c'est que les programmes utilisent des nombres pour stocker des images. Ensuite, l'écran de l'ordinateur ou l'écran convertit ces nombres en couleurs. Python peut également traiter des images, tout comme Photoshop. Il ne peut probablement pas faire toutes les choses intéressantes que vous pouvez faire avec Photoshop, mais vous pouvez utiliser Python pour automatiser les choses. Par exemple, nous utiliserons les capacités de traitement d'image de Python pour détecter des visages à partir de photos à partir d'images ainsi que pour détecter des objets en mouvement dans des vidéos. Les vidéos sont donc faites d'images. C'est donc la même chose, en gros. Et Python stocke et lit images à l'aide de tableaux de nombres. Par exemple, cette image peut être représentée, comme vous le savez, une liste de trois autres listes. Donc, trois listes parce que nous y avons trois lignes avec des pixels. Ensuite, dans chacune des listes, vous aurez cinq chiffres et ainsi de suite, et le cinquième. Il en va de même pour les deux autres listes. Nous avons cinq chiffres parce que nous avons cinq colonnes, donc cinq pixels pour chaque ligne. Et c'est une image pour Python. Et c'est là que Numpi est utile. Vous pouvez donc représenter des images avec nous comme nous l'avons fait ici, mais cela n'est pas très efficace car pour les grandes images, occupe beaucoup de mémoire et ralentit donc les opérations sur celles-ci. Cela est donc résolu par Numpi qui est une bibliothèque, une bibliothèque Python qui fournit un objet de tableau multidimensionnel Permettez-moi donc de créer cet objet de tableau. Tout d'abord, vous devez importer Numbi Et si vous avez installé des pandas, numpie aurait dû être installé avec car pandas est Si vous avez déjà installé un Numpi, allez-y et installez Numpi Et si, pour une raison ou une autre, vous rencontrez des problèmes sous Windows, alors allez-y, comme je vous l'ai montré, et trouvez les bibliothèques Python précompilées. Allez de ce côté , recherchez Numpi , puis déterminez si vous utilisez une version 3.5 de Python, obtenons simplement cette version Ensuite, vous pointez sur ce fichier avec Pip Install et le nom du fichier Génial. Non, j'ai installé num pi, donc je vais créer cet objet multidimensionnel et le stocker dans une variable. Ce serait une plage de points numériques A. Et disons 27. Exécutez-le et imprimez-le pour qu'il s' agisse d'un tableau NumPi. C'est comme ça qu'on l'appelle. Celui-ci n'est pas exactement un tableau multidimensionnel car il n' a qu'une seule dimension. C'est donc un avion, c'est comme une liste d' avions, une liste Python, mais ce n'est toujours pas exactement le type. Désolée. Il s'agit donc d'un tableau NPi à N dimensions Il peut être unidimensionnel, bidimensionnel ou tridimensionnel. Nous en avons donc un, deux, trois, et je vais vous montrer tous ces scénarios. C'était donc le tableau unidimensionnel, et si vous voulez l' imprimer sous une forme agréable, ce serait le tableau. Maintenant, je crée juste un tableau numérique en utilisant des nombres à la volée, mais normalement, vous devez créer un rayon à partir d'images, et nous le ferons en un instant. Donc, pour l'instant, créons des tableaux manuellement. Voyons maintenant quels sont les tableaux bidimensionnels. Forme en V trois par neuf. Nous avons donc déjà ce tableau unidimensionnel, et nous voulons le convertir en tableau bidimensionnel. Si vous l'exécutez, vous obtenez un tableau bidimensionnel. Il s'agit donc d'un tableau bidimensionnel car il a deux dimensions. Alors considérez cela comme cette image qui tombe. Nous avons deux dimensions : verticale et horizontale. Maintenant, qu'est-ce qu'un tableau tridimensionnel ? Même si les tableaux tridimensionnels sont moins fréquemment utilisés, il est toujours bon de les connaître. Quoi qu'il en soit, laissez-moi créer un tableau tridimensionnel. Je pourrais dire trois par trois parce que vous savez que vous avez 27 éléments, donc trois par trois vous en donnent 27. Oui, c'est un tableau tridimensionnel. Imaginez cela comme un cube à trois dimensions. Donc, trois par trois, par trois. Et en pratique, vous le verrez dans un instant dans cette conférence. Où traitons-nous d'un tridimensionnel ? Alors, supportez-moi. Et vous pouvez voir les similitudes entre un tableau non Pi et une simple liste de listes en Python. Cela ressemblerait donc à un tableau bidimensionnel, si vous voulez l' appeler ainsi. La structure au niveau inférieur est différente entre les listes Python et les tableaux NPi De plus, les tableaux Nopi vous permettent d'effectuer des opérations plus efficaces, telles que l'itération entre les éléments du tableau Et vous pouvez également créer un tableau Nopi à partir d'une liste Python. Par exemple, je vais obtenir cette liste ici et je vais créer un nouvel objet, puis pointer sur nupi et pour convertir une liste en tableau np, vous devriez utiliser une méthode de tableau Et puis entre crochets se trouve l'objet que vous souhaitez convertir. M et c'est un tableau, qui est presque exactement comme celui-ci ici. Et si vous l'imprimez, vous ne verrez pas la différence. Tu sais, ils ont exactement la même apparence. Mais ils ne le sont pas parce que c'est une liste, et c'est une entorse. D'accord. Génial. Passons à autre chose. C'est donc Napi et comme je l'ai mentionné plus tôt, Napi est une bibliothèque de base pour d'autres bibliothèques telles que Pandas et OpenCV, qui est Les trames de données Pandas sont donc basées sur des tableaux Numpi, et les objets CV ouverts sont basés sur Donc, Pandas ajoute simplement quelques fonctionnalités intéressantes Là-dedans, tel qu'il ajoute. Il permet d'avoir des en-têtes et des index de table, ce que vous ne pouvez pas avoir dans Numpi car Numpi est censé être plus simple et permet de stocker des objets et d'effectuer des opérations avec un niveau plus bas stocker des objets Numpi est donc une exigence pour de nombreuses bibliothèques. Et résolvons cette leçon ici, et dans la prochaine conférence, nous irons directement de l' avant et créerons un tableau NumPi à partir de notre image ici Donc cette image. OK, on se voit là-bas. 85. 85: Et oui, le CV 2 est installé. Et ce que je peux faire avec Civ two, entre autres choses, ce que je peux faire, la toute première chose est de charger une image en Python en utilisant les méthodes CV two Je vais donc charger cette image, qui est une très petite image, d' ailleurs, je n'ai que 15 pixels. Vous savez, une image normale que vous avez utilisée pour prendre des photos ou sur votre téléphone ou autre. Il a environ 1 000 pixels sur 1 000 , soit 1 million de pixels, plus ou moins. Mais nous devons garder les choses simples pour que vous compreniez ce qui se passe. CV pour l'importer et oui, c'est réussi. Vous savez, je vais créer une variable et l'appeler image IMF et G pour gris. Vous pouvez l'appeler comme vous voulez, et pour mener une image à la charger en Python, vous devez utiliser la méthode de partage d'image. Ensuite, vous passez le nom de votre image. Vous pouvez trouver cette image dans la section des ressources. Alors allez-y et téléchargez-le. Maintenant, il se trouve dans le même répertoire que mon bloc-notes Jupiter Je peux donc indiquer le nom du fichier, y compris l' extension, en forme de petits points PNG. Et ici, la méthode de lecture d'image attend également un autre argument de votre part. Cela peut être zéro ou un. Donc zéro signifie que vous voulez lire l'image en niveaux de gris. Et si vous en passez une, vous lisez l'image en BGR, ce qui signifie bleu, vert et rouge Et vous comprendrez ce que signifie chacune des versions. Faisons donc celui-ci d'abord. Oui, je vais l'imprimer. Et comment, c'était ça. Nous n'avons donc aucun tableau. C'est un tableau bidimensionnel, il a donc des dimensions trois par cinq, ce qui correspond à notre image. Les lignes et les cinq colonnes. Maintenant, si nous passons zéro ici, nous lisons cela comme une image en niveaux de gris, c'est parce que, vous savez , ce fichier PNG comporte en réalité trois bandes ou trois couches Et chaque couche possède un certain nombre de couleurs. Ainsi, la première couche contient une certaine quantité de bleu, la deuxième couche une certaine quantité de vert et la dernière couche une certaine quantité de rouge. La combinaison de chaque pixel est donc une combinaison de l'intensité du bleu, du vert et du rouge. Je sais que dans d'autres programmes, ils utilisent le RGB alors que nous utilisons ce BGR maintenant, pratiquement, ce fichier ici, cette image est pratiquement une image en niveaux de gris Cependant, chacun de ces pixels possède ses propres bandes, de sorte que leur combinaison crée toujours, dans ce cas, les couleurs gris, blanc et noir. Mais si nous avions une image en couleur, cette fonction la convertirait en niveaux de gris Encore une fois, nous avons ici, vous savez, 187 est la valeur de l'intensité pour ce premier pixel. Et puis vous avez l'autre chiffre, et pour le blanc, vous voyez du blanc ici. Nous avons trois pixels blancs. Et ils sont 255, tous. Toutes les couleurs sont comprises entre zéro, zéro étant le noir, le noir absolu et 255 pour le blanc. Et tout ce qui se trouve entre eux est dans l'échelle de gris. Donc maintenant, si je change ce 21, je vais obtenir le tableau tridimensionnel, où cela représente la couche bleue, le vert et le rouge. Ou vous pouvez même l'imprimer. Attention cependant à ce que cela soit un peu transposé. Les matrices sont donc trois colonnes ici et les lignes sont verticales. En gros, cela signifie que ce pixel a ces valeurs correspondantes. Il a donc une intensité de 187 pour le bleu, 198 pour le vert et deux sur neuf pour le rouge. Et oui, c'est ainsi que vous créez des tableaux numpi à partir d'images Mais qu'en est-il de l' inverse ? Donc, créer des images du tableau numpi. Eh bien, pour ce faire, vous refaites le CV deux, CV deux, puis vous pointez sur la méthode Iriz, donc image Ensuite, vous voulez donner un nom à votre image. Disons, un nouveau PNG à petits points gris, et puis, bien sûr, vous devez réussir votre no pi. Passons donc à l'image grise. Exécutez cela, vous en obtenez deux, ce qui signifie que votre chute aurait dû être créée maintenant. Oui, nouveau petit gris. Et oui, c' est un fleuret et j'espère que cela renforcera vos connaissances sur Nopi Maintenant, nous allons aller de l'avant et faire d' autres choses ici. Plus précisément, dans la prochaine conférence, nous apprendrons à indexer, à découper et itérer des tableaux Donc, en gros, vous allez apprendre comment accéder à ces valeurs. Rendez-vous là-bas lors de la prochaine conférence. 86. 85. Indexation, découpe et itération de tableaux chiffonnés: C'est bon. Tu sais comment découper une liste. Donc, de zéro à un, nous vous donnerons le premier élément de la liste et de zéro à deux, le premier et le deuxième élément de la liste, et ainsi de suite. Avec les tableaux non Pi, vous faites essentiellement la même chose, sauf qu'avec les tableaux non Pi, vous avez parfois deux ou trois dimensions ou plus. Alors laissez-moi continuer et je vais créer, je vais commencer par un tableau bidimensionnel. Je vais donc obtenir cela à partir de la variable. C'est donc le tableau nonpi avec lequel nous allons travailler. Et oui, si vous voulez extraire ce numéro ici, ici, celui-ci et celui-ci. Donc, ces quatre chiffres. Eh bien, vous devez d'abord définir l'index des lignes que vous souhaitez découper. Ce serait donc de zéro à deux, ce qui vous donne les deux premières lignes. En fait, on peut essayer ça. Et vous verrez que vous obtenez les deux premières lignes. Maintenant, si vous ne voulez que cette partie ici, donc ces deux chiffres et ces deux, vous devriez réussir. Il y a une virgule, puis l' index des colonnes. Ce serait, tu sais, zéro ici, un, donc deux, trois, oui, deux à quatre, peut-être. Ouais Mais tu le fais. Ah, c'est ça. Cela signifie que vous disposez de ce système d'indexation Cela commence donc à zéro pour les lignes, puis la deuxième ligne est un, deux et ainsi de suite. Quatre colonnes, c'est la même chose. Zéro, un, deux, trois et quatre. Et en fait, si vous le souhaitez, vous pouvez voir la forme de votre n par tableau. C'est donc trois par cinq, ce qui signifie zéro à deux et zéro à quatre. Génial. Et bien sûr, vous pouvez utiliser la convention d'indexation des listes, sorte que vous pouvez passer zéro et tout ce qui suit ou juste comme ça Vous obtenez donc toutes les lignes et uniquement les colonnes 2 et 3. De même, vous ne pouvez obtenir qu' une seule valeur si vous le souhaitez. Pas particulièrement celui-ci, car trois, c'est hors des os pour l'axe zéro. L'axe zéro est donc un axe horizontal, ce qui indique qu'il n'y a pas de ligne d'indice trois. Nous avons donc fixé zéro, un, deux. Passons-en donc deux. Et vous obtenez 182, qui est le tout dernier élément de la matrice Nopi Oui, c'est une question d'indexation. Que diriez-vous d'itérer sur un tableau Nopi ? Eh bien, il y a deux façons de le faire. La première consiste à dire, disons que pour I dans votre tableau Nopi, imprime I. Cela aura pour effet d' imprimer les lignes de vos tableaux numb Donc, ce à quoi j'accède dans votre tableau numérique, ce sont les lignes. Ainsi, à chaque itération, il obtient la première ligne et l'imprime lors de la première itération, puis de la deuxième, puis de la troisième Et si vous souhaitez parcourir les colonnes, vous devez accéder à la version transposée de votre tableau numpi Et c'est comme ça qu'on procède. Enfin, si vous voulez itérer valeur par valeur, vous diriez « I » sous forme d'image et de points à plat I. Donc, cette propriété vous permet accéder aux valeurs de votre tableau numpi une par une Et cela concerne l'indexation, le découpage et l'itération. Je vous verrai lors de la prochaine conférence. 87. 86. Empiler et diviser des tableaux chiffonnés: Maintenant que vous savez comment découper et itérer dans des tableaux numpy, effectuons quelques Et cela reviendrait à stocker des tableaux NPi, donc à concaténer des tableaux numpy entre eux et à diviser un tableau numpi en deux tableaux plus Oui, j'ai toujours ce tableau numpy ici. Commençons donc par empiler deux tableaux numpy. Pour ce faire, vous pouvez créer une nouvelle variable dans laquelle vous allez enregistrer votre grand tableau, ce qui serait égal à nupi et à la méthode pour stocker deux rayons non Pi. En fait, il existe deux L'une est une pile horizontale, donc une pile H. Cela suppose de transmettre deux ou plusieurs tableaux numpy que vous souhaitez empiler horizontalement Alors laissez-moi passer OMG, puis le même tableau, ce n'est pas un problème Si vous aviez deux tableaux différents, vous pourriez le faire, mais je passe simplement le même tableau ici Maintenant, si vous l'exécutez, vous obtiendrez une erreur, et je veux que vous voyiez cette erreur pour que vous la compreniez. Il est donc dit que H stack prend un argument positionnel, mais que deux ont été donnés, ce qui signifie que H stack entre crochets ne reçoit qu'un seul argument, mais nous en passons deux Alors, comment allons-nous concaténer deux tableaux non Pi ? Nous pouvons simplement y transmettre un tableau non pi. La solution ici est donc d'avoir un tuple. Des matrices Nopi, juste comme ça. Donc, un renversement dans l'entrée de la méthode A stack. Tu l'exécutes. Et voici un tableau empilé. Il s'agit donc du premier tableau, et du tableau suivant, qui dans ce cas est le même, mais si vous le souhaitez, vous pouvez en ajouter d'autres et obtenir un tableau plus long, ce qui n'est pas très beau comme ça. Vous pouvez donc l'imprimer. Et oui, maintenant tu vois la différence. Donc le premier tableau, le deuxième et le troisième. Et si vous voulez les empiler verticalement, vous devez y faire un V. Oh, oui. Comme vous vous y attendiez, cela concaténera les tableaux en position verticale sur l'axe vertical Attention, si vous essayez de concaténer des tableaux dimensions différentes, vous obtiendrez L'IMC a donc trois dimensions, si vous vous en souvenez d'ici Vous allez maintenant apprendre comment concaténer et comment diviser un tableau Eh bien, pour ce faire, vous pouvez créer une variable, puis une division horizontale numérique pour la diviser horizontalement Et cela attend un tableau numpy et le nombre de tableaux que vous souhaitez produire à partir de celui-ci Donc, horizontalement, disons trois. C'est vrai. Et oui, cela indique que la division du tableau n' entraîne pas une division égale. La raison en est que, vous savez, nous essayons que ce tableau comporte une, deux, trois, quatre, cinq colonnes. Vous essayez donc de diviser cinq par trois. Un arbitre ne peut pas décider comment procéder. Cela devrait-il vous donner abord un tableau pi avec ces deux colonnes, puis un autre arbitre avec deux colonnes, puis un dernier tableau NPi avec une Numpi ne peut donc pas le faire. Ce que vous devriez faire, c'est peut-être cinq, et L T m je devrais vous donner cinq tableaux numpy différents, qui dans ce cas se trouvent être un tableau pour chaque colonne Et vous pouvez faire un fractionnement vertical. Cette fois, nous pouvons en essayer trois car nous en avons neuf. Et pourtant, nous obtenons trois petits réseaux. Notez que ce LSD, donc le split, produit une liste Python de tableaux numpy Il s'agit donc d'une simple liste Python. Et à partir de là, vous pouvez accéder à chacun des rayons en forme de nœud si vous le souhaitez Tu le sais. Il produit donc le premier tableau. Et oui, il s' agit de concaténer et de diviser J'espère vous donner un bon aperçu de numpi. J'essaie de faire quelques exemples pratiques, comme l'ouverture d'images. Mais cela n'en est encore qu'à la partie théorique. Napi est donc assez théorique, et vous ne le comprenez que lorsque vous l'utilisez, comme celui-ci Des exemples concrets, comme le travail avec des pandas, comme nous l'avons fait précédemment dans le cours, et le travail avec des images Nous allons donc faire du traitement d' image de base dans les prochaines conférences de la section suivante. Et vous verrez à quel point num pi est utile là-dedans. Et oui, j'espère que cela vous plaira, et je vous verrai plus tard. 88. 87. App 1 : carte Web avec Python et HTML +: Bonjour encore une fois et bienvenue cette nouvelle section du cours dans cette section, vous allez bien sûr créer la deuxième application. Plus précisément, ce que vous allez créer avec Python est cette carte Web que vous voyez ici Une carte Web est une carte qui s'affiche dans un navigateur et qui peut être consultée sur le Web Cette carte a été construite avec Python et volume. Folume est une bibliothèque Python et la carte comporte trois couches Il possède une couche cartographique de base. Celui que vous voyez ici avec ces noms au verso et qui comporte une couche de polygones, qui représente la population des pays Nous avons également cette couche de points ici avec ces points et vous pouvez activer et désactiver ces couches. Nous avons également ces fenêtres contextuelles. C'est ce que tu vas construire. R, allons-y et faisons-le . Rendez-vous lors de la prochaine conférence. 89. 88. HTML et Python : créer une carte HTML avec Python + Python: Bonjour, encore une fois, j'espère que vous suivez la vidéo précédente où je vous ai présenté la carte que vous allez construire dans cette section. Il s'agissait d'une carte Web, et comme vous peut-être pour créer cette carte Web, l' installation de Python par défaut n'est pas suffisante car, logiquement, Python ne peut pas avoir toutes les fonctionnalités possibles par défaut, car s'il possédait toutes les fonctionnalités, Python deviendrait très lourd Par conséquent, il est judicieux de disposer bibliothèques externes que vous pouvez choisir d'installer ou non. C'est le cas de la cartographie Web. Pour créer la carte Web que je vous ai montrée dans la conférence précédente, vous avez besoin d'une bibliothèque, une bibliothèque tierce, appelée volume. Comme vous le savez peut-être, vous devez installer cette bibliothèque. Maintenant, notez simplement que j'avais quelques vidéos précédentes sur cette section, anciennes vidéos, mais j'ai dû les modifier. J'enregistre de nouvelles vidéos en ce moment. Il s'agit d'une nouvelle vidéo, d'une vidéo mise à jour et de toutes les vidéos suivantes de cette section car Volume a apporté quelques modifications au code par rapport aux versions précédentes. J'ai donc dû refaire les vidéos. Maintenant, cette fois, j' utilise un ordinateur Mac, mais cela ne fera aucune différence. Si vous utilisez Windows, Linux ou Mac, tout fonctionnera exactement de la même manière. La seule différence est la façon dont vous ouvrez Atom, bien sûr. Sous Windows, créez un dossier vide dans lequel vous conserverez les fichiers de ce projet. Mon dossier ici sur Mac est mappé sur Windows, vous pouvez maintenir la touche Shift enfoncée et cliquer avec le bouton droit de la souris. Et puis allez sur open atom ici pour ouvrir atom dans ce dossier. Sur un Mac, vous pouvez appuyer sur Command Space, sur Atom, puis accéder à View Developer pour ouvrir en mode Dev, puis localiser le dossier et cliquer sur Ouvrir. Oui, c'est ça. Je vais fermer tout cela, laissez-moi ouvrir le terminal et maintenant installez le volume. Pour ce faire, vous devez saisir le volume d'installation. Normalement, vous devez le faire sous Windows. Sur Mac, si vous avez deux installations de Python, vous devrez peut-être en faire trois au PIP Cela indiquera explicitement d' installer le volume pour Python 3. Le volume a été installé avec succès. Si vous avez un message indiquant que Gina deux est requis pour ce package, alors allez-y et installez Gina deux dans PIP Three Cependant, je pense que ce volume installera Jinja Two par défaut comme il a fait pour moi, donc ça devrait être prêt Une fois que vous aurez fait cela, je vais ouvrir Python, en fait, Python 3. Sur la carte, vous devez spécifier Python 3 de manière explicite. Ce que je vais faire maintenant, c'est créer une carte Web de base. Pour cela, je vais utiliser shell interactif Python afin de vous montrer des choses autour de moi Essayez d'importer le volume. Aucune erreur, cela signifie que le volume a été installé avec succès. Maintenant, comment fonctionne le volume ? Eh bien, tout tourne autour d'un objet dit cartographique. La toute première chose à faire une fois que vous avez importé un volume est de créer un objet cartographique. J'utilise une variable pour stocker cet objet cartographique, puis égale au point de volume MAP. Il s'agit de la classe qui crée cet objet. Si vous le souhaitez, vous pouvez vérifier le volume pour obtenir une liste des objets disponibles que vous pouvez utiliser sur le volume. Voici la carte. Ignorez les autres pour le moment, nous les examinerons plus tard. Vous pouvez également demander de l'aide dès maintenant, volume point map pour voir ce que vous pouvez transmettre à cet objet cartographique. Créez une carte avec le volume et le point G du feuillet. Ce que fait le volume, c'est qu'il produit réellement, que vous utilisez Python, que vous écrivez du code Python et que ce code Python est automatiquement converti en code JavaScript , HTML et code CSS. Parce que vous avez besoin de Javascript, CSS et de HTML pour créer des webmaps Vous ne pouvez pas le faire directement avec du code Python. Le navigateur lit le HTML, le CSS et JavaScript et affiche le code de ces trois langages de programmation en deux éléments tels que du texte, des lignes, des points et des C'est ce que fait Volume. C'est une chose merveilleuse que vous puissiez faire cela avec Python via Python. Quoi qu'il en soit, vous pouvez regarder ici en bas dans les paramètres. Vous pouvez passer un paramètre de localisation ici. Et vous pouvez spécifier la largeur. Quoi qu'il en soit, si vous ne spécifiez pas la largeur, une largeur par défaut de 100 % de la zone du navigateur sera utilisée, vous n'aurez pas à indiquer la largeur et la hauteur, et vous aurez des vignettes, valeur par défaut étant les tuiles Open Street Map. Les tuiles constituent l'arrière-plan de la carte. Tu vas voir ça dans une minute. Vous avez également d'autres paramètres, que vous pouvez vérifier par vous-même, je crois. J'ai appuyé sur Q pour quitter l'aide et passons à la création de l'objet cartographique. Enfin, carte des points de volume. Donc, emplacement, vous devez y transmettre un paramètre de localisation afin que la carte sache où s'ouvrir. Il peut ouvrir ses portes, disons près de l'Alaska Groenland ou de l'Afrique du Sud. Nous parlons de la vue initiale, mais vous pouvez ensuite zoomer et dézoomer. Laissez-moi passer par un endroit aléatoire. Les emplacements, d'ailleurs, sont indiqués par des coordonnées par défaut, vous devez transmettre des coordonnées géographiques, c' est-à-dire la latitude et la longitude. La latitude varie de -90 à zéro à 90. Laisse-moi donc passer les 80. Au fait, cela figure dans la liste en fait. 80 une virgule puis la longitude, la longitude varie de zéro à -180 et de zéro à 180 Laissez-moi passer -100. Et fermez le support. Vous transmettez une liste de coordonnées au lieu. En fait, cela suffit, vous pouvez exécuter un objet cartographique avec cela, vous n'avez pas d' erreur, cela signifie que tout fonctionne correctement. Vous avez maintenant un objet cartographique, mais ce n'est qu'un objet dans Python. Vous n'avez pas encore traduit cet objet en code HTML, CSS et JavaScript. Vous devez ensuite pointer sur cet objet cartographique. Ensuite, utilisez la méthode de sauvegarde, puis transmettez un nom pour le fichier de carte qui sera créé. Bien entendu, les cartes seront créées au format HTML. Le HTML est ce qui contient tous ces éléments qui rendent l'ensemble du navigateur. Texte et visuels, etc. Fermez le support, exécutez. Comme vous le voyez, un fichier a été ajouté ici, cartographiez un point HTML. Mais laissez-moi accéder au dossier, double-cliquez dessus, qui s'ouvrira dans votre navigateur par défaut. Ce n'est donc qu'un endroit aléatoire. Je ne sais pas ce que c' est. Île Magan. Cela semble être au Canada, tout au nord du Canada. C'est ça. Il s'agit de la carte Web. Si vous zoomez, vous verrez ainsi plus de détails sur la carte. Plus vous zoomez, plus vous voyez d'éléments. C'est ce que je voulais te montrer. Si vous voulez un autre emplacement, vous devez modifier les coordonnées dans cet emplacement. Mais si vous ne connaissez pas les coordonnées de votre lieu préféré, il existe peut-être différentes manières de le découvrir, mais le moyen le plus rapide est d' aller sur maps.google.com Disons que vous voulez savoir , laissez-moi zoomer ici. Vous souhaitez centrer la carte autour de cet emplacement, cliquer dessus avec le bouton droit de la souris et accéder à Qu'y a-t-il ici, copier ces coordonnées, copier ces coordonnées ou, si vous ne pouvez pas les copier, vous en souvenir ? 38,58 environ moins 99 fois 09 Ensuite, vous devez enregistrer à nouveau la carte, mapper un point ML et cela remplacera la carte précédente Allez ici, rechargez, vous voyez maintenant que le centre de la carte est différent Bien entendu, vous pouvez également jouer avec le zoom, vous pouvez donc ajouter un paramètre de zoom ici. C'est ce qu'on appelle le démarrage du zoom. Mettons-le à six heures. N'oubliez pas de fermer le support ici. Exécutez la flèche supérieure pour appeler une instruction précédemment exécutée, telle que map save. Vous pouvez également choisir d' accéder au navigateur et de la recharger avec Control R ou Command R, ce qui vous montrera la nouvelle carte avec un autre facteur de zoom Quoi qu'il en soit, c'est à peu près tout. Essaie de jouer un peu avec ça. Dans la prochaine conférence, je vais vous montrer comment ajouter des points à cette carte. Je vais voir le 90. HTML&Python Ajout d'un marqueur à la carte (PAS DE FILIGRANE): Bonjour, encore une fois, et bienvenue à cette nouvelle conférence. Dans cette conférence, vous allez apprendre comment ajouter des points à la carte que nous avons créée précédemment, c' est-à-dire celle-ci ici. Tout ce que nous avons ici est une carte de base, la carte d'arrière-plan, qui est une couche qui est en fait une couche provenant du service OpenStreet Map Les cartes Open Street vous donnent donc une couche. En fait, le volume vous servira cette couche en arrière-plan via JavaScript. Mais vous pouvez également ajouter d'autres couches, d'autres couches de base et également points que vous pouvez ajouter au-dessus de la couche de base. Permettez-moi de revenir au code. C'est ce que nous avons écrit dans la conférence précédente. En fait, nous l'avons écrit ici dans le shell interactif. Mais je le copie et je le colle dans le fichier pour que nous l' ayons et que nous puissions ajouter plus de code maintenant en plus de cela. Encore une fois, comme je vous l'ai dit, vous pouvez faire de l'aide sur la carte des points de volume et vous verrez que vous pouvez ajouter d'autres éléments ici, comme ici vous avez un paramètre. Vous pouvez ajouter des vignettes. Par défaut, les cartes routières sont ouvertes, mais si vous spécifiez une autre tuile, telle qu'une boîte de carte lumineuse, qui doit être entre guillemets, comme vous pouvez le voir ici, dans le paramètre tiles, cela attend un objet chaîne. L'emplacement, par exemple, s' attend à un renversement ou à une liste, et c'est ce que nous transmettons à une liste de coordonnées La largeur serait un entier, un entier, la hauteur. En tant que tel, vous avez également d'autres options , que vous pouvez essayer vous-même. Je veux juste essayer celui-ci pour le moment. Permettez-moi d'ouvrir un nouveau shell Python. Python 3 mappe 1, assurez-vous d'avoir enregistré l'exécution de votre script. Vous pouvez ensuite retourner dans le dossier et ouvrir la carte. Laissez-moi accéder à Farfox Control R ou Command R pour recharger et vous verrez que l'arrière-plan a changé Nous avons donc maintenant une nouvelle carte de base Revenons-en au script maintenant. Ce que je vais faire, c'est ajouter des marqueurs de points au-dessus du fond de carte. Comment faites-vous cela ? Eh bien, si vous faites le volume, vous pouvez voir ici que vous avez des objets et celui que nous voulons est un marqueur ou un marqueur circulaire. Je vais essayer les deux. Mais je voudrais vous expliquer la logique selon laquelle vous ajoutez des objets à l'objet cartographique. Dans le portfolio, nous créons un objet cartographique, puis entre l'objet cartographique et la méthode sécurisée de l'objet cartographique, vous pouvez ajouter des objets d'éléments à cette carte. Ce que je veux ajouter dans ce cas, c'est un marqueur. Je peux donc ajouter un enfant à la carte. Nous utilisons la méthode Adil pour ajouter des enfants. Les objets dont je parle sont appelés enfants lorsque vous les ajoutez à la carte. Mappez adchild, puis vous souhaitez pointer sur le marqueur de volume Maintenant, cette méthode de marquage attend elle-même certains arguments. Vous pouvez faire de l'aide au marqueur de point de volume. Créez un simple marqueur de dépliant boursier sur la carte. Leaflet est la bibliothèque JavaScript qui vous permet de visualiser cela C'est le moteur qui crée ces cartes dans le navigateur. Python crée un code JavaScript à l'aide la bibliothèque de feuillets et les marqueurs vous permettent d'ajouter des pop pops Lorsque vous cliquez sur un marqueur sur la carte, cela vous permet d'afficher informations et les paramètres dont vous avez besoin pour transmettre un paramètre de localisation au marqueur afin de le visualiser. Donc, l'emplacement est égal à deux. C'est une liste typique. Disons 38 points deux et -90 91 et vous pouvez également réussir Après la liste, je fais apparaître un poomètre qui peut être haut. Je suis un marqueur. Je dois également transmettre le paramètre icon, qui est en fait un autre objet provenant du point de volume. Vous vous attendez à ce que j'y passe une couleur, comme, disons, le vert. En gros, c'est ça. Assurez-vous que les crochets sont corrects. J'ai trois crochets, trois crochets fermants, un et deux, et trois crochets ronds ouvrants. OK. Enregistrez un script, accédez à l'autre terminal et exécutez-le. Accédez à Firefox pour le charger, et voici un marqueur. Si je clique, je reçois le message contextuel dans une belle fenêtre ici. C'est ainsi que vous ajoutez des marqueurs à votre carte. Cependant, je vous suggère de suivre une approche légèrement différente pour ajouter des enfants à votre carte. Ce que je suggère, c'est de créer un groupe de fonctionnalités, un volume de données, un groupe de fonctionnalités. Mais vous pouvez lui donner un nom comme ma carte. Ce qui se passe alors, c'est que dans ce groupe de caractéristiques, le marqueur est une entité avec des groupes de caractéristiques, vous pouvez ajouter plusieurs entités au groupe de caractéristiques. Vous pouvez donc ajouter un marqueur, vous pouvez ajouter des polygones, etc. Au lieu de dire carte, vous créez l'objet du groupe d'entités, la variable que j'ai créée ici, que je transmets ici. Ensuite, vous cartographiez un enfant. Et vous y transmettez le groupe de fonctionnalités. C'est plus que ça. Cela permet de mieux organiser votre code, et cela vous sera également utile ultérieurement lorsque vous souhaiterez ajouter une couche, une fonction de contrôle de couche dans votre carte pour vous permettre d'activer ou de désactiver les couches. Nous verrons cela plus tard. Enregistrez ce script et laissez-moi l'essayer. La page est assez basse. Nous n'avons donc aucune monnaie. Les choses fonctionneront de la même manière, ce qui signifie que le groupe de fonctionnalités fonctionne correctement. Mais comme je l'ai dit, il est bon de garder l'appel organisé et cela vous aidera également plus tard lorsque vous ajouterez une fonctionnalité de contrôle des couches. C'est ce que je voulais t'apprendre pour moment et je te parlerai plus tard. 91. 90. HTML et Python : utiliser des boucles pour ajouter des marqueurs multiples: Génial. Nous avons pu créer cette carte lors de la conférence précédente. Nous avons une carte de base et une fonction de marqueur ici. C'est notre code. Dans cette conférence, je vais vous montrer comment ajouter plusieurs marqueurs à votre carte. ce faire, l'une des manières de le faire est d' écrire cette expression plusieurs fois. J'aime bien ça, et bien sûr, il faut changer l' emplacement de ces marqueurs. Enregistrez le script et exécutez le rechargement Vous disposez ainsi de plusieurs marqueurs Comme vous le savez, il n'est pas possible d'ajouter plusieurs marqueurs avec une seule méthode. Avec une seule méthode de marquage, vous devez appliquer la méthode plusieurs fois. Cependant, ce n'est pas très intelligent à faire. C'est la beauté de la programmation. Vous pouvez utiliser une boucle for pour ajouter plusieurs marqueurs à la carte. Nous parlons de Python for loop, qui est l'une des fonctionnalités fondamentales de Python. Les quatre boucles n'ont rien à voir avec le volume. Disons que pour les coordonnées, bien sûr, vous aurez besoin de saisir les coordonnées. Je ne sais pas, comme ça. Disons une liste de listes. Nous avons ces deux coordonnées. Laissez-moi le copier. Mets-le là et une autre fois et laisse-moi les remplacer par neuf et sept. Ensuite, vous devez le mettre en retrait avec quatre espaces blancs. Je vais vous expliquer cela dans un instant. Ensuite, sur place, vous devrez transmettre les coordonnées. Avant d'expliquer le code, laissez-moi l'essayer. Exécutez, rechargez, nous avons toujours les marqueurs. Bien sûr, le lieu a changé par rapport au précédent car j'ai changé les coordonnées et ici. Alors, comment cela fonctionne-t-il ? Eh bien, j'itère avec une boucle for dans cette liste de listes Les éléments de la liste de cette liste principale sont deux autres listes. Les objets peuvent être n'importe quoi. Dans ce cas, il existe deux listes. Ce qui se passe, c'est que les coordonnées sont variables. Dans la première itération, il obtiendra ce premier élément de la liste, et il mettra cette petite liste, soit 32.2 Il mettra cette liste ici. En gros, cela sera mis ici. Plus ou moins. C'est l'idée. Ensuite, lors de l'itération suivante, les coordonnées récupéreront cette autre liste et la replaceront ici méthode du marqueur sera donc exécutée deux Ainsi, la première fois qu'il générera un marqueur avec ces coordonnées et la deuxième itération, il générera un marqueur avec ces coordonnées. C'est ça. Cependant, nous avons un petit problème ici. Le problème est qu'en réalité, vous ne pouvez pas simplement taper les coordonnées dans une liste Python. Supposons que vous ayez 1 000 coordonnées à cartographier sur une carte et qu'il soit difficile de les saisir ici ou même de les mettre en page, de les copier-coller à partir d'un document ici. La solution est que normalement, dans la vie réelle, vos coordonnées se présentent sous forme de fichier texte, comme un fichier texte séparé par des virgules, fichiers CSV, Excel, etc. Vous souhaitez charger ce fichier dans Python, puis ajouter les valeurs de ce fichier dans la méthode du marqueur. Vous pouvez le faire en utilisant une boucle for et comment le faites-vous exactement ? Eh bien, je vais expliquer cela dans la prochaine conférence. Je vais vous donner un fichier séparé par des virgules avec de nombreuses coordonnées, et nous allons l'utiliser dans ce script. Je te parlerai plus tard. 92. 91. HTML et Python : traitement de dossiers en ajoutant des marqueurs à partir de dossiers: Bonjour Dans le cours précédent, vous avez pu créer cette carte à l'aide de plusieurs marqueurs. se trouve que cette carte ne comporte que deux marqueurs, mais vous avez compris l'idée et le script était celui-ci ici Vous pouvez donc ajouter autant de paires de coordonnées que vous le souhaitez ici. Mais dans cette conférence, je veux vous montrer comment ajouter des paires de coordonnées à partir d'un fichier texte , ici, les volcans pointent TXT Si vous le souhaitez, vous pouvez simplement renommer le nom de ce fichier à partir de volcans qui envoient du texte aux volcans au format CSV, puis vous pouvez l'ouvrir dans un programme tel qu'Excel Si vous le souhaitez, vous pouvez l'afficher dans un fichier texte brut comme je le fais ici. Python peut lire à la fois les fichiers CSV et les fichiers texte. Ce que nous avons ici, ce sont des données sur les volcans. En gros, nous avons le numéro du volcan, qui est un identifiant, le volcan 020. Nous avons encore un autre numéro, alors comme vous le voyez, chaque colonne, nous avons des colonnes dans ce fichier de données et chaque colonne est séparée par une virgule Il s'agit du nom de la première colonne, la première valeur de la première colonne est celle-ci ici, puis le nom de la deuxième colonne. La première valeur de la deuxième colonne est celle-ci ici, puis la deuxième valeur de la deuxième colonne est cette réponse, puis nous avons une colonne de nom, le nom du volcan et ici. Désolé, le nom est ici, Baker, puis la virgule commence ici, ce qui signifie que l'emplacement est celui-ci ici, États-Unis Washington Ensuite, vous avez l'historique du statut du premier volcan, puis nous avons l'altitude, qui est celle-ci ici. Je ne sais pas si c'est en pieds ou en mètres, mais vous pouvez le découvrir. Si vous êtes curieux, vous pouvez faire une recherche sur ce volcan en particulier et comparer son altitude. Quoi qu'il en soit, nous avons une sorte de volcan. Vous avez un calendrier, qui est de trois jours, je ne sais pas ce que cela signifie, de quatre jours. Enfin, c'est ce qui nous intéresse. Nous avons les colonnes lates et longues. C'est tard, ce qui signifie latitude et longitude du volcan. Vous avez donc besoin de ces deux valeurs numériques pour cartographier les entités, les volcans, sur une carte, dans ce cas, sur une carte volumique Cela en compte environ 63, en fait 62 63 en incluant l'en-tête des données. Comment intégrer cet automne à Python ? Eh bien, pour le charger , utilisez Python. Laissez-moi vider le terminal et vous devrez d' abord installer une bibliothèque très utile appelée Pandas Nous utiliserons cette bibliothèque plus tard. Je ne vais donc pas expliquer les pandas en détail pour le moment, car nous n'utiliserons qu'une ou deux de ses fonctions, que j'expliquerai dans cette conférence Allez-y et installez des pandas si vous n'en avez pas. Installez des pandas ou PIP, installez pandas en fonction de la façon dont vous avez configuré Python, puis vous pouvez ouvrir une session Python Importez des pandas. La façon de charger un fichier avec Pallas est pointer sur Pallas qui lit CSV, volcanos TXT, et de vérifier que votre session Python a été ouverte dans le répertoire où se trouve le fichier TXT de votre volcan Par exemple, ma session se trouve dans le dossier de mappage, qui est celui-ci ici, donc je peux simplement transmettre un nom de fichier. Sinon, vous devrez peut-être transmettre le chemin absolu du fichier, qui commence par C slash, etc., selon le système d'exploitation dans lequel vous vous trouvez, puis l'exécuter appeler les données et vous obtiendrez les données imprimées comme ça Panda est en fait le fichier CSV lu qui faire la distinction entre ces virgules, où se trouvent les virgules, et de créer un format de données structuré sur le Web avec Si vous descendez ici, vous avez quelques colonnes ici, colonne, colonne, puis jusqu'à la fin. Ensuite, vous avez d'autres colonnes car Python ne peut pas imprimer en fait, le terminal ne vous permet pas d'avoir toutes les colonnes en une seule dans cette zone car ce serait trop. Quoi qu'il en soit, vous avez le statut, l'élévation, type timeframe, le lat et le long C'est une question de données. Vous devez maintenant trouver un moyen d'itérer dans ce bloc de données. C'est ce qu'on appelle une trame de données. L'objet de données est appelé trame de données. Vous pouvez vérifier son type en fait. Trame de données PanascFrame. à quoi je pense, c'est de créer deux listes à partir de ces colonnes de blocs de données pour placer la colonne de latitude dans une liste Python et la colonne de longitude dans une autre liste Python afin d'avoir un objet Python natif, qui est une liste, puis de parcourir cette liste en utilisant les quatre boucles Laisse-moi essayer de le faire. Importez des Pandas, puis créez l'objet du bloc de données En chargeant les données, j'ai lu CSV volcano TXT, c'est tout. Comment convertir une colonne de dataframe en liste ? Eh bien, pour ce faire, il suffit de saisir, disons données légales L ou T, puis le nom de la colonne, qui est LT, afin que vous puissiez obtenir une liste de colonnes d'ailleurs, en faisant des colonnes de points de données. Ici, vous voyez, vous avez une colonne plate et une longue colonne. Ensuite, vous faites cela revient à le lister le lister entre crochets, fermez-le. Ce que vous avez fait ici, ce sont des données avec un seul attribut, nous renvoyons un objet sérieux. Mais cet objet sérieux, nous le convertissons en une liste négative Ce sera une liste Python. Cela apparaîtra également sous la forme d'un objet similaire. Il s'agit d'un objet sérieux. Il s'agit d'une liste, mais je préfère travailler sur une liste car travailler sur listes est plus rapide que sur des séries de blocs de données. L'idée est d'avoir deux listes ici. Cela équivaut à une liste sur une copie collée ici, il va de même pour la longitude Dernière et longue liste. Nous devons donc faire attention à la façon dont nous parcourons ces deux listes car nous avons deux listes contenant chacune 62 éléments Vous pouvez le vérifier en utilisant un ici, ici, ici, qu'il y ait 62 éléments et il en va de même pour la liste de longitude. Cela signifie que le premier élément de la liste de latitude correspond au deuxième élément de la liste de latitude, désolé, de la liste de longitude. Les deux premiers éléments constituent le premier emplacement du premier marqueur. Cela signifie que dans la première itération, nous devons extraire les deux emplacements En fait, cette structure ne sera plus appropriée. Ce que vous devez faire, c'est passer en revue , disons, les variables lat et loan. Lorsque vous parcourez deux listes en même temps, vous devez utiliser la fonction zip puis elle passe à la dernière position. En gros, voici ce que fait cette fonction. Disons pour I, J et Zip. Supposons que la première liste soit 123. Le second est 456. Print, J. et moi, voilà ce qui arrive. Cette boucle parcourra ces deux listes en même temps. Ce qui se passe, c'est que je vais passer en revue le premier élément de la première liste tandis que je vais passer en revue le premier élément de la deuxième liste. Dans la première itération, un et quatre sont extraits. Un, ici, et quatre ici. Et vous pouvez effectuer une telle extraction en utilisant la fonction ZIP. Sinon, vous ne pourrez pas le faire si vous n'utilisez pas la fonction ZIP. ZIP distribue donc en quelque sorte les éléments un par un. Et il en va de même ici, LT obtiendra le premier élément de cette liste. L one obtiendra le premier élément de cette liste. Et puis ici, ce que vous devez faire, c'est construire une liste avec LT et LN. Oui, c'est ça. Enregistrez le script, rendez-vous sur le terminal pour l'exécuter. Il n'est pas ici, le terminal. Je quitte juste ça. Python 3, cartographiez un point de coupe. Aucune erreur, allez dans Firefox et rechargez. Je n'ai aucun marqueur pour une raison ou une autre, mais je n'ai pas reçu d'erreur. C'est l'un de ces scénarios où aucune erreur ne s'affiche dans le terminal. Dans ce cas, vous devez vérifier soigneusement votre code. Trois panneaux de données CSV, sans parler des données. Voici l'erreur. Ce qui se passe, c'est que j' assigne la mauvaise colonne à la liste des latitudes Permettez-moi de modifier la commande et de réessayer. Ne vous laissez donc pas intimider par les erreurs. Des erreurs se produisent tout le temps. Il vous suffit d'être de sang-froid, de lire les erreurs si vous obtenez une erreur ici et regarder attentivement le code Laisse-moi recharger. J' ai des marqueurs maintenant. Ce sont les emplacements des volcans dans le nord des États-Unis, en fait, aux États-Unis OK. Ils ont également cette fenêtre contextuelle, qui fonctionne bien, mais je suppose que vous ne l'aimez pas beaucoup car elle ne montre aucune information. Ce que nous devons faire ici, c'est rendre cette fenêtre contextuelle dynamique afin qu'elle affiche des informations réelles. Je vais vous montrer comment créer des fenêtres contextuelles dynamiques dans la prochaine vidéo. Parle-toi là-bas. 93. 93: Bonjour, encore une fois. Dans cette vidéo, je vais vous montrer comment ajouter les valeurs d'altitude. Ceux-ci sont là dans la fenêtre contextuelle. Actuellement, notre script affiche simplement cette chaîne dans la fenêtre contextuelle. Nous allons changer cela. Pour ce faire, vous devez d'abord charger les données altimétriques dans une liste Python. Ensuite, dans la boucle, vous voulez dire, disons L dans Z plat un Lv comme ça Ici, dans l'argument pop pop, vous transmettez l'attribut L. Encore une fois, nous créons une liste nommée F, variable LV. Ce sera une liste de toutes les altitudes, puis nous parcourrons ces trois LT obtiendra le premier article à louer, LN obtiendra le premier article à louer, L obtiendra le premier article de LF et ces articles seront distribués dans cette fonction ici. LT ici, LN ici et L ici, EL ici. Maintenant, je veux enregistrer ceci et exécuter, mais je m'attends à une erreur. Je veux que vous voyiez l'erreur afin que vous vous familiarisiez également avec la gestion des erreurs. L'erreur se produit sur la ligne 14. Dans ce fichier, cartographiez un point pi, qui est notre fichier, la ligne 14 est ici. Il s'agit d'une ligne, puis nous avons chez child Pop Up. Il semble que cette erreur soit liée à un objet contextuel. Je dirais que ce n'est pas un très bon message d'erreur en fait. Il est difficile de lire cette erreur et de la résoudre. Ce n'est pas une très bonne information donnée par volume ici, mais de toute façon, nous avons quelques indices. Pop dit name child name attribute ou NupiFlow 64, objet n'a pas d' attribut, obtenez le Il semble que le volume essaie d'appliquer cette méthode get name, qui est une méthode intégrée à la base du code du volume, et qu'il essaie de l' appliquer à un nombre. Je pense que ce L ici est en fait un chiffre. Je peux vérifier cela en disant type d'impression, enregistrer et exécuter le script Encore une fois, voici un type. Il s'agit d'un num pi float 64. En gros, il s'agit d'un type flottant. Il s'agit en fait d'un float spécial de la bibliothèque numpi. Quoi qu'il en soit, vous pouvez l' appeler un char. C'est donc un nombre, pas une chaîne. Mais si vous regardez help sorry, help volume, point marker, vous verrez que le paramètre pop up attend une chaîne de votre part en entrée. Mais au lieu de cela, vous transmettez un nombre flottant. Donc tu ne veux pas faire ça. Ce que vous voulez faire est simple, il vous suffit de convertir ce numéro de flux en chaîne. Enregistrez le script. Va au terminal. Exécutez à nouveau. Accédez à Firefox, rechargez et l'altitude s'affichera correctement. Oui, c'est à peu près tout. Vous pouvez également vouloir styliser ce que vous affichez afin d'y ajouter des informations supplémentaires, telles que des compteurs d'espace J'ajoute la chaîne à toutes les informations de la fenêtre contextuelle pour tous les numéros d'altitude. Nous parlons de 2 447,0 mètres. C'est l'altitude du volcan. Oui, c'est l'idée. J'espère que c'était clair et je vous parlerai plus tard. 94. 93. Utiliser les fonctions - Créer une fonction de génération de couleurs pour les marqueurs ++: Bonjour encore une fois et bienvenue à cette nouvelle conférence. Ce que nous avons jusqu'à présent, c'est cette carte avec ces 62 marqueurs, chacun représentant emplacement d'un volcan aux États-Unis. Cependant, cette carte n'est pas très intelligente, c'est-à-dire les seules informations qu'elle transmet sont les emplacements des volcans Et vous avez également une carte de base. Cette carte présente également un avantage, car vous pouvez extraire de telles informations en cliquant sur les icônes. Cependant, vous souhaiterez peut-être transformer cette carte pour afficher un attribut plutôt que simplement l'emplacement des volcans. ce faire, il peut y avoir différentes méthodes, cela dépend de vos connaissances en matière de cytographie, mais je pourrais faire en sorte que la carte montre un attribut ici Par exemple, je pourrais modifier les couleurs de ces marqueurs pour afficher réellement la plage d'altitude. Disons que nous pouvons classer ces marqueurs en trois couleurs. Supposons que le vert, l'orange et le rouge, vert indiquerait des altitudes 0 à 1 000 mètres, par exemple, ou 2 000 mètres et orange de 2 000 à 3 000 mètres, puis les marqueurs rouges représenteraient des volcans d'une altitude supérieure à Alors, comment faire cela avec le volume ? Revenons-en à Atom. Voici notre code, celui que nous avons jusqu'à présent. Actuellement, ce que nous passons à l'argument icône est un argument couleur avec une valeur verte. En gros, ce que nous devons faire, créer cette dynamique pour que la couleur change en fonction de l'altitude. Malheureusement, nous ne pouvons pas le faire avec les volumes. Volume ne possède pas de fonctionnalité native permettant de créer des couleurs dynamiques pour vos marqueurs. Par conséquent, nous devons faire preuve d'un peu créativité et utiliser les fonctionnalités de base de Python pour ce faire. Quand on pense à la dynamique, je pense aux fonctions. En gros, cette boucle passe par la latitude, la longitude, l'altitude, puis elle transmet ces trois valeurs dans cette expression ici. Cependant, la couleur est toujours transmise sous forme de chaîne. Mais comment le modifier en fonction de l'altitude, par exemple ? Eh bien, pour ce faire, il faut créer une fonction, une fonction qui obtient l'altitude en entrée, puis effectue certaines actions à l'intérieur de la fonction, puis qui renvoie une couleur en fonction de la valeur d'altitude. Vous pouvez dire, si l'altitude est inférieure à cela, donnez-moi la couleur verte, une chaîne verte ici. Et ainsi de suite. Pour vous donner une idée, la façon dont cela fonctionnerait est me laisser écrire la fonction ici. Ce serait un bon endroit pour le faire avant de créer un objet cartographique. Mais vous devez toujours créer une fonction car je vais appeler la fonction ici, vous devez donc créer la fonction avant cette expression à partir d' ici et vers le haut. Je vais le créer ici. Appelons une fonction, appelons un producteur. Restons simples pendant un moment, juste pour vous montrer comment cela fonctionnerait. Restons très, très simples. Disons Return Green. Si vous le remplacez color producer et que vous n' oubliez pas les crochets, en passant des crochets, cela signifie que vous appelez la fonction. Si vous ne passez pas les crochets, cela signifie que vous appelez simplement nom de la fonction et que vous n'exécutez pas la fonction. Je vais juste le garder comme ça et exécuter la carte à un point pi. C'est bon. Rechargez et vous obtiendrez la même chose Parce que c'est ce qui se passe. Ce truc, cette fonction, le charbon, sera égale à ce que vous renverrez ici. Le type de cet objet est en fait une chaîne. C'est exactement le fil vert. Par conséquent, vous pouvez maintenant ajouter des conditions ici. En gros, vous devez passer une entrée ici, altitude, laissez-moi écrire la variable que vous voulez, écrire altitude et ici, vous devez passer L. L pour letlon L, disons que nous avons 62 lignes dans la table de données et que la boucle passe par la première ligne de la table Il obtiendra une altitude et la transmettra à cet appel de fonction. La fonction passera L en altitude, puis vous dites ici que si l'altitude est inférieure à 1 000, si l'altitude est inférieure vous souhaitez revenir au vert pour une altitude inférieure à 1 000 mètres. altitude d'une feuille se situe entre 1 000 mètres, elle est supérieure à 1 000 mètres ou inférieure à 3 000 mètres. Renvoyez l'orange. Sinon, retournez en rouge. Le rouge sera renvoyé si aucune de ces conditions n' est satisfaite, ce qui signifie que l'altitude n'est ni inférieure à 1 000 mètres ni inférieure à 1 000 à 3 000 mètres Ce qui reste est donc supérieur à 3 000 mètres. Dans ce cas, nous retournerons le rouge. Pour découvrir ces valeurs, vous devez en fait explorer un peu les données. Par exemple, vous souhaiterez peut-être examiner les données rapidement de cette manière pour voir quelles sont les valeurs que vous avez. Ensuite, décidez du seuil de catégorie. Mais vous pouvez également effectuer analyse statistique plus significative vous pouvez créer un histogramme et voir la distribution des données , puis décider de ces valeurs Mais restons simples et décidons de ces valeurs. Je vais résoudre cette vérification si tout est en place rapidement. Laisse-moi essayer le code. Va recharger. Nous avons quelques couleurs différentes ici. Ouais. Ça a l'air bien. Permettez-moi de vérifier les valeurs. Par exemple, l'orange se situe entre 1 000 mètres et 3 000 mètres. Nous nous en sortons bien. Le rouge est au-dessus de 3 000 mètres. Il semble que cela fonctionne. 95. 94. HTML et Python : comment ajouter et styliser des marqueurs: C'est bon. J'espère que vous aurez résolu l'exercice, mais ne vous inquiétez pas si votre carte est un peu différente de la mienne. Bref, voici mes marqueurs, des marqueurs circulaires, en fait. Et j'ai des marqueurs verts, oranges, rouges et oranges. Tu as compris l'idée. Et ils ont également une sorte d'opacité J'ai donc défini une valeur d' opacité de 0,7, ce qui représente 70 % pour eux. Comme vous le voyez, vous pouvez voir le marqueur qui se trouve en dessous de celui-ci ici. Quoi qu'il en soit, voici un code. Permettez-moi de vous expliquer ce que j'ai changé par rapport au code d'origine par rapport au précédent. J'ai remplacé le marqueur par le marqueur circulaire. L'emplacement reste le même. L'attribut pop up reste également le même. Et puis j'ai ajouté ici un rayon de six, ce qui signifie six pixels. C'est la taille de ces marqueurs circulaires. Ensuite, j'ai ajouté une couleur de champ. L'attribut de couleur du champ concerne la zone intérieure du cercle. Vous voyez cette zone orange, mais vous avez également cette couleur extérieure que j'ai définie sur le gris et vous le faites avec l'argument couleur. La couleur est égale au gris pour tous les marqueurs. La couleur par défaut sera le noir, ce qui, à mon avis, est un peu lourd pour les yeux. Quoi qu'il en soit, voici une opacité du champ. Pour ce qui est de la transparence, je l'ai dit à 0,7, et c'est tout. J'espère que c'est clair maintenant et je vous parlerai plus tard. 96. 95. HTML et Python : travailler avec des données JSON: Bonjour, bienvenue à nouveau. Dans cette conférence, je vais vous montrer comment ajouter une autre couche à cette carte. Actuellement, nous avons deux couches. Nous avons la carte de base, composée de tuiles par boîte de carte, que vous pouvez voir ici, et les données sont diffusées par OpenStreet Map Vous avez également votre couche personnalisée, qui est une couche contenant des marqueurs circulaires Dans les systèmes d'information géographique SIG, ces couches sont appelées couches. J'aimerais maintenant ajouter une troisième couche à ma carte, qui sera une couche polygonale Cette couche actuelle avec des marqueurs peut être appelée couche de points. Vous avez également des couches de lignes et des couches de polygones. Avec les points, il est préférable que les points représentent des emplacements et vous avez des lignes, les lignes sont idéales pour représenter des entités géographiques qui ressemblent à des lignes telles que des routes et des rivières. Ensuite, nous avons des polygones. Les polygones sont les meilleurs pour représenter des zones. Par exemple, dans cette conférence, je vais vous montrer comment ajouter une couche, une couche polygonale qui représente la population mondiale par pays Les pays sont représentés sous forme de zones. Et ce que nous allons faire, c'est chacun des pays aura une couleur spécifique qui indiquera la population de ce pays. Points pour les emplacements, lignes pour lignes et polygones pour les surfaces Bien entendu, vous avez besoin de certaines données pour créer une couche de polygones Tout comme nous l'avons fait avec les marqueurs, nous disposions de certaines données au format CSV au format texte. Ensuite, nous utilisons ces données, nous les ouvrons avec des pandas , puis nous avons parcouru ces lignes de données et nous avons ajouté les marqueurs à la carte Maintenant, pour les polygones, la méthode pour ajouter des polygones via le volume consiste à utiliser la méthode GeoJSON à point de volume En gros, permettez-moi de faire de la place ici, car cela fonctionnerait comme suit. Vous souhaitez ajouter une variable de groupe de fonctionnalités ici, vous souhaitez ajouter un enfant, qui serait un objet Geo JSON en volume Il s'agit de la méthode avec des crochets ici. Cela crée un objet GeoJSON. Pour les données GeoJSON, nous utiliserons ce fichier JSON à points mondiaux. Vous pouvez le trouver en pièce jointe dans cette conférence. Laissez-moi vous expliquer ce que c'est, mais attention à ne pas l'ouvrir sur Atom car si votre ordinateur est un peu lent, votre atome risque de se bloquer. Essayez de l'ouvrir avec un éditeur plus léger tel que Notepad, par exemple, ou CAT sur un terminal Linux ou Mac Quoi qu'il en soit, il s'agit du fichier JSON. Vous pouvez l'appeler JSON ou GeoJSON. En fait, GeoJSON est un cas particulier de JSON. En gros, le format est toujours le même. Il commence par des crochets et contient essentiellement une chaîne qui ressemble à un dictionnaire Python avec des clés et des valeurs Les clés sont la clé et la valeur où se termine ce crochet frisé quelque part ici, je crois, si je ne me trompe pas Maintenant, celui-ci s'arrête là. Ouais. Ensuite, vous avez l'autre géométrie clé. Qu'est-ce que la géométrie ? Eh bien, le type de géométrie est multipolygonal. En gros, vous disposez de ces attributs qui décrivent les données. Entrez les coordonnées de plusieurs polygones. Cela commence maintenant à décrire les entités, les polygones Il s'agit des coordonnées du premier polygone qui sera affiché sur la carte Supposons qu'il s'agisse d' un pays spécifique Antigua-et-Berbuda Un petit pays, mais quand même. Il s'agit des coordonnées qui détermineront l'emplacement du polygone sur votre carte En gros, le volume lira toutes ces informations et décidera où placer les polygones Ensuite, vous pouvez également utiliser d'autres attributs tels que la population, qui est ici, vous allez utiliser cette valeur de population pour mettre une couleur pour cette population. Et ainsi de suite, vous avez tous les pays du monde dans ce fichier JSON. Passez quelques minutes à regarder ce fichier pour comprendre sa structure. Dans la prochaine conférence, je vais charger le fichier JSON dans Python et afficher la couche de polygones On se voit là-bas. 97. 97: Génial. Dans la conférence précédente, je vous ai montré à quoi ressemble un fichier JSON. Dans cette conférence, je vais ajouter ce fichier JSON au code. N'oubliez pas que je vous ai fourni le fichier JSON. Lors de la conférence précédente, vous pouviez le télécharger à partir des ressources de la conférence. Cette méthode GeoJSON obtient donc un attribut de données égal à l'objet de fichier des données JSON En gros, vous devez créer un objet de fichier Python que vous pouvez créer avec open. N'oubliez pas que open est une méthode Python classique pour créer des objets de fichier. Le chemin passe au-dessus du fichier. Il se trouve que c' est dans le même répertoire que mon script Map one point py. Je suis juste en train de passer devant World JCO. Je l'ouvre essentiellement en mode lecture. Je vais le laisser comme ça pour le moment, enregistrer, exécuter. Je pense que nous allons avoir une erreur ici. Oui, nous devons y ajouter un paramètre d'encodage comme suggéré par le message d'erreur. Cela fait partie de la méthode ouverte. Correspond à huit SIG UTF. Encore une fois, lancez le chargement, et les polygones sont affichés sur la carte C'était assez facile à faire. Vous devez savoir que vous pouvez également ajouter des points via GeoJSO Dans ce cas, nous ajoutons des polygones, mais ce fichier JSON peut également avoir des lignes ou des points dans ses attributs Dans celui-ci, nous avions un attribut qui indiquait qu'il s'agissait plusieurs polygones, mais cela pouvait être des points ou Dans ce cas, le volume affichera ces fonctionnalités en fonction de cet attribut de type ici. Bien entendu, vous auriez également l'attribut de coordonnées avec les coordonnées de la ligne. Aux points où la ligne se brise et tourne dans le cas de points, vous auriez des paires de coordonnées ici. J'espère que tu as compris l'idée. C'était à propos de cette conférence. Dans la prochaine conférence, je vais vous montrer comment créer une carte choroplèthe, c'est-à-dire une carte qui utilise coloration de zones pour représenter des entités Dans ce cas particulier, nous aurons ces polygones différentes couleurs pour représenter la population du monde pour quel pays Nous le ferons lors de la prochaine conférence. À bientôt. 98. 97. Python et JSON : styliser la couche de population: Bonjour, encore une fois. Dans cette conférence, je vais vous montrer comment créer une carte pays par population. Nous montrerons la population de chaque pays à travers des couleurs graduées. Nous allons donc réfléchir à une gamme de couleurs pour représenter la population, du plus faible au plus élevé. Nous avons cette information dans notre fichier JSON w point, qui est stocké dans cet attribut pop 2005. Pop 2005 signifie population de 2005, ce qui est assez vieux, mais cela ne devrait pas poser de problème à des fins éducatives. Revenons donc au code et à la manière de changer la couleur de ces polygones, car par défaut, nous avons cette couleur verte Il y a également de la transparence sur les polygones. Vous pouvez voir la carte de base en arrière-plan. Pour changer cela, vous devez accéder à l'argument de la fonction de style. Mais j'ai oublié quelque chose de la conférence précédente, ce qui pourrait poser quelques problèmes plus tard Il n'est pas nécessaire que ce soit entre crochets, alors supprimez-le également ici. Nous avons donc un, deux, trois crochets ouverts et trois crochets de fermeture. Maintenant, ça devrait aller. Nous devons ajouter un autre argument à GeoJSON C'est le premier argument. Les données sont le premier argument qui se termine ici. Ajoutez-y un autre argument de fonction de style, et vous pouvez réellement couper la ligne ici. Vous êtes libre de couper des lignes en Python lorsque l'expression est entre crochets, carrés ou bouclés Dans ce cas, cette expression est entre crochets, nous pouvons donc la casser et il est bon de la casser par une virgule La fonction de style est égale à, maintenant cela attend une fonction Lambda. Les fonctions Lambda sont comme les fonctions, les fonctions normales, mais elles sont écrites en une seule ligne de code Par exemple, disons que L est égal à Lambda. Il s'agit d'une fonction Lambda X en puissance de deux. Oh, désolée, j'ai eu une faute de frappe, pas et bub mais de l' agneau. Une autre A est une fonction ici, tout comme vous auriez une fonction normale, puis vous pouvez appeler L. Vous pouvez transmettre une valeur telle que cinq et cela renverra cinq puissance de deux. Comme vous pouvez le constater, vous pouvez écrire la fonction sur une seule ligne. Cela peut également être utile dans d'autres cas comme celui-ci que vous verrez dans un instant. Lambda X. Cela vous permet également d' écrire des fonctions anonymes Cette fonction n'a pas de nom. Comme ici, j'ai attribué un nom à cette fonction car je devais l'appeler plus tard. Mais celui-ci, nous n'avons pas besoin de l'appeler plus tard, vous n'avez donc pas besoin de donner un nom. Ici, la syntaxe serait correcte si je le faisais comme ça. Allons-y et faisons-le. Remplissez la couleur avec un C majuscule, un F minuscule, majuscule et cela devrait être Disons, jaune. Maintenant, si tu veux, tu peux le laisser comme ça. Enregistrez le script. Quittez le shell Python et exécutez le script. L'exécution s'est bien passée. Laissez-moi vérifier la carte, rechargez-la et vous verrez que les couleurs des polygones passent au C'est ainsi que vous pouvez modifier les attributs de votre fichier JSON. Autrement dit, vous ajoutez cet attribut qui ne se trouve pas dans le fichier JSON si vous le recherchez. Vous n'y trouverez rien. Vous pouvez maintenant contourner ce problème en ajoutant des conditions dans ce dictionnaire, telles que I X properties Pop 2005 est inférieur à 10 millions, dix, un, deux, trois, un, deux, trois, un, deux, trois Ce que je fais ici, c'est que je dis que définissez le jaune sur la cinquième couleur si X représente l'entité adjacente ici. Si les propriétés sont réellement l'attribut Pop 2005 de cet attribut de cet attribut qui se trouve ici, s'agit de Pop 2005. Je sais que c'est un peu compliqué. Laissez-moi prendre une enveloppe logicielle. Maintenant, j'ai tous les textes enveloppés ici dans la vue et Pop 2005 fait en fait partie de ce dictionnaire jusqu'ici Ce dictionnaire est un ensemble de propriétés. Ce dictionnaire est la valeur de cette clé de la clé de propriétés. Cela signifie que nous accédons à la valeur du schéma d'hélice en utilisant cette syntaxe , connue en Python Pendant ce temps, les propriétés X, ce que c'est X ici, représentent des fonctionnalités. Vous accédez donc aux propriétés à partir des fonctionnalités. arrière-plan, c'est un peu une boîte noire, mais volume, ce que fera le volume, c' est qu'il passera en revue toutes les caractéristiques de tous les polygones et vérifiera si la valeur de pop 2005 est inférieure à 10 millions, et si c'est le cas, il définira cette couleur pour remplir l'attribut de couleur C'est plus ou moins le problème. Je pense qu'il vaut mieux mettre ce vert. Si c'est moins de 10 millions, mettez-le en vert ou en orange. Si vous êtes entre 10 millions, faites la même chose ici. Propriétés, en fait, vous pouvez déchiffrer le code ici. Donc, Properties Pop 2005 mettons ici 20 millions. Ce ne sont que des chiffres arbitraires. Vous pouvez mettre tout ce que vous voulez, mais cela affectera la façon dont vos polygones sont classés Pour une population de 10000000-20 millions d'habitants, nous aurons des couleurs orange Sinon rouge. Tout ce qui dépasse dix sera coloré en rouge. Sauvegardez ceci et j'espère que cela fonctionnera. Aucune erreur. Rechargez. Nous avons les États-Unis colorés en rouge parce qu'ils ont une population de plus de 20 millions d'habitants, cela semble bien fonctionner. Oui, Portugal Le Portugal a une population d' environ 12 ou 15 millions d' habitants. Je ne suis pas sûr. Il se situe dans le milieu de gamme de notre algorithme de classification. c'est plus ou moins ça, et si tu veux, tu peux poser des questions. Je serais heureuse de vous aider et je vous parlerai plus tard. Merci. 99. 98. Python et JSON : ajouter un panneau de commande de couche +: Bonjour, et bienvenue à nouveau à une autre conférence sur la cartographie Web avec Python et volume. Il s'agit de la carte pour laquelle nous l'avons créée. Elle contient une couche de base, une couche de polygones et une couche de marqueurs . C'est notre code. Maintenant, ce que je veux faire dans cette conférence, implémenter une fonctionnalité qui me permet d'activer et de désactiver les couches personnalisées. concerne les couches personnalisées, je parle de la couche polygonale et la couche de marqueurs, car il n'est pas possible de désactiver la carte de base, du moins pour autant que je sache Cela n'aurait aucun sens de désactiver la couche de base. Tu ne veux pas une page blanche. Voyons donc comment procéder. La principale caractéristique ici est classe de contrôle de couche du module de volume, qui peut être ajoutée comme ceci. Vous souhaitez pointer sur l'objet cartographique auquel vous souhaitez ajouter un enfant. Le contrôle des couches est ajouté en tant qu'enfant. Contrôle de la couche de volume. Maintenant, cela ne fonctionnera pas. Mais je veux quand même l'exécuter pour que vous ne commettiez pas cette erreur plus tard. Permettez-moi de recharger la page. Vous ne voyez que la carte de base ici, aucune couche. Cela ne fonctionne pas parce que lorsque vous avez ajouté le contrôle des couches à la carte, vous n'aviez toujours pas ajouté le groupe d'entités, qui est un objet contenant la couche Jason et la couche de marqueurs. Donc, en gros, pour contrôler les couches, nous rechercherons le groupe d'entités ajouté à la carte, mais il ne le trouve pas pour le moment. Par conséquent, les choses se gâtent. Il est important de placer cette offre : vous avez ajouté la couche de groupes d'entités sur la carte ici. Exécutez à nouveau. Rechargez la carte et vous verrez les couches qui s'y trouvent et vous verrez cette boîte ici Boîte à cartes lumineuse. Il s'agit de la carte de base et vous ne pouvez pas la désactiver. Vous avez également cet élément Ma carte ici dans le panneau de contrôle des couches. Il s'agit du panneau de configuration de la couche et vous pouvez activer ou désactiver cette couche. Mais comme vous le voyez, cela désactive et active à la fois le polygone et la couche de points, ce que vous ne voulez pas Nous allons de l'avant et changeons cela. Je vais expliquer pourquoi cela se produit. Cela se produit parce que le contrôle des couches, ce qu'il fait, c'est rechercher les objets ajoutés à la carte avec un enfant, comme ici. Vous avez ajouté un enfant et vous n'avez ajouté qu'un seul enfant à l'objet cartographique. Par conséquent, le contrôle des couches considérera cet objet comme un élément unique du panneau de contrôle des couches. Mais cet objet de groupe d'entités contient des marqueurs de cercle, mais il contient également la somme GOJ Couche. Par conséquent, vous devez modifier votre stratégie ici. Comment peux-tu faire ça ? Il peut y avoir différentes manières. L'une des solutions consiste à créer un groupe de fonctionnalités pour les volcans. Appelons-le Fg V. Vous ajoutez GV ici et vous voulez un autre groupe vedette Permettez-moi de copier cette ligne, de la coller ici. Vous voulez un autre groupe d'entités pour la population. Appelons cette population. Appelons cela des volcans comme ça, changeons le nom de la variable FGP, FGP ici, FV là Ajoutez un lapachild qui doit être FG P pour la population. Maintenant, tout semble bon. Voyons si le contrôle des couches sera désormais en mesure de lire ces deux groupes d'entités. Allez-y et rechargez la carte, ça va. Les volcans fonctionnent bien, la population aussi. Tout fonctionne bien. Il s'agit d'une carte. Si vous avez pu le construire comme je l'ai fait, alors bon travail. Vous pouvez également choisir de ne pas utiliser réellement de groupes de fonctionnalités. Vous auriez pu ajouter directement GeoJSON à la carte. Toutefois, dans ce cas, pour les volcans où vous exécutez la méthode at child plusieurs fois, vous aurez une couche pour chaque volcan Vous auriez ajouté 62 enfants à votre objet cartographique si vous aviez créé une carte sans groupe d'entités ici. Cela signifie que dans ce panneau de configuration, vous auriez 62 entrées, 62 couches, et ce n'est pas ce que vous voulez. Le groupe de fonctionnalités est utile ici. Pour les volcans, c'est nécessaire. Mais pour GeoJSON, vous auriez pu utiliser la carte ici et tout irait bien. Mais pour des raisons de cohérence, il est bon d'ajouter les deux à des groupes de fonctionnalités spécifiques. Des volcans ici et de la population ici. Voici donc le code, et j'espère que vous avez apprécié ce programme et n' hésitez pas à poser des questions. Je te parlerai plus tard. À bientôt. 100. 99. App 2 : thésaurus anglais +: Bonjour et bienvenue dans cette nouvelle section du cours, et c'est dans cette section que commence la vraie affaire. Dans cette section, nous allons donc développer la première application du cours. Jusqu'à présent, vous avez étudié les bases de Python. Vous apprenez les fonctions, les boucles, les conditions, la gestion de fichiers, etc. Nous allons maintenant mettre en pratique tous ces concepts en créant de vrais programmes qui peuvent être utilisés par les utilisateurs au lieu de simplement parcourir des chaînes et des nombres triviaux, etc. Alors, qu'allons-nous construire dans cette section ? Eh bien, vous allez créer un programme dans lequel vous pouvez donner un mot, un mot anglais, et le programme renverra la définition de ce mot en anglais. Permettez-moi donc de vous présenter le programme. J'utilise Python 3. App point p est un script. Le programme vous demande donc de saisir un mot dont vous souhaitez obtenir la définition. Par exemple, disons Mountain. Vous obtenez ainsi la définition de la montagne. Et dans ce cas, il se trouve qu' il y a deux définitions. La montagne est donc une caractéristique de la surface de la Terre qui s'élève au-dessus de la base. R, la montagne a une autre signification, qui est un grand nombre de choses qui ne sont pas empilées. Quoi qu'il en soit, il y a des mots qui n'ont qu'un seul sens, comme les mathématiques. Oui, j'espère. Vous n'avez donc qu'une seule définition des mathématiques. Mais le programme possède également d'autres fonctionnalités, exemple si vous mettez AN avec un double N, donc avec un N supplémentaire et appuyez sur Entrée. Au lieu de se bloquer, le programme affiche un message Il vous dit : « Est-ce que j'ai plutôt plu ? » C'est donc un programme assez intelligent qui devine le mot que l'utilisateur avait peut-être en tête en le tapant Entrez donc Y si oui, si vous vouliez dire pluie ou N si non. Oh, oui, je voulais dire pluie, alors pourquoi ? Et vous obtenez la définition de la pluie, qui se trouve avoir deux définitions. C'est le premier, et c'est le second. Le programme dira : si vous entrez un mot très aléatoire qui n'a aucune signification de ce genre, vous recevez le message, le mot n'existe pas, veuillez le vérifier car le programme ne trouve pas de mot similaire à celui-ci. Il ne trouve pas de mot en premier. De plus, il essaie de trouver un mot similaire à celui-ci, mais il ne le fait pas parce que je ne pense pas qu' il y ait de correspondance avec celui-ci. Il imprime donc ce message. Il y a aussi d'autres choses, comme, vous savez, si vous avez un mélange de lettres majuscules, comme R et A majuscules, vous obtenez toujours la bonne saisie C'est donc un programme. Il possède une interface de ligne de commande, ce qui signifie que vous êtes une entrée , vous passez l'entrée par la ligne de commande et vous la recevez à nouveau depuis la ligne de commande. Cependant, plus loin dans les sections suivantes, je vais expliquer vos applications Web, comment créer des applications Web avec Python. Vous revenez donc ici et créez une application Web en utilisant le code que vous allez apprendre dans cette section. Vous pouvez donc étendre ce programme pour le rendre plus convivial avec une interface Web où les utilisateurs peuvent saisir l'entrée via un formulaire Web, parcourir une page Web, puis appuyer un bouton, puis obtenir le résultat sur la page Web. Cependant, le code que vous allez apprendre dans cette section est très important. Cela s'appelle Python. Vous allez donc en apprendre davantage sur les conditionnels et les boucles. Vous allez donc mettre en œuvre tout ce que vous avez appris dans la section précédente en développant ce programme. J'espère donc que cela vous plaira et je vous souhaite beaucoup de succès. Rendez-vous lors de la prochaine conférence. 101. 100. Comprendre votre ensemble de données dans Python +: Salut, encore une fois. Dans la vidéo précédente, j'ai fait une démonstration du programme afin que vous sachiez quoi ressemble le programme et quelle est la sortie qu'il génère. Également l'interface du programme, qui est une interface de ligne de commande. Vous entrez les données via l'interface, l'utilisateur saisit les données via l' interface de ligne de commande et vous obtenez à nouveau le résultat depuis la ligne de commande. Maintenant, j'ai créé un dossier ici quelque part et je lui ai donné un nom. Vous pouvez lui donner le nom que vous voulez dans ce dossier, je vais mettre tous les fichiers de ce projet. Nous parlons de fichiers de données tels que data point JSON. Il s'agit d'un fichier contenant un vocabulaire que le programme va extraire, nous allons demander un mot et ce fichier contient la définition du mot. Et les fichiers point Pi seront également placés ici. Nous connaissons le résultat, nous devons maintenant déterminer comment y accéder et nous allons adopter l'approche étape par étape, ce qui signifie que nous allons d' abord développer une version simple du programme, il suffit de donner un mot au programme et le programme renverra la définition de ce mot. Mais ce sera très simple car l'utilisateur peut parfois transmettre un mot qui n'existe pas, et en tant que programmeur, vous devez compter ce mot pour ce mot inexistant. Au lieu de casser, d'interrompre le programme, montrer une erreur à l'utilisateur, vous devez lui montrer un message plus convivial C'est ce que je ferai dans les prochaines vidéos. Mais pour l'instant, la toute première chose à laquelle nous devons penser, ce sont les données. J'ai donc fait quelques recherches sur le Web et j'ai trouvé cet ensemble de données de mots et de définitions. Maintenant, cela représente environ 5 mégaoctets de données. Dans Atom, l'ouverture prend un certain temps, alors j'ai cliqué dessus et j' attends toujours qu'il s' ouvre. Maintenant, il s'ouvre. Si votre atome se fige, vous pouvez l'ouvrir avec un éditeur plus léger tel que Notepad ou Nano sur Mac ou Quoi qu'il en soit, il s'agit d'un fichier JSON à points. Jon JSON ressemble à un langage. Certains disent que ce n'est pas une langue, c'est juste un ensemble de règles pour formater certaines données. Le format JSON suit ce format. Tout commence par un crochet, puis nous n'avons que des paires de clés et de valeurs C'est comme un dictionnaire Python. La clé est séparée par la valeur par une colonne. ce cas particulier, nos valeurs sont entre crochets, ce qui suggère que vous pouvez parfois avoir plus d'un élément entre crochets, par exemple. Permettez-moi de rechercher le mot control F ou Command F. Rain. Cela nous mènera ici. Tout d'abord, laissez-moi passer à View et à Toogle Soft Wrap. Cela fera en sorte que le texte s'adapte à mon écran. Pour le moment, vous voyez que les précipitations se situent en dehors des limites de l'écran. Cela prend également un certain temps car nous avons beaucoup de données ici. Maintenant que les données semblent meilleures, permettez-moi de rechercher à nouveau la pluie, trouver si c'est la pluie clé , disons, le mot pluie et voici la définition de la pluie. Dans ce cas, nous avons deux définitions , car pour certains mots, vous pouvez avoir plusieurs significations ou avoir plusieurs formes. Par exemple, c'est la pluie en tant que nom, c'est une précipitation et c'est le verbe pour la pluie Quand il pleut, tomber des nuages et des gouttes d'eau. Il s'agit d'un verbe et d'un nom séparés par une virgule. C'est donc comme un dictionnaire Python. Nous devons maintenant comprendre comment charger ces données dans Python. Parce que pour accéder aux données de ce fichier, vous devez d'abord le charger dans Python en tant que type de données Python spécifique, puis accéder aux données à partir de ce type de données. Réfléchissez un instant au type de données Python le plus approprié pour ce fichier JSON. Pensez-y et je vous le montrerai dans la prochaine conférence. On se voit là-bas. 102. 101. Chargement de données JSON dans Python: Je pense donc qu'il était assez facile de se rendre compte que la meilleure façon de charger ces données en Python est un dictionnaire Python. Cela ressemble à un dictionnaire Python et une fois que vous l'avez chargé dans un dictionnaire Python, il devient très facile d' accéder à la valeur d'une clé. Alors, comment le charger dans un dictionnaire Python ? Eh bien, laissez-moi ouvrir un shell de commande ici. Pour l'instant, je vais juste démontrer quelque chose de rapide dans un shell Python interactif. Mais d'abord, vous devrez peut-être fermer ce fichier JSON car cela ralentit l'atome. Ne dites pas les modifications. Je n'ai fait aucun changement de toute façon. Python 3, qui ouvrira mon Python 3.6 0.1. Quoi qu'il en soit, même si vous avez Python deux, ce programme fonctionnera de la même manière. Alors, comment charger du JSON dans un dictionnaire Python ? Eh bien, pour cela, nous devons utiliser la bibliothèque standard JSON. Avec une bibliothèque standard, cela signifie que vous n'avez pas besoin d'installer JSON. Il vous suffit de continuer et de l'importer. Une fois que vous avez fait cela, il existe une belle méthode de chargement par points JSON. Cette méthode de chargement, les attentes en fait, je peux la montrer comme ça, aider JSON point Load. Cela permet d'obtenir cet argument ici, qui est un objet semblable à un fichier contenant un document JSON. Nous parlons d'un objet fichier en Python, et nous devons créer le fichier. La façon de le faire est simple. JSON fait à nouveau Load. La façon dont nous créons un objet fichier est d'utiliser la méthode open. Tu le sais déjà. Ensuite, vous transmettez le chemin du fichier. Maintenant que mon terminal pointe vers ce dossier, me suffit de passer un nom de fichier. Je n'ai pas besoin de suivre un chemin complet pour y entrer. Ainsi, vous pouvez soit passer la méthode R, qui signifie mode lecture, soit simplement la laisser comme ça et le mode lecture est par défaut. Assurez-vous de fermer les crochets deux fois. Nous avons deux crochets ouvrants ici, deux crochets fermants ici, c'est tout. Maintenant, que sont les données ? Les données sont un dictionnaire. C'est un dictionnaire Python que vous pouvez imprimer. Oui, c'est beaucoup de données. Cela a pris un certain temps, mais normalement vous n'aurez pas à imprimer le dictionnaire en entier. Ce que vous pouvez vérifier, c'est d'accéder à un mot ou à une clé du dictionnaire. Disons le chiffon, vous devez utiliser des crochets, désolé, des guillemets pour la clé Voici ce que vous obtenez, définissez la valeur du mot pour le tableau de touches. Maintenant que vous savez plus ou moins comment cela fonctionne, essayez de créer une fonction qui obtient en entrée une clé puis renvoie la valeur de cette clé en particulier, et essayez également d'intégrer le chargement de la chute adjacente et d'imprimer le résultat Si cela vous pose des problèmes, dans la vidéo suivante, je vais vous montrer comment nous procédons. On se voit là-bas. 103. 102. Restituer à l'application la définition d'un mot: J'espère que vous avez compris comment créer une fonction qui obtient une clé, un mot et renvoie la définition de ce mot. Permettez-moi de créer rapidement ce programme. Permettez-moi d'appeler cette application Ones point in pot Jason. Données (voir, par exemple, chargement JSON, point de données ouvertes, point JS). C'est ça. Définissez la fonction. Traduire, laissez-moi appeler cela traduire. Word, et tout ce que vous avez à faire est de renvoyer le mot de données. C'est ça. Ensuite, vous pouvez soit, disons, faire quelque chose comme Word Eagle pour arranger un tableau, soit le faire dynamiquement en demandant l'avis de l'utilisateur Imprimez un mot comme celui-ci, laissez un espace, puis il ne vous reste plus qu'à imprimer le résultat du dictionnaire. Comme vous connaissez ce dictionnaire pour le moment, il renvoie simplement une chaîne, mais vous n' imprimez aucune sortie. Si vous souhaitez afficher cette sortie dans la ligne de commande, vous devez imprimer le mot de traduction. C'est ça. Maintenant, ne vous trompez pas avec ces noms de variables. Il s'agit d'une variable globale et c'est également une variable globale. Nous définissons la variable ici et nous la transmettons ici. Alors tout ce qui est transmis ici va à celui-ci ici. Il peut s'agir d'un autre mot ou d' un autre nom de variable. Supposons donc W W. Il s' agit d'une variable locale. Cela a un sens dans la fonction et cela peut être tout. Si vous dépassez W ici, il faut aussi qu'il y ait W ici. Cela transmet cette valeur à cette valeur ici. Généralement, les programmeurs préfèrent simplement saisir le même nom ici et là Mais pour vous, en tant que débutant, je voulais vous montrer cette différence : il n'est pas nécessaire qu'il en soit de même pour cela. Enregistrez le script, ouvrez peut-être un autre terminal. Python Three App point pi, execute, Enter a word, Rig, et voici le résultat. Que diriez-vous de ces mots ? Nous avons reçu une grave erreur. Mais vous ne voulez pas le montrer à l'utilisateur car ce n' est pas très lisible. Retracez le dernier appel, comment prenons-nous en compte ce scénario dans notre code ? Il faut que tu découvres ça. Pensez-y. C'est exactement ce que nous ferons lors de la prochaine conférence. Nous devons donc tenir compte que le mot transmis par l' utilisateur ne figure peut-être pas dans le jeu de clés du dictionnaire. La pluie était une clé de données du dictionnaire Jason, mais ce nom ne l'était pas Nous devons donc compter pour cela. Je vous le montrerai lors de la prochaine conférence. À bientôt. 104. 103.Comment l'application traite les mots non existants: Très bien, allons-y et rendons ce programme plus convivial. Au lieu d'afficher ce bloc d'erreur, nous allons afficher un message indiquant que le mot n'existe pas, veuillez le vérifier ou quelque chose comme ça. Pour ce faire, laissez-moi passer au shell interactif Python. Vous pouvez vérifier quelque chose comme cette pluie dans les données et vous en obtenez deux. Si vous le faites dans les données, vous obtenez une fausse information. Nous devons nous en servir et dire que s'il s'agit d' un mot dans une donnée, ce doit être W. Nous parlons de cette variable, donc s'il s'agit de données, ce que vous voulez faire est de renvoyer la valeur. agit de la valeur, et si elle renvoie vrai, elle est exécutée, s, return le mot n'existe pas, veuillez la vérifier. Lorsque cela est faux, reste est exécuté. En fait, l'expression sous else est exécutée, mais elle n'est pas exécutée. Comme vous le voyez, c'est assez lisible, très lisible avec humour. C'est en fait une bonne des fonctionnalités géniales de Python. Je peux l'enregistrer maintenant et aller ici, exécuter le programme. La pluie fonctionnerait comme avant. Et cela indique que le mot n'existe pas, veuillez le vérifier. C'est aussi simple que ça. Le programme prend forme. Cependant, vous devez effectuer d'autres tests pour vérifier les différentes entrées afin de prendre en compte toutes les entrées possibles que l'utilisateur peut y mettre. Supposons que l'utilisateur mette la pluie en majuscules et que cela indique que le mot n'existe pas. Mais en réalité, le mot « pluie » est présent dans votre jeu de données. Et alors, comment compte-t-on les différentes lettres majuscules ? Vous pouvez aussi avoir un mélange de lettres comme ça, et cela indique toujours que le mot n' existe pas ou qu'il pleut comme ça. Le mot n' existe pas. Pensez-y à nouveau et lors de la prochaine conférence, je l'implémenterai, ce qui est très simple. On se voit là-bas. 105. 104. Comment l'application traite les mots sensibles à la casse: Génial. Nous avons maintenant ce programme qui renvoie une valeur à partir d'un mot que nous avons mis. Je raisonne sur la définition de ce mot. Cela compte également pour les mots inexistants dans notre ensemble de données, à savoir data point JS. Pour compter les différents cas de lettres que nous pouvons saisir, vous pouvez consulter le cher STR qui devrait vous montrer les méthodes que vous pouvez appliquer à une chaîne. Voici une méthode inférieure. Ce que cela fait, c'est que si vous y mettez de la pluie, c'est le cas. La méthode doit donc être appliquée entre crochets. Tu reçois la version inférieure de la lettre. Comme nos données sont toutes en minuscules dans notre point de données JS sur le fichier, que vous dès que vous obtenez l' entrée ici, la chaîne, vous pouvez la convertir en minuscules, puis transmettre cette version à l'expression de l'axe du dictionnaire Ce serait quelque chose comme, vous savez, W est égal à un point inférieur. Nous mettons à jour la valeur W ici, la chaîne saisie par l'utilisateur, puis le W sera transmis en minuscules, aussi simple que Laisse-moi faire un petit test. De la pluie et vous obtenez la bonne définition de la pluie. Réfléchissons à d'autres valeurs possibles que l'utilisateur pourrait saisir. Laissez-moi effacer la ligne de commande, afin que vous puissiez mieux voir. Permettez-moi de rappeler le programme. La météo fonctionne bien. Mais au lieu de mettre de la pluie, l'utilisateur saisit un extra dedans. Le programme dit que le mot n'existe pas, ce qui est vrai. Mais en tant que programmeur, vous voulez rendre votre programme aussi intelligent que possible. Dans ce cas, vous pouvez envisager de vérifier les chaînes similaires à celles saisies par l'utilisateur. Dans, vous devez vérifier s'il existe une chaîne similaire à ce mot. Au lieu de dire que le mot n'existe pas, vous voulez suggérer à l'utilisateur que vous vouliez peut-être dire ce mot, comme si vous faisiez une recherche sur Google. C'est un peu complexe, mais pas tant que ça. Je vais vous montrer comment implémenter cela étape par étape dans la prochaine conférence. Donc là. 106. 105. Déterminer la similarité entre les mots: Bien. Comme je l'ai déjà mentionné dans la vidéo précédente, nous devons maintenant prendre en compte le fait que l' utilisateur tape mal quelque chose. Au lieu de cela, ils y entrent un extra ou quelque chose comme ça. Dans ce cas, vous devez informer l'utilisateur qu' il a mal saisi quelque chose. Comment s'y prend-on ? Eh bien, si vous ne savez pas comment procéder, la meilleure pratique consiste à faire des recherches sur Google, car le monde de la programmation est très vaste et vous n'avez pas nécessairement besoin de connaître toutes les solutions ou solutions possibles pour faire quelque chose En gros, nous devons trouver un algorithme pour comparer, disons le tableau avec N et le tableau de mots réel avec un N, la fin et dire s'ils sont similaires ou non , mais vous n'avez pas à réinventer la roue si quelqu'un d'autre l'a déjà roue si quelqu'un d'autre l' C'est pourquoi vous devez faire des recherches sur le Web et voir si c'est quelque chose qui existe, s'il existe une bibliothèque ou quelqu'un, un code source qui le fait, une fonction ou quelque chose comme ça. Mais en général, vous trouvez souvent une bibliothèque pour cela. Si vous faites des recherches, vous vous rendez compte que vous pouvez le faire en utilisant quelques bibliothèques, et l' une d'entre elles est une bibliothèque standard appelée D Flip. D'ailleurs, vous pouvez obtenir une liste des bibliothèques standard de Python sur cette page. Index de la bibliothèque Python.org (point HTML). Voici le lien. toutes les bibliothèques standard que vous pouvez importer en Python. Permettez-moi d'aller ici et d'importer Dilip. Il s'agit d'une bibliothèque permettant de comparer du texte. L'une des méthodes est le séquenceur. C'est un nom long, donc ce que vous pouvez faire, c'est dire à partir de Lip, Importer un matcher de séquences Ce qu'il fait, c'est un séquenceur. Tu n'as pas besoin d'y passer. Aucune valeur n'indique que la valeur de l'argument est indésirable. Le premier argument est un argument appelé junk, ce qui signifie que si vous comparez deux blocs de texte, dans ce cas, nous comparons simplement des mots Si vous comparez deux blocs de texte et que vous y trouvez des éléments indésirables, des lignes de rupture et des espaces, vous devez transmettre ici une fonction qui ignore ces Nous n'avons pas ce scénario pour le moment, alors restons simples. Nous rejetons cet argument. Ensuite, vous passez les deux chaînes, vous voulez comparer le mot pluie avec le double N au mot pluie réel et cela renverra un objet séquentiel, ce qui n'a rien d'intéressant Vous devez donc appliquer la méthode du ratio à cela pour obtenir le ratio réel Cela indique une similitude entre ces deux chaînes sur une échelle de 0 à 1 Ils disent qu'ils sont assez similaires. s'agit maintenant d'obtenir la similitude entre deux chaînes, mais ce dont nous avons besoin à la place, c'est d'avoir une liste, une séquence de chaînes. Nous avons ces clés du dictionnaire. Nous avons un dictionnaire avec de nombreuses clés et l'utilisateur passe un mot, disons rage avec N, et vous devez comparer ce mot avec toutes ces clés du dictionnaire car vous ne pouvez pas comparer RN avec N avec un N dans votre programme parce que vous ne savez pas si c'est vraiment similaire à cela. C'est le problème inverse, pour ainsi dire. Mais Diflip a une autre fonctionnalité pour cela et cela s' appelle des matchs rapprochés comme ça Vous devez l'importer depuis DLPGclose matches. Mais j'aborderai cette fonctionnalité lors de la prochaine conférence. On se voit là-bas. 107. 106. Trouver les meilleures correspondances d'une liste de mots: Nous avons donc examiné la classe Sequence Matcher qui renvoie la méthode du ratio de cette classe Il renvoie ce numéro, mais nous devons maintenant voir comment extraire le mot le plus similaire d' une liste ou des clés d'un dictionnaire. Concentrons-nous d'abord sur la séquence. Une liste est une séquence et à partir de l'entrée Philip, vous obtenez des correspondances proches. Maintenant, si tu m'aides, fais des matchs serrés. Vous pouvez voir les arguments que vous pouvez transmettre à cette méthode. Le premier est le mot. Ce sera le mot que l'utilisateur transmettra, et vous aurez alors une série de possibilités. Word est une séquence pour laquelle des correspondances proches sont souhaitées, généralement une chaîne. Il s'agit généralement d' une chaîne que vous souhaitez comparer. Possibilités est une liste de séquences ou une liste de chaînes que vous pouvez dire, généralement une liste de chaînes. Alors vous avez N égal à trois. Cela définira le nombre de correspondances que vous souhaitez que la méthode get close matches renvoie. Supposons que vous passiez une liste de possibilités de six éléments et que chaque élément ait le ratio 1-0 0-1 et que cette méthode renverra les trois correspondances les plus similaires, les chaînes les plus similaires au mot transmis ici Vous pouvez modifier la valeur de cet argument si vous le souhaitez, et vous avez une limite. C'est le ratio ici. Par défaut, ne renverra que les éléments dont le ratio est d'au moins 0,6 ou supérieur. En vertu de cela, les matchs ne seront pas inclus. Q à l'aide et laissez-moi essayer des matchs serrés. Voyons ce que nous allons obtenir. Supposons qu'il pleuve, alors vous avez une liste entre crochets, bien sûr. Disons qu'il faut aider les pyramides et la pluie. Je vais laisser le N et le seuil tels qu'ils sont par défaut. Dans ce cas, il pleut. La raison pour laquelle il pleut est que la pluie avait un seuil supérieur à 0,6 ou similaire Si le seuil vous intéresse, vous pouvez utiliser une correspondance de séquence, mais la valeur spécifique ne nous intéresse pas Rain était donc le seul à satisfaire à ces conditions. Nous avons la pluie ici sous forme de liste. Nous sommes capables d'obtenir les correspondances les plus proches d'une liste, mais comment pouvons-nous obtenir les correspondances les plus proches entre les clés de notre dictionnaire ? Eh bien, nous avons toujours une variable de données ici, que j'ai chargée précédemment ici dans cette session, je la charge à partir du fichier JSON. Donc, avec des touches à points de données. Il existe une méthode de dictionnaires, appelée clés, avec laquelle vous pouvez obtenir une liste de toutes les clés du dictionnaire Nous ne parlons que des clés et de toutes les valeurs des clés. Ce sont les mots et chacun d'eux a une valeur qui lui est associée. En gros, vous pouvez vérifier le type de data point kiss, juste pour voir de quoi il s'agit. C'est comme un baiser creusé, mais il se comporte comme une liste Tout ce que vous pouvez faire alors est d'appliquer les méthodes G matches. Passez-y la pluie pour Data Dot Kiss. Voyons ce que nous allons obtenir. Nous avons trois matches. Il a plu. Entraînez-vous et il pleut Si tu passes le bout de cinq points, tu obtiens plus de matchs. Mais il est important de noter que la liste ici est ordonnée. Le tout premier mot est celui qui présente le taux de similitude le plus élevé, nous ne nous intéressons qu' à ce premier mot. Comment l'obtenir ? Eh bien, vous allez ignorer ce chiffre puisque vous ne voulez que le premier mot et vous pouvez y passer zéro parce que c'est une liste et que le premier élément a un indice de zéro, donc vous obtenez un mot mal orthographié «   pluie pour pluie » Donc, en gros, nous avons le moteur pour extraire le mot le plus similaire de la séquence maintenant, et tout ce que nous avons à faire est d' implémenter cette fonctionnalité dans notre fonction ici. Tout d'abord, je voudrais simplement informer l'utilisateur par le biais d'un message qu'il a saisi un mauvais mot. Je veux juste en informer l'utilisateur afin qu'il puisse réexécuter le programme. La prochaine fois, ils saisiront un nouveau mot pour le moment, mais plus tard, nous ferons quelque chose de plus intelligent. Donc, pour l'instant, pensez-y, envoyez un message dans lequel vous mentionnez votre suggestion avec le mot correct que l'utilisateur avait peut-être en tête. Faisons-le lors de la prochaine conférence. À bientôt. 108. 107. Trouver le mot le plus similaire parmi un groupe de mots: Génial. Le programme se déroule bien. J'espère que cela vous plaira. Ce n'est pas un gros programme , nous n'avons donc pas beaucoup de code ici. Cependant, cela implémente de nombreux aspects de Python. Nous chargeons des données en Python dans un type de données Python, et nous avons des fonctions, nous avons des conditions ici, nous avons des entrées utilisateur et plus tard, nous allons également implémenter quatre boucles dans ce code Nous expliquerons plus tard pourquoi nous avons besoin de quatre boucles. Nous avons des bibliothèques, nous importons des bibliothèques. Voici Jason. Nous devons également importer la bibliothèque Diflp. Sur lequel nous travaillons actuellement. Concentrons-nous sur le revers de la médaille pour le moment. Et le mot que nous avons, c'est que nous passons cette chaîne par un double et voilà, nous avons reçu une série de suggestions. Les meilleures correspondances du mot sont extraites des clés de notre dictionnaire. Mais l'utilisateur peut également transmettre un mot qui n' existe pas du tout et qui ne présente aucune correspondance similaire. En gros, vous avez trois scénarios. L'utilisateur saisit le mot exact comme pluie, et vous renvoyez immédiatement les données avec cette clé particulière, c'est le premier scénario. Le deuxième scénario est celui où l'utilisateur saisit un mot très proche de l'un des mots que vous avez trouvés dans votre dictionnaire, comme la pluie avec un N. Dans ce cas, vous souhaitez renvoyer le premier élément de la liste généré par les résultats de la recherche. Le premier scénario est celui où vous obtenez une liste vide, ce qui signifie qu'il n'y a aucun mot similaire dans votre liste. Nous avons trois scénarios, ce qui signifie que nous devons appliquer trois conditions dans le bloc conditionnel ici. Pour le moment, nous n'en avons que deux. Nous en avons besoin d'un autre qui dise, vous vouliez dire ce mot, veuillez le vérifier. Pour l'instant, nous allons simplement transmettre un message et noter quelque chose. Vous pouvez également y transmettre une valeur limite plus élevée, par exemple 0,8 Parce que parfois, si c'est un faible 0,5 et que vous passez un mot au hasard, cela vous suggérera quelques mots que vous ne voulez peut-être pas. Vous devriez peut-être jouer avec ça. Dans ce cas, vous obtenez une liste vide. Je pense que je vais utiliser une valeur de 0,8 pour la coupure lorsque je l' implémenterai dans le script ici. Passons donc à notre code. La première chose que nous devons vérifier est si le mot est dans les données et renvoyer la valeur de ce mot. Vous vous demandez peut-être : et si vous vouliez d' abord vérifier les similitudes et non cela ? Eh bien, je pense que la première condition que vous devez appliquer est celle qui, selon vous, se produira le plus souvent. Si vous pensez que la plupart des utilisateurs saisiront le mot correct, vous devez d'abord vérifier cette condition. Vous ne voulez pas que le programme soit soumis à des conditions moins susceptibles de se produire. Vous devez donc d'abord passer par ceci, puis les autres seront ignorés si cela revient à vrai. Si cela ne redevient pas vrai, si c'est faux, vous devez vérifier l'existence d' une autre condition. Lorsque vous recherchez plus de deux conditions, vous devez implémenter l'instruction IF pour plusieurs conditions. En gros, nous devons vérifier si cette liste est vide ou non. S'il n'est pas vide, cela signifie que nous avons une correspondance dans le dictionnaire. Dans ce cas, nous voulons suggérer ce match. Nous voulons mentionner ce match dans le message. Ce qui signifie que si vous vous rapprochez. Désolée. Permettez-moi d'abord de l'importer. À partir de l'importation de la bibliothèque, obtenez des correspondances proches. ALIF, obtiens des matchs serrés. Le mot donné dans DTakes est comme ça. Il s'agit d'un objet de liste. C'est la même chose que celui-ci ici. Il s'agit d'un objet de liste et vous souhaitez vérifier si la longueur de cette liste est supérieure à zéro. Si c'est le cas, vous voulez y retourner. Message, disons, l' avez-vous fait ? Nous utilisons ici un format de chaîne, en pourcentage. Je vais expliquer ce que c'est. En avez-vous plutôt besoin ? Après la chaîne, après avoir fermé les codes, se trouve l'opérateur de pourcentage, et vous passez ici la variable qui remplacera ce formateur dans cette chaîne Cela sera remplacé par la variable que vous lui transmettez directement ici. Dans notre cas, nous voulons transmettre des correspondances proches pour W et keys et vous voulez obtenir le premier élément de cette liste et le mettre ici. C'est pour le comprendre. Supposons que nous ayons une variable qui a une valeur de un et que vous dites : « Hé, comme ça, pourcentage A et le pourcentage S seront remplacés par un. C'est exactement ce que nous faisons ici. Et c'est tout ce que nous avons à faire. Si cela correspond à des chutes, et que cela est également évalué à faux, cela signifie que nous avons affaire à une liste vide L'utilisateur a saisi un mot qui ne correspond à aucune correspondance dans notre dictionnaire et qui n'a aucun mot similaire dans notre dictionnaire. Vous souhaitez renvoyer le mot n'existe pas. Laisse-moi dire le script, va au terminal. La touche fléchée qui apparaît pour appeler une commande précédemment exécutée. Python Three App One point py, exécutez Enter word. Permettez-moi de commencer par un mot correct, pluie, et vous obtiendrez d'autres définitions de la pluie. Laissez-moi exécuter à nouveau, pleuvoir avec un N. Nous avons reçu ce message. Vouliez-vous plutôt dire pluie ? Le pourcentage a a donc été remplacé par le premier élément de la liste renvoyé par get close matches. Encore une fois, si vous passez une chaîne très aléatoire, elle indique que le mot n' existe pas, veuillez la vérifier. C'est ça. Cependant, je vois toujours un problème avec cela, nous pouvons toujours rendre le programme plus convivial. problème maintenant, c'est que lorsque l'utilisateur saisit une pluie par erreur, que dites-vous, vous lui faites simplement passer un message disant que vous vouliez plutôt dire pluie ? Ah oui, je veux dire pluie, mais comment puis-je entrer la pluie ? Pourquoi dois-je à nouveau quitter le programme ? Je pense donc une solution où au lieu de simplement passer un message ici et de terminer le programme, vous exécutez une autre instruction d'entrée. Une autre instruction de saisie et une autre fonction de saisie comme celle-ci ici, où vous demandez à l'utilisateur de saisir, disons, Y s'il veut dire chiffon ou N pour non, y pour oui, et pour non, s'il ne veut pas dire chiffon Si oui, alors en gros, vous passez, vous renvoyez la valeur du mot pluie. S'ils refusent le message saisi, vous dites « désolé » si ce n'est pas le mot que vous vouliez dire, alors nous ne savons pas ce que vous avez en tête. Nous disons donc que le mot n'existe pas, veuillez le vérifier. C'est ce que je pense. Oui, pensez-y et je vais l' implémenter dans la prochaine conférence. Parle-toi là-bas. 109. 108. Obtenir des vérifications de la part de l'utilisateur: Génial. Comme je l'ai déjà mentionné dans la vidéo précédente, nous allons maintenant implémenter un message d'entrée utilisateur supplémentaire dans le programme. Au lieu de renvoyer cette chaîne, je veux essentiellement renvoyer un message d'entrée. Si le programme découvre que l'utilisateur a transmis un mot contenant des mots similaires dans un dictionnaire, vous devez demander à l' utilisateur de saisir Y ou N. Comment faites-vous ? Eh bien, avec une fonction de saisie, bien sûr. Comme ça. Ajoutons un autre message à la liste. Entrez. Pourquoi ? Oui Moi, oui. Ou N I non. En gros, quelle que soit la saisie par l'utilisateur, vous devez traiter cette entrée Y ou N, elles seront essentiellement stockées dans une variable mais pas encore. Dans cette configuration que nous avons ici, rien ne sera stocké dans la variable. Ce ne sera qu'une valeur à la volée, vous devez donc la stocker dans une variable. Disons que Y N, donc pour oui et non, c' est égal à cela. Alors maintenant, Y ou N seront stockés dans Y et variable. Vous devez traiter cette variable. YN Eagles aussi, oui, que devons-nous faire ? Si l'utilisateur voulait dire « pluie », nous renvoyons des données. Ici, nous devons transmettre le bon mot. Le mot correct, on obtient le bon mot à partir de cette expression. correspondances rapprochées nous donneront la meilleure correspondance et nous devons transmettre cette correspondance dans le dictionnaire de données, afin d'obtenir la valeur, la définition de la pluie que nous utilisons pour cette correspondance, car l'utilisateur a convenu que la meilleure correspondance était la pluie. Cela sera remplacé par de la pluie et l'utilisateur a accepté. J'espère que c'est clair. Veuillez poser des questions. Si c'est compliqué, je me ferai un plaisir de vous répondre. Si oui, renvoyez-le. Laissez-moi vérifier, exécuter cette étape intermédiaire Désolé, j'ai utilisé l'opérateur égal ici, qui est un opérateur d'affectation Vous devez vérifier pour utiliser l'opérateur de comparaison, qui est composé de deux opérateurs égaux. Enregistrez à nouveau le script et allez-y, entrez le mot Rain. Vouliez-vous plutôt dire pluie ? Entrez Y si oui ou N si non. Laissez-moi entrer Y. Nous avons correctement obtenu les définitions de la pluie Génial. Peut-être que je dois améliorer le message ici, supprimer le point et utiliser une colonne et un espace. Cela devrait être mieux. Si vous retrouvez la pluie et si vous répondez oui ou non, vous dites simplement N, vous n'en aurez aucune. Parce que vous ne tenez pas compte de la chaîne N. Vous obtenez non parce que la fonction ne renvoie rien. Ce qui s'est passé ici, c'est utiliser un laissez-passer ici. Un mot est donc équivalent à la pluie. Le message est transmis ici. Y est égal à la pluie , puis on vérifie si la pluie dans les données n'est pas dans les données parce que c' avec N. Cela n'est pas exécuté. La fonction n' exécute pas cette instruction, elle ne renvoie pas la définition de la pluie, mais elle passe à cette instruction. Cela trouve une similitude pour que la liste soit supérieure à zéro, puis il exécute cette opération. C'est pourquoi nous avons reçu un autre message d'entrée ici. Ensuite, nous continuons là-bas. Nous sommes en retrait sous L si nous avons une autre condition imbriquée, ce qui ne pose aucun problème Mais attention, vous devez le mettre en retrait. Il s'agit d'un niveau d' indentation plus profond que celui-ci ici Nous y voilà. Si l'utilisateur est décédé, pourquoi renvoyons-nous cette déclaration ? Si l'utilisateur réussit tout le reste, vous ne comptez pas pour ce scénario en particulier. Par conséquent, aucune instruction de retour n'est exécutée Le programme s' arrêtera donc ici et ne renverra aucune car rien n'a été renvoyé. Cela ne sera pas non plus exécuté car il s'agit d'un niveau d' indentation avec celui-ci et puisque celui-ci a été exécuté, le programme n'atteint jamais ce niveau ici Ce que nous devons faire, c'est compter pour les autres entrées utilisateur telles que N. Dans ce cas, si l' utilisateur saisit N, tout ce que nous pouvons faire est de renvoyer le mot du message qui n'existe pas, veuillez le vérifier, ce qui est le même que celui-ci ici. Nous devons compter pour une autre condition. Les utilisateurs peuvent transmettre N, mais ils peuvent également transmettre une autre chaîne aléatoire et vous ne voulez pas que le programme n'en renvoie aucune, vous voulez que le programme renvoie un message. Par exemple, nous n'avons pas compris votre question. C'est ça. C'est tout ce que vous pouvez faire pour votre inscription, peut-être que c'est mieux. Il s'agit d'un programme. Encore une fois, nous avons un scénario lequel l'utilisateur saisit exactement la pluie, et cela sera exécuté dans ce cas, et le scénario où l'utilisateur saisit un mot, qui n'a aucune correspondance. ASD CAC C, quelque chose comme ça. Dans ce cas, cela ne sera pas exécuté. J'ai trouvé ce siège. Laissez-moi tester le programme maintenant. Entrez un mot. Pluie. Nous obtenons les définitions de la pluie. Entrez à nouveau un mot. De la pluie, comme ça. Vouliez-vous plutôt dire pluie ? Entrez si oui, entrez, non, sinon. Laissez-moi essayer oui, et nous obtiendrons la bonne définition. Et entrez N pour non. Le mot n'existe pas, veuillez le vérifier. C'était bien aussi. Nous l'avons fait exécuter. L'autre scénario serait le même. Au lieu de saisir Y et N, vous tapez simplement quelque chose et vous dites que nous n'avons pas compris votre saisie. Bien. L'autre scénario est celui où vous entrez un mot qui ne correspond pas du tout, et dans ce cas, cela sera exécuté immédiatement. Et c'est tout. D'ailleurs, même si vous entrez des chiffres, disons un, le mot n' existe pas car il n'est pas inclus dans le dictionnaire. Je pense que notre programme est plutôt intelligent maintenant. Il envisage de nombreux scénarios et il est assez convivial, je dirais. Cependant, il y a une dernière chose que nous pouvons améliorer, c'est la façon dont le programme affiche les définitions. Lorsque vous réussissez, disons que trois a également deux définitions. Passons un mot qui n'a qu' une seule définition. Structure, peut-être. Oh, cela a trois définitions. C'est bon. Pyramide. Cela a également deux définitions. Bref, tu as compris l'idée. J'essayais de trouver un mot qui ait une définition. Mais en gros, ce que vous obtenez avec un mot qui a seule définition, c'est que vous obtenez toujours une liste, qui se termine ici, donc il n'y a pas virgule et il n'y a aucun autre élément C'est une liste avec un seul élément. Lorsque vous avez un mot qui a plusieurs significations, vous obtenez cette liste avec plusieurs éléments. Vous ne voulez donc pas afficher la liste des utilisateurs avec de tels crochets. La meilleure chose à faire pour montrer à l'utilisateur est que si vous n'avez qu'une seule signification, une seule définition pour le mot, vous devez simplement afficher cette définition, pas de guillemets, pas de crochets, juste une définition. Si vous avez plusieurs définitions, vous ne montrez qu' une seule définition par ligne. Donc, en gros, vous avez plusieurs lignes avec des définitions. Oui, nous devons également l' implémenter pour dire enfin que notre programme est bon et peut être utilisé par n'importe qui, et que le résultat est facile à lire. Réfléchis à ça. Nous allons l' implémenter dans la prochaine conférence, SU. 110. 109. Optimisation de la sortie finale +: Génial. Nous avons maintenant un programme fonctionnel et nous modifions toutes les fonctionnalités que nous voulions. Le seul problème avec le programme, c'est que le résultat n'est pas très convivial. Sur ce, je veux dire, disons oui. Ceci est le résultat et vous obtenez une liste ici. C'est une liste Python. Ce que nous voulons faire à la place, c'est afficher chacune de ces lignes sur une ligne distincte dans le terminal. Ainsi, cette sortie sera plus lisible à l'œil nu. Allons-y et faisons-le. Comment pouvons-nous mettre en œuvre une telle chose ? Cette sortie est désormais un objet de liste, ce qui signifie que l'appel ici, l'appel de fonction, produit cet objet de liste. Ce que nous pouvons faire, c'est que nous pourrions peut-être parcourir cet objet de liste par itération , par exemple, nous pouvons stocker l'objet de liste dans une variable, sortie se verra attribuer cette liste Ensuite, vous pouvez enregistrer quatre éléments dans la liste de sortie, imprimer l'élément. Sauvegardons ceci et essayons. Nous allons avoir un problème ici, mais une étape à la fois. Entrez Y, Y, et c'est ce que je voulais avoir. La première définition, c' est-à-dire les précipitations sous forme d' eau liquide, correspond à la première ligne et la deuxième définition, à savoir les précipitations tombant des nuages et des gouttes d'eau , correspond à la deuxième ligne. C'est une bonne chose. Cependant, nous devons garder à l'esprit que notre programme ne produit pas uniquement des listes, mais parfois il produit également des chaînes, comme celle-ci ici. Non, ce n'est pas ce que je voulais dire. Quoi qu'il en soit, c'est ce que vous obtenez et vous ne le voulez pas. C'est un message indiquant que le mot n'existe pas. Donc, ce que fait le programme, ce que fait Python, c'est qu'il itère sur tous les types de sortie générés par la fonction Une fonction génère une liste, parfois et parfois elle génère une chaîne. Comment pouvons-nous résoudre ce problème ? Nous avons une liste et une chaîne. Pensons à la différence. Comment différencier une liste d'une chaîne ? Quelle est la différence entre une zone de liste et une chaîne ? Eh bien, la différence réside clairement dans le type de données. Une liste est un objet de liste et une chaîne est un objet de chaîne. Que diriez-vous d'implémenter un conditionnel ici ? Nous disons quelque chose comme ceci s'il s'agit d'un type de sortie. C'est une liste, puis indentez-la avec quatre espaces et celle-ci également Cette apparence est désormais imbriquée dans le conditionnel et sera exécutée que lorsque cela sera évalué comme vrai, uniquement lorsque le programme nous renvoie une liste Sinon, s'il ne s'agit pas d'une liste, ce doit être une chaîne. Dans ce cas, nous voulons imprimer le résultat sans l' itérer. Laissez-moi vérifier. Et nous obtenons le résultat correctement. Cette fois le message que le mot n' existe pas , veuillez le vérifier. Vérifions-le une autre fois avec un mot correct et nous y trouverons les bonnes définitions. Essayons un autre mot. Mathématiques. Cette fois, le mot mathématique n'a qu'une seule définition, nous avons donc la définition pret ici C'est une science. Essayons également l'autre scénario, chiffon. Vouliez-vous dire range ? Le mot n'existe pas, veuillez le vérifier. Nous avons fait exécuter cette ligne ici. Voici donc le code complet. Je pense que nous pouvons considérer que notre programme est terminé maintenant. C'est ce que j'ai pensé ajouter au programme. Maintenant, le programme est assez convivial et nous envisageons de nombreux scénarios que l'utilisateur pourrait saisir dans le programme. Cependant, l'interface est toujours une interface de ligne de commande, il ne s'agit donc pas d'un programme graphique de bureau ni d'une application Web. L'interface est la ligne de commande, vous envoyez des entrées via la ligne de commande et vous obtenez sorties via la ligne de commande. Ce que j'essaie de dire, c'est que vous pouvez réellement étendre ce programme afin transformer en une application Web où l'utilisateur, au lieu de saisir l'entrée via la ligne de commande, peut entrer une entrée via une page Web. Grâce à un site Web en ligne, ils peuvent saisir, appuyer sur un bouton, puis obtenir le résultat dynamiquement sur la page Web HTML. C'est possible avec Python, mais vous n'êtes toujours pas prêt à le faire car nous avons encore quelques sections à parcourir. Nous avons quelques applications dans lesquelles je vais vous apprendre à développer des applications Web avec Python. Ensuite, vous pouvez revenir à ce code, l'étendre et créer une interface Web. Vous serez également capable de créer une interface utilisateur graphique de bureau grâce aux connaissances que vous aurez acquises dans ces sections, car nous aborderons également les interfaces utilisateur graphiques dans le cours. Nous couvrons également les bases de données. Pourquoi je parle de bases de données ? Eh bien, parce que dans ce programme, nous utilisons ce fichier pour stocker notre ensemble de données. Le problème, c'est que si cela devient trop gros pour le moment, ce n'est que 5 mégaoctets, c' Mais si le fichier devient trop volumineux, vous devez le charger en Python à chaque fois que vous exécutez le script. Comme ici, nous chargeons le fichier dans la session Python lorsque vous exécutez le script. Maintenant, si le fichier est trop volumineux, cela coûtera très cher en termes de temps. Ce que vous voulez faire à la place, utiliser une base de données. Peut-être. Avec la base de données, vous envoyez une requête à la base de données et, au lieu d' obtenir l'ensemble de données dans son intégralité, vous n'obtenez en fait que la ligne ou la valeur que vous recherchez. Les bases de données sont très efficaces et aborderont les bases de données plus tard dans le cours. Après quelques sections, je reviendrai sur ce programme. Je vais vous le donner sous forme d'exercice afin que vous puissiez l'étendre en créant une interface, une interface graphique pour cela ou une interface Web, et je vous donnerai accès à une base de données où vous pourrez interroger des données pour ce programme afin qu'il devienne vraiment robuste avec une interface utilisateur très conviviale. J'espère que l'idée vous plaît et que vous appréciez le cours Passons à d' autres sections. Je te verrai plus tard 111. 110. Comment corriger les erreurs de syntaxe dans Python: Bonjour, bienvenue à cette nouvelle conférence. Il s'agit de la conférence la plus importante que vous ayez entendue jusqu' à présent dans ce cours. Essayez d'en tirer le meilleur parti. Il s'agit en fait d'une nouvelle vidéo que j'ajoute au cours. Je n'ai pas assisté à cette conférence il y a quelques temps, alors je l'ai ajoutée un certain temps après avoir publié le cours. Et jusqu'à présent, j'avais expliqué ce concept, donc les erreurs petit à petit dans d'autres conférences. Mais je trouvais que cela ne suffisait pas et je voyais que les étudiants éprouvaient toujours des difficultés à comprendre et à gérer les erreurs en Python. J'ai décidé de faire une conférence dédiée aux erreurs en Python. Nous y voilà. J'ai dit que c'est la conférence la plus importante car nous en apprenons jusqu'à présent sur les fonctions , les chaînes et les nombres dans les vidéos précédentes. Et ce sont des concepts individuels que vous apprenez une heure ou plus tard, vous apprenez des fonctions, des chaînes, etc. Mais si vous ne savez pas comment lire une erreur, comment comprendre une erreur et comment y faire face, si vous ne le savez pas, vous aurez du mal à tout gérer , y compris tous les autres objets tels que aurez du mal à tout gérer , les fonctions les chaînes, les nombres, etc. Il est donc très important de comprendre une erreur et de savoir comment y faire face et de savoir comment y faire face et comment la corriger. Et même les programmeurs les plus expérimentés commettent des erreurs dans leurs programmes La différence est qu'ils savent comment lire ces erreurs, comment les comprendre et les corriger. Mais tout le monde commet des erreurs. Si une erreur apparaît dans votre programme, pas de panique, suivez simplement les instructions que je vais vous donner dans cette vidéo pour savoir comment corriger l'erreur. C'est le sujet de cette conférence. Alors, qu'est-ce qu'une erreur de toute façon ? Une erreur dans un programme est un bogue qui provoque le mauvais fonctionnement du programme . Maintenant, en Python, nous avons essentiellement deux types d'erreurs. Nous avons des erreurs de syntaxe et des exceptions. Concentrons-nous d'abord sur les erreurs de syntaxe et oublions les exceptions. Nous passerons aux exceptions après avoir expliqué les erreurs de syntaxe. J'ai ce code ici et en fait, il s'agit d'un fichier Python. Il s'agit de l'icône qui s'affiche sur un Mac. Actuellement, je suis sur un ordinateur Mac, mais cela ne fait pas la moindre différence, où que vous soyez, Linux, Windows ou Mac, tout est pareil. J'ai le terminal ici et laissez-moi exécuter ce programme. Cela comporte quelques erreurs. Laisse-moi leur montrer. Sur Mac, vous pouvez appeler Python trois à l'aide de la commande Python trois. Sous Windows, vous pouvez simplement appeler Python ou n'importe quelle commande que vous utilisez. Vous pouvez également utiliser n'importe quel éditeur de votre choix Errors point pi est un nom que j'ai donné au script execute. Voici donc maintenant un exemple d'erreur de syntaxe. Il s'agit du corps entier du message d'erreur, ce qui est très important. Chaque fois que vous recevez une erreur, le premier conseil que je vous donne est de ne pas paniquer. Concentrez-vous simplement sur l'erreur, lisez-la ligne par ligne, comme si vous lisiez un poème ou autre. La première ligne de l'erreur indique donc le nom du fichier contenant l'erreur. Dans ce cas, ce sont les erreurs point pi. Ensuite, vous avez une virgule et après la virgule, vous avez la ligne où l'erreur C'est la troisième ligne et vous pouvez voir ici que la troisième ligne est celle-ci. Mais pour votre commodité, Python imprime la ligne dans le terminal. Dans neuf, voici où se trouve l' erreur et ensuite, vous avez le type de l'erreur. C'est une erreur de syntaxe. Vous avez également d'autres types d'erreurs telles qu'une erreur de nom, une erreur de type, mais ce sont des exceptions, et j'expliquerai plus tard pourquoi nous les appelons exceptions. Il s'agit d'un type d'erreur de syntaxe et les autres sont des exceptions. Il s'agit d'un type, puis vous avez une description après la colonne. Parfois, la description est plus précise, plus détaillée. Cette fois, la syntaxe n'est pas valide. Vous devez déterminer où vous avez commis une erreur ou où vous avez oublié une syntaxe de votre programme. Vous avez également cette flèche pointant vers le haut, et elle vous indique soit le jeton à l' origine de l'erreur, soit la fin du jeton. Le jeton, c'est un jeton dans ce cas, neuf. Cela peut être un nombre, une chaîne, n'importe quoi. À ce stade, cela pointe vers le jeton. Mais ça peut aussi être comme ça 999, sauf le script mignon dans ce cas, vous voyez qu'il vous pointe vers le bout d'un jeton. Ici, vous avez une flèche maintenant et je sais que c'est en fait une fonction et que les fonctions en Python ont besoin d'avoir des crochets, vous devez donc passer 999 entre crochets comme ça, et vous le laissez. Enregistrez et exécutez à nouveau. C'est bon. Vous avez une autre erreur, mais ne paniquez pas à nouveau. C'est toujours mon conseil. Au lieu de cela, j'ai lu l'erreur, elle indique des erreurs de fichier ligne cinq, ligne cinq cette fois. Ce n'est plus la troisième ligne, ce qui signifie que la troisième ligne a été corrigée. Ce que fait Python, c'est qu'il parcourt toutes les lignes une par une de haut en bas. Il vérifie la première ligne, il dit que c'est bon. Aucune erreur, passe à la ligne suivante, pas d'erreur, passe à la troisième ligne, pas d'erreur cette fois. La quatrième ligne convient également. La cinquième ligne contient une erreur. Encore une fois, il s'agit d'une erreur de syntaxe, et celle-ci est décrite plus précisément. Parenthèse manquante dans l'appel à l'impression. Notez que vous n'obtenez cette erreur que si vous utilisez Python trois. Si vous utilisez Python deux, ce ne sera pas une flèche car Python deux, print était une instruction et non une fonction. Avec des instructions telles que return ou print en Python 2, vous n'avez pas besoin de passer de crochets. La syntaxe serait correcte. Encore une fois, cette flèche vous pointe vers le jeton, nous y ajoutons simplement des crochets. Contrôlez S pour enregistrer le script et l'exécuter à nouveau. Cette fois, nous n'avons aucune erreur, le script s'est bien exécuté et a imprimé le résultat ici, un, deux, trois. Nous avions trois fonctions d' impression, la sortie d'impression. Cela ne renvoie aucune sortie car nous n' imprimons rien. Cela obtient simplement l'entrée de la fonction et produit une sortie, mais cela n'imprime rien. Si vous souhaitez l' imprimer, vous devez y transmettre la fonction d'instruction d'impression. Il peut également y avoir d'autres types d'erreurs de syntaxe, par exemple vous souhaitez définir ces un, deux et trois. Mais au lieu de le fermer avec un crochet, vous utilisez un crochet rond comme ça, enregistrez le script et vous l'exécutez. Vous voyez que vous avez reçu une erreur de syntaxe. Syntaxe non valide à la ligne 5, c' est-à-dire celle-ci ici. Encore une fois, la flèche vous pointe vers le jeton Vous devez donc trouver comment fixer ce support rond ici, et vous le savez. Vous devez le fermer avec un crochet, cela devrait résoudre le problème. Il s'agit d'erreurs de syntaxe. Ils sont très faciles à réparer. Dans la prochaine conférence, j' expliquerai les exceptions. Je t'y verrai. 112. 111. Comment corriger les erreurs d'exécution dans Python: Bonjour, encore une fois, bienvenue à cette nouvelle conférence. Dans la conférence précédente, nous avons parlé des erreurs en général et je me suis concentré sur les erreurs de syntaxe, qui sont l'un des deux types d'erreurs que l'on rencontre en Python. Vous avez des erreurs de syntaxe et des exceptions. Nous allons maintenant parler des exceptions en Python. Tout autre type d' erreur qui n'est pas une erreur de syntaxe constitue une exception. Souvent, toutes les erreurs, erreurs de syntaxe et exceptions sont appelées erreurs. Vous allez donc entendre ça partout. J'ai maintenant un nouveau script que j'ai créé pour cette conférence. Essayez de deviner ce que je vais obtenir en sortie lorsque j' exécute ce script. J'ai A égal à un, B égal au caractère deux, imprime en 2,5 et j'imprime A plus B. Devinez ce que je vais obtenir pendant un moment. Maintenant, laissez-moi exécuter le script, Python 3, les erreurs pointent Pie. Les erreurs de fichier indiquent que pi, ligne quatre, qui est la dernière ligne. Celui-ci, nous obtenons une erreur de syntaxe. Syntaxe non valide. Cela peut être très déroutant pour vous maintenant, car vous regardez l'expression d'impression A plus B, mais vous n'y voyez aucune flèche. Pour un débutant, cela peut être assez frustrant, mais essayez de regarder en arrière sur la gauche de la flèche. Pensez à la flèche pointée vers le jeton et le jeton n'a pas été écrit correctement dans le script. Dans ce cas, le problème ici est que cette ligne a un crochet ouvert, un crochet rond, puis elle a une fonction int, puis la fonction int a son propre crochet qui s'enroule dans son entrée. Ce sont les crochets de la fonction in, mais la fonction d'impression n'a pas de crochet de fermeture. Ce que tu as fait à la place, ce que j'ai fait en fait. Ce que j'ai fait, c'est qu'au lieu de mettre un support, j'ai écrit une autre fonction d'impression. Python s'attendait à une fermeture entre crochets, mais j'ai saisi une fonction d'impression C'est pourquoi cela signifie que cette fonction d'impression n' est pas dans la bonne position. C'est l'idée. Lorsque vous voyez cette flèche, regardez toujours d' abord cette ligne , puis regardez avant . Désolée pour ça. Lorsque vous voyez cette flèche ici, regardez toujours d' abord cette ligne, mais n'oubliez pas que le problème peut également se situer avant cette ligne. C'était à cause d'une erreur de syntaxe. Je vais vous expliquer pourquoi j'ai parlé de cette erreur de syntaxe ici. Laisse-moi recommencer. L'erreur de syntaxe est maintenant corrigée, mais une autre erreur persiste. Donc, la raison pour laquelle j'ai inclus une erreur de syntaxe dans mon code était de vous montrer que Python vérifie d'abord les erreurs de syntaxe. En gros, il analyse le code. Il recherche les erreurs de syntaxe. Il n'exécute pas encore le code. Lorsque j'ai exécuté Python, trois erreurs (point pi) ici, le code n'a pas été exécuté, mais l'interpréteur vérifie simplement les erreurs de syntaxe. Il ne vérifie pas encore les exceptions. Vous devez d'abord corriger les erreurs de syntaxe, et c'est ce que nous avons fait ici. Nous avons ajouté ce crochet et nous avons corrigé les erreurs de syntaxe. Python lance maintenant une exception. Et voici où j'ai exécuté le code et voyons la ligne suivante, nous avons le numéro deux, qui provient de la sortie de cette ligne ici. À partir de la troisième ligne, nous avons obtenu le résultat correct. Fondamentalement, encore une fois, Python exécute un script de haut en bas. S'il ne trouve aucune erreur de syntaxe, s'il trouve des erreurs de syntaxe, il n'exécute rien. To est imprimé, puis vous obtenez cette trace de l'erreur. Qui commence ici et se termine ici. C'est un bloc de l'erreur. Parfois, les erreurs peuvent avoir plusieurs types d'erreur. Dans ce cas, nous n'avons qu'un seul type d'erreur, qui est une erreur de type, mais il se peut que vous ayez plusieurs blocs ici. Cependant, l'erreur la plus importante sur laquelle vous devez vous concentrer est la dernière ligne de l'erreur, le dernier bloc de l'erreur. Dans ce cas, nous n' avons qu'un seul bloc sur lequel nous nous concentrons. La quatrième ligne est celle-ci. C'est une ligne. Encore une fois, la ligne s'imprime comme dans le cas d'une erreur de syntaxe. Ici, vous avez un type d'erreur, qui est une erreur de type. Qu'est-ce qu'une erreur de type ? Une erreur de type signifie qu'il y a un problème avec l'un de vos types d'objets dans votre script. Vous en avez la description ici. J'ai soutenu l'opérande de type quatre plus. Cela essaie donc de dire que l'opérateur plus a un type non pris en charge, en d'autres termes, l'opérateur plus ne prend en charge aucun des types que vous lui avez donnés, qu'il s' agisse du type de variable A ou du type de variable B. Il indique Int et string Il ne dit pas spécifiquement si Int ou string est un objet, mais il indique que vous ne pouvez pas utiliser un opérateur plus avec un entier et une chaîne logiquement erroné car vous ne pouvez pas ajouter de nombre à du texte C'est ce que Python ne comprend pas et il génère une erreur de type. Les exceptions sont des erreurs logiques et vous devez maintenant utiliser votre logique pour corriger l'erreur et utiliser notre logique en inspectant soigneusement l'erreur, et c'est ce que nous avons fait Ce que nous voulons faire , c'est régler ce problème. Maintenant, c'est à moi de décider si je voulais concaténer ces deux objets ou faire une opération d'addition mathématique Supposons que si j'avais l'intention de faire une addition entre ces deux nombres , je devrais convertir B en nombre flottant ou en entier Dis ça. Exécuter. R, dans ce cas, vous n'obtenez aucune erreur, vous en avez deux imprimés à partir de la troisième ligne et 3.0 à partir de la dernière ligne que nous venons de corriger. Cependant, si mon intention était d' imprimer la concaténation entre ces deux chaînes, au lieu de convertir B en flux, je devrais convertir A en Dans ce cas, je vais recevoir le texte un et deux, un et deux. Il s'agirait d'un objet de chaîne, pas d'un nombre. Même s'il s'agit d'un chiffre, c'est ainsi que le terminal l'imprime. Encore une fois, il s'agit d'erreurs qui se produisent lors de l'exécution Le script s'exécute donc Les erreurs de syntaxe étant des erreurs d' analyse, l'interpréteur essaie de comprendre si le script est syntaxiquement correct, si vous êtes complet, si vous avez les règles de syntaxe de Python Vous avez besoin d'un support, d'un support de fermeture pour l'ouverture du support. Vous avez besoin d'un devis de clôture après le devis d'ouverture, etc. Maintenant, il existe également d'autres types d'exceptions. Non seulement une erreur de type, se peut que vous ayez une erreur de nom. Disons ici qu'au lieu d'imprimer, nous imprimons C, sauvegardons, exécutons. Voici un retraçage. Encore une fois, deux ont été imprimés à partir de la troisième ligne. Le retraçage indique la quatrième ligne à l'impression C. Le nom de l'erreur de nom C n'est pas défini Encore une fois, il ne s'agit pas d' une erreur de syntaxe car vous n'avez commis aucune erreur de syntaxe. Le nom de cette variable est correct. Vous avez des supports qui ouvrent supports ronds et se referment autour du support. Tout est syntaxiquement correct, mais cet objet C, Python ne le sait pas Vous n'avez pas défini cette variable C, Python ne sait pas quoi imprimer. Python est capable d'imprimer A parce qu'il sait que A fait référence à un entier et qu'il imprime donc un entier, mais C n'a rien. Cette erreur de nom s'affiche. Et chaque fois que vous obtenez une erreur de nom, vous savez que ce nom n' a pas été défini par vous. Pour résoudre ce problème, vous pouvez définir C comme ça et exécuter et vous n'aurez aucune erreur. Vous pouvez également avoir d'autres types d'erreurs, comme C divisé par zéro, voyez ce que vous obtenez. Erreur de division zéro, division par zéro. C'est la description de cette erreur. La division par zéro n'est ni mathématiquement possible ni significative Puisque Python est basé sur les mathématiques, il génère une erreur et vous devez corriger cela, vous devez supprimer cette expression qui divise par zéro. Quoi qu'il en soit, cela concerne les erreurs en Python J'espère que vous avez bien compris cette conférence ainsi que la conférence précédente Il est relativement facile de corriger les erreurs, mais il peut arriver que vous ayez du mal à comprendre et à corriger. Plus tard, par exemple, nous travaillerons sur les bibliothèques et parfois les bibliothèques contiennent différents types d'erreurs. Cependant, ne vous inquiétez pas , car il y a d'autres choses que vous pouvez faire pour une erreur que vous ne comprenez pas. J'en parlerai lors de la prochaine conférence. Je t'y verrai, tu verras. 113. 112. Comment corriger les erreurs difficiles: Génial. Bienvenue à nouveau dans cette nouvelle vidéo. Il s'agit de la troisième vidéo sur les erreurs. Nous avons parlé des erreurs de syntaxe, nous avons parlé des exceptions, et maintenant nous allons parler de la façon de corriger une erreur lorsque vous ne comprenez pas le message. Concentrons-nous sur cette erreur. Une erreur de division zéro. Si vous êtes bon en mathématiques, vous pourriez facilement corriger ces erreurs. Vous comprendrez que vous ne pouvez pas diviser, vous ne pouvez pas diviser un nombre par zéro. Vous pouvez résoudre ce problème en supprimant cette expression ici. Cependant, si vous n'étiez pas très bon en mathématiques, vous pourriez avoir du mal à comprendre cela. Dans ce cas, le moyen le plus rapide de corriger cette erreur est copier cette ligne ici, en contrôlant C. Sélectionnez-la, copiez-la avec bouton droit de la souris et copiez-la là, puis accédez à Google. Il suffit de le coller. Maintenant, sur Google, ils ont obtenu environ 100 000 résultats. Python est très populaire et vous trouverez une solution à presque tous les problèmes que vous rencontrez avec Python. Avant de consulter la documentation ou de poser une question quelque part, il est fort probable que quelqu'un d'autre ait eu votre problème avant poser une question à ce sujet et il existe également une solution à ce sujet. Un très bon site de questions-réponses est stock overflow.com Presque toujours, lorsque vous recherchez une erreur sur Google, les premiers résultats proviennent de Suck Overflow Quelqu'un a posé une question portant ce titre. Je rencontre une erreur lorsque j'exécute le programme en utilisant Python. C'est exactement la même erreur que celle que vous aimez. Comment éviter cette erreur ? Il parle également du résultat souhaité. Il y a deux réponses à cette question. La réponse avec cette marque verte ici est une réponse acceptée et elle a le plus grand nombre de votes positifs. 11 et cela a deux votes négatifs, moins deux. En fait, la différence entre les votes positifs et négatifs est en faveur des votes négatifs. Ce sont deux réponses différentes que vous pouvez examiner. Habituellement, vous voulez regarder la réponse acceptée qui contient la solution. Cependant, dans ce cas, cela a également une explication. Il dit qu'on ne peut pas diviser par zéro. Cela provoque une erreur en Python . C'est quand même une bonne réponse, et je pense qu'elle ne méritait pas cet équilibre des votes. Mais celui-ci donne une solution sur la façon de gérer une erreur qui nous amène à un autre concept qui consiste à gérer les erreurs en Python. Supposons que vous ayez un programme, une fonction qui obtient deux valeurs d'entrée , puis divise ces deux valeurs d'entrée. Cependant, l'utilisateur peut parfois transmettre zéro comme deuxième entrée. Dans ce cas, si vous divisez, disons que la première valeur est deux et la deuxième valeur est zéro, votre programme se bloque et si vous le souhaitez, vous pouvez utiliser la gestion des exceptions pour éviter que ce programme ne plante Vous pouvez le faire avec les instructions try and accept. Quoi qu'il en soit, nous aborderons cela dans les prochaines conférences de cette section. Il s'agissait de rechercher une erreur sur Google et vous pouvez facilement trouver la solution. Comme tu le vois. Ce sont là des questions très claires. C'est une grande communauté et tout le monde peut voter pour ou contre et commenter. En gros, les réponses sont très précises. Cependant, vous ne trouvez pas toujours de réponse sur Google. Dans ce cas, il est temps de poser votre propre question. La première chose à faire est, encore une fois, vérifier si vous comprenez l'erreur et de la corriger si vous la comprenez. La deuxième chose est que vous faites une recherche sur Google et si les deux premières ne résolvent pas votre problème, il est temps de poser une question. Vous pouvez poser une question soit dans le cadre du cours. Lorsque vous regardez une vidéo, vous pouvez parcourir les questions-réponses, qui signifient question et réponse, et vous pouvez effectuer une recherche rapide si vous trouvez une réponse existante à votre question ici, et si vous ne la trouvez pas, vous pouvez poser une question ou poser une question sur Stock Overflow Vous pouvez utiliser ce bouton ici, poser une question et je serais heureuse de vous aider ici sur l'interface du cours, dans la section questions-réponses, ou d'autres personnes peuvent également vous aider sur Stock Overflow Cependant, il est très important de savoir quelque chose. La structure de votre question est très importante pour obtenir une bonne réponse. Parfois, il y a de très mauvaises questions comme, disons, mon code ne fonctionne pas, comment puis-je résoudre ce problème ? C'est tout. Avec ce très peu d'informations, il est très difficile d' obtenir une bonne réponse. Il est très important de poser une bonne question et je vais vous montrer comment poser une bonne question de programmation lors de la prochaine conférence. C'est également une conférence très importante. Voyez-y. 114. 113. Comment poser une bonne question de programmation: Salut, encore une fois et bienvenue à une autre conférence. Dans cette conférence, je vais vous montrer comment poser une bonne question de programmation. Comme je l'ai mentionné dans la conférence précédente, il est très important de poser une bonne question de programmation pour obtenir une bonne réponse. Permettez-moi d'abord de vous montrer ce qu'est une question de programmation des lits. Par exemple, je vais cliquer sur Poser une question et voici le titre de la question. Une question de programmation Bt aurait un titre très générique comme celui-ci. Voici le corps de la question lequel vous devez décrire votre question en détail. Certaines personnes disent simplement que j'ai eu une erreur en essayant de saisir deux chiffres. Je mets juste la question en pause. Une meilleure question serait d' y inclure le code que vous avez exécuté comme ça. Cependant, cela ne suffit pas non car vous devez également afficher le message d'erreur. Permettez-moi de supprimer ceci et une bonne question de programmation serait lorsque vous parlez de questions contenant une erreur, questions qui parlent d'une erreur que vous avez détectée dans votre code. C'est ton code. Un bon titre serait d'inclure le message d'erreur. Celui-là serait une bonne solution. S'il s'agit d'un message très long, vous pouvez choisir de n' inclure que le nom de l'erreur dans tout cela. Et alors, une bonne question serait : bonjour. J'ai exécuté le code suivant et je m'attendais à une division lors de la dernière impression principale, mais j'ai eu une erreur. Voici mon code. Vous y mettez donc le code, le script entier. Ne vous inquiétez pas si votre question est longue, il vaut mieux être longue que incomplète. Voici l'erreur. Ici, assurez-vous d'inclure l' intégralité de votre traçabilité des erreurs , y compris la sortie. De cette ligne de commande jusqu'à la ligne suivante. Tout cela répond à ta question. Il suffit de le copier. Ne vous inquiétez pas si c'est long. Peux-tu m'aider ? Ce serait une bonne question de programmation. Maintenant, il manque encore quelque chose de très important, savoir la mise en évidence du code. Vous devez sélectionner le code et cliquer sur cette icône ici. L'erreur aussi. Permettez-moi de poser la question. Les liens externes doivent fournir un contenu éducatif gratuit, il suffit de cliquer sur continuer. Voici une question qui semble être à l'autre bout du fil. Cette question comporte quatre bons éléments qui en font une bonne question. Le premier élément est que l'auteur mentionne ce qu'il s'attendait à obtenir en sortie du script qu'il exécutait. Il est donc indiqué que je m' attendais à obtenir la division dans le dernier communiqué imprimé, c' est-à-dire celui-ci, mais j'ai reçu une erreur. La première chose à faire est que vous devez inclure le résultat attendu. Vous devez expliquer ce à quoi vous vous attendiez, sinon, si vous n'expliquez pas ce que vous attendez, l'autre personne qui veut vous aider ne connaît pas le but de votre code ou de votre question, elle ne sait donc pas comment vous aider à atteindre cet objectif. Attendre le résultat est la première chose à faire. La deuxième chose est que vous devez inclure l'intégralité de votre code. Et assurez-vous d' inclure votre code sous forme de texte. Il est préférable d'utiliser du texte sous forme écrans plutôt que de captures d'écran, car texte, la personne qui souhaite vous aider peut copier votre code et l'exécuter sur son interpréteur Python. Mais si vous incluez des captures d'écran, sont des images et il est difficile pour d'autres personnes d' essayer votre code. Si vous posez cette question sur Stack Overflow, votre question sera close, car si vous la posiez en utilisant une capture d'écran plutôt que la version texte de votre code, la question se rapprochera car les règles de Stack Overflow sont très strictes pour questions et réponses soient de haute qualité C'est le deuxième élément. Le troisième élément est que vous devez inclure l' intégralité du retraçage des erreurs sur votre écran, désolé Du début à la fin, c'était le troisième élément et le dernier élément, le quatrième élément, c'est que vous devez mettre en évidence votre code. Juste comme ça, vous voyez que cela est beaucoup plus visible et plus facile à résoudre pour les autres L'interface du cours possède cette fonction qui vous permet de mettre en évidence votre code. cas de dépassement de stock, vous avez également cette capacité. Il vous suffit de poser une question, rédiger votre carrière , de la mettre en évidence, puis d'utiliser ce support bouclé Oui, c'est ça. Si vous posez de bonnes questions, il y a de fortes chances que vous obteniez également une bonne réponse. J'espère que cela a du sens et j'espère vous avoir montré quelque chose que vous ne saviez pas et je vous parlerai plus tard. À bientôt. 115. 114. Gérer les erreurs de code par lui-même: Bonjour, encore une fois. Faisons une autre conférence sur les erreurs en Python. Cette conférence portera notamment sur la gestion des erreurs. La gestion des erreurs peut être un concept avancé à assimiler pour le moment, car vous êtes encore en train de suivre les bases de Python et vous n'avez encore vu aucune application réelle. Mais plus tard, nous utiliserons gestion des erreurs lorsque nous développerons des applications du monde réel. Vous comprendrez donc mieux la gestion des erreurs par la suite. Pour l'instant, concentrons-nous sur la syntaxe et essayons de comprendre autant que possible. Je vais donner un exemple ici, que j'ai mentionné plus tôt Supposons que nous ayons une fonction qui fait la division entre deux nombres donnés comme ça. Renvoie A divisé par B. Ensuite, vous appelez la fonction. Divisez un, deux. Dans ce cas, la fonction essaiera de diviser un par deux. Permettez-moi d'imprimer le résultat afin que nous puissions le voir sur le terminal. Accédez au terminal et exécutez le script, vous obtenez 0,5. Maintenant, c'est bien. Cependant, si l'utilisateur entre, disons, zéro comme ça, exécutez et votre programme se bloquera, il affichera donc une erreur. Maintenant, celui-ci est un exemple d'un message d' erreur plus long que j'ai mentionné précédemment dans les vidéos précédentes, indiquant que vous pourriez avoir plusieurs erreurs dans votre retraçage. Par exemple, cela indique la quatrième ligne du fichier, cette ligne ici. C'est sur cette ligne que Python a d'abord capturé l'erreur. En fait, Python essayait d'exécuter cette ligne, mais il ne pouvait pas le faire. Il n'a pas réussi à le faire parce que cette ligne essayait d' obtenir les informations de cette fonction et que cette fonction essayait d'effectuer cette opération mathématique en utilisant zéro après la division. Ce n'est donc pas possible et Python le signale ici. C'est la principale erreur de ligne dans cette expression. C'est sur cela que tu devrais te concentrer. Cependant, lorsque vous posez des questions, vous devez inclure le message d'erreur complet dans votre question, comme je l'ai mentionné précédemment. Pour en revenir à la gestion des erreurs, ce que j'essaie de dire ici, c'est que si vous avez d' autres fonctions ici et d'autres lignes de code que vous souhaitez exécuter, vous voulez que Python exécute. Mais si l'utilisateur passait ce zéro ici, les autres lignes ne seraient pas exécutées. Votre programme tomberait en panne, ce que vous ne voulez pas. Le moyen d'éviter cela est d'utiliser try and accept. En gros, vous essayez de capturer l'exception. Pour gérer l'exception. La façon de le faire est assez simple. Essayez, vous dites essayer et renvoyez A B. Cela doit être indenté comme ça Try est indenté parce qu' il se trouve sous la définition de la fonction, puis return est indenté parce qu' il se trouve sous l'expression tri Il ne vous reste plus qu'à exécuter. Cela doit être au même niveau d' indentation que tr. Il s'agit du même bloc. Sauf exception, ce que vous voulez faire, c'est avant de diviser par zéro ou cela n'a aucun sens Laisse-moi essayer maintenant. Et vous obtenez que la division zéro n'a aucun sens. Désolé, je voulais faire ici le retour, pas l'imprimer. Je vous explique pourquoi vous n'en trouvez aucune. Vous n'en avez obtenu aucune en sortie parce que la fonction a essayé de faire cette expression, mais elle a reçu une erreur. Elle ignore donc cette ligne, ne l'exécute pas, puis elle passe à la ligne suivante Cette ligne est exécutée lorsqu'elle n'est pas exécutée. impression d'une division zéro n'a donc aucun sens, mais elle n'en a également imprimé aucune car lorsque vous exécutez une fonction qui n'a pas d'instruction de retour, comme dans ce cas, nous avions une instruction d'impression ici, une fonction d'impression, pas une instruction de retour Dans ce cas, si la fonction ne renvoie rien, elle peut également avoir une fonction d'impression ou une autre fonction. Mais s'il n' a pas de relevé de retour, il n'en imprimera aucun. En gros, il exécute les autres procédures telles que l'instruction d'impression, il imprime l'instruction Mais s'il n' a pas de relevé de retour, n'en imprime-t-il aucun ? Quoi qu'il en soit, répétez cette exécution et dans ce cas, vous obtiendrez que seule cette division zéro n'a aucun sens imprimée là-bas En gros, si vous aviez d'autres lignes de code ici, comme ça, elles seraient également exécutées. Cela se produit en utilisant le bloc try and accept, qui garantit la continuité du flux de code. Une autre chose importante à noter est qu'il est conseillé d' utiliser ici le nom exact de l'erreur que vous souhaitez accepter. Donc zéro erreur de division. Comme vous le voyez, cela est devenu bleu, qui signifie qu'il s' agit en fait d'un mot-clé Python reconnu par Python. Dans ce cas, si vous l'exécutez, vous obtenez le même résultat comme ça. Ou si vous y passez un chiffre à partir duquel il est possible d'obtenir une division, vous l'obtiendrez. Désolée pour le backslash. Je l'ai de nouveau tapé par erreur sur mon exécution interne, donc vous l'avez compris Ce que j'essaie de dire à propos de l'erreur de division zéro, c'est que vous pouvez parfois avoir d'autres types d' erreurs dans votre code. Autres types d'exceptions. Supposons que vous y ayez une erreur de nom et que vous dites qu' l'exception de toutes les erreurs lorsque vous ne le transmettez pas, vous y incluez essentiellement tous les types d'erreurs. C'est un peu dangereux pour votre code, car vous pourriez avoir des problèmes que vous ne remarquerez pas et, en gros, vous les ignorez, mais vous ne devriez pas le faire. Vous devez être précis , explicite comme ça. S'il existe d'autres types d' erreurs, comme une erreur de nom, cette erreur de nom fera planter votre programme. Vous savez ce qui se passe et vous devez être précis. Si vous souhaitez également gérer cette erreur, vous pouvez ajouter une autre exception ici, sauf l' erreur de nom par exemple. Oui, il s'agit de gérer les erreurs en Python. J'espère que cela a du sens. J'espère avoir bien expliqué cela à propos des erreurs. Je vous parlerai lors des prochaines conférences. 116. 115. Introduction à la vision par ordinateur avec Python +: Bonjour, bienvenue dans cette nouvelle section. Et tout au long des cours de cette section, vous allez apprendre la vision par ordinateur avec Python. J'expliquerai la vision par ordinateur dans une minute. C'est ce que nous allons apprendre dans cette section. Ensuite, dans la section suivante, nous allons créer une application qui détecte les objets en mouvement à partir de la webcam de l'ordinateur et qui enregistre et visualise les heures auxquelles les objets sont entrés et sortis de l'image vidéo C'est donc un domaine d'application de la vision par ordinateur. Vous avez peut-être une idée de ce qu'est la vision par ordinateur, mais sinon, je vais vous l'expliquer maintenant. vision par ordinateur est donc le domaine qui traite de l'acquisition et du traitement des images, et qui prend des décisions en fonction de celles-ci ou des images. Vous transmettez donc une image à l'ordinateur, essaie de la comprendre et il peut faire certaines choses, par exemple vous dire combien de phases il y a dans l'image et quelle couleur domine l'image, etc. Je sais, les ordinateurs sont vains. Je veux dire, tu dois leur dire quoi faire exactement. Et c'est là qu'intervient Python. Nous utiliserons Python pour charger des images, les traiter et effectuer des tâches telles que la détection de visages et de mouvements. Désormais, la vision inclut à la fois des images et des vidéos, car les vidéos sont simplement des piles d'images qui s'affichent très rapidement Les ordinateurs et donc Python utilisent les mêmes commandes pour lire les images et les vidéos. Et vous pouvez faire de la vision par ordinateur avec Python en utilisant OpenCV. OpenCV est l'acronyme de Open Source Computer Vision. Et la bibliothèque Ise est utilisée non seulement en Python, mais dans d'autres langages de programmation également dans d'autres langages de programmation pour effectuer des tâches de vision par ordinateur. Dans cette section, je vais donc vous présenter OpenCV et vous apprendrez à l'utiliser en détectant des visages à partir d'images Ensuite, dans la section suivante, nous approfondirons et traiterons les vidéos avec OpenCV et détecterons certains objets en mouvement dans une vidéo de webcam en temps réel Donc, oui, c'est à propos de cette conférence, et passons à autre chose et configurons rapidement OpenCV lors de la prochaine conférence, puis travaillons avec lui par la suite Alors oui, merci et à bientôt lors de la prochaine conférence. 117. 116. Chargement, affichage, redimensionnement et création d'++s d'image avec OpenCV: Génial. Allons-y et jouons un peu avec OpenCV Plus précisément, ce cours vous apprendra cours à charger des images en Python à l'aide d'OpenCV, à les afficher, à les redimensionner, puis à enregistrer les images redimensionnées dans de Alors chargez, affichez, redimensionnez et écrivez des images. Et j'ai une belle image de la galaxie, donc je vais jouer avec ça. La première chose à faire est d'importer la bibliothèque. La deuxième chose est que vous voulez charger l'image en Python. L'image serait donc égale à la méthode REIT d'image à deux points cv. La méthode attend donc maintenant le chemin vers l'image que vous souhaitez charger en Python. Et ce serait Galaxy Dot JPG. Donc, mon script, un fichier Pi à point, est dans le même répertoire que Galaxy point JPG. Il me suffit donc de passer le nom du fichier ici. Et puis il y a encore un autre paramètre d'image pour lui dans la méthode. Et puis ce paramètre prend trois arguments. Maintenant, ce paramètre indique comment vous souhaitez lire l'image en Python. Alors, voulez-vous le lire sous forme d'image RBG, ce qui signifie que vous voulez trois bandes dans votre image Vous voulez donc une image couleur avec une bande rouge, une bande bleue et une bande verte. Donc, si vous voulez lire l' image telle qu'elle est avec les couleurs, vous devez en transmettre une ici. Si vous souhaitez lire l'image sous forme d'image en noir et blanc dans une échelle de gris, vous devez passer à zéro. Et le fait d'avoir une image en niveaux de gris implique que votre image comportera une bande Et je vais revenir sur les groupes et les expliquer dans un instant. Nous avons donc également moins un. Cela signifie une image en couleur, mais vous avez également un canal Alpha, ce qui signifie que votre image aura des capacités de transparence. Donc, si vous appliquez des opérations qui nécessitent de la transparence, vous pouvez le faire en lisant lorsque vous chargez l'image avec un argument de moins un ici. OK, donc j' aimerais essayer zéro. Génial. Maintenant, avant de montrer l'image, avant de l' afficher à l'écran, j'aimerais que vous compreniez en quoi consiste cet objet image. Je voudrais donc en imprimer le type, juste comme ça. Exécutez le script. Scénario 1. Ouais Bien sûr, et réessayez. Il s'agit donc d'un tableau dimensionnel NumPin. Et si tu veux, tu peux l'imprimer. Et vous verrez le tableau num pi réel. Il s'agit donc d'un tableau bidimensionnel avec des valeurs sur l'axe horizontal et également sur l'axe vertical. Pensez donc à l'image maintenant, et ce serait la toute première, donc la valeur d'intensité en haut à gauche d'un premier pixel. Ainsi, 14, par exemple, serait la valeur d'intensité dans l'échelle de gris. Pour le premier pixel de l'image, donc pour le pixel supérieur gauche de l'image. Et puis le deuxième pixel et ainsi de suite, puis vous avez ces points, ce qui signifie que Python ne peut pas afficher la liste, la longue liste ici parce que vous avez quelques milliers de valeurs dans la première ligne, puis vous avez la deuxième ligne de pixels dans l'image et la troisième et ainsi de suite. Et cela constitue la matrice des pixels de l'image. Et si vous voulez savoir combien de nombres, combien de valeurs vous avez dans le sens horizontal et combien de valeurs vous avez dans le sens vertical, vous pouvez continuer et imprimer la forme de l'image. OK. Supposons donc que la résolution de l'image soit de 14 85 x 990. Python stocke donc l'image sous forme tableau d'arbitres, sous forme de matrice de nombres, aussi simple que cela Si vous souhaitez vérifier le tableau des dimensions de votre image, vous pouvez le faire avec cette expression Et vous voyez que vous avez deux dimensions. Maintenant, si c'était une image en couleur, donc avec trois chauves-souris rouges, bleues et vertes, les choses changeront un peu. Vous avez donc trois dimensions. Et vous voyez également que le nouveau tableau est un peu différent. Vous avez donc ici des valeurs pour chacune des bandes pour le vert, pour le rouge, le vert et le bleu. J'aimerais donc m'en tenir à l'image grise. Et ce que je peux faire maintenant c'est afficher l' image à l'écran. Et pour cela, vous voulez utiliser l'image, alors je suis la méthode show. Et cela affichera une fenêtre et vous voulez nommer cette fenêtre, donc vous voulez mettre un titre pour cette fenêtre. Disons galaxie. Et ce que vous transmettez ici est l'objet image. Donc celui-ci. Génial. Ensuite, vous voulez spécifier l'heure de fermeture de votre fenêtre , car cela affichera la fenêtre, mais vous souhaitez également définir certaines fonctionnalités afin que l'utilisateur puisse fermer la fenêtre. Si vous mettez zéro ici, lorsque l'utilisateur appuie sur un bouton, la fenêtre se ferme. Permettez-moi de changer cela en Cb 2. Donc, si vous mettez zéro, l'utilisateur peut fermer la fenêtre en appuyant sur n'importe quel bouton. Si vous voulez indiquer une heure, vous pourriez dire 2000, ce qui implique 2000 millisecondes Cela signifie donc 2 secondes. Nous avons donc expliqué comment l'utilisateur souhaite fermer la fenêtre, puis vous devez spécifier ce qu'il doit faire lorsqu'il appuie sur un bouton ou attend 2 secondes. Vous voulez donc détruire toutes les fenêtres. C'est une méthode qui ferme la fenêtre. Bien. Voyons ce qui va se passer. OK, nous avons donc affiché l' image, elle a attendu deux sagas, puis elle s'est fermée Si vous le mettez à zéro, l' image y restera. Et si vous appuyez sur le bouton, il se ferme. Permettez-moi de vous montrer à nouveau l'image. Maintenant, la raison pour laquelle l'image ne correspond pas à mon écran est que l'image, telle que vous le voyez ici dans ces valeurs, mesure 1485 pixels de haut Donc, la hauteur, c' est la hauteur, et la largeur est de 990 pixels. La résolution de mon écran est donc fixée à 1280 x 720. Cela signifie donc que cette image de cette taille ne convient pas à mon écran car mon écran est trop petit pour cela. Donc, dans ce cas, laissez-moi clore ceci. Ce que vous pouvez faire, c'est redimensionner l'image, puis afficher l'image précise Nous chargeons donc l'image et avant de l'afficher avant de la passer à la méthode I'm show, vous voulez dire, disons, redimensionner Image. Ce serait égal à. Le CV deux est redimensionné, ce qui donnerait deux paramètres Le premier est, bien sûr, l'objet image que vous souhaitez redimensionner IMG est donc notre variable, puis vous voulez spécifier un tuple avec les nouvelles dimensions, je dirais 1 000 par 500 Ensuite, vous voulez transmettre la nouvelle image ici. Donc, ce qui se passe ici, c'est que Python est en train de redimensionner le tableau num Pi. Il prendra donc le tableau avec ce nombre de pixels de valeurs, et il créera un tableau avec ces nouvelles dimensions. Donc, ce qui va se passer là-bas, c'est que Python va interpoler ces valeurs Il a donc beaucoup de valeurs ici, mais il passe ensuite de ceci à cela. Ainsi, lorsqu'il voit, disons, il en a quatre pour une valeur, puis six pour la valeur voisine. Et ce que Python va faire, c'est qu'il en obtiendra quatre et six, en gros, et qu'il en fera simplement une valeur. Disons donc cinq. C'est essentiellement l'idée. Il interpole donc les valeurs, puis affiche l'image interpolée à l'écran Ce qui est plutôt joli à nos yeux. OK, voyons voir ça. Et voici l'image. Et vous voyez que c'est un peu exagéré. C'était donc une image haute, mais maintenant elle est assez large. Et parce que c'est en fait la largeur de l' image et c'est sa hauteur. Donc, si vous voulez, vous pouvez dire 501 000. Encore une fois, et maintenant vous voyez plus ou moins le ratio deux de l'image. Mais si vous voulez conserver le ratio de l'image, vous devriez aller plus loin ici. Disons qu'à partir de là, disons que nous voudrions afficher une taille égale à la moitié de celle-ci afin de conserver le ratio de l'image. Ce que nous pouvons faire, c'est avoir accès à ces valeurs. Et nous pouvons récupérer ces valeurs à partir de la méthode de forme. Cela produit donc un tople avec ces deux valeurs, puis nous allons ici et disons, image, forme Et ce serait cette valeur, donc 990, qui a un indice de un. Et puis nous avons, encore une fois, une image et une forme avec un indice de zéro pour ce nombre. Ensuite, nous voulons le diviser par deux. OK. Et je m'attends à une erreur, mais qu'est-ce que S. Donc oui, nous avons une erreur. C'est une erreur de type, l' argument entier attendu est un float. Mais ici, ce que nous faisons ici, c'est que lorsque nous divisons ce nombre par deux, nous obtenons un flottant. Nous obtiendrions donc quelque chose comme 742,5. Dans ce cas, nous voulons le convertir en un entier. 742,5 devient donc 742. OK. Et gardons la cohérence, donc des entiers pour cela également. Voyons voir. Nous avons ici une syntaxe invalide, elle nous pointe donc vers la ligne 11, quelque part au début, ce qui peut être assez trompeur. Vous voulez donc voir avant cette ligne, qui se trouve ici. Et vous pouvez voir que ce crochet se ferme ici. Nous avons donc besoin d'un autre support, qui se ferme dans le premier support ici. Alors, gardez-le. Essaie à nouveau. Et cette fois, l' image est belle. Vous apprenez donc à charger une image en Python, à redimensionner une image, à afficher une image à l'écran Et maintenant allons-y et écrivons l' image redimensionnée dans un nouveau fichier Pour cela, vous devez utiliser la méthode d'écriture par messagerie instantanée. Donc, une photo. Et vous voulez donner un nom à la nouvelle image, Galaxy, disons, un JPG à points redimensionnés Ensuite, vous passez l'objet image que vous souhaitez stocker dans ce fichier. La virgule devient donc un sel ici, et l'image que vous souhaitez stocker est une image précise. C'est ça. Exécuter. Et nous avons redimensionné l'ancienne image à la volée. Python obtient donc le tableau numpy. Je l'intercale, il le redimensionne, puis il l'affiche à l'écran Voici donc Galaxy, celui-ci ici, et ensuite nous pourrons le fermer. Et voici notre nouvelle image. Donc, redimensionnez la galaxie. Donc, si vous allez dans le dossier où se trouvent ces fichiers, vous verrez que cette image a de nouvelles dimensions. Donc 495 par 742. C'est ce que je voulais vous apprendre dans cette conférence. J'espère que cela vous a plu et qu'on se reparlera plus tard. 118. 117. Explication de l'exercice précédent: Eh bien, j'espère que vous aurez résolu l'exercice, et je crois qu'il n'a pas été difficile. Mon but était de vous habituer au code OpenCV. Pourquoi ne pas pratiquer un for loop ? Comme vous pouvez l'imaginer, cet exercice serait vendu en utilisant une boucle for. Permettez-moi donc de parcourir rapidement le code ligne par ligne. Nous avons donc deux OpenCV importants, SL CV deux et la bibliothèque de globes . Maintenant, si vous vous en souvenez, Globe trouve les noms de chemin de certains fichiers selon un certain modèle. Dans ce cas, par exemple, j'ai ces fichiers JPG ici, donc une, deux, trois, quatre, cinq images. Et j'ai dit : OK, créez une liste de noms de fichiers contenant tout ce qui se trouve dans la première partie , puis JPG comme extension. Cela créera donc une liste telle que, disons, C, puis le chemin ici, puis Galax C, le GPG Et puis l'autre chemin de l'image et ainsi de suite, vous voyez l'idée. Ensuite, nous devons parcourir cette liste pour chaque chemin d'image de la liste de cette liste Nous allons effectuer ces opérations pour chacun des éléments de la liste. Nous lisons donc d'abord ce chemin d'image. OK, ce fichier image contient en fait une image en noir et blanc. Donc, zéro est un drapeau est un argument, ce qui implique un taux d'image en noir et blanc dans l'échelle de gris, en fait. Ensuite, nous créons une variable dans laquelle nous stockerons les images redimensionnées L'image est donc de 100 x 100. Je transmets ici l' image d'origine et la taille, la nouvelle taille que l'image obtiendra. Ensuite, nous voulons montrer l' image juste à des fins de démonstration. Ce n'est pas vraiment important, mais cela vous permet de vérifier les images qui sont redimensionnées Voici le nom de la fenêtre. Et puis je passe ici une méthode clé humide, et 500 signifie 500 millisecondes Ainsi, chaque image s' affichera et attendra une demi-seconde, 500 millisecondes Et puis après cette demi-seconde, Python passera à la ligne suivante, puis à la suivante, puis à l'élément suivant de la liste et ainsi de suite. Attendez donc 500 millisecondes, puis nous détruirons toutes les fenêtres une fois ce délai écoulé Ensuite, nous écrivons l'image redimensionnée. RE était donc une variable qui contient l'objet image, l'objet image redimensionné Et tout ceci, c'est le nouveau nom du fichier. Donc, ce que nous obtenons ici, c'est que nous aurons une précision au début du nom de l'image Et puis, juste après, nous aurons le nom de l'image d'origine. Ainsi, par exemple, pour Galaxy, nous aurions ReciseGalaxy point JPG Donc, l'image ici serait un point de galaxie JPG ici, qui est celui-ci ici. Et ici, comme le script se trouve dans ce dossier , cette liste, en fait, l'image ressemblerait à Galaxy point JPG, puis Kangourous, vous savez, Australie, point GBG, etc. Cela permet donc d'obtenir les chemins relatifs des fichiers. Nous n'allons pas obtenir le chemin complet. OK, j'espère que c'est clair. donc redimensionné Galaxy, nous pourrions ajouter un trait de soulignement afin distinguer le mot précis de l'autre nom d'image. Génial. Laissez-moi exécuter ce script Python. Donc, seconde alpha, seconde alpha, et oui, c'est fait. Et regardons les images. Donc, à partir de là, ce sont les images originales, et ce sont les produits d'image. Vous pouvez donc voir ici que toutes ces valeurs sont de 100 par 100. Et ils sont dans une échelle de gris. OK, c'est ça. Rendez-vous lors de la prochaine conférence. 119. 118. Détection de visages dans les images avec OpenCv et Python: Bonjour, bienvenue à cette nouvelle conférence. Et ici, tu apprends à détecter les visages. Et nous utiliserons OpenCV avec Python pour détecter un ou plusieurs visages à partir d'une image Alors, en gros, comment fonctionne la détection des visages de toute façon ? Eh bien, l'idée est que quelqu'un a créé des cascades, qui sont essentiellement des fichiers XML comme celui-ci. Ce fichier EML contient des informations sur les caractéristiques que contient l'image d'un visage Nous parlons donc du ratio des ombres des yeux, du nez et des lèvres et toutes ces caractéristiques, ces chiffres d'intensité en pixels stockés, sont enregistrés dans ce fichier XML, qui a été créé en utilisant des images avec des visages comme échantillons d'entraînement. Donc, en gros, vous dites à vos ordinateurs : OK, ce sont tous des visages, puis vous utilisez un logiciel comme OpenCV pour créer de tels fichiers XML C'est ce qu'on appelle des cascades dures, et il s'agit d'une cascade dure pour un objet frontal. Et si vous voulez d'autres objets, vous pouvez les trouver sur ce lien ici. Vous avez donc le corps entier, l'œil gauche, le bas du corps et ainsi de suite. Vous pouvez également utiliser une section de ressources de cette conférence. Vous pouvez le télécharger sur un fichier Zip avec toutes les cascades XML qui s'y trouvent. Mais dans cette conférence, nous nous concentrerons sur le devant du visage. Nous allons donc utiliser cette cascade pour détecter les passes. La façon dont cela fonctionne maintenant est que nous allons charger l'image en Python, puis nous dirons à Python qu'il s'agit d'un modèle que vous voulez rechercher dans l'image et que vous voulez trouver ce modèle, donc le modèle XML dans l'image. Et ce que Python va faire avec l'aide d'OpenCV, il va commencer à rechercher toutes les images à l'aide d'une fenêtre Ensuite, il redimensionnera l'image, il diminuera la taille de l'image et, en utilisant la même fenêtre, il détectera les passes plus petites, etc. Nous allons passer en revue cela étape par étape. Écrivons donc le script qui détecte les visages. L'impulsivité est la première chose que vous voulez faire. Ensuite, vous voulez lire la cascade en Python. Appelons donc la cascade de phase variable. CV deux, et nous avons une méthode appelée classificateur en cascade. Cela créera donc un objet en cascade de phases en Python, et il ne nous reste plus qu'à indiquer le chemin de la cascade cardiaque. C'est ça. Et cela créera un objet classificateur en cascade. Vous pouvez désormais utiliser cet objet classificateur en cascade de la fonction Pace pour rechercher une phase dans votre image La prochaine chose que vous voudrez peut-être faire est de charger l' image en Python, l'image dans laquelle vous souhaitez rechercher le visage. Disons que l'image est égale à. Vous savez donc que nous pouvons charger des images en Python via la méthode de lecture d'image du CV ouvert, et vous pouvez simplement passer le nom du fichier photo dig PG ici. Je transmets le chemin du fichier de cette image. Je ne passe donc aucun deuxième paramètre ici. Cela signifie que je lis l' image sous forme d'image couleur. Cependant, il est conseillé d'utiliser des images en niveaux de gris lorsque vous recherchez un visage J'ai donc chargé l'image ici, mais j'utiliserai la version en niveaux de gris de l'image pour rechercher un visage dans cette image Cela est censé produire plus grande précision lors de la recherche de visages, car vous remarquerez peut-être que lorsque vous avez des images très chargées avec de nombreuses fonctionnalités, OpenCV n'est pas précis à 100 % Vous pouvez donc obtenir des visages qu' OpenCV manquera, ou vous pouvez obtenir des fonctionnalités qui seront classées comme L'utilisation de l'image en niveaux de gris augmente cependant la précision. Je pourrais passer un drapeau zéro ici pour pouvoir lire cette image sous forme d'échelle de gris, mais j'aimerais conserver l'image d'origine en couleur parce que je veux montrer la version couleur à la fin, mais utiliser l'image grise. Passez-le aux méthodes que nous rechercherons pour le visage. Je vais donc créer ici une variable d'image grise dans laquelle je vais trier la version en niveaux de gris de l'image. Donc CV deux, et nous avons une méthode appelée couleur CVT, qui prend comme argument, l'image originale, bien sûr, et un drapeau Donc une dispute. Appelé Cv bicolore BGR deux gris Cela signifie donc que cela convertira l'image BGR, donc les bandes bleues, vertes et rouges, en une image en niveaux de gris Voyons voir. Donc, si vous voulez afficher rapidement cette image grise, si vous le souhaitez, Civ Two y affiche l'image grise Nous donnons un nom à la fenêtre, gris et à l'image que vous souhaitez afficher, puis vous devez passer le paramètre clé de pondération ici. Disons zéro, donc nous allons appuyer sur Aiki pour fermer la fenêtre Le CV 2 détruit toutes les fenêtres. Vous avez donc appris ces méthodes dans les conférences précédentes. Laisse-moi exécuter ça. Il s' agit donc d'une version en niveaux de gris de l'image. Viens. Nous allons maintenant utiliser une méthode appelée détection multi-échelle. Et ce que fera cette méthode, elle recherchera le classificateur en cascade Il recherchera donc ce fichier XML de face frontale dans notre image, et il renverra les coordonnées du rythme dans l'image. Ainsi, par exemple, c'est l'image, et ce que cette méthode renverra, c'est qu'elle trouvera le visage et qu'elle dira. Il vous donnera donc le numéro de la ligne et de la colonne du point supérieur gauche du visage. Cela va donc commencer ici et cela vous donnera également la hauteur du visage et la largeur du visage. Nous obtenons donc un rectangle. Ensuite, nous allons dessiner ce rectangle dans l'image. Donc c'est en gros, mais vous le comprendrez mieux. Nous devons donc créer, disons, une variable d' objet pass. Où stockeront ces valeurs X, Y, de largeur et de hauteur. Alors, saisissons-le rapidement. Nous devons donc nous référer à l'objet classificateur en cascade, qui est celui-ci ici Et ce que nous voulons faire avec cet objet, c'est détecter Mul ti scale, et vous voulez détecter l'image grise Ensuite, vous voulez y faire passer un facteur d' échelle. Vous savez que lorsque vous avez beaucoup de paramètres et qu'ils sont trop nombreux pour tenir dans une ligne, après la virgule, vous pouvez simplement appuyer sur Entrée et Python lira votre ligne comme s'il s'agissait d'une seule ligne. Ils ne manqueront donc pas d' appuyer sur Entrée après le coma. Nous avons donc un facteur d'échelle. Et une bonne valeur à donner pour cela serait 0,5. Maintenant, qu'est-ce que cela signifie ? Bref ? Eh bien, considérons cette image. Ce que fera Python, c'est qu'il partira de la taille d'origine de l'image, et qu'il recherchera. Je créerai une fenêtre qui recherchera les visages dans l'image. Donc, recherchez dans cette zone dans cette zone dans cette zone. Une fois cela fait, en donnant un facteur d' échelle de 1,05, vous dites à Python de réduire l'échelle de 5 % pour la phase suivante de recherche Python réduira donc la taille de l'image de 5 % Et il recherchera des visages plus grands sur l'image. Donc, effectuez une nouvelle recherche, puis réduisez à nouveau de 5 % l'image et recherchez des visages plus grands, et ainsi de suite jusqu'à ce que la taille finale soit atteinte. Cela signifie donc qu'une valeur plus faible signifie une plus grande précision. Si vous donnez, par exemple, 0,5 Python, diminuez l'échelle de 50 % Il partira donc de la taille d'origine, puis il augmentera de 50 % et vous n'obtiendrez donc pas beaucoup de précision avec cela. L'avantage avec ce nombre est que le script s'exécutera plus rapidement. Ainsi, vous aurez moins de passes sur l'image à la recherche d'un visage. 0,5 c'est bien. OK. Et puis vous avez un autre paramètre appelé voisins minimaux. Ce paramètre est généralement fixé à cinq. Et en gros, cela indique Python le nombre de voisins à rechercher dans la fenêtre. Vous voudrez donc peut-être expérimenter un peu avec ces chiffres et voir lequel donne les meilleurs résultats. Mais ces deux chiffres sont bien acceptés. Alors faisons quelque chose maintenant. Imprimons les visages et voyons de quoi il s'agit. Alors de quel type d'objet s'agit-il ? Et je pourrais aussi imprimer le type de visages, juste comme ça. Je vais donc exécuter le script maintenant et le script va lire ce fichier XML, charger l'image, créer la version en niveaux de gris de l'image Ensuite, il détectera les coordonnées du coin supérieur gauche du visage dans l'image ainsi que la largeur et la hauteur du rectangle définissant le visage dans l'image. Ensuite, il imprimera le type des visages et il imprimera les visages, l'objet réel des visages. Appuyez donc sur le dossier pour quitter cela. Et donc pace est un tableau NumPi, un objet tableau à N dimensions Et il s'agit d'un tableau à quatre valeurs. Nous avons donc détecté notre visage. Ce sont des valeurs qui définissent essentiellement la phase de l'image. Donc, en gros, ce que nous avons ici, c'est 155, qui devrait être la 155e colonne Voici donc le X. Le rectangle doit donc commencer quelque part ici, sur le front. Et cela devrait être 83. Donc, la ligne 83, la colonne 155, puis nous avons la largeur, qui est 382, et la hauteur, qui est la même. Nous avons donc un rectangle dans le visage. Maintenant, allons-y et dessinons ce rectangle sur le visage de l'image. Nous avons donc créé le tableau de visages. Ensuite, ce que nous voulons faire, c'est accéder à toutes ces valeurs de ce tableau. Pour cela, nous pouvons utiliser une boucle à quatre boucles. Donc quatre X, Y, largeur et hauteur dans les faces. Eh bien, image. Nous mettons donc à jour l'objet image que nous avons lu ici, nous avons chargé ici. Nous allons donc le mettre à jour dessinant un rectangle dans l'image. Et encore une fois, vous devez transmettre l'objet image ici, puis vous devez transmettre quatre autres arguments. Le premier argument serait le point de départ du rectangle. Ce serait donc X et Y. Donc, ces coordonnées du réseau de phases. Génial. Et puis le paramètre suivant est un autre tuple définissant les coordonnées de l'autre coin de l'image Nous avons donc le coin supérieur gauche ici, et nous avons le coin inférieur droit ici. Donc, ce serait X plus la largeur. Et Y plus la hauteur. C'est ça. Encore un autre paramètre. Il s'agit de la couleur que vous souhaitez donner à ce rectangle. Cela se présente donc sous la forme d'un format BGR. Vous voulez donc transmettre une valeur pour la couleur bleue. Disons donc zéro pour le bleu, et avons un rectangle vert. 255 pour le vert. Nous aurons donc un vert complet, puis zéro pour le rouge. Vous pouvez également passer un autre paramètre, qui serait la largeur du rectangle. Disons trois. OK. Et une fois que vous avez fait cela, donc une fois que vous avez mis à jour votre image, vous voudrez peut-être afficher votre fenêtre d'image à l'écran maintenant. Nous utilisons donc la méthode d'affichage d'image, mais ici nous avons une image grise, nous voulons donc transmettre l'objet image mis à jour. Et nous devrions être prêts à partir. Enregistrez le script, essayez de l'exécuter. Et mon système n'arrive pas à trouver le visage atx it point py Oui, j'ai fait une erreur avec un nom ici, alors laissez-moi changer ce point py, Enter Donc rien à voir avec le script. Et laissez-moi réessayer. Génial. J'espère donc que c'est ce à quoi vous vous attendiez. Le rectangle commence donc ici, il a une largeur et une hauteur, et il finit ici. Cependant, comme vous le savez peut-être déjà, vous pouvez avoir des images plus grandes que la résolution de votre écran. Dans ce cas, votre image ne rentrerait pas dans votre écran. Vous pouvez donc redimensionner l'image avant de l'afficher Permettez-moi donc de créer une variable redimensionnée ici, qui serait égale à cv two resize, et vous voulez transmettre l'image, qui contient le rectangle, et vous voulez redimensionner l' image à ces Vous devez donc définir la résolution de l'image ici. Et comme vous le savez, vous pouvez simplement mettre des valeurs ici, disons 500 par 500. Mais ces valeurs peuvent étirer votre image Il est donc préférable d' accéder à la forme de l'image. Ou la résolution de l'image, devrait être la largeur de votre image. Vous le savez donc déjà. Je l'explique. Je vais donc passer en revue les choses rapidement, et pour vous assurer d' obtenir une bonne taille, vous pouvez la diviser par trois. Et puis encore une fois, dans la forme, vous obtenez la hauteur, qui est la première valeur du tuple, et vous la divisez à nouveau par trois Et vous souhaitez également convertir ces deux nombres entiers car vous pourriez obtenir des nombres flottants, et Python dira qu'il ne peut pas redimensionner une image en nombres flottants Donc ça devrait aller. Ensuite, vous souhaitez afficher l'image redimensionnée. Testez-le rapidement. me manque un support, donc tout cela devrait être un renversement, mais ici, je ne le commence pas comme un renversement Donc, le crochet est ici et se ferme ici. Cela devrait fonctionner maintenant. Ouais. C'était donc ma photo, mais essayons une photo plus stimulante maintenant. Celui-ci, ici. Nous avons donc deux visages qui ne sont pas très clairs. Il ne s'agit pas d'une véritable phase frontale. Ce type, ici, a les yeux fermés et son menton n' est pas visible. Et nous avons également ces deux visages dans les journaux, ce qui m'a permis d'ouvrir l'image originale d'ici, qui a essentiellement une très faible résolution, et je pense que Python ne sera pas capable de détecter ces deux visages. Alors laisse-moi vérifier ça. Voici notre détecteur de visage, et nous voulons transmettre le nom du nouveau fichier image. Enregistrez le script et lancez-le. Nous en sommes donc à un retour à la réalité. Et comme vous le voyez cette fois, Python et OpenCV ont pu détecter cette phase, même si elle n'est pas dans une position très frontale Et évidemment, il a également pu détecter la main de ce type. Python le lit donc comme une phase. Et ce que vous pouvez faire dans ce cas c'est modifier ces valeurs ici, donc le facteur d'échelle et les voisins minimaux Vous serez peut-être également intéressé de savoir que le tableau des phases contient deux listes dans ce cas. Il s'agit donc de la première phase, des coordonnées de la première phase, puis de la deuxième phase. qui, dans ce cas, se trouve être une question de main, mais de toute façon, vous avez compris l'idée. Donc, probablement en utilisant une échelle de 1,1, vous pourrez peut-être vous débarrasser de cette main. Donc oui, c'est ça. Vous pouvez également essayer de détecter le rythme de ce type, mais je ne pense pas que vous y arriverez. Juste pour que vous sachiez que ces techniques ont leurs limites. C'est donc un ordinateur. Ce n'est pas un être humain, il y aura donc toujours des inconvénients en termes de précision J'espère que vous avez trouvé cela si bas, et je vous verrai lors de la prochaine conférence. 120. 119. Capturer une vidéo avec OpenCv et Python: Bonjour, bienvenue à cette nouvelle conférence. Et dans cette conférence, nous utiliserons OpenCV pour capturer des vidéos à partir de la webcam de l'ordinateur. Vous aurez donc besoin d'OpenCV et vous importerez en tant que CV deux, comme vous le savez déjà OpenCV est ce que nous utilisons pour le traitement d'images et, bien sûr, pour le traitement vidéo, car la vidéo est composée d' Nous avons donc beaucoup d'images et elles sont appelées cadres. Et ces images, ces images s' affichent les unes après les autres à grande vitesse, puis nous pouvons les voir sous forme de vidéo. Et soit vous détesterez cette conférence, soit vous l'adorerez. Ce que nous allons faire, c'est passer à un très faible niveau de traitement d' image en ce qui concerne le traitement vidéo. Nous allons lire les cadres un par un, donc les images une par une. Et vous verrez comment nous utilisons des boucles en Python pour afficher ces images et pour créer une fenêtre dans laquelle les images s'affichent rapidement, et vous pouvez la voir sous forme de vidéo. Donc, si vous avez un ordinateur portable, vous avez probablement une caméra de construction. Si vous avez un ordinateur de bureau sans caméra, vous aurez besoin d'une caméra externe pour me suivre dans cette conférence. Et maintenant, la première chose que vous voudrez peut-être faire est de lire une vidéo. Ensuite, une fois que vous avez lu une vidéo, vous pouvez lire une vidéo soit à partir de la webcam, soit à partir d'un fichier vidéo. Et une fois que vous avez lu la vidéo, vous pouvez appliquer d'autres opérations telles que le grisonnement de la vidéo ajout de texte à la vidéo ou la détection d'objets dans la vidéo, etc. Donc, la première chose que vous voulez faire est de créer un objet, disons, une vidéo, et cela sera équivalent à une capture vidéo par point CV. C'est donc la méthode qui déclenche un objet de capture vidéo. Et cela donne ici un argument, qui peut être un nombre tel que zéro, un, deux, trois ou le chemin du fichier vidéo. Ainsi, lorsque vous entrez un chiffre, cela signifie que vous capturez une vidéo à partir d'une caméra. Disons que j'ai une caméra intégrée dans mon ordinateur, mais aussi une caméra externe. Dans ce cas, l'une de mes caméras aura un indice de zéro, l'autre aura un indice de un, et si j'ai une troisième caméra, elle aura un indice de deux et ainsi de suite. Alors c'est tout. Si vous aviez un fichier vidéo, vous pourriez simplement dire Movie Dot MP Four ou quelque chose comme ça. Cela dépend du nom de votre fichier vidéo, et vous devez avoir ce fichier quelque part sur votre ordinateur. Mais dans cette conférence, nous parlons de la capture vidéo à partir de la webcam. Je n'ai donc qu'une seule webcam dans mon ordinateur, donc je vais passer à zéro ici. C'est ça. Une fois que vous l'avez fait, vous devez vous assurer que vous allez publier. La caméra. Vous souhaitez donc accéder à votre objet, Video Dot Release est la méthode. Et puis vous n'avez pas besoin d'y faire passer d'arguments. Voyons donc ce que nous aurons si nous exécutons cela. Ce fichier Python. Python, capture point pi est le nom de mon fichier. Et évidemment, rien ne se passe. Mais de mon côté, j'ai remarqué que mon appareil photo était allumé pendant une seconde ou une fraction de seconde. La lumière de la caméra a donc été allumée, puis elle a été fermée. Il a été immédiatement éteint. Donc, ce qui se passe, c'est que nous déclenchons la caméra ici, la webcam, puis nous la relâchons immédiatement. Python va donc ouvrir la caméra et la relâcher en une milliseconde environ Laisse-moi réessayer. Parfois, il peut arriver que vous ne voyiez même pas de lumière du tout. Vous ne le voyez donc pas car le processus se déroule très rapidement. Votre ordinateur a donc probablement besoin quelques secondes pour allumer la lumière de votre appareil photo. Et on peut lui donner quelques secondes, donc. Pour ce faire, vous souhaitez importer la bibliothèque de temps intégrée. La bibliothèque de temps fournit certaines opérations liées au temps. Ainsi, par exemple, dans notre cas, nous l'utiliserons pour maintenir le script pendant 3 secondes. essaiera donc d' Python essaiera donc d'exécuter le script ligne par ligne, afin d'importer le CV deux à temps, puis de déclencher la caméra. Ensuite, avant de relâcher la caméra, nous ferons attendre le script pendant 3 secondes. Cela sera donc exécuté. Patientez 3 secondes, puis exécutez l'autre méthode. C'est ça. Maintenant, laissez-moi l' exécuter à nouveau. OK, la lumière est allumée. Un, deux, trois, c'est parti. Ouaip. Et la vidéo est publiée. Maintenant, vous vous demandez peut-être pourquoi ne voyons-nous pas votre visage apparaître dans la caméra vidéo de la fenêtre ? Eh bien, la raison en est la suivante : voyez-vous une ligne où je montre une fenêtre ? Non. Alors pourquoi tu t'attends à ce que mon visage y apparaisse ? Pour ce faire, nous créons d' abord un objet cadre qui lira les images de cet objet de capture vidéo. Et permettez-moi de le faire d'abord avant d'entrer dans d'autres explications. Alors laissez-moi dire check frame. Cela équivaudrait à un point vidéo ROUGE, juste comme ça. Donc, ce que nous lisons ici, c'est que nous avons un type de données booléen et un tableau d'arbitres Alors laissez-moi l'imprimer pour que vous compreniez mieux. Vérifiez donc d'abord , puis imprimez le cadre. OK ? Exécutez le script. Patientez 3 secondes et fermez-le. Donc, ce que nous avons ici, c'est que je vais développer cela. Nous avons donc opté pour la variable check. Et nous avons le tableau numpi, qui représente l'image Cette image est en fait la première image capturée par la vidéo. Cette année, le lingot, nous pouvons l'utiliser pour diverses opérations telles que vérifier si la vidéo fonctionne ou non Vous devrez donc peut-être vérifier cela lors de l'exécution de vos programmes. Et le cadre est le plus important , car nous utiliserons l'objet cadre Nous allons donc utiliser ce tableau d'arbitres, qui est un tableau tridimensionnel car c'est une image en couleur, elle comporte donc trois bandes Et vous l'avez appris lors des conférences précédentes où nous avons traité des images. OK. Et nous allons parcourir ce cadre et le montrer en utilisant la méthode d'affichage d'image. Je montre donc la méthode d'affichage de l'image de la bibliothèque CV Two. Nous allons donc afficher de manière récursive chaque image vidéo capturée J'espère donc que cela a du sens. Donc, avant de le faire de manière récursive, je voudrais montrer une fenêtre ici. Donc, voici le CV 2, et donnons un nom à la capture de fenêtre et passons l'objet du cadre dedans. N'oubliez pas non plus que lorsque vous passez une méthode d'affichage d'image, exemple lorsque vous affichez une fenêtre, vous devez vous assurer que la fenêtre est fermée. Et vous le faites en utilisant la méthode de la touche de poids Cv, et vous pouvez passer zéro pour vous permettre d'appuyer sur n'importe quel bouton et de fermer cette fenêtre. Et ce que vous voulez faire, c'est que CV Two détruit toutes les fenêtres. Ainsi, lorsque vous appuyez sur ce bouton, vous détruisez toutes les fenêtres. Et en fait, vous voulez le mettre ici, afin que la vidéo ne soit pas publiée avant que vous n'appuyiez sur cette touche. Ce qui se passe, c'est que Python exécute ces lignes, puis il attend que vous appuyiez sur la touche, puis il publie la vidéo, puis il détruit la fenêtre réelle que vous voyez à l'écran OK, voyons ce qui va se passer maintenant. Surprise, je n'ai que deux dents. Tu ne le savais pas. OK, je plaisante. J'en ai plus. Mais ce que Python a fait ici, c'est qu'il a déclenché la caméra. Il a donc déclenché la caméra ici, puis il a lu la première image de la vidéo. Donc, dès que la caméra se déclenche, la caméra lit la première image , puis nous l'avons imprimée et elle se trouve quelque part dans la ligne de commande, puis le script est quelque part dans la ligne de commande, resté en veille pendant 3 secondes, donc il n'a rien fait. Il a attendu 3 secondes, puis en CV deux avec la méthode AMShow, il a créé une fenêtre dans laquelle il a montré la première image de la vidéo La photo que vous venez de voir est donc la première image de la vidéo. Et puis le cadre lui-même, la fenêtre, est toujours ouverte, donc il attend que nous appuyions sur une touche. Donc, si j'appuie sur une touche maintenant, ces deux dernières lignes seront exécutées. Cela signifie donc que la vidéo sera publiée et que cette fenêtre sera détruite. Donc, appuyez sur la touche, et oui, c'est arrivé. Python traite donc une image vidéo comme de simples images. Cela signifie que vous pouvez également appliquer des méthodes telles que CV à deux points, couleur CVT Vous pouvez transmettre ce cadre ici, puis l' enregistrer dans la couleur gris BGR. Enregistrez-le dans une variable grise. Donc, ce que je fais, c'est convertir le cadre, donc le cadre couleur, en une image grise. Et en fait, je dois le faire ici. Ensuite, je peux montrer la version en niveaux de gris de l'image ici. OK, laisse-moi réessayer. Il s'agit donc d'une version en niveaux de gris affichée l'aide de la méthode imshow. C'est donc l'idée. Maintenant, pourquoi ne pas y montrer une vraie vidéo, pas une seule image ? Eh bien, la réponse est que nous devons utiliser une boucle sauvage ici. La raison pour laquelle nous devons le faire est qu'une boucle while exécute certaines instructions à l'infini jusqu'à ce que certaines instructions à l'infini vous interrompiez la boucle à un moment donné en utilisant des instructions telles que break, par exemple L'idée est donc que nous devons mettre tout le code ici. Nous devons donc le mettre dans une boucle temporelle, et c'est exactement ce que je vais faire. Vous pouvez donc soit utiliser un raccourci clavier en fonction de votre clavier soit accéder à édition de lignes, puis mettre en retrait pour mettre en retrait ces Voici donc un raccourci. Mais de toute façon, alors vous voulez écrire en étant vrai. Et puis tout s'enfonce dans la boucle aussi simple que cela. Mais nous n'avons pas encore terminé. Nous avons d'autres choses à faire ici. Mais avant tout, j'aimerais vraiment m'assurer que vous comprenez la boucle Wil. Permettez-moi donc de déclencher rapidement la console Python ici. Donc, ce que fait la boucle Wil, c'est que, si elle est vraie, c'est imprimer. Disons un. Si vous l'exécutez maintenant, l'un d'eux sera imprimé à l'infini Ma console est donc très occupée ici, et je peux l'interrompre interrompant le clavier , donc contrôlez C ou contrôlez cela si cela ne fonctionne pas. Wilby dit donc que même si c'est vrai, ce qui sera toujours vrai, exécutez ces lignes Mais si j'essaie de l'exécuter maintenant, Python déclenchera la capture vidéo et affichera la fenêtre, mais ce n'est qu'une seule fenêtre. Une simple image est donc la première image de la vidéo. Parce que ce qui se passe, c'est que la boucle de fil démarre, mais elle disparaît. Il crée une image, la première image de la vidéo. Ainsi, l'image actuelle, qui est la toute première image où la vidéo commence, convertit ensuite l'image en une image en niveaux de gris. Et puis ça glisse pendant 3 secondes, d'accord ? Ensuite, il montre l'image. Et puis, ce que fait la boucle i ici, elle attend que vous appuyiez sur une touche Ensuite, si vous appuyez sur une touche, le processus s'arrête. Donc, ce que vous pouvez faire dans ce cas, c'est en saisir un autre. Laissez-moi y faire de la place. Vous devez donc modifier cette valeur ici, donc les arguments. Lorsque nous entrons zéro, cela signifie que toute touche que vous appuyez sur le clavier ferme cette fenêtre. Mais si vous entrez, disons, 2000, cela signifie que le script attendra 2000 millisecondes, soit Et voyons ce qui va se passer ici. Donc, il montre d'abord mon visage, puis il attend 3 secondes ici. Ensuite, il attend encore 2 secondes. Ensuite, il montre l'autre image. C'est donc très lent, juste comme ça. OK. Maintenant, si vous appuyez sur n'importe quelle touche, rien ne se passera car vous supprimez le zéro d'ici. Dans ce cas, je vais arrêter de force le script ici, Control C. Nous n'avons plus besoin de ce bordereau temporel, et nous avons également besoin d'un conditionnel ici Et avant cela, nous allons enregistrer cette action dans une variable clé. Ensuite, nous disons que la touche I est égale à ou à la méthode, puis vous passez une touche du clavier. Donc, si le est égal à Q, alors interrompez la boucle while. Et disons 1 000 cette fois. OK. Maintenant, ce que cela va faire, c'est qu'il va capturer la vidéo, je vais démarrer la vidéo, puis elle va itérer sur toutes ces lignes Il créera donc un cadre, convertira en gris et affichera le cadre ici, puis il attendra 1 seconde. Et si vous appuyez sur la touche du clavier, cela rompra la boucle du fil. Et puis s'il se casse et que la vidéo publiée sera exécutée, la vidéo s'arrêtera et la fenêtre sera détruite. Mais si vous n'appuyez sur aucune touche, cela attendra 1 seconde, puis l'image suivante s'affichera. Et puis après 1 seconde, il affichera l' image suivante et ainsi de suite. Alors, enregistrez le script, exécutez-le. La vidéo s'améliore donc. Oui, ça a l'air bien maintenant. OK, si tu appuies sur Q, tu l'arrêteras. OK, améliorons-le davantage. Pourquoi pas une milliseconde ? Salut, comment allons-nous ? Donc, ça marche bien. Et vous pouvez également voir ici que le lingot de chèques, le NumPirea, est imprimé à chaque itération Et on peut arrêter ça maintenant en appuyant sur Q, juste comme ça. Maintenant, si vous voulez savoir combien d'images sont générées, il existe une astuce intéressante que nous pourrions faire. Nous pourrions créer une variable, disons que égal à un en dehors de la boucle y. Et puis ici, vous dites que A est égal à A plus un. Ensuite, une fois la boucle interrompue , vous devez imprimer A. Donc, lorsque vous exécutez le script, A obtient la valeur un, puis lorsque la boucle murale commence à s'exécuter, elle passera par la première itération et augmentera la valeur A d'un A est donc égal à un plus un. Il y en aura donc deux. A sera donc mis à jour à deux. Ensuite, il remontera jusqu' à la fin, puis il redémarrera. Donc, cette fois, ce sera à nouveau A, égal à deux plus un. A sera donc égal à trois à la deuxième itération, et ainsi de suite, ou vous pouvez le mettre à un en fait Donc, si nous avons deux itérations, cela signifie que A sera deux, et si nous en avons trois, ce sera trois et ainsi de suite Ensuite, nous imprimons A ici en dehors de la boucle, d'accord ? Et voyons ce que nous avons. Je vais faire tourner la vidéo pendant 3 secondes, et nous verrons combien d' itérations nous aurons Alors, capturez un, deux, trois, et arrêtez. La dernière valeur imprimée ici est donc une valeur. Cela signifie que nous avons effectué 51 itérations en 3 secondes environ , soit, disons, environ 20 images par seconde Donc, notre appareil photo, mon appareil photo capture 20 images par seconde. Permettez-moi de l'exécuter une dernière fois, la dernière fois. Donc, si je mets mon doigt ici dans l'appareil photo, j'ai masqué l' image et vous verrez que le tableau numpy est maintenant nul, zéro, zéro En raison des cadres de l'image, elle ne contient que des valeurs nulles. Il n'y a donc aucune intensité dans l'image. Oh. OK, c'est ce que je voulais vous montrer dans cette conférence. Donc, comme je l'ai dit, une fois que vous avez ces cadres, vous pouvez leur appliquer des opérations, afin d'y dessiner des rectangles, détecter des images, etc. C'est ce que nous allons faire, afin de créer notre application du monde réel. En implémentant une détection de mouvement dans nos images, nous capturerons ensuite les fois où un objet entre dans notre image ou notre vidéo, et nous aurons une liste de ces moments. J'espère donc que vous aimez cette conférence, pas que vous l'avez détestée, et je vous verrai à la prochaine. 121. 120. App 3 : application de détection de mouvement pour webcam: Bienvenue à cette nouvelle conférence, bien sûr, est très spéciale. Il se trouve que je suis devant la caméra parce que dans cette conférence, vous allez créer un programme qui détecte les objets en mouvement devant la webcam d'un ordinateur. Et puis ce qu'il fait, il enregistre l'heure à laquelle l'objet est entré dans la webcam. Donc, l'image vidéo et l'heure à laquelle l'objet est sorti de l'image vidéo. Il y a donc maintenant un objet en mouvement. Dans le cadre, et si je m'en vais, vous verrez qu'il n'y a plus de rectangle vert dans la vidéo. Et maintenant je réapparais, déménage à nouveau, et ainsi de suite. Nous allons donc créer cette application à partir de zéro en utilisant Python. Oui, nous avons beaucoup de choses à apprendre, comme le traitement d'image et le traitement vidéo, etc. Enfin, ce que nous faisons, si vous appuyez sur Q pour arrêter, vous obtenez un graphique. Et comme je l'ai dit, le graphique indiquera les moments où l' objet est entré dans le cadre. Nous avons donc affaire à un graphique interactif. Et oui, ce sont les moments où l'objet est entré dans la webcam, comme ici, et ici ça dure plus longtemps. Et donc, eh bien, cela peut être une excellente application si vous souhaitez détecter des objets. Vous pouvez placer cette application de ce programme Python dans le serveur Raspberry, par exemple, qui est un petit serveur, et vous pouvez la placer quelque part où vous voulez peut-être détecter des animaux. Vous voudrez peut-être savoir quand cet animal entre dans le cadre et quand il en sort ou avec des personnes, le cas échéant Donc oui, c'est un programme, et j'espère qu'il vous plaira. Nous avons beaucoup de code à écrire, alors commençons, et je vous en parlerai lors de la prochaine conférence. 122. 121. Détection d'objets mobiles à partir du webcamp avec Python: Hey, nous y revoilà. Et dans cette conférence, nous continuerons à développer notre programme de détection de mouvement dans le monde réel. Maintenant, avant de commencer à écrire le code, j'aimerais d'abord vous expliquer l'architecture du programme que nous allons construire. Alors, comment ce programme est-il capable de détecter le mouvement dans la vidéo ? Et je suppose que vous savez déjà comment créer ce script. Nous l'avons donc développé dans les conférences précédentes. Et ce que fait ce script, au cas où vous l'auriez manqué, c'est Hey. Cela déclenche donc la vidéo, comme vous. Depuis la webcam de l'ordinateur. Nous traitons donc les images ici dans cette boucle de Wile, et ainsi de suite Donc tu le sais. Je ne vais pas les passer en revue pour l'instant. Donc, ce que nous devons faire ensuite, c'est traiter les images qui sont itérées dans cette boucle Wile Et j'ai quelques photos ici pour illustrer mes idées, mes concepts. Permettez-moi d'aller au répertoire où ils se trouvent. Donc ce que fera ce programme de détection de mouvement c' est qu'il déclenchera la webcam comme le fait notre script actuel. Et l'une des conditions pour que le programme fonctionne correctement est qu'une fois que vous avez déclenché la webcam, la première image de la vidéo doit être l'arrière-plan statique. Donc, si vous envisagez d'utiliser ce programme, supposons que vous configuriez une webcam sur un ordinateur portable ou un serveur Raspberry Pie. Supposons que vous souhaitiez détecter le mouvement d'un certain animal dans une zone. Donc, vous voulez d'abord déclencher la caméra alors que l' arrière-plan est statique, puis vous voulez utiliser cet arrière-plan comme image de base afin de pouvoir comparer les autres images. Python peut alors détecter s'il y a un changement entre la première image et les images suivantes. C'est donc une chose que tu dois faire. Voici donc un exemple de contexte. Et puis quelque chose, l'animal apparaîtra sur votre appareil photo. Ensuite, ce que vous devez écrire dans votre script dans le programme, c'est d'abord nous voudrions griser cette image, donc l'image d'arrière-plan et le cadre actuel de la caméra. Vous allez stocker la première image de la capture vidéo dans une variable, puis vous allez convertir cette image en image en niveaux de gris Ensuite, l'iloop parcourra les images en cours et vous ferez de même pour l'image en cours. Vous les convertirez donc en niveaux de gris , Vous les convertirez donc puis vous appliquerez ces deux images en niveaux de gris boucle la différence entre ces deux images en niveaux de gris de l' itération en cours de la C'est la différence, un exemple de trame de différence de trame Delta, si vous pouvez le dire comme ça. Sur cette image en particulier, vous remarquerez que derrière moi, il y a une lampe de la pièce. Normalement, vous ne pouvez pas voir la lampe, mais Python fait la différence entre le cadre où j'apparaissais et le cadre d'arrière-plan où la lampe est visible. Il en résulte donc cette image grise où chaque pixel a une certaine valeur. Il a donc des valeurs d'intensité. C'est bon. Cela signifie, par exemple, que les valeurs d'intensité élevées comme celle où je me trouve indiquent qu'il y a un mouvement potentiel dans cette zone ici. Alors que les zones noires indiquent qu'il n'y a aucun mouvement. Mais vous voyez aussi des pixels clairs et noirs ici parce que lorsque j'apparais devant la caméra, il y a de l'ombre derrière moi, etc. Mais nous appliquerons quelque chose d'autre plus tard, qui s'appelle le seuil. Nous allons donc dire que si vous voyez une différence dans le cadre Delta dans le cadre que je viens de vous montrer, si vous constatez une différence d'intensité supérieure à 100, convertissez ces pixels en pixels blancs, d'accord ? Et pour les pixels inférieurs au seuil, convertissez-les en noir. D'accord. Vous obtenez donc le contour de l'objet qui se déplace dans la caméra dans le cadre. Nous effectuons donc tous ces processus à l'intérieur de la boucle. Ensuite, une fois que nous avons calculé le cadre de seuil à l'intérieur de la boucle, nous allons trouver les contours des objets blancs dans le cadre pour le cadre actuel . D'accord. Donc, pour cette image en particulier, nous aurions des contours autour de cet objet ici et des contours autour de celui-ci et autour de celui-ci également. Ensuite, nous allons écrire une boucle à quatre boucles qui parcourra tous les contours du cadre actuel. Il ira de ce contour à celui-ci, à celui-ci et à celui-ci. Ensuite, à l'intérieur de cette boucle, nous allons vérifier la zone des contours. Cela a donc, par exemple, une surface de, disons, 500 pixels. Ainsi, si la zone du contour est supérieure à 500 pixels, par exemple, considérez cela comme un objet en mouvement. Si la zone est, disons, inférieure à 500, comme celle-ci est probablement de 20 pixels, disons que cela ne sera pas considéré comme un objet en mouvement. J'espère que cela a du sens. Ensuite, nous allons dessiner un rectangle autour des contours supérieurs à la surface minimale. Cela affichera ces rectangles dans l'image d'origine. Donc, dans la version couleur du cadre actuel. Cela signifie que nous verrons un rectangle dans la vidéo pendant que la vidéo est en cours de lecture, nous verrons un rectangle autour de l'objet. Plus tard, nous détecterons le moment où l'objet, l'objet en mouvement, est entré dans l' image vidéo au moment où l'objet est sorti de l'arrière-plan Mais pour l'instant, concentrons-nous simplement sur la détection de l'objet, l'objet en mouvement dans la vidéo. OK, et revenons au script. Fermez ceci, ceci et cela. D'accord. Et supprimons ici quelques lignes inutiles. Nous avions donc une variable ici, que nous avons créée parce que nous voulions voir nombre d'images que nous avions dans la vidéo. Nous n'en avons donc plus besoin, et nous n'avons pas besoin que le script s'arrête pendant 3 secondes. J'enlève donc le temps qui a glissé et celui que j'ai vu. D'accord. Et maintenant, la première partie est la plus délicate Nous devons trouver un moyen de stocker l' image actuelle de la vidéo. Ainsi, dès que la vidéo démarre, nous voulons stocker ce tableau numérique dans une variable et avoir cette variable statique Nous ne voulons donc pas modifier la valeur de cette variable pendant que la boucle s'exécute dans le script Et pour ce faire, nous devons d'abord créer un cadre variable pour le premier cadre. Nous devons donc lui attribuer une valeur non valable. Aucune n'est donc un type de données Python spécial qui vous permet de créer une variable et de ne rien lui attribuer, mais vous avez la variable là. Donc, si vous appelez cette variable ultérieurement, Python ne dira pas que la variable n'est pas définie. OK, si vous ne le comprenez pas, veuillez patienter et vous l' aurez dans un moment. Et ce que vous devez faire maintenant, c'est écrire un conditionnel et y appliquer une instruction continue. Laissez-moi d'abord écrire le conditionnel , puis je vous expliquerai à quoi cela sert. Nous voulons donc vérifier si le premier cadre n'est pas et s'il est connu, nous allons attribuer le premier cadre, le cadre gris. Cela fait donc que le script s'exécute, la vidéo se déclenche. Ensuite, la boucle filaire commencera à fonctionner, et elle obtiendra la première image ou vidéo, et elle la stockera dans cette variable d'image. Cette variable de cadre sera convertie en cadre gris. Ensuite, nous disons que si la première image est connue, ce qui est vrai lors de la première itération de la boucle, c'est vrai La première image est donc en fait non car nous n'en attribuons aucune ici. Assignez le NumPi à la première image. Ainsi, à la première image, vous obtiendrez l'image en niveaux de gris, qui représente la toute première image de la vidéo Cela se produit donc dès la première itération de la boucle, d'accord ? Mais ensuite, Python exécutera ces autres lignes de code, puis passera exécutera ces autres lignes de code, à la deuxième boucle. Et ce que Python va faire, c'est saisir la deuxième image de la vidéo. D'accord ? Supposons que la première image soit une image d'arrière-plan, puis qu'un objet apparaisse soudainement dans l'appareil photo devant l'appareil photo. Python va donc récupérer un tableau d'arbitres contenant cet objet Ainsi, le deuxième cadre et ce cadre seront convertis en gris. Ensuite, nous disons que si la première image n'est aucune, la première image est variable, nous allons obtenir la première image de la vidéo. Et une fois que nous avons saisi la première image, nous ne voulons pas que ces autres lignes de code soient exécutées. Parce qu'ici, nous allons appliquer la différence entre les cadres et nous allons flouter les cadres et ainsi de suite Nous ne voulons donc pas qu'ils soient exécutés. Nous voulons plutôt que Python aille au début de la boucle et continue avec la deuxième image. Pour ce faire, nous devons continuer ici. Cela signifie donc continuer jusqu'au début de la boucle et ne pas exécuter le reste du code. D'accord. La première image est donc nulle. La première image obtient la valeur de la première image de la vidéo, puis passe à l'itération suivante Ensuite, à l'itération suivante, nous allons saisir la deuxième image de la vidéo, puis elle calculera la version grise de cette image Et puis on passe à nouveau au conditionnel. Et dans ce cas, la première image est-elle nulle ? Non, ce n'est pas parce que la première image a obtenu la valeur de l'image grise lors de la première itération de la boucle while Donc, ces lignes ne seront pas exécutées à la deuxième itération de la boucle, d'accord ? Génial. Cela signifie que nous pouvons maintenant appliquer un cadre Delta, afin de calculer la différence entre le premier cadre et le cadre actuel de l'image. La première image est donc la première variable de cadre et le cadre actuel est une variable grise. Mais avant cela, nous aimerions modifier le cadre actuel de l'image. Nous voulons appliquer un flou gaussien à l'image. Et un point ici. Donc, la raison pour laquelle nous voulons appliquer flou gaussien est que nous voulons brouiller l'image, donc la rendre floue, donc la lisser, car cela supprime bruit et augmente la précision un flou gaussien est que nous voulons brouiller l'image, donc la rendre floue, donc la lisser, car cela supprime le bruit et augmente la précision du calcul de la différence. Cela permet donc d'obtenir en paramètre l'image que vous souhaitez flouter Ensuite, nous transmettons l'image grise ici et nous stockons nouveau la version floue de l' image dans l'image grise Et puis nous avons un autre paramètre qui se présente sous la forme d'un tuple, et ici nous devons transmettre la largeur et la hauteur du noyau gaussien Quels sont donc essentiellement les paramètres du flou, mais 21 seraient des nombres acceptés Et vous avez également besoin d' un autre paramètre perdu. Ce serait donc l' écart type et je passerai zéro. Ici, le zéro est également couramment utilisé. Si vous voulez en savoir plus à leur sujet, vous pouvez consulter la documentation, mais ces valeurs seraient utiles. Nous rendons donc l'image grise floue ici. Ensuite, ici, nous devons comparer le premier cadre de l'image, donc l'arrière-plan avec le cadre actuel. Appelons cela le cadre, et cela serait égal à la différence entre les applications CV point. Donc différence absolue entre le premier cadre et le cadre actuel, qui est gris. Notez que le premier cadre sera également une version grise, une version grise floue, en fait Nous comparons donc ici à des images floues en niveaux de gris. D'accord ? Et ça va nous donner une autre image, d'accord ? Et en fait, j'aimerais montrer cette image ici à l'écran. Affichage de l'image CB Two. Châssis Delta. Voyons ce que nous en retirerons. Et avant d'exécuter le script, je vais d' abord disparaître de la vue, puis nous apparaîtrons. Encore une fois, voyons voir. OK, rien ne s'est passé car j'ai oublié de saisir le nom de la fenêtre. Appelons cela Delta. Châssis. Et disons un cadre gris pour cela. Maintenant, laisse-moi le refaire. Et je suis là. Il s'agit donc d'une version floue en niveaux de gris qui se trouve ici, et nous avons la différence D'accord. Vous pouvez donc voir la lampe derrière moi dans le cadre Delta. Génial. Appuyez sur le Qiki et quittez la vidéo Maintenant, si je veux imprimer, juste pour vérifier le cadre delta, cela nous permettra de voir la différence entre les intensités des pixels correspondants Alors laisse-moi voir. Et si j'arrête ça maintenant. Allons-y. Donc, ce que nous avons ici cinq signifie qu'il n'y a aucune différence. Donc, dans cette zone, il n'y a probablement aucun mouvement, mais vous en avez 174, qui sont assez blancs. Cela signifie donc que Python classera cela comme du mouvement. OK, c'était juste pour vous montrer les valeurs du bloc de données. Il nous faut maintenant classer ces valeurs. Supposons donc que nous voulions attribuer un seuil. Supposons donc que nous ayons des valeurs supérieures à 30, donc si la différence entre la première image et l'image actuelle est supérieure à 30, nous les classerons en blanc. Nous allons donc dire qu'il y a probablement du mouvement dans ces pixels. Il y a donc un objet dans ces pixels. Et si la différence est inférieure à 30, nous lui attribuerons un pixel noir. D'accord ? Nous pouvons donc le faire. Nous sommes donc là. Nous pouvons le faire en utilisant la méthode des seuils de la bibliothèque CV two. Supposons que le Delta frais soit égal au cv deux, le seuil. Et ce que cela attend, c'est l'image. Que vous souhaitez définir un seuil, puis vous souhaitez spécifier une limite de seuil. Donc 30 ans, nous en sommes à 30. Et quelle couleur souhaitez-vous attribuer aux valeurs supérieures à 30 ? Eh bien, vous voulez attribuer une couleur blanche qui correspond à la valeur 255. D'accord. Et vous avez également besoin d' un autre argument ici , à savoir la méthode du seuil. Il existe de nombreuses méthodes, mais nous utilisons cette méthode ici. Donc, seuil binaire. Vous pouvez expérimenter avec d'autres personnes si vous le souhaitez. Génial. Voyons maintenant à quoi ressemblera ce cadre Fresh Delta. Le CV 2 montre le cadre, d'accord. Delta frais. Génial. Voyons voir. Apparemment, j'ai écrit le mauvais cadre Delta, pas le cadre Delta. Et encore une faute de frappe dans la ligne 19, qui est ici le CV deux OK, espérons que cette fois-ci fonctionnera. Et encore une erreur. Cette fois, j'ai raté quelque chose. D'accord. Cette méthode ici, donc la méthode du seuil renvoie en fait un tuple avec deux valeurs Et la première valeur est nécessaire lorsque vous utilisez d'autres méthodes de seuil. Ainsi, le premier élément du basculement suggère essentiellement une valeur pour le seuil si vous utilisez d'autres méthodes Mais pour le seuil binaire, il suffit d'accéder au deuxième élément du tuple, qui est le cadre réel renvoyé À partir de la méthode du seuil. Vous souhaitez donc accéder au deuxième élément du tuple. OK, je te promets que c' est une erreur de perte. Génial. Enfin, et c' est le cadre de référence. Vous voyez, vous pouvez y voir mon contour, mais vous pouvez également y voir des zones blanches cause des ombres. Je suis donc détectée en tant qu'objet, mais mes ombres sont également détectées en tant qu'objets. D'accord ? Donc, vous avez compris l'idée. Maintenant, nous pouvons tout de suite utiliser ce cadre Thresh Delta, ai appelé Thresh Je devrais l'appeler le Thresh Frame, vous savez, juste pour la cohérence des noms Nous pouvons donc maintenant créer les contours des objets blancs dans le cadre. Mais avant cela, j'aimerais faire autre chose. J'aimerais retarder ces zones. Je veux donc supprimer les trous noirs de ces grandes zones blanches de l'image. Donc, en gros, je veux assouplir mon cadre de seuil. Et pour ce faire, vous devez utiliser la méthode différée de la bibliothèque CV two. Supposons donc que nous voulions modifier le cadre de seuil, CV deux, DLD. Encore une fois, vous voulez y passer un cadre de seuil Maintenant, si vous avez un tableau de noyaux et que vous voulez que ce processus soit très sophistiqué, vous devez transmettre ce tableau ici. Nous n'en avons pas et nous n'en avons pas besoin Vous devez donc en transmettre aucun pour ce paramètre. Et il y a encore un autre paramètre ici, les itérations. Disons deux. Cela définit donc combien de fois vous souhaitez parcourir l'image pour retirer les semelles. Donc, plus ce nombre est élevé, plus l'image sera lisse. D'accord. Laissez-moi vérifier rapidement. Oh, oui, j'ai changé le nom tout à l'heure, mais je ne l'ai pas changé ici dans la méthode I'm Shaw. Cadre frais. D'accord. Vous remarquerez donc probablement que les zones, les zones blanches, sont maintenant plus lisses. Donc, si je m'en vais, vous ne remarquerez que quelques zones qui sont là à cause de mon ombre. Donc, cela semble fonctionner jusqu'à présent. Créons-le maintenant. Génial. Nous avons donc ces trois cadres. Quelle est la prochaine étape ? Eh bien, nous devons ensuite trouver les contours de ce cadre de seuil dilaté En ce qui concerne la détection des contours avec OpenCV, vous disposez de deux méthodes Vous disposez donc d'une méthode de recherche de contours et d'une méthode de dessin de contours. Et avec la méthode de recherche de contours, vous recherchez les contours votre image et vous les stockez dans un tuple D'autre part, la méthode de dessin des contours dessine les contours d'une image. Donc, dans ce cas, ce que nous voulons faire, c'est trouver les contours, puis nous voulons vérifier la zone des contours. Supposons donc que vous ayez un contour tel qu'un cercle et que vous souhaitiez trouver la zone définie par ce contour. Vous voulez donc stocker ces contours dans un tuple. Vous voulez donc écrire CNTs C et un autre trait de soulignement. D'accord. Ce serait égal à. CV 2, trouvez les contours. Ensuite, vous voulez passer le cadre dont vous souhaitez trouver les contours. Et il est préférable d' utiliser une copie du cadre, afin de ne pas modifier le cadre de seuil. Utilisez donc une copie ici. s'agit donc du premier paramètre, le cadre à partir duquel vous souhaitez trouver les contours, puis vous avez la méthode retrieve. Externe Vous souhaitez donc dessiner les contrastes externes ou les objets que vous trouverez dans l'image Et vous avez encore une autre chaîne d' arguments, un symbole prox. Il s'agit donc d'une méthode d'approximation qu' OpenCV appliquera pour récupérer les contrôles Génial. Donc, ce que nous avons, c'est que nous sommes en train d'itérer dans le cadre actuel. Nous le floutons donc, le convertissons en niveaux de gris , trouvons le cadre delta et appliquons le seuil Donc, l'image en noir et blanc. Ensuite, nous trouvons tous les contours des objets des différents objets de cette image. Ainsi, si vous avez deux zones blanches continues dans votre image, mais qu'elles sont distinctes, vous obtiendrez deux contours. Donc, un contour pour chacune des zones. Ces contours seront stockés dans cette variable CNTs. Nous parlons donc du x actuel. Ce que nous voulons faire, c'est filtrer ces condors Nous voulons donc vérifier que nous voulons conserver uniquement les condors qui ont, disons, une surface supérieure à 1 000 pixels Pour cela, vous devez itérer, disons, pour le contour dans les CNT Et si CV, contour, zone de contour. Ainsi, le contour que nous sommes en train d'itérer, s'il est inférieur à 1 000, continue jusqu'au début des quatre boucles. Cela signifie donc que Python a trouvé trois condors, qu'il passe par le premier et qu'il indique la zone de ce conor Nous utilisons donc la zone conor de la bibliothèque CB two. Si la zone comporte moins de 1 000 pixels, passez au compteur suivant. Passez donc au deuxième conor et vérifiez encore et encore. Sinon, si la surface est supérieure ou égale à 1 000, les lignes suivantes après les quatre boucles seront exécutées. Alors, que voulez-vous faire si un contour est supérieur à 1 000 pixels ? Eh bien, nous voulons dessiner le rectangle entourant ce contour dans le cadre actuel. Assurez-vous donc que vous êtes à l'intérieur des quatre boucles. Nous sommes donc toujours en train d'itérer . Voici donc les paramètres qui définissent le rectangle, qui seraient égaux au rectangle de liaison à deux points CV ou au contour actuel Ainsi, si le contour est égal ou supérieur à 1 000 pixels, donc s'il a une surface égale ou supérieure à 1 000 pixels, cela sera exécuté. Nous créons donc un rectangle, puis nous voulons dessiner ce rectangle de notre cadre à notre cadre actuel. Donc CV deux rectangles. Nous utilisons donc déjà cette méthode dans nos cours sur la détection de phase. Et ici, nous voudrions passer le cadre de couleurs. D'accord. Voilà le cadre, et vous voulez spécifier X et Y. Voici les coordonnées du coin supérieur gauche du rectangle, X Y, et vous voulez également spécifier les coordonnées du coin inférieur droit les coordonnées du coin inférieur droit du rectangle Donc X W juste comme ça. Et aussi la couleur de votre rectangle, voyons voir. Vert et largeur. Disons trois. Donc, ce que nous avons fait dans ces deux lignes, c'est que nous avons créé ce tuple avec ces quatre coordonnées Et ces valeurs, elles seront attribuées automatiquement. Ainsi, X et Y obtiendront la valeur du rectangle reliant cette commande de courant des quatre boucles. Ensuite, ces valeurs seront utilisées pour dessiner un rectangle dans le cadre du cadre actuel. Ensuite, nous voulons montrer cette image actuelle. Permettez-moi donc de l'ajouter ici. Exposition d'images. Appelons cet appel le cadre et le cadre. En fait, cette méthode est un collage, c'est correct. Très bien, laissez-moi essayer le script maintenant. Un CV à deux ne possède aucun attribut find contours. J'ai donc ici un U qui ne devrait pas être là. Essayons encore une fois. Oui, c'est marrant. J'ai tendance à mal taper ce mot « zone de contour ». Ligne 24, retirez le U. Et ça devrait aussi être le contour ici D'accord. Le contour n'est pas redéfini. J'en ai un autre ici. Alors, supportez-moi. Essaie à nouveau Euh, oui, cette fois ça a l' air de marcher. Donc pas d'objets. Objets. Aucun objet. Objets. Génial. Génial. C'est donc ce que je voulais vous enseigner dans cette conférence, et nous continuerons avec les prochaines conférences, car ce que nous avons fait jusqu'à présent c'est que nous pouvons détecter cet objet et nous pouvons dessiner un rectangle autour de cet objet. Mais cela n'est pas très pratique. Je veux dire, dans le monde réel, il ne suffit pas dessiner un rectangle autour de votre objet, et puis c'est tout. Dans la prochaine conférence, nous allons donc enregistrer heures auxquelles l'objet entre dans le cadre lorsque l' objet sort du cadre Nous avons donc quelques lignes supplémentaires à ajouter à ce code. Et je sais que ce code était assez gourmand, mais j'espère qu'il est clair maintenant. Si vous avez des questions, n' hésitez pas à les poser, et je vous verrai lors de la prochaine conférence. 123. 122. Stockage des horodatages de détection d'objets dans un dossier CSV ++: Très bien, j'ai donc mon programme de détection de mouvement ici. Et comme vous le voyez, cela me montre en train de bouger en ce moment. Si je m'éloigne, vous ne pourrez y voir que quelques ombres. Donc, eh bien, c'est génial, mais comme je l'ai dit, vous pouvez stocker les moments où un objet entre dans le cadre pour obtenir quelque chose comme ça. C'est donc la première entrée. Comme heure de début, voici l'endroit où l'objet est sorti du cadre , puis la deuxième entrée de l'objet et ainsi de suite Dans cette conférence, je vais donc vous montrer comment créer cette table à l'aide de ce script. Nous allons donc ajouter un peu plus de code ici. Et pour commencer, il d'abord déterminer le point, la ligne du script où le statut passe, disons, du mouvement au non-mouvement. Il n'y a donc aucun mouvement ici. Donc, dès que la webcam se déclenche, disons, le statut est nul. Donc, juste un symbole que je choisis pour indiquer qu'il n'y a aucun mouvement dans l'image en cours. Vous obtenez donc cette première image, qui a un statut nul, puis vous réduisez, puis vous vérifiez si la première image n'est aucune, puis vous reprenez la boucle, puis vous récupérez la deuxième image. Le statut est donc toujours nul, puis vous appliquez la différence, le seuil, vous le dilatez. Puis parcourez les contours. Donc, si vous trouvez une zone inférieure à celle que j'ai modifiée plus tôt, je la mets à 10 000. J'ai donc voulu détecter des objets plus gros parce que j' étais plus proche de la caméra, alors j'ai voulu l'ajuster. Ainsi, en fonction des objets que vous souhaitez capturer, vous devez ajuster ces pixels ici. 10 000, c'est donc une fenêtre de 100 x 100 pixels. Nous vérifions donc si vous ne trouvez pas de fenêtre supérieure à 10 000, puis vous continuez jusqu'au début de la boucle jusqu'à ce que vous trouviez un contrôle dont la taille est supérieure à celle-ci. Lorsque Python trouve ce contrôle avec cette taille, nous voulons changer le statut en un OK. Et imprimons maintenant cette variable d'état. Donc, ce que vous voulez faire, c'est l' imprimer à la fin de votre boucle, donc status. Et laissez-moi supprimer ces tableaux numpy, qui sont en cours d'impression Nous n'en avons pas besoin et faisons de la place ici. C'est donc dans la boucle, et je m'attends maintenant à voir l' état de un ou de zéro imprimé selon qu' il y a un objet dans le cadre ou non. Donc, si cela fonctionne, signifie que nous avons maintenant l'état réel du cadre, et que nous pouvons utiliser ces 10 pour d'autres choses. Alors voyons voir. OK, il n'y a rien pour le moment. Permettez-moi de minimiser cela afin que nous puissions également voir la console . Génial. Donc, zéro est imprimé, et si quelque chose apparaît, vous en voyez un maintenant. Encore une fois, un, zéro, un, un, zéro. Génial. Nous pouvons maintenant simplement appliquer une méthode date-heure, vous savez, comme le fait actuellement la date et l'heure. Et cela enregistrerait l'heure de chaque image. Ce n'est donc pas exactement ce que nous voulons. Nous voulons utiliser la méthode daytime do now, mais pas comme ça, car cela permettrait d'enregistrer les temps pour chaque image. Nous voulons donc savoir quand le statut passe de 0 à 1, ce qui indique qu' un objet entre dans le cadre Nous voulons donc enregistrer ce temps. Et nous voulons également enregistrer l'autre fois où le statut change de 1 à 0, sorte que l'objet quitte le cadre Disons une liste d'état, ce serait égal à des crochets vides, une liste vide. Ensuite, je veux ajouter le statut de l'objet à cette liste Donc, une fois cette boucle terminée, qui est là, je veux être ici au même niveau que la boucle, donc je veux appliquer quelque chose en dehors de la boucle. Donc, liste de statut, je veux ajouter l'état actuel de la liste ici dans cette liste de statut Génial. Et pour illustrer, pour vous montrer en quoi consiste cette liste de statut, j'aimerais l'imprimer , en fait. Et je voudrais imprimer une liste en dehors de la boucle filaire, donc je ne veux pas l'imprimer à chaque itération de la boucle. Donc du mouvement ici. Et arrête. Voici donc les statuts de chacune des images. Donc zéro, zéro, zéro, aucun mouvement, et puis quelque chose est entré dans le cadre. Et ce quelque chose est entré, disons, 30 images, puis l' objet sort du cadre Et c'est tout. Ce que nous voulons faire maintenant, c'est saisir ce qui va suivre. La prochaine étape est donc de capturer le temps pendant lequel nous passons de 0-1 à 1-0 Donc, en gros, ce qui nous intéresse, c'est de capturer les deux derniers éléments de la liste de statut. Supposons donc que nous ayons le statut zéro. Nous commençons donc avec une liste vide, et le premier élément qui sera ajouté à la liste de statut est zéro Et puis le deuxième élément, disons, sera zéro ou disons que ce sera un. Nous voulons donc appliquer le conditionnel pour vérifier si les deux derniers éléments de la liste changent. Je sais donc que cela peut prêter à confusion, mais une fois que j'aurai écrit ces quatre lignes de code ici, vous le comprendrez et cela aura beaucoup de sens. Nous voulons donc vérifier si le statut est répertorié. Ainsi, le dernier élément de la liste de statut, dont l'indice est inférieur à un, souvenez-vous de l'indexation des listes, si celui-ci est égal à un, et de la liste des statuts dont l' indice est inférieur à deux Ainsi, l'élément qui a été ajouté en premier est égal à zéro. Nous voulons enregistrer le jour de cet événement dans une liste. Créons donc une liste ici, disons que le temps est égal à vide. Ensuite, nous allons ici, ici, et nous disons que les heures s'ajoutent, jour, les points maintenant, vous connaissez déjà cette fonction Nous voulons donc ajouter l' horodatage actuel lorsque ce Cela signifie donc que nous devons importer ou partir de la date, de l' heure, de la date et de l'heure d'importation. Donc, cours diurne de la bibliothèque datetime. Nous enregistrons donc essentiellement l'heure à laquelle le statut est passé à un. Et nous voulons également enregistrer l'heure à laquelle le statut change de 1 à 0. Nous aurions donc une condition similaire, mais celle-ci serait nulle, et celle-ci serait une. OK. Donc, ce qui se passe ici, c'est que nous allons revenir au début de la boucle. Python a donc capturé la première image, convertit en gris, la floue et y applique un flou gaussien à Ensuite, nous stockons la première image dans la première variable d'image, puis nous calculons la différence entre la première image et l' image actuelle, nous trouvons des contours, puis si ce faible trouve des contours supérieurs à 10 000, la variable d'état passe de zéro, elle a donc commencé à zéro, donc elle change à un ici. Cela signifie que cette liste de statut vide aura une autre valeur. Mais la première valeur étant toujours zéro, la liste commencera par zéro. Tu sais, comme ici. La toute première valeur est donc zéro. Disons que pour les dix prochaines images, ce sera zéro, zéro, zéro, zéro, etc. Et puis si un objet entre dans le cadre, le statut passe à un. Nous aurons donc zéro, zéro, zéro, zéro, puis un. Ensuite, ce que nous faisons ici, c'est comparer les deux derniers éléments de la liste. OK. Et ici, j'aimerais imprimer la liste des horaires pour que vous puissiez voir ce qui se passe. Et je m'attends à une erreur lors la première exécution car nous avons encore quelque chose à faire, mais voyons voir. Donc, oui, cela indique que l'index de la liste est hors de portée. Cela signifie donc que Python a du mal à accéder au deuxième élément de la liste car la liste ne contient aucun élément ici, elle n'a donc aucun élément. Ensuite, nous ajoutons un élément, donc nous ajoutons un statut. Ensuite, Python essaie de trouver le deuxième élément, mais il n'y en a pas. Nous devons donc faire un truc ici. Nous devons ajouter deux éléments. OK. Disons qu'aucun et aucun. Maintenant, exécutons à nouveau le script. Il n'y a donc aucun objet pour le moment. Maintenant qu'un objet apparaît, il repart deux fois et une fois de plus. Donc trois entrées. Et j'ai arrêté. Alors laissez-moi passer en revue cette liste maintenant. Voici notre liste de temps. C'est donc le moment. Voici donc le mois, le jour, et combien de minutes et de secondes, puis de microsecondes. Il s'agit donc de l'heure de début à laquelle un objet est entré dans le cadre pour la première fois. Et puis c'est le moment où l'objet sort du cadre. Je suis donc restée là pendant 2 secondes, donc 51 à 53. L'objet suivant entre dans le cadre. Donc, de cette seconde à cela, donc pendant deux autres secondes, puis une troisième fois 0-1 pendant 1 seconde Nous avons donc trois entrées dans le cadre. J'espère donc que cela a du sens. C'est une bonne chose, mais il arrive parfois que lorsque vous exécutez le script, alors que vous avez un arrière-plan, l'objet apparaisse, et l'objet disparaît, s'affiche à nouveau. Et ensuite, si vous quittez le programme à ce stade, laissez-moi le quitter. Vous verrez que vous avez une heure de début ici pour la première entrée, puis une heure de fin, puis une autre heure de début pour la deuxième entrée. Mais dans ce cas, vous n' avez pas l'heure de sortie. Vous pouvez donc ajouter l'heure de fin de la sortie de votre dernier objet, qui se trouve être celle à laquelle la fenêtre a été fermée. Vous voulez donc vous rendre ici à la fin, et le script attend une clé. Donc, si vous appuyez sur Quitter ici, la boucle while sera interrompue. Mais avant cela, vous voudrez peut-être vérifier le statut. Donc, si le statut en est un, et dans ce cas, vous vous retrouverez avec ce scénario ici. Donc, si le statut est un, lorsque vous appuyez sur la touche du clavier, vous souhaitez ajouter un autre élément à votre liste de temps. Donc, les heures se sont ajoutées à la journée, c'est maintenant, super. Cela devrait donc fonctionner différemment maintenant. Exécutons donc le script. Aucun objet. Objet. Aucun objet, objet dans le cadre, quittez. Et maintenant, nous devrions passer quatre jours ici. Quatre fois, une, deux, trois et quatre. Cela a donc été enregistré dans cette expression ici. Génial. Et la prochaine chose que nous voulons faire maintenant est de placer cette liste dans un cadre de données Pandas , puis dans un fichier CSV. Nous aurons donc une colonne de début et une colonne de fin. Et dans la colonne de début, nous aurions, par exemple, cette valeur, et dans la colonne de fin, nous aurions les autres valeurs. Donc celui-ci ici et le dernier. OK. Donc, tout d'abord, nous avons besoin d' une trame de données vide, la trame de données Pandas. Nous utiliserons donc des pandas pour créer des trames de données, bien sûr Permettez-moi donc d'importer des pandas ici. Et disons que le bloc de données DF est égal à Pandas DataFrame avec des colonnes de début et de fin aussi simplement que cela. Cela créera donc une structure de trame de données pour nous, qui n'a pas de valeurs, mais qui comporte deux colonnes. Ensuite, la prochaine chose que vous voulez faire est de sortir de la boucle. Ainsi, une fois que vous avez créé une fois que vous avez généré votre liste de temps, vous souhaitez parcourir cette liste, puis ajouter ces valeurs dans le cadre de données Pandas Vous avez donc besoin d'une boucle, disons, pour que je sois à portée. Et donc ici, vous devrez itérer avec un pas de deux. Et vous devriez itérer autant de fois qu'il y a de valeurs dans la liste Donc, vous partez de zéro et vous vous retrouvez à combien de valeurs vous avez dans la liste ? Eh bien, vous pouvez le trouver en utilisant la méthode de la longueur, donc la longueur est multipliée par un pas de deux. Génial. Ce sera donc le cas pour chaque itération, la trame de données solide DF sera égale à elle-même. Point ajouter. Vous mettez donc à jour le bloc de données et vous devez ici transmettre un dictionnaire. Donc, pour la colonne de début, vous devez saisir des fois I et pour la colonne de fin. Les clés du dictionnaire sont donc le début et la fin, et vous devriez ajouter les fois I plus un Et vous voulez ignorer l'index. Tellement égal à t. Génial. Donc, disons que pour moi, je suis dans la gamme, disons que nous avons une liste de six éléments. Nous avons donc trois étoiles et trois fois. Cela signifierait donc aller de zéro à six avec un pas de deux. Donc, pour zéro, c'est ce que nous ferions. Nous partirons donc de zéro dans la boucle, et nous accèderons à l'élément avec un indice nul en termes de temps, qui se trouve être cet élément, par exemple. Donc, le premier article. Ensuite, nous ajoutons cet élément à la première ligne de la colonne de départ Ensuite, nous accédons à l' élément zéro plus un, qui se trouve être un élément avec l'index un, qui devrait être cet élément, donc le deuxième élément. Et nous ajoutons cet élément à la dernière colonne de la même ligne Alors c'est tout. Ensuite, nous passons au point suivant. Donc, cette fois, nous commencerions par l'index trois, et donc trois ici, ajouterions à la colonne de début, puis quatre, nous l'ajouterions à la colonne de début à la colonne de fin, désolé et ainsi de suite. Enfin, nous aurions une trame de données. Et ce que vous voudrez peut-être faire alors, c'est au format PDF deux CSV. Disons fois CSV. Nous exportons donc le bloc de données vers un fichier CSV. Génial. Voyons donc comment cela va se passer. Il commence à faire très sombre ici. OK. Et encore une fois. Frame, arrête. Et comme vous le voyez, le CSV a parfois été créé dans mon système de fichiers. Et c'est ainsi que l'époque est arrivée. Je peux également l'ouvrir avec Excel. Voici donc les heures de début et de fin. Si vous le souhaitez, vous pouvez les formater dans les cellules ici, et vous pouvez voir les dates maintenant. Génial. Génial. C'est la fin de cette conférence, et j'espère qu'elle vous a plu. Nous avons maintenant un très bon script, et pour le rendre plus beau, nous voudrions afficher ces temps sous forme de graphique. C'est ainsi que vous transformez vos données en informations réelles. Et nous le ferons lors des prochaines conférences. Mais avant, j'aimerais vous présenter la bibliothèque Bouquet, qui est une bibliothèque de visualisations interactives dans le navigateur Veuillez donc suivre les conférences dans le bon ordre, et je suis sûr que vous en apprendrez beaucoup. Je te parlerai plus tard. 124. 123. Introduction à la bibliothèque Bokeh +: Bonjour, et bienvenue dans cette nouvelle section très excitante, bien sûr. Et dans cette section, donc tout au long des cours de cette section, vous apprendrez à générer des visualisations sur le navigateur avec Python Nous parlons donc de visualisations interactives, et nous utiliserons la bibliothèque Bouquet Python pour ce faire Boke est donc une bibliothèque Python, et elle est assez récente. Et avec Bouque, vous pouvez récupérer des données provenant de différentes sources de données, de formats de fichiers de données tels que CSV, liste Python, fichiers JSON, etc. Et vous pouvez créer de magnifiques visualisations dans le navigateur. J'ai déjà utilisé Math Plus Lib et Seaborn. Il y a donc deux autres bibliothèques Python qui sont utilisées pour effectuer des visualisations avec Python Mais je dirais que Boke est plus moderne. Et une fois que je vous l'aurai présenté, je suis sûr que vous l'utiliserez pour vos projets de visualisation de données. Dans cette section, je vais donc vous montrer comment créer des graphiques linéaires et des diagrammes dispersion, ainsi que comment combiner différents diagrammes en différents diagrammes en un seul graphique et des graphiques de séries chronologiques Et nous allons écrire le code dans le bloc-notes Jupiter, anciennement connu sous le nom de bloc-notes iPython Et le bloc-notes Jupiter est comme une combinaison de console Python Vous pouvez donc écrire du code interactif, mais vous pouvez également enregistrer le script que vous écrivez. Le carnet Jupiter ressemble à ceci. OK. Et je vais vous montrer comment installer le bloc-notes Jupiter dans la prochaine conférence. Jupiter est donc idéal pour effectuer des analyses de données et visualisations, du scrapping Web et d'autres analyses exploratoires Donc je suis sûr que vous allez l'adorer. Et ici, passons à la prochaine conférence. 125. 124. Créer votre premier scénario Bokeh: Génial. Vous savez maintenant ce qu' est Boke parce que je l'ai expliqué dans la conférence précédente Dans cette conférence, je vais vous montrer comment créer un graphe de livre très basique. Oui, nous allons donc repartir de zéro et, étape par étape, nous allons améliorer ce graphique. Oui, disons que c' est votre premier graphe de livre ou peut-être que vous avez déjà créé des graphiques de livre. Donc, avant de suivre ce cours, vous savez, déjà quelques points. Je vous suggère tout de même de commencer par là, car je vais vous montrer la bonne logique pour créer des graphes étape par étape. Ah, allons-y et faisons-le. Mm. J'utiliserai parfois bloc-notes Jupiter pour écrire du code Python, et d'autres fois, j'utiliserai l'éditeur Atom. Le bloc-notes Jupiter est donc un bon point de départ, car il nous permettra d' écrire du code interactif. Nous pouvons simplement écrire une seule ligne de code et voir ce que cela fait. C'est donc idéal pour commencer avec une bibliothèque afin de pouvoir explorer la bibliothèque en dégustant de petits morceaux de code. Et en appuyant sur Shift et en cliquant avec le bouton droit sur Windows sur le dossier, vous pouvez aller ici et ouvrir une fenêtre de commande ici, ce qui ouvrira une invite de commande dans le dossier actuel. Ainsi, sur une Macro Linux, vous pouvez peut-être faire quelque chose comme ouvrir un terminal ici ou ouvrir un terminal normalement, puis vous pouvez accéder au chemin de votre chemin de travail sur CD. Je vais donc écrire le code dans ce répertoire. Et pour installer Jupiter, vous diriez que PIP installe Jupiter Notebook Et c'est une exigence déjà satisfaite car j'ai déjà installé Jupiter Notebook. Si ce n'est pas le cas, vous pouvez simplement le faire et, vous savez, il sera installé pour vous. Et pour démarrer Jupiter Notebook, vous diriez Jupiter Notebook, juste comme ça. Et cela ouvrira un bloc-notes Jupiter sur un hôte local. C'est donc comme un bloc-notes basé sur les services. Et oui, si vous créez maintenant, vous créez un bloc-notes gratuit en Python. Et nomme-le. Un graphique de base, juste comme ça. Et dans le dossier de démonstration vous trouverez ce point graphique de base IPYNB, qui signifie bloc-notes IPython, mais maintenant le bloc-notes IPython est renommé Jupiter Notebook Mais l'extension reste la même. Et vous avez également ces points de contrôle, qui sont des fichiers automatiquement réduits lorsque Jupiter enregistre vos sessions Vous devez maintenant garder votre front de commande ouvert, puis c'est ici que vous écrivez le code. Vous savez, si vous ne préférez pas utiliser les livres de Jupiter, vous pouvez utiliser votre éditeur préféré. Ce serait donc Atom ou Vim ou l'IDE Python par défaut, et ainsi de suite Cela n'a pas beaucoup d'importance. Et j'utiliserai des commentaires pour commenter mon code, ce qui vous aidera à lire et à comprendre mon code plus facilement parce que, vous savez, j'écrirai ce qui vous aidera à lire et à comprendre mon code plus facilement parce que, vous savez, j'écrirai du code ici et du code et plus tard comme ça. Et je vais expliquer le code au fur et à mesure que je le tape. Mais parfois, vous oubliez ce que j'ai tapé ici et vous avez du mal à le comprendre, mais si j'ai quelques commandes ici, disons, pour tracer les valeurs X et Y. Et si j'écris ce commentaire ici, Python ne le lira pas sous forme de code, il l'ignorera donc, mais vous pouvez le lire et vous supposerez que j'écris ce commentaire pour le bloc suivant. J'écris donc la commande, je ne laisse aucun espace et j'y tape le code. Ensuite, je laisse un espace là et j' y tape un autre code. C'est donc un autre bloc qui n'a rien à voir avec cette commande. Ce commentaire portera donc sur ce bloc de code. Parfois, je souhaiterai peut-être appliquer des commentaires spécifiques sur des lignes spécifiques. Par exemple, celui-ci ici. Dans ce cas, j'écrirai la commande juste là. Disons donc pour les valeurs X ici ou quelque chose comme ça. Génial. Et le premier commentaire portera généralement sur le script. Nous allons donc créer un graphe boe de base. Il s'agira d'un graphique linéaire. Génial. Et je vais laisser un espace là, et là je commence le code. Donc, tout d'abord, je vais importer Boke, je l' expliquerai plus tard, mais Bouquet possède quelques interfaces Et la première interface est le traçage de bouquets. C'est ce qu'on appelle l'interface de traçage Bouquet. Et je passerai en revue les interfaces plus tard. Pour le moment, concentrons-nous sur l'apparence d'un graphe et sur le code pour créer un graphe booger Ainsi, à partir de l' importation du tracé de Bouquet , vous importez l'objet figuré, qui est l'objet le plus important Bouquet car il contiendra un conteneur dans lequel vous ajoutez des points, de Bouquet car il contiendra un conteneur dans lequel vous ajoutez des points, des lignes, des étiquettes pour les points, et des notes pour le tracé, les légendes et tout Vous allez donc tout ajouter dans cet objet figuré. C'est ça. Et puis vous devez disposer de quelques outils utiles de Bokeh issus de l'interface Booke Dot IO À partir de là, vous souhaitez importer le fichier de sortie et l'afficher. Oui, c'est essentiellement ce dont nous avons besoin. Vous verrez ce que tout cela signifie dans un instant, puis nous devrons créer des données. Créons-y donc de fausses données. Préparez des données. J'utiliserai des listes. Disons un, deux, trois, quatre et cinq. C'est donc pour l'axe X. Ainsi, dans le graphique, ces valeurs seront mappées le long de l'axe X. Et puis nous avons l'axe Y. Disons six, sept, huit, neuf, dix. Notez que ces listes doivent avoir la même longueur pour pouvoir être tracées dans Bukit Dans le cas contraire, Bouquet générera une erreur. Je dois dire que vous savez, Bouquet va commencer à prendre des paires de cette liste. Il faudra donc un et six, et il les cartographiera le long des axes X et Y. Cela créera donc un point avec les coordonnées un et six, puis deux et sept, et ainsi de suite. Je passe par cinq et dix. Ensuite, si vous ajoutez un numéro de ligne ici, disons sept ou autre, Python dira : Oh, je n'ai pas trouvé de paire pour sept sur l'axe Y. Vous obtenez donc une erreur. Génial. Nous avons donc les données. Préparez le fichier de sortie. C'est donc ici que vous utilisez la fonction de fichier de sortie. Et là, vous passez le nom du fichier HTML qui sera créé Vous pouvez donc choisir tous les noms que vous voulez. Ensuite, la prochaine chose à faire est de créer une instance d' objet figuré. Vous y avez la classe des figurines. Vous l'avez saisi et vous pouvez l'utiliser maintenant, juste comme ça Je le stocke dans la variable F. Permettez-moi de commenter ceci. Créez un objet figuré. Et enfin, créez un tracé linéaire. Et pour créer le tracé linéaire référer à l' objet de figure que vous avez créé, puis vous appliquez la méthode du trait si vous souhaitez créer une ligne. Et la ligne attend de vous que vous transmettiez le tableau X avec les données ainsi que le tableau Y. Je sais donc que tout ce que je passe ici correspond aux exigences minimales pour construire un terrain. Mais vous ajouterez de nombreuses fonctionnalités plus tard dans le code afin que ajouterez de nombreuses fonctionnalités plus tard dans le code afin nous enrichissions nos diagrammes avec des fonctionnalités telles que des légendes, des étiquettes des couleurs, de la transparence, etc. Mais c'est l' épine dorsale, pour ainsi dire. Et une fois que vous avez créé une ligne, il ne vous reste plus qu'à utiliser la méthode show pour montrer votre objet figuré. Et pour exécuter cela dans Jupiter, vous pouvez simplement appuyer sur Ctrl et Entrée. Attends une seconde. Et j' ai reçu une erreur. Oh, en d'autres termes, cela devrait être un fichier de sortie. Désolée. Exécutez à nouveau, et voici le graphique linéaire. Quoi qu'il en soit, si vous regardez cela, vous voyez que le premier point de la ligne se trouve aux coordonnées 1 Voici donc l'axe X, un pour le X six pour le Y. Si vous regardez, voici un et six, puis vous avez deux et sept et ainsi de suite un jusqu'au dernier point, soit cinq à dix Cinq et dix. Ouais. C'est donc un graphique. Et ce n'est pas une image graphique. Comme vous pouvez le constater, je peux déplacer les choses et vous avez également quelques outils ici. C'est ce qu'on appelle des outils. Et ce que vous pouvez en faire, c'est, disons, qu'il s'agit d'un stylo, et que vous voyez cette ligne bleue verticale ici, cela signifie que l' outil Stylo est déjà activé. Et si je déplace mon curseur comme ça, je dessinerai le contour du graphique. Si vous cliquez, par exemple, sur le zoom à molette, vous verrez que le zoom panoramique et le zoom à molette sont désormais activés, et je peux utiliser la molette de ma souris pour zoomer en avant et en arrière. Maintenant, souvenez-vous que je vous l'ai dit, bouquet produit des graphiques interactifs. Alors voilà. Cependant, il ne s'agit que d'une fonctionnalité d'interactivité de base car plus tard, comme je vous l'ai dit plus tôt, j'ajouterai ici des widgets qui interagiront de manière très puissante avec un graphique Quoi qu'il en soit, en gros, vous avez également cette case Zoom dans laquelle vous pouvez zoomer sur une certaine zone de votre graphique. Vous avez également rétabli cette valeur, qui rétablit en fait la vue par défaut du graphique Et ce qui reste, c'est ce bouton d'aide, qui vous amène à la documentation de Bouquet, et je passerai en revue la documentation de Bouquet plus tard, qui vous sera très utile pour obtenir de l'aide. Et c'est aussi un bouton sécurisé que vous pouvez utiliser pour enregistrer vos tracés dans des graphiques PNG, des images. Donc, si vous souhaitez convertir votre graphique en images, vous pouvez utiliser ce bouton. Et oui, il s'agit de créer un graphique de base, et j'aimerais vous faire quelques exercices pratiques, vous savez. Vous savez, ici j'ai utilisé un graphique linéaire, mais vous pouvez utiliser d'autres types de glyphes C'est ainsi que ces géométries sont appelées dans Boha et vous pouvez vous faire une idée des glyphes que vous pouvez utiliser, vous pouvez appliquer à votre figure en faisant D et F, qui sont l'instance d'objet de votre Vous allez voir ici, trouvons la ligne. Voici la ligne. C'est donc celui que tu as utilisé. Mais j'aimerais vous demander de créer vos propres graphiques en utilisant un triangle d' abord, un cercle d'Alana Ce serait donc très simple. Au lieu de faire la queue, passez simplement ces informations ici et voyez ce que vous obtenez. Mais essayez de créer le graphique à partir de zéro au lieu de copier le mien. Et permettez-moi de commenter ceci. J'ai oublié de commenter. Vous pouvez également jouer avec d' autres données pour voir comment cela se passe. Et oui, cela vous permettra comprendre comment créer une parcelle de bouquet très basique. Dans la prochaine conférence, je vais vous montrer comment utiliser des données plus réelles. Nous l'utilisons donc ici, mais dans la prochaine conférence, nous utiliserons des fichiers CSV. traçant à partir d'un fichier CSV, nous allons créer le même graphique. On se voit là-bas. 126. 125. Utiliser Bokeh avec les pandas +: Bien. Nous avons pu créer un graphique linéaire à l'aide de ce code, et j'espère que vous avez joué un peu avec ce code et que vous vous êtes familiarisé avec celui-ci. Maintenant, vous voyez ici que nous avons deux listes en sortie. Dans cette conférence, je vais vous apprendre à utiliser des fichiers CSV pour alimenter vos graphiques de boket Et je vais utiliser ce code comme référence. Donc je vais juste, tu sais, tu dois appuyer sur Escape. Lorsque vous appuyez sur Escape, vous pouvez appliquer des raccourcis clavier à vos cellules. Et vous pouvez voir une liste de raccourcis ici. Et par exemple, ce que je veux faire maintenant, c'est copier une cellule avec C, puis je veux coller cette cellule ci-dessous avec V. Mais tout d'abord, vous devez être en mode commande. Donc, pour passer en mode commande, vous devez appuyer sur Escape, comme le dit le script d'aide. Et oui, assurez-vous de vous échapper , puis C et ensuite, et vous aurez une autre cellule ici. De plus, j'aimerais supprimer cet en-tête ici et passer à view, à Togle header puis à togletolBR J'ai donc plus d' espace pour toi ici. C'est donc le code avec lequel je vais travailler. Entrez, et oui, je vais travailler sur ce code pour le moment. Et laisse-moi y aller. Il s'agit d'un répertoire de travail. Je vais simplement créer un fichier CSV. Disons CSV point point. Oui, et je vais juste le modifier avec Nopats. Vous pouvez utiliser Excel si vous le souhaitez. Je vais donc avoir juste deux colonnes ici. C'est l'en-tête, puis un pour X, six, pour Y, deux et sept, trois et huit, quatre et neuf, et un de plus, dix. Sauvegardez ça. Ferme-le. Notez donc que le point de données CSV se trouve dans le même répertoire point graphique de base IPYNB et accédez à votre script Maintenant, nous importons Boca ici, mais je vais également importer des panneaux Parlons donc de cela ici et des pandas. Permettez-moi d'utiliser la minuscule B et d'importer des pandas. Oui, préparez quelques données. Hmm. Donc, je suppose que tu connais les pandas Donc, en gros, le bloc de données est l'objet principal, et vous souhaitez créer un dataframe à partir de CSV à points de données CSV, juste comme ça Ensuite, créons deux variables ici. La variable X sera donc égale à DF. Crochets, colonne X. Ne confondez donc pas la colonne X avec la variable X. Il se trouve qu'ils portent le même nom. OK. Et aussi le réseau Y, le F. Y ? OK. Ouais. Cela devrait suffire. Permettez-moi de le renommer. À partir d'un fichier CSV. Exécuter. Et vous obtenez exactement la même ligne que nous l'avons fait plus tôt avec la simple liste ici. Et, ah, c'est essentiellement ainsi que vous alimentez tracés de vos bookmakers avec les tableaux DataFrame de Panda Encore une fois, euh, juste pour clarifier les choses, il s'agit du cadre de données. Il comporte deux colonnes, et vous avez alors la colonne X. Cela a donc été stocké. En fait, c'est la colonne d'index, celle-ci ici. Il s'agit des données réelles de cette colonne. Et vous y avez également la colonne Y. Donc, c'est ça. Comme vous le voyez, Bouquet est capable de lire des playlists, donc Pythléis comme celle-ci ici, et aussi des blocs de données ou une série C'est ce qu'on appelle un sérieux. Tu peux vérifier ça. Oui, c'est sérieux. Et oui, c'est ça. DD pour supprimer une cellule. Et oui, nous allons passer à d'autres conférences, à bientôt. 127. 126. Créer une intrigue de série temporelle +: C'est bon. Dans cette conférence, vous allez apprendre à créer des graphiques de séries chronologiques. Nous parlons de données où l'un des axes. Normalement, l'axe X est constitué de dates ou d'heures. Supposons que nous ayons des observations de température pour plusieurs dates et que nous devions tracer ces valeurs le long des axes X et Y. J'ai ici quelques données intéressantes que nous allons prendre à partir de ce lien. Il s'agit donc d'un fichier CSE. Vous n'êtes pas obligé de télécharger le fichier CSV, car nous le transmettrons directement sous forme de lien vers la méthode CSV. Nous avons donc ici une colonne de date et d'autres attributs. Vous souhaiterez donc peut-être tracer les données le long de l'axe X. Ensuite, dans l'axe Y, vous souhaitez afficher l'une de ces fonctionnalités. Disons cet attribut, fermez. Je vais donc fermer ça. Je n'ai pas besoin de ce fichier car je vais utiliser un lien direct et me permettre de créer une nouvelle cellule. Je vais donc utiliser, à nouveau, l'interface de traçage du bouquet ici Et importez également des pandas. L'essentiel ici est que nous utiliserons une trame de données Pandas, puis nous analyserons cette colonne de données temporelles sous forme de dates afin que Python les lise sous forme dates et puisse réellement les tracer sur l'axe X. Ensuite, nous utiliserons un glyphe linéaire pour tracer ces données. Donc, un glyphe linéaire serait, vous savez, vous pouvez utiliser des cercles, des triangles, etc., mais vous pouvez également utiliser des lignes vous pouvez utiliser des cercles, des triangles, etc., mais vous pouvez également Vous devez donc passer la ligne ici, mais la taille n'a aucun sens, car vous voudrez peut-être passer la ligne pour la ligne. Donc, pas de taille, mais de ligne avec. Et, vous savez, si vous l'exécutez , vous ne verrez plus de cercles. Ce n'est donc plus un diagramme de dispersion maintenant, mais un graphique linéaire Nous allons donc utiliser le même concept pour créer ce graphique horaire journalier, un graphique de série chronologique. La première chose à faire est donc charger les données CSV dans Python. Donc, le panneau lit le CSV, et vous pouvez en fait transmettre le lien directement à la méthode CSV. Alors, est-ce pratique ? Ensuite, vous voulez transmettre le paramètre d' analyse des dates, année, et vous voulez spécifier le nom de la colonne où se trouvent ces dates Et le nom de cette colonne était date. Donc, si vous vous souvenez du fichier CSV que j'ai ouvert plus tôt, c'était la date. Ainsi, une fois que vous avez chargé l'objet du bloc de données, vous souhaitez créer un objet de figure. Disons que la largeur est égale à 500 et battons-nous. Disons 500 pour l'instant, puis nous vérifierons comment cela se passe et nous pourrons le modifier plus tard. Nous avons donc ici le paramètre de type d'axe X. Cela devrait donc faire en sorte que votre axe, votre axe X, soit spatial afin qu'il puisse lire les types de données de date et d'heure. Donc, pour déclarer que vous avez daytis, vous devez y passer un argument daytis sous forme de chaîne Alors c'est tout. Ensuite, ce que vous voulez faire, c'est appliquer l' objet linéaire qui s'y trouve. Donc, comme cela maintenant, vous devez passer l' axe X et l'axe Y. L'axe X ici devrait donc être la date DF. Et l'autre axe est, disons proche, donc la colonne fermée. Et rendons la ligne orange. Et quoi d'autre ? Peut-être une transparence de 0,5. Et spécifiez où vous souhaitez l'enregistrer. Alors sous quel nom HTML Time series dot HTML. Et enfin, montrez l' intrigue. Et voyons voir. Et quelque chose ne fonctionne pas, donc Python n'est pas en mesure d'en extraire les données. Oh, je dois transmettre les données ici sous forme de liste en fait. Donc oui, ça a l'air mieux, mais ça a aussi l'air un peu serré. Donc, ce que vous pouvez faire ici, c'est changer ce paramètre en 250, par exemple, et vous obtiendrez un meilleur graphique. Maintenant, si vous souhaitez l'étendre à l' ensemble de la page, vous pouvez y faire quelque chose. Vous pouvez réellement passer le responsive et définir comme vrai. Eh bien, voyons voir. Vous obtenez donc un graphique plus grand. Et bien sûr, vous pouvez zoomer pour voir certains détails. Donc, pour le 8 mai, vous avez une valeur d'une unité. Tu as compris l'idée. C'est ainsi que s' achève cette conférence, et je vous verrai dans la prochaine. 128. 127. Plus d'exemples de visualisation avec Bokeh: Très bien, résumons maintenant. Nous avons donc pu générer des graphiques, et vous avez vu que jusqu'à ce que la loi soit adoptée, nous produisions des graphes uniques. Ainsi, par exemple, ici, vous verrez un graphique linéaire. Maintenant, si vous voulez combiner plusieurs glyphes dans un seul diagramme, ce serait très simple Supposons que vous ayez deux complots. Vous y ajouterez un diagramme de dispersion. Vous devez donc ajouter un glyphe circulaire. Donc, juste en dessous de ce glyphe linéaire ou au-dessus, cela n'a pas Donc, on fait des cercles avec ces coordonnées ou on peut les changer. Doublons donc l'axe X. Huit fois deux pour moi dans cette liste, qui se termine ici. Et puis cela devrait être la taille, disons huit et olive. C'est ainsi que vous pouvez obtenir plusieurs glyphes dans un seul diagramme. Cela a été très facile. Je crois donc que je vous donne une bonne introduction à la bibliothèque Bouquet. Et je crois que vous voyez son potentiel C'est donc formidable d'utiliser Bouquet pour générer des visualisations. Maintenant, si vous voulez approfondir le bouquet que vous devrez peut-être tracer différents types de graphiques, dirigez-vous d'abord vers cette ressource. Voici donc la documentation, la documentation du bouquet. Et il s'agit de tracer avec des glyphes. Vous avez donc ici plusieurs exemples. Nous utilisons celui-ci en fait et d'autres aussi, des lignes. Et vous pouvez également tracer des patchs. Donc, en gros, vous passez les coordonnées de chacun des points du polygone ici et Bouquet y dessinera le polygone Ce sont donc les éléments de base. Et là, j'aimerais m' arrêter un peu. C'est ce qu'on appelle un diagramme à quadrats, en fait, celui-ci ici Ainsi, au lieu de passer un cercle de lignes, vous passerez un quad. Et cela consiste en un sommet. Donc, la limite supérieure de votre quadrant. Ainsi, par exemple, le premier quadront a une bordure supérieure de deux et une bordure inférieure d'un C'est donc une frontière entre un et deux. Et puis une gauche serait un et une droite, 1,2, donc une gauche et 1,2 droite. Et puis vous avez le quadrant suivant, qui est également celui-ci avec ses coordonnées, et voici donc les couleurs afin que vous puissiez utiliser des codes de couleur CSS si vous le souhaitez, en plus d'utiliser des chaînes de couleurs comme le rouge, l'orange et le jaune, etc. Donc, si j'ai arrêté cette intrigue, c'est parce que nous allons l'utiliser pour visualiser les heures de notre programme vidéo. Il s'agit des moments où un objet entre dans l'image vidéo et où l'objet sort de l'image vidéo. Ce serait formidable si vous commenciez à réfléchir maintenant à la manière dont vous allez utiliser le fichier CS que nous avons généré dans le programme vidéo plus tôt et tracer ce fichier dans un graphique similaire à celui-ci. Il y a quelques astuces, et je ne m' attends pas à ce que vous résolviez complètement le problème, mais il est bon d' y réfléchir. Vous avez également cette galerie ici, la galerie Bouquet. Nous avons ici de belles parcelles. Vous avez l'histogramme. Si vous cliquez sur l'un d' entre eux, par exemple, je vais créer cette carte. Vous pouvez donc simplement copier ce code, le coller dans votre script et l'exécuter, et vous obtiendrez la même carte. C'est ce que je voulais vous apprendre à propos de Bouquet, et nous l' utiliserons plus tard, comme je l'ai dit, pour visualiser ces moments où un objet se déplace dans notre image vidéo devant notre webcam. Je te parlerai donc plus tard. 129. 128. Tracer les intervalles de temps à partir des données générées par l'application Webcam: Bonjour et bienvenue à cette nouvelle conférence. Donc, ce que je vais faire ici, c'est apporter la touche finale à notre programme de détection de mouvements. Plus précisément, je construirai un tracé à l'aide la bibliothèque Bouquet où je visualiserai le moment où l' objet entre et sort de l'image, de l'image vidéo Et le résultat final ressemblera à ceci. Nous avons donc ici un diagramme avec un axe X. Ce qui représente le jour, alors que l'axe Y n'a aucun sens, en fait Donc, juste une extension verticale des barres qui se trouve ici. Donc, disons que j'ai démarré la caméra à cette date, donc le 17 mars. Voici donc cette première capture, vous pouvez voir qu'elle a commencé à cette date et qu'elle s'est terminée au bout de 4 secondes. Cet objet est donc entré dans l' image à la date de début et y est resté pendant 4 secondes , puis est sorti de l'image vidéo Donc, de même, nous avons cet autre objet. Donc toujours le 17 mars. Et puis il y en a une autre ici. Et puis ça commence l'autre jour. Donc le 18 mars, et voici les heures entre ces deux jours. Donc 16 h, 8 h, 12, 16 h et tente. Et vous pouvez également voir que j'ai ajouté des fonctionnalités de survol ici, de sorte que lorsque je passe la souris sur ces barres, j'obtiens ces informations Et vous pouvez également zoomer ici. Donc, si vous souhaitez plus d'informations à ce sujet, vous pouvez les voir clairement ici. Voilà donc le produit. Maintenant, le script produit actuellement l'heure de début et l' heure de fin de l' objet entrant dans le cadre dans un fichier CSV. Plus précisément, le programme déclenche la vidéo à partir de la webcam. Et puis vous y avez des objets. Appuyez sur le bouton pour arrêter de fumer. Et donc ce que vous obtenez, ce sont les fois le CSV. Où chaque ligne représente l'heure de début, puis l'heure. OK, tu le sais déjà. Donc, pour le moment, nous avons également ici une liste avec l'état de la trame en cours. Il y a donc, disons, 100 éléments, ce qui signifie que nous avions 100 images dans cette vidéo de sept secondes. Maintenant, la première chose que vous voudrez peut-être faire est d'apporter une petite amélioration très rapidement. Cette liste, si vous avez une webcam, capture une longue vidéo. Donc, si vous l'exécutez pendant de nombreuses heures, cette liste peut devenir trop longue Pour éviter les problèmes de mémoire, vous pouvez vous rendre ici. Vous vérifiez donc ici le dernier élément de la liste et l'élément précédant le dernier élément. Donc, les deux derniers articles, cela signifie que nous n'avons pas besoin de ces autres articles. Nous n'avons donc besoin de conserver que deux objets perdus. Cela signifie que juste après avoir ajouté le nouveau statut ici, nous disons que la liste des statuts est égale à la liste des statuts, mais avec seulement les deux derniers éléments Donc, si je l'exécute maintenant, je n'obtiendrai que les deux derniers statuts de l'image vidéo imprimés sous forme de liste La liste est donc imprimée ici. C'est donc une amélioration pour la mémoire. Maintenant, comment contourner la construction d'un terrain avec un bouquet ? Nous devons donc d'abord réfléchir à la structure de nos scripts. Donc, cet objet de traçage que nous allons créer à l'aide d'un quadrant s'attend à ce qu'une trame de données soit envoyée en entrée Nous avons donc en fait une trame de données ici. Et nous envoyons le bloc de données au même moment que le fichier CSV. Ce que je vais faire ici, c'est créer un autre fichier, script Python, par exemple en traçant le point pi Et c'est ici que j' écrirai le script, le code pour tracer les données Dans ce cas, cela signifie que nous devons récupérer la trame de données de ce programme de détection de mouvement dans ce script Donc, ce que vous pouvez faire, c'est dire à partir mouvement, d'un détecteur, d'importer un PDF. Cela rendra donc disponible la trame de données DF générée dans ce programme de détection de mouvement, qui signifie que lorsque vous voudrez exécuter le programme ultérieurement, vous exécuterez le point de traçage pi avec Python Ainsi, lorsque vous exécutez Plotin point pi, tracé du point pi nécessitera l'exécution de ce script de détection de mouvement point py Ainsi, la vidéo d'une webcam démarrera , puis lorsque ces boucles se termineront, cette trame de données sera générée. Cela signifie qu'après cela, le script, le code du point de traçage pi sera exécuté Ici, vous allez obtenir le bloc de données tracer et ainsi de suite J'espère que c'est clair. Allons-y maintenant et importons l'interface de traçage de Boke Ainsi, à partir de BokePloting, l' intégralité de l'interface de traçage ne sera pas importée Nous n'avons besoin que de l'affichage des figures et du fichier de sortie. Restons serrés. Et puis allons-y et créons l'objet figuré. Et X est le type qui sera de type date et heure. Fixons une hauteur de 100 et une largeur de 500. Et rendons-le réactif. Titre du graphe : graphe de mouvement. OK. Donc, une fois que nous avons une figure, nous voulons tracer un glyphe dans cette Ce glyphe, dans ce cas, serait un quadrant, donc un quadrant Un quadrant serait donc plus approprié pour y tracer ces intervalles de temps L'astuce pour avoir ce quadruple glyphe pour visualiser votre date et vos heures le long de cet axe X est donc ce quadruple glyphe pour visualiser votre date et vos de passer les paramètres de gauche à droite, bas en bas et de haut Donc, pour la gauche, vous devriez dépasser l'heure de début, donc à gauche de la boîte de cases que vous voyez ici. La bordure gauche serait donc l'heure de début tandis que la bordure droite. DF serait donc la fin des temps. Voici donc notre CSV, qui n'est pas celui que nous utilisons, mais il s'agit d'une structure des données. heure de début est donc sur la gauche, puis l'heure de fin bordant la droite du rectangle du quadrant Et puis voici une astuce que nous pouvons faire pour le bas. Nous voudrions conserver une valeur fixe. Donc zéro pour chaque quadrant, puis un pour chaque quadrant également C'est ça. La couleur n' est pas un problème. Disons vert. Et j' aimerais essayer ça pour le moment. Je vais donc mettre un fichier. Ce serait du Graph Dot HTML. Montrez la figure Pi. Et voyons ce qui va se passer jusqu'ici. Donc, Python, nous ne voulons pas exécuter le détecteur de mouvement maintenant, mais nous voulons exécuter le tracé de ce Pi C'est donc dans notre script principal que nous commençons. Et j'ai une stupide erreur de syntaxe dans Book a plotting figure Je parie que vous saviez que j'ai oublié le mot clé import ici Donc, à partir de BokePloting, importez la figure, affichez le fichier, enregistrez et réessayez Et voici l'objet webca. Object à nouveau. Une autre fois. Arrêter. Et voyons ce qui va se passer maintenant. Et encore une erreur, responsive. Bien. Je suis désolée pour ça. Essaie à nouveau. Premier objet, deuxième objet là, et encore un ? Arrêter. Et nous devrions voir le graphique. Ouais. Oui, ça a l'air bien. Je peux donc voir ici et vous pouvez également remarquer que nous avons une granularité assez inutile ici Nous n'avons donc pas besoin de tous les autocollants ici. De plus, vous pouvez voir ici que c'est 19 secondes, ce qui signifie que 19 secondes se sont écoulées après la dernière minute. Donc, si c'était, disons, 15 minutes et 19 secondes. Donc 20 secondes sur 15 minutes et ainsi de suite. Ainsi, vous ne pouvez pas vraiment avoir une vue d'ensemble en seulement 10 secondes de vidéo, mais aussi pour la rendre plus informative, j'ajouterais un outil de survol à cette barre. Ainsi, lorsque je passe la souris ici, comme vous le savez, vous devriez voir les heures de début et de fin afin que vous puissiez voir le temps complet qui s'y trouve si les étiquettes ne suffisent pas Mais d'abord, retirons les autocollants ici. Nous revenons donc au script et laissez-moi le noter. Pour ce faire, nous devons modifier l'objet de la figure, donc la variable P. Nous travaillons donc sur l'axe Y, donc Yaxs. Nous accédons donc à l' objet de l'axe Y de l'objet de la figure, puis à la couleur de la coche mineure, et nous voulons lui attribuer la valeur none. Donc ça marche ici. Vous pouvez également voir que nous avons également une grille. Nous ne voulons donc pas de ces lignes intermédiaires ici, et nous pouvons le faire en accédant à l'objet de la grille, qui est une liste Vous devez donc accéder au premier élément de la liste. Il y a donc une sacrée astuce, mais il faut faire la paix avec ça. Donc, le ticker indique « souhaité ». Nombre de tiques. C'est donc la méthode et définissez-la sur un. Voyons donc comment le graphique va changer cette fois-ci. Et c'est une bonne idée de donner autre nom au graphe afin de pouvoir comparer les deux graphes. Donc, tracez un graphique pour cela. Et voyons voir. Ici. Et arrête. Et j'ai un attribut de couleur secondaire pour les tiques. J'ai tendance à mal le dire. bien, c'est que Bouquet gère assez bien les erreurs Il s'agit donc d'attributs similaires ou d'une couleur de ligne de coche mineure. Il est donc capable de lire ce que vous y entrez et il vous suggère ce que vous devez saisir si peu de couleur de ligne. Nous avons donc une ligne ici. Alors réessayez. Voyons voir, cette fois, ce que nous allons obtenir. Alors maintenant, ça a l'air plus propre, comme vous pouvez le voir. Voici notre graphique précédent. C'est le nouveau, nous n'avons donc pas les quadrillages horizontaux et les ticks ici. Et j'ai pensé à arrêter cette conférence à ce moment-là. l'autre cours, je vais vous montrer comment ajouter ces fonctionnalités de survol à votre graphique Je vous parlerai donc lors de la prochaine conférence. 130. 129. Implémentation d'une fonction de survol permanent: Génial. Nous avons un graphique visualisant les intervalles de temps entre lesquels l' objet est entré dans l'image vidéo. Maintenant, modifions-le notre code afin d'ajouter une fenêtre Une fenêtre apparaîtra ici lorsque l'utilisateur passe la souris sur ces quadrants C'est ce que nous allons faire. Et l'outil Boke permettant d'implémenter la fonctionnalité Hover s' appelle l'outil Hover Et cela est accessible depuis l' interface de niveau inférieur appelée modèles, donc modèles boket point Vous souhaitez donc importer l'outil Hover. Voyons maintenant comment nous allons utiliser dans notre script. Et en gros, il s'agit d'une méthode qui attend de vous des tableaux contenant des données afin que la méthode de l'outil Hover les affiche lorsque l'utilisateur passe la souris sur Donc, si le curseur se trouve sur ce quadrant en particulier, disons que les données de ce quadrant seront affichées dans la fenêtre contextuelle Donc, une fois que vous avez créé votre figure, vous voulez créer un objet survolant, qui sera équivalent à l'outil Hover contient un paramètre à deux pointes, et celui-ci obtiendra une liste d' arguments de tuples, et dans chaque tuple, vous souhaitez spécifier les lignes de la fenêtre contextuelle Supposons donc que dans la première ligne de votre fenêtre contextuelle, vous souhaitiez avoir une chaîne de départ, et à côté de celle-ci, vous souhaitiez avoir le tableau contenant vos données. Il y a ce décorateur spatial ici. Dans notre cas, il s'agirait donc de la colonne de départ du bloc de données. Nous voulons donc l'heure de début, puis l'heure également. Donc pour la chaîne et pour le nom d'une colonne. Donc ça devrait presque suffire. Mais nous devons ajouter cet outil en utilisant la méthode at tools. Donc, l'objet du survol doit être ajouté aux menus des outils Cela devrait donc être un point. Et c'est tout. Et nous allons devoir en ajouter d'autres ici, mais voyons ce que nous en sommes. Python trace donc le point py. Voici un objet, un autre et un troisième, et quittez. Alors oui, voici un graphique, et nous y sommes presque, mais pas encore. Comme vous le voyez, pour une raison quelconque, Python a du mal à récupérer les valeurs des colonnes de début et de fin Et vous remarquerez également que nous avons deux colonnes pour chacune de ces lignes ici. La première chose à faire est donc de supprimer cette colonne. Vous n'en avez pas besoin car Bouquet l'ajoute par défaut. Alors c'est tout. Et maintenant, pour résoudre l'autre problème, le principal problème des points d'interrogation consiste à ajouter la méthode de source de données par colonne. Ce qui provient de l'interface de bas niveau des modèles réservés. source de données en colonnes est donc un moyen standardisé de fournir des données à un graphique comptable. Donc, si vous avez des blocs de données, des listes ou d'autres objets, pour certaines fonctions du livre, vous devez les convertir en objet de source de données de colonne. Ce qui est en fait très simple. Et laissez-moi le faire ici. Nous prenons donc le bloc de données ici, puis disons une source de données de colonne, CDS, qui serait égale à une source de données de colonne. Donc, les méthodes et les données que vous souhaitez lui transmettre. Nous avons donc un bloc de données dans ce cas. Une fois que vous avez fait cela, vous devez ajuster ici, et vous devez ajuster ici, non l'objet de la figure, car nous ne transmettons aucune donnée ici. Nous construisons simplement l' environnement de l'intrigue, mais vous devez modifier le quad. Méthode. Plus précisément, vous souhaitez transmettre le paramètre source ici, qui doit être égal à l'objet de source de données de colonne. Donc CDS dans notre cas, celui-ci ici. Vous dites donc à Bocket d'utiliser ces données, et vous n'avez pas besoin de pointer vers le bloc de données Il vous suffit donc d'y entrer les noms de vos colonnes. Voyons donc ce que nous avons cette fois. Object, un autre démissionne. Voici un graphique. Et oui, on y est presque. Mais le problème, c'est cette fois, nous n'obtenons pas les jours dans le bon format. La raison en est la méthode Hotol. Alors voilà, nous sommes là. La méthode Hovertol ne permet pas de récupérer les types de données diurnes. Mais il n'y a pas de quoi s' inquiéter , car ce que nous pouvons faire, c'est convertir les heures de données en chaînes dans le bloc de données. Ainsi, avant de passer le bloc de données à la méthode objet de la source de données en colonne, nous convertissons les colonnes de début et de fin en types de données de chaîne Vous savez donc déjà comment travailler avec daytis. Dans ce cas, nous allons donc effectuer un formatage diurne. Nous pourrions donc en créer une autre, donc une nouvelle colonne, disons, une chaîne de début. Donc, la version sous forme de chaîne de la colonne de départ, qui doit être égale à la colonne de départ existante. Dot DT, qui vous permet d'effectuer le formatage diurne et le STR f time. Et voici maintenant comment définir la date à afficher. Vous devriez donc afficher l'année d'abord, puis le mois, un tiret et le jour suivant, et peut-être un espace, une heure, des minutes et des secondes. Il en va de même pour la dernière colonne. Donc string, et ici, et pareil ici. Et comme vous pouvez le supposer maintenant, nous devons refléter ces changements ici. Cela devrait donc être la chaîne de début et la chaîne de fin. Nous affichons donc maintenant ces chaînes dans la fenêtre contextuelle. Et voyons comment cela se passe cette fois. Le premier objet y passe, second, le dernier et un autre. Démissionner. Et nous avons un problème ici, je suppose. Je n'ai pas changé les valeurs ici. J'ai donc fait complètement la mauvaise chose. Je n'aurais pas dû changer les jours dans cet objet du quadrant car il s'agit des dates et des heures car nous avons défini l'axe jour ici Donc, ce jour express l'est. Donc, ici devrait commencer la colonne de début d'origine et ici la colonne de fin. Donc, par erreur, j'ai mis ces valeurs là-dedans. Commencez donc la chaîne ici et la chaîne ici. Cela devrait donc suffire cette fois. Vérifions-le. Tout semble bon. Et voyons voir. Allez-y. Oui, nous avons pu récupérer les données. Voyons voir. Oui, ça a l'air bien. Alors maintenant, je pense que ce graphique est tout à fait lisible, et je pense que vous êtes capable d' en extraire certaines informations. Ainsi, vous pouvez voir combien de temps un objet est resté dans l'image vidéo et quand vous l'avez démarrée et quand il en est sorti Et j'espère que cela vous sera utile parfois. Comme je l'ai déjà dit, vous pouvez utiliser un serveur à tarte aux framboises. Nous n'avons donc qu'un petit ordinateur et hébergeons cette application sur ce serveur. Et bien sûr, vous pouvez construire et bien sûr monter une caméra sur ce serveur et lui faire capturer des vidéos selon vos besoins. Plus important encore, j'espère que vous avez tiré des leçons de cette activité d' entraînement, et je sais que c'était beaucoup à consommer. Mais si vous avez des questions, je serais heureuse d'y répondre. N'hésitez donc pas à les demander sur le forum de discussion. Et je vous parlerai plus tard lors des prochaines conférences. On se voit. 131. 130. App 4 partie 1 - Analyse et visualisations de données avec Pandas et Matplotlib +++: Bonjour et bienvenue dans l'un des projets les plus importants du cours, le projet d'analyse et de visualisation des données. Comme vous le savez peut-être, Python est sans aucun doute le meilleur langage de programmation pour l' analyse et la visualisation des données. Python a réussi à dépasser les langages utilisés dans l'analyse de données tels que R, et le secret de Python réside une grande variété de bibliothèques que vous pouvez utiliser avec Python Cela signifie que vous pouvez combiner vos rapports d'analyse de données et les graphiques que vous créez avec Python avec d'autres bibliothèques Python pour des applications complètes telles que applications Web ou même des applications de bureau, automatiser des choses, etc. Python est donc certainement le bon outil à utiliser pour l' analyse de données. C'est très puissant. Maintenant, dans cette section, je ne vais pas simplement vous montrer le code qui effectue telle ou telle opération, mais je vais également vous montrer la logique qui sous-tend l'analyse des données, ce que vous devez faire lorsque vous avez un projet d'analyse de données. Comme j'ai un diplôme en analyse de données géospatiales, je vais donc vous montrer une partie de mon expertise dans le Je vais vous fournir un ensemble de données de 45 000 enregistrements, et nous allons transformer ces données en informations C'est en cela que consistent l'analyse et la visualisation à transformer les données en informations. Par exemple, nous allons répondre à des questions telles que quel est le jour de la semaine où les gens sont les plus heureux ? Et nous allons utiliser nos données pour cela. Les données ne sont que des données, mais connaître le jour le plus heureux de la semaine, c' est Maintenant, une partie importante de cette section est la partie visualisation des données. Permettez-moi donc de vous montrer certaines des intrigues que nous allons créer dans cette série de vidéos, afin de vous inciter, de vous motiver à regarder cette série de vidéos. Tous ces graphiques sont interactifs. Donc, juste pour vous donner une idée quoi ressembleront ces graphiques, voici quelques diagrammes que nous allons créer. Celui-ci montre la note moyenne quotidienne, donc la date est sur l'axe X, et la note moyenne sur l'axe Y. Ensuite, nous allons créer des diagrammes à secteurs comme celui-ci. Et aussi d'autres types de graphiques intéressants. En fait, je vais vous montrer comment créer n'importe quel type de graphique adapté à vos données, à vos besoins. Et cela va être assez facile, en fait, parce que je vais vous expliquer le truc, la logique qui sous-tend tout cela. Et la bonne nouvelle avec ces graphiques c'est que vous n' avez pas à effectuer beaucoup de configuration, car ils sont magnifiques dès le départ, et cela est rendu possible grâce à la bibliothèque que nous allons utiliser. Alors préparez-vous, et je vous parlerai dans la prochaine vidéo. 132. 131. Explorer l'ensemble de données avec Python et Pandas +: Bon retour. Lorsque vous effectuez une analyse de données, la première chose à faire est de vous familiariser avec vos données à l'aide de l'outil, l'outil d'analyse de données que vous avez choisi d'utiliser pour votre projet en particulier. Dans ce cas, l' outil est Python. Donc, dans cette vidéo, nous allons charger les données dans Python à l' aide d'un bloc-notes Jupiter. Examinez ensuite ces données et extrayez des informations très basiques sur les données, telles que les noms de colonnes que nous avons, nombre de lignes que nous avons et d'autres attributs simples de nos données. C'est ce que nous allons faire. J'aimerais vous faire savoir que j'ai créé un dossier vide nommé review. Underscore Analysis et j'ai mis les critiques dans ce fichier CSV dans ce dossier Vous pouvez trouver ces critiques un fichier CSV joint à cette conférence, en tant que ressource de conférence. Veuillez donc le télécharger et placer dans un dossier, comme je l'ai fait. Ensuite, vous devriez être en mesure de localiser ce dossier depuis la page d'accueil de Jupiter, qui est localisée 8888 slash 3 J'ai donc créé ce dossier directement dans le dossier de mon utilisateur, c'est donc le dossier. Je peux cliquer dessus et voici les critiques de ce fichier CSV. Dans votre cas, vous pouvez le créer où vous le souhaitez puis le localiser à l'aide de cette arborescence de répertoires ici. Pendant que je suis dans ce dossier depuis Jupiter, je peux accéder à la nouvelle liste déroulante et accéder à Python 3 pour créer un nouveau bloc-notes Jupiter. Le carnet Jupiter a donc été créé. Je peux le renommer en un autre nom, le nom du bloc-notes Jupiter Restons simples et donnons des avis. Renommez et vous obtiendrez l'extension IPYNB. Permettez-moi de faire un peu plus de place ici pour que vous puissiez voir plus de code. Je vais désactiver l'en-tête. Et maintenant, commençons à coder. La toute première chose que nous voulons faire, bien sûr, est d'importer Pandas, la bibliothèque utilisée pour effectuer des analyses de données avec Python Ensuite, nous voulons créer une variable qui contiendra les données égales à celles lues par Pandas Puisque nous travaillons avec un fichier CSV, la méthode que nous voulons utiliser en dehors de la bibliothèque Pandas est Read CSV Entre parenthèses, nous voulons mettre des guillemets simples ou doubles , où vous le souhaitez Le chemin d'accès au fichier CSV. Maintenant, si vous ne tapez pas le nom correctement, vous allez recevoir une erreur. Laissez-moi donc essayer d' exécuter cette cellule en utilisant Control Enter si vous êtes sous Windows ou Command Enter si vous êtes sous Mac. Comme je vous l'avais prévenu, j'ai reçu une erreur. Il indique qu'aucun fichier ou répertoire de ce type n' parce que j'ai mal saisi le Donc des critiques. Cette fois, si j'exécute, je ne reçois pas d'erreur, cela signifie que les données ont été chargées avec succès Je peux appuyer sur Escape, B, Enter, appeler à nouveau la variable de données et Control Enter pour voir le bloc de données. Nous pouvons donc voir que nous avons une, deux, trois, quatre colonnes. Et nous avons également cette colonne d' index ajoutée automatiquement par Pandas Il s'agit essentiellement d'une plage de nombres commençant à zéro. Voici donc la première ligne de nos données, celle-ci ici. Cela a cet indice de zéro. Et ça se termine au dernier rang. Vous pouvez voir qu'il s' agit de la première ligne, deuxième, de la troisième, de la quatrième ou de la cinquième rangée, puis Jupiter n'affiche pas puis Jupiter n'affiche pas les lignes cinq parce qu' il y a beaucoup de lignes, et il serait peu pratique de les voir ici Cependant, vous pouvez voir les cinq dernières lignes du bloc de données. Cela vous donne une vue d'ensemble du bloc de données. Cependant, ce que j'aime faire à la place, c'est simplement imprimer la tête du bloc de données, qui ne contient que les premières lignes. Donc, les cinq premières lignes vous offrent une vue plus compacte. Cela vous donne une idée des colonnes que vous avez et du type de lignes que vous avez également. Il est donc bon que la tête du bloc de données soit affichée ici. Ensuite, nous pouvons appuyer sur Escape. B et créez une nouvelle cellule ici. Entrez pour écrire un autre code. Vous pouvez obtenir la forme du bloc de données en accédant à la propriété shape. Il s'agit donc d'une méthode entre parenthèses. C'est une propriété. Il n'a pas besoin de parenthèses. Ensuite, vous arrivez à la forme du bloc de données, qui est essentiellement le nombre de lignes et le nombre de colonnes. Vous voyez une, deux, trois ou quatre colonnes. Vous souhaiterez peut-être également entrer, afficher les colonnes de votre bloc de données. Même si nous les avons là, c'est une autre façon de voir les noms des colonnes en accédant à la propriété columns. Ensuite, généralement, lorsque vous travaillez avec des données, certaines colonnes spécifiques vous intéressent, qui peuvent être une ou plusieurs colonnes. Dans ce cas, nous aimerions peut-être voir un aperçu de la colonne pour voir quelle est la note minimale et quelle est la note maximale ainsi que la distribution de ces notes et les afficher sous forme de graphique ici afin que nous puissions mieux comprendre nos données. Je vais donc faire escape, B, enter et data point Hit. Ce sera donc un histogramme. Entre parenthèses, nous aimerions voir la distribution des notes Par conséquent, j'entre dans la colonne de notation ici, je dis chaîne, exécute, et nous obtenons ce graphique. Laissez-moi vous expliquer ce que signifie ce graphique. Cela signifie que, par exemple , commençons par la droite. Ce bar ici, ce premier bar signifie que nous avons environ 24 005 étoiles, évaluations Vous voyez, par exemple, nous avons obtenu une note de 5 étoiles. Nous avons donc environ 24 005 étoiles dans l'ensemble du cadre de données. Et au total, nous avons 45 000 lignes au total. Ensuite, dans cette barre, notes sont de 4,5 étoiles, comme celle-ci. Et nous en avons environ, disons, 7 000. Ensuite, nous avons quatre étoiles, environ 9 000, peut-être 3,5 étoiles. Il s'agit d'un classement de trois étoiles. C'est aux alentours de 2000. Ensuite, nous avons une note de 2,5 étoiles. Celui-ci est là, avec deux étoiles. Évaluation de 1,5 étoile. C'est le chiffre le plus bas de toutes les évaluations. Les gens ne laissent donc pas beaucoup de notes de 1,5 étoile. Et nous avons également ce classement d'une étoile ici. Ce n'est pas le graphe des basses. Personnellement, je n'aime pas cela, mais c'est un moyen rapide de savoir comment vos données sont distribuées. Vous savez que, d'accord, nous avons des données de 1 à 5 et que cinq est la valeur la plus fréquente de vos données Et c'est à propos de cette conférence. Cela vous permet d'avoir une vue d'ensemble de votre bloc de données. Dans la prochaine conférence, nous allons zoomer sur notre bloc de données pour pouvoir sélectionner des lignes ou des tranches particulières de notre bloc de données afin de voir des valeurs individuelles. En d'autres termes, nous allons utiliser Python pour parcourir nos données sélectionner des sections particulières des données et les afficher. Je vous verrai donc dans la prochaine vidéo. 133. 132. Sélection de données avec Python: Bonjour, bon retour. Dans cette vidéo, nous allons zoomer sur les données de notre bloc de données en sélectionnant des colonnes particulières du bloc de données, lignes particulières, plusieurs colonnes, plusieurs lignes, des étagères spécifiques dans le bloc de données Nous allons apprendre à appliquer conditions afin que vous puissiez extraire des données en fonction de différents filtrages, etc. Commençons donc. Je vais ouvrir Jupiter. Et je vais passer à l'analyse des critiques. Dossier et cliquez sur le fichier Jupiter Notebook. Maintenant, vous devez savoir que si je suis dans une nouvelle cellule ici et que j'essaie d'accéder à la variable de données, nous allons obtenir cette erreur de nom. Les données ne sont pas définies car lorsque vous ouvrez simplement un bloc-notes Jupiter, les cellules ne sont pas automatiquement exécutées. s'agit donc pas encore d'une variable dans l'espace de noms de cette session Python interactive. Par conséquent, vous devez exécuter les cellules soit en accédant à la première cellule et en appuyant sur Shift Enter, puis Shift Enter pour exécuter l'autre cellule Shift Enter, Shift Enter, soit en cliquant sur ce bouton. Pour faire fonctionner toutes les cellules. Appuyez donc dessus, redémarrez et exécutez toutes les cellules. Ensuite, vous allez avoir accès à la variable Delta comme ça. , donc je voulais juste m' assurer que vous saviez que vous êtes au courant du comportement spécifique de Jupiter. Maintenant, je voudrais mettre quelques titres ici, du texte. Par exemple, je veux mettre le titre de cette première section que nous avons faite dans la vidéo précédente. Je voudrais donner un nom à ça. Je veux donc ajouter une cellule au-dessus de cette cellule. Par conséquent, ce que je fais, c'est d'abord m'assurer que je ne suis pas dans un certain mode, alors j'appuie sur Escape pour cela. Ensuite, j'appuie sur la touche A du clavier, et la nouvelle cellule va être ajoutée. Puis j'appuie sans entrer dans la cellule. Donc, sans entrer, assurez-vous d'appuyer sur Escape. Sans entrer dans la cellule, nous appuyons sur M, et cela convertira la cellule en cellule Markdown, ce qui signifie que la cellule n'attend plus de code Python Il attend du texte Markdown, qui est essentiellement une sorte de langage Par exemple, si nous écrivons deux de ces symboles de hachage et que nous sommes juste au-dessus du bloc de données Ensuite, nous appuyons sur Command Enter, cela va être converti en titre, en titre. En gros, H pour le titre. Si vous en ajoutez une de plus, vous obtiendrez des polices plus petites , etc. Donc deux, c'est bien. Ensuite, je vais ajouter ici, donc convertir cela en markdown avec escape, puis juste ici, sélectionner des données dans le bloc de données Et puis B pour entrer la nouvelle cellule de code, il s'agit donc d'une cellule de code qui est une cellule Markdown Je vais donc vous montrer comment sélectionner une colonne du bloc de données. Évasion. Sélectionnez une colonne. Entrée de contrôle. B, Entrée Pour sélectionner une colonne, vous pouvez utiliser cette syntaxe puis exécuter. Et ceci est une chronique. Maintenant, vous pourriez vous demander pourquoi devons-nous sélectionner une colonne ? Quel est l'intérêt de tout cela ? Eh bien, la réponse est qu'il s'agit de la première étape d'une analyse plus approfondie. Par exemple, si vous souhaitez extraire la moyenne, la moyenne de la colonne de notation, nous devons d'abord extraire la colonne, puis appliquer cette moyenne La méthode s'exécute, ce qui vous donnera la note moyenne de tous les cours pour l'ensemble du bloc de données Donc, la note de toutes les 45 000 lignes. C'est donc un exemple de la raison pour laquelle nous devrions sélectionner une colonne. Mais permettez-moi de supprimer la moyenne maintenant. Voilà comment sélectionner une colonne. Maintenant, échappez à B, entrez. Sélectionnez plusieurs colonnes. Exécutez, B, entrez. Pour sélectionner plusieurs colonnes, vous devez utiliser plus ou moins la même syntaxe. Mais au lieu d'insérer une seule colonne ici comme nous l'avons fait pour l'évaluation des chaînes, dans ce cas, nous insérerions une liste de plusieurs colonnes Disons que nous voulons le nom du cours. Donc, une chaîne, une virgule, autre chaîne, une note, puis exécutez Et cela vous donnera essentiellement un bloc de données contenant uniquement ces deux colonnes. Maintenant, il y a une différence fondamentale entre cette sortie et cela. Vous pouvez également constater que ce format est différent selon les lignes Il ressemble donc à un tableau car il s'agit en fait d'un bloc de données Donc, si vous appliquez le type, de cette expression. C'est donc de l'expression. Nous avons utilisé. Si vous l'exécutez, vous verrez qu'il s' agit d'un bloc de données. Mais si nous voyons le type de cette autre expression, vous verrez qu'il s'agit d'une série. Une série est donc un autre type de données sur les pandas, tout comme nous cadre de données, nous avons des séries, et les séries sont utilisées pour représenter des colonnes individuelles comme celle-ci ici. Donc, la colonne de notation uniquement. Mais lorsque nous avons plusieurs colonnes, Pandas utilise un bloc de données comme celui-ci C'était donc juste une information à garder à l'esprit. Cela ne changera pas grand-chose à la façon dont vous établirez les statistiques par la suite, mais il est bon de savoir comment fonctionne Pandas Voyons comment sélectionner ARO. Avec les rangées, c'est un peu différent. Bien entendu, vous devez d'abord vous référer à la variable de données, puis à I lock. Ensuite, vous avez besoin de crochets. À l'intérieur de ces crochets, vous devez placer l'index de la ligne à laquelle vous souhaitez accéder. Supposons, par exemple, que nous voulions cette ligne ici ou que nous y fassions mieux référence. Donc, la méga-malédiction de Python avec une note de cinq, qui a un indice de trois. Voyons si nous allons obtenir cette ligne. Exécute. Donc oui, il semblerait que ce soit le méga-cours de Python et il a obtenu une note de cinq. L'horodatage est ici, donc 333. Voyons le bloc de données dans son intégralité. Donc 333, celui-là. C'est cette rangée. Le type de cet objet est à nouveau une série. Pandas utilise donc également des séries pour les lignes, pour les lignes simples. Permettez-moi de supprimer ce type, puis de l' exécuter à nouveau. Il s'agit du résultat. Suivant. Sélection de plusieurs roses. B Entrez les données. Encore une fois, c'est iloc que nous utilisons. Et cette fois, comme nous travaillons avec plusieurs lignes, nous voulons saisir une tranche. Supposons que nous voulions passer de l' index un à l'index trois, ces lignes, et que nous obtenions cette trame de données cette fois, pas aussi grave. Nous avons donc obtenu la ligne avec l' index 1 et la ligne avec l'index deux parce que l'index supérieur n' est pas inclus dans la tranche comme c'est presque toujours le cas avec Python. Donc, fois 512, horodatage, 511. 512, cinq, Index un, index deux. Ouais. C'est ainsi que vous obtenez plusieurs lignes. Suivant. Sélection d'une section. Ce que je veux dire par là , c'est essentiellement une coupe transversale. Ainsi, des colonnes et des lignes particulières nous donneront essentiellement une tranche de la trame de données. Par exemple, nous voulons sélectionner des colonnes spécifiques. Encore une fois, nous utilisons la même syntaxe que précédemment. Vous voyez donc ici lorsque nous avons sélectionné plusieurs colonnes, donc l'évaluation du nom du cours dans une liste. Évaluation du nom du cours. Cela nous donnera donc essentiellement cela. Ensuite, à partir de cette trame de données, nous appliquons Alok parce qu'il s'agit d'un objet de trame de données, n'est-ce pas ? Alok parce qu'il s'agit d'un objet de trame de données, n'est-ce pas C'était également un objet de trame de données. Et puisque nous pouvons appliquer Alok à cette trame de données, nous pouvons également appliquer Ioc à cette trame de données. Il s'agit du même type d'objet. Ainsi, nous passons, par exemple, d' ligne d'index un à une ligne d'index trois, sans trois, et nous obtenons cette section du bloc de données, qui est, encore une fois, un bloc de données, un type d'objet. Donc, seules les colonnes de nom du cours et de notation et uniquement ces deux lignes. Et enfin, sélectionner une cellule. Nous suivons la même syntaxe, la même logique. Supposons donc que nous voulions sélectionner cette cellule ici. Donc, la cellule qui est la section transversale de ligne avec l'index deux et la colonne d'horodatage, celle-ci dedans, horodatage, index deux, Ce que nous faisons, c'est d'abord extraire la colonne en utilisant la même syntaxe que celle que nous avons utilisée pour sélectionner une colonne, à savoir celle-ci, Delta. Horodatage des données d'évaluation cette fois. Donc, en gros, cela nous donne une colonne, mais à partir de là, nous pouvons également verrouiller une série. Il s'agit donc d'une série, pas d'une trame de données, mais une série peut également utiliser cette propriété de journal et en extraire l'index deux, et cela nous donne la valeur, qui est une chaîne de caractères. Donc, si vous vouliez plutôt une note, vous obtiendrez une note flottante parce que les notes sont flottantes, 4.0, celle-ci là-dedans. Et c'est comme ça qu'on obtient un portable. Maintenant, cette méthode est très cohérente car elle utilise la même syntaxe que les autres méthodes. C'est donc cohérent avec les autres méthodes de sélection des données, mais il existe un moyen plus rapide de faire la même chose en utilisant les données, la propriété at. Et vous passez d'abord l' index de la ligne , puis juste le nom de la colonne, la note, par exemple. Et cela devrait vous donner la même valeur. Il est donc recommandé de l'utiliser lorsque vous sélectionnez une cellule. C'est donc à propos de cette conférence. Dans la prochaine conférence, nous allons approfondir la sélection des données, mais en utilisant des conditions. Par exemple, donnez-moi toutes les notes supérieures à quatre. Filtrage donc basé sur les conditions de la vidéo suivante. Voir. 134. 133. Filtrage du jeu de données: Bonjour, bon retour. Dans cette vidéo, vous allez apprendre à filtrer les données de votre bloc de données. J'entends par là l'extraction de groupes particuliers de données fonction de différents types de conditions Par exemple, supposons que dans notre bloc de données, nous ayons des parcours différents, même si vous ne voyez ici les mégacures de Python, car nous ne voyons que les cinq premières lignes Nous avons d'autres cours notés. Ainsi, si vous vouliez, par exemple, connaître la note moyenne d'un cours en particulier uniquement, vous devez filtrer les données en appliquant certaines conditions. Le filtrage vous permet donc d'effectuer une analyse sur un groupe particulier de vos données. C'est ce que nous allons faire. Tout d'abord, je vais attribuer un numéro à chacune des rubriques principales C'était donc une vue d'ensemble. La deuxième conférence portait sur la sélection, donc c'est la deuxième. Cette fois, nous passerons au troisième point, filtrant les données en fonction des conditions. C'est vrai. Appliquons d'abord une condition. Je vais donc créer une cellule Markdown et énoncer une condition. Appliquons une condition qui nous donnerait le cadre de données dans lequel les notes sont supérieures à quatre. Pour ce faire, vous devez suivre cette syntaxe. Maintenant, assurez-vous d'abord que votre variable de données se trouve dans l'espace de nom en exécutant cette première cellule. Contrôlez Entrée pour exécuter cette cellule. Nous sommes maintenant sûrs que les données se trouvent dans l'espace de noms. Il s'agit de la syntaxe entre crochets et à l'intérieur se la condition. Nous avons donc dit que nous voulions le bloc de données dont la note est supérieure à quatre. Par conséquent, nous disons que l' évaluation des colonnes est supérieure. Laissons un espace supérieur à quatre. Si nous l'exécutons, nous obtenons une trame de données et toutes ces lignes ont une note de 4,5 ou plus, non de quatre parce que c'est plus grand, ce n'est ni supérieur ni égal. S'il était supérieur ou égal, nous obtiendrons également les quatre notes, soit 4.0. Mais ce n'est pas le cas ici, c'est ce que nous obtenons. Vous voyez, par exemple, que les lignes avec l'indice 012 n'étaient pas incluses dans le bloc de données du bloc de données de sortie, et vous pouvez voir la longueur de ce bloc à l'aide d'une fonction Python length function Nous obtenons 29 758 lignes dont la note est supérieure Une autre méthode, si vous ne voulez pas utiliser la fonction native de Python, est d'utiliser count. Il s'agit donc de l'objet du bloc de données, et les objets du bloc de données ont une méthode de comptage. Et vous obtenez ce résultat, qui indique essentiellement que nous avons cette quantité de valeurs dans le nom du cours, cette quantité de valeurs dans l'horodatage, cette quantité dans l' évaluation et Parce que les commentaires ont ces valeurs non valables qui sont fondamentalement une valeur inexistante, elles n'existent pas. Par conséquent, nous avons 4 927 évaluations avec des commentaires dans lesquels personnes ont réellement écrit quelque chose Donc le reste, ce point négatif qui nous donne un certain nombre de commentaires sans valeur. Bien entendu, vous pouvez appliquer différents types de statistiques à ce sujet dès maintenant. Par exemple, il s'agit d'un droit relatif à une trame de données. Comment extraire uniquement la colonne ? Comment sélectionner uniquement le classement de la colonne ? Eh bien, vous pourriez jeter un œil ici, en sélectionnant une colonne. Voici donc comment sélectionner une évaluation des données de colonne. Maintenant, il s'agit du bloc de données. Par conséquent, vous appliquez une note et vous obtenez les évaluations avec une valeur de 4,5 ou plus. Donc, pour comprendre cela, est disons que D deux le cadre de données que nous obtenons en fonction de cette condition. Il s'agit donc d'un bloc de données. Ce bloc de données comporte une colonne de notation. C'est donc ce que nous obtenons. C'est la même chose que nous avons faite ici, évaluation des données, D pour la notation. J'espère que c'est clair. Cela vous permet également d'appliquer des fonctions telles que la moyenne. Vous obtenez la moyenne des notes supérieures à quatre. Je vais laisser les choses telles qu'elles étaient à l'époque. Ensuite, il y a plusieurs conditions. Supposons que nous voulions filtrer le bloc de données dont la note est supérieure à quatre et dont le nom du cours est égal à celui le cours Python complet dix applications opérationnelles professionnelles créées par le cours Python complet. C'est vrai. Donc, ce cours ici. Permettez-moi de copier la chaîne pour ne pas faire de fautes de frappe. C'est ainsi que vous effectuez ce filtrage, double filtrage. Tu commences par ça. Ensuite, au lieu de mettre une condition comme nous l'avons fait ici, nous en mettrions deux qui seraient séparées entre parenthèses Donc, la première condition est là et la deuxième condition est là. Donc, comme première condition, nous mettrions la même chose. Cette note delta est donc supérieure à quatre. Vous voyez donc que la condition est entre parenthèses. C'est la première condition. La deuxième condition est que Delta, nous avons dit que le nom du cours est égal à deux, la chaîne, le cours complet de Python, colonne a créé dix applications OP professionnelles, right, execute, et nous obtenons le bloc de données basé sur ce filtrage. Donc, comme il s'agit d'une trame de données, de cette trame de données, nous pouvons en extraire la note puis obtenir la moyenne de la colonne de notation, et cela nous donnera ce chiffre. Donc, la note moyenne des notes est supérieure à quatre pour ce cours. Et il s'agit à nouveau de la trame de données du filtre. Et c'est à propos de cette conférence. Dans la prochaine conférence, nous allons examiner le filtrage des données en fonction du temps. Alors, comment pouvez-vous extraire des parties de votre cadre de données pour une période donnée ? Vous voyez donc que nous avons cette colonne d' horodatage ici, qui s'étend de 2018 Voyons comment procéder dans la vidéo suivante. 135. 134. Filtrage basé sur le temps: Bonjour, bon retour. Dans la vidéo précédente, nous avons filtré en fonction des conditions. Nous avons donc appliqué une condition ici et plusieurs conditions ici, deux, pour être exact. Mais nous pouvons en appliquer plus de deux en utilisant la même syntaxe. Très bien, nous avons donc appliqué la condition en comparant les nombres. Nous avons donc travaillé avec des types de nombres, la colonne de notation contenant des types de données numériques et la colonne du nom du cours où nous avons indiqué que nous voulions uniquement les enregistrements le nom du cours est égal à cette chaîne. Donc, ces colonnes de noms, les types de données de chaîne. Donc des types de données de chaîne, des types de données numériques. Mais comment comparer ? Comment filtrons-nous les données en fonction de l'heure des données ? Ce n'est pas aussi simple, mais ce n'est pas difficile non plus. Alors faisons-le. Ajoutons une nouvelle section principale. Disons donc ce filtrage basé sur le temps. C'est vrai. Extrayons donc les avis laissés au cours du second semestre 2020. Essayons d'appliquer la même syntaxe qu'ici. Nous commençons donc par le bloc de données et les crochets. Maintenant, cette fois, nous avons besoin de deux conditions. Pourquoi ? Eh bien, parce que dans le premier cas, nous dirions Delta. L'horodatage est supérieur au 1er juillet 2020, et l'autre est l'horodatage Delta. C'est moins que le 31 décembre. Donc, plus que le premier juillet signifie le 2 juillet, le 3 juillet, le 4 juillet, et ainsi de suite. Nous voulons donc ces données pour cette période. Mais nous voulons également l' autre condition selon laquelle les données ne doivent pas être supérieures au 31 décembre. C'est pourquoi nous utilisons ce délai inférieur au 31 décembre, qui serait le 30 décembre, le 29 décembre, etc. Mais comment écrire le 1er juillet ici ? Eh bien, pour cela, nous avons besoin d' un objet datetime. Nous ne pouvons pas simplement écrire une chaîne, écrire comme les sept, 20 ou 20 premiers Python n'est pas si intelligent que ça. C'est un langage de programmation. Eh bien, il est possible que les développeurs Python puissent écrire quelque chose pour lire ce type de chaîne, mais cela serait sujet à des erreurs. Vous savez, quelqu'un l' écrit différemment, quelqu'un l'écrit comme ça. Et ainsi de suite, vous devez être explicite pour éviter les erreurs indésirables. Et par des moyens explicites, nous devons utiliser un type d' objet datetime approprié Je vais donc importer depuis le jour, importer la date et l'heure. Nous importons donc cet objet diurne hors de la bibliothèque diurne. N'oubliez pas d'exécuter cette cellule, de descendre ici et utiliser cet objet datetime que nous venons d'importer de la bibliothèque diurne, qui serait 2027, c'est-à-dire juillet et 1er juillet Cela nous donnerait le 1er juillet dans le type de données approprié. Nous pouvons faire de même pour cette date et heure , 2020, qui serait 12 pour le 31 décembre. C'est vrai. Maintenant, je pense qu'il est plus significatif de dire supérieur ou égal que le 1er juillet et aussi inférieur ou égal. Vous avez donc l'idée d'inclure également ces dates dans la période. Exécutons maintenant ceci. Et nous avons une erreur. Allons le lire ici. Il s'agit d'une erreur de type, ce qui signifie que le mauvais type a été utilisé d'une manière ou d'une autre. Mais lisons-en davantage pour comprendre ce que c'est. Cette opération, cet opérateur de comparaison, n'est donc pas pris en charge entre les instances de chaîne et de date à cette date et heure Il semble donc que cet opérateur ait été appliqué entre une chaîne et un jour ce jour-là. Hein ? Alors, quelle est la ficelle ici ? Le premier. L'horodatage des données est donc une colonne contenant des chaînes. L'horodatage contient donc des chaînes. Ce sont toutes des chaînes. Même s'ils ressemblent à une date, ce ne sont pas des dates. L'idée ici est donc que Python ne peut pas comparer les dates-heures, donc cette date/heure avec ces chaînes. Par conséquent, nous devons demander à Python de les traiter comme dates-heures comme des objets diurnes afin que Python puisse comparer deux objets diurnes, ce qui est plus significatif que de comparer une chaîne pendant la journée Pour créer Python, lisez-les comme des heures de jour, nous devons aller en haut de notre script. Et lorsque nous lisons le bloc de données à l'aide de la méthode CSV, nous devons ajouter un autre argument, qui est la date d'analyse Grâce à cet argument, nous indiquons à Python par les crochets quelles colonnes doivent être traitées comme des dates-heures. Donc horodatage, analyse les dates égales à l'horodatage entre crochets N'oubliez pas d'exécuter cette cellule, puis de descendre ici, exécuter à nouveau, la cellule. Nous avons une autre erreur cette fois, encore une fois, une erreur de type. Il dit que la comparaison entre cela et cela n'est pas valide. Donc cette fois, tu vois que c'est pour ça. Il s'agit donc d'une date/heure UTC. Et c'est ce jour là. Python essaie donc de comparer ces deux objets, qui, même s'ils sont des objets diurnes, sont tous deux des objets diurnes Python n'est toujours pas en mesure de les comparer car l'un d'eux, celui-ci ici, est un objet diurne naïf, ce qui signifie que l'objet diurne ne connaît pas son système horaire Par conséquent, Python, pour être prudent, vous indique que, d'accord, je ne sais pas quoi faire avec ces horaires de deux jours parce que je ne peux pas les comparer car je ne sais pas de quel système horaire il s'agit. Donc, même s'ils peuvent sembler plus petits que cela, ils peuvent en fait être plus grands que l'autre parce que cela pourrait être un autre système temporel, nous devrions l'agrandir. Pour comprendre l'importance de l' explicité dans la programmation, imaginez une tour de contrôle du trafic aérien Ils ont cette application qui reçoit les signaux de deux avions passant en même temps par cette tour Un avion vient des États-Unis, un avion vient d'Indonésie. L'application doit traiter le temps envoyé par ces deux avions. Et dans ce signal, outre l'heure, l'application doit également connaître le système horaire de chacune de ces deux dates et heures. Sinon, si ces deux vallées indiquaient simplement 6 h 00 en Amérique et 7 h 00 en Indonésie, le programme penserait qu' il y a une heure de différence. le programme penserait qu' il y a une heure de différence Cela pourrait alors perturber une chaîne d'autres processus, ce qui pourrait être dangereux. Donc, il vaut mieux être explicite. Bref, pour être explicite, nous devons déclarer un système horaire pour cette date et heure, tout comme celui-ci a un système horaire, et vous pouvez le voir. Ajoutons une autre cellule ici, et vous dites donnée, heure, horodatage, exécution, vous obtenez la série. Mais aussi ici, vous voyez la date et l'heure 64, c'est UTC, UTC. Déclarons donc la date et l'heure également en UTC. Faites-le en utilisant TZ info, cet argument, qui obtient une valeur, un type d'objet, un type d'objet UTC, qui doit être importé. C'est un objet spécifique du système temporel. Passez donc aux importations et dites que depuis PY TZ Import, UTC, n'oubliez pas d' exécuter cette cellule, descendre ici et de faire de même pour l'autre heure de données. Donc, un autre argument Ts dont l' information est égale à UTC, s'exécute. Et cette fois, nous avons enfin obtenu le bloc de données filtré. Vous voyez les dates ici. 20, 30 décembre 2012. Et ici aussi, nous voyons le 1er juillet. Avec une note assez faible, malheureusement. Quoi qu'il en soit, c'est ainsi que vous pouvez filtrer les données en fonction des horodatages Merci de m'avoir suivi. Je te parlerai plus tard. 136. 135. Transformer des données en informations: Bonjour, et bienvenue sur cette nouvelle vidéo, qui sera un peu différente des autres. Dans les vidéos précédentes, je vous ai montré quelques techniques pour filtrer les données d'un bloc de données. Il s'agissait essentiellement d'accéder aux colonnes, aux lignes et aux cellules et d'appliquer des conditions lors de l'accès à ces colonnes, lignes ou cellules d'un bloc de données. Cependant, ce que nous avons fait jusqu'à présent, c'est simplement extraire des données à partir de données s'agit toujours pas d'une analyse de données, car le but de l' analyse des données est de transformer les données en informations. C'est le but de l'analyse des données, mais il ne s'agit toujours pas d'informations. Par exemple, supposons que nous voulions obtenir des notes supérieures à quatre et que nous obtenions ce bloc de données, mais qu'il s'agisse toujours d'un bloc de données. Ce n'est pas convivial pour les humains. Ce n'est pas une information. L'information serait que nous obtenions plutôt la moyenne des notes supérieures à quatre. Nous nous retrouverions donc avec un seul chiffre. C'est une information parce qu' elle est lisible par l'homme. Cela nous dit quelque chose, ou peut-être pourrions-nous créer un diagramme, un graphique où nous pourrions voir les notes au fil du temps. Nous voyons le graphique, nous pouvons voir une tendance et nous pouvons tirer certaines informations de ce graphique. Transformer les données en informations est ce que nous allons faire ensuite, et pour cette vidéo en particulier, nous allons répondre à une série de questions. En d'autres termes, nous allons extraire certaines informations, telles que nous allons obtenir la note moyenne, la note moyenne pour un cours en particulier, etc. Maintenant, vous devriez être capable d'écrire le code devant moi car vous savez déjà, par exemple, comment extraire la colonne de notation. Et je vous ai également donné quelques indices indiquant que vous pourriez utiliser une méthode moyenne pour obtenir la note moyenne de cette colonne. Commençons donc par les premières informations. La note moyenne de tous les cours pour toutes les périodes. Ce serait une moyenne d'évaluation des données. Et c'est la note moyenne. Donc, comme nous l'avons fait ici lors de la sélection d'une colonne, Delta Rating. C'est ce que nous faisons ici également. Cela nous donne une colonne, et cela nous donne une note. À droite, ensuite, note moyenne pour un cours en particulier. Cette fois, nous devons appliquer une condition selon laquelle le nom du cours delta est égal. L'opérateur de double affectation est donc égal à l'un des cours. Supposons que le méga-cours de Python ait créé dix applications du monde réel. Maintenant, s'il vous manque une seule lettre dans la chaîne, vous n'obtiendrez pas le résultat escompté. Supposons que vous ayez écrit un petit A au lieu d'un A majuscule et que vous obteniez un bloc de données vide Si je remplace le A minuscule par une majuscule, nous obtenons la trame de données filtrée, et à partir de là, nous voulons la Ce sont donc les notes des mégacurs Python, et la moyenne est la moyenne des mégacures Python, la note moyenne, qui est légèrement supérieure la note moyenne de tous les cours C'est vrai, note moyenne pour une période donnée. Data, je vais juste le copier et le transmettre ici. Nous avons donc cette première condition, cette deuxième condition. Nous parlons donc de cette période. Vous pouvez changer cela pour une autre période, disons toute l'année 2020, du 1er janvier au 31 décembre. Vous pouvez maintenant diviser cette expression tout en obtenant le même résultat en entrant en appuyant sur Entrée après l'opérateur t. Et vous obtenez toujours le cadre de données du filtre , à partir duquel nous obtenons les évaluations et à partir de là, nous obtenons la moyenne. C'est la moyenne pour 2020. Ensuite, note moyenne pour une période donnée pour un cours donné. Je vais le copier en appuyant sur CC, en cliquant ici et en appuyant sur V. Ensuite, après cette condition, donc une parenthèse, deux parenthèses, je vais ajouter l'opérateur final Et appuyez sur Entrée, puis appuyez de nouveau sur Entrée. Et ici, je vais ajouter l'autre condition, qui est celle-ci. Le cours est égal à cette chaîne particulière, le méga-noyau Python. Exécuter. Il y a un décalage entre parenthèses Vous voyez que ce crochet est surligné en rouge. Cela signifie que nous devons le supprimer. Exécutez à nouveau, et c'est une évaluation. Pour le méga-cours de Python de 2020. C'est ainsi que vous extrayez des informations à partir de vos données. Continuons avec la moyenne des notes non commentées. Donc des évaluations non commentées. Vous savez que, pour plus de commodité, je vais mettre la tête du bloc de données ici. Vous savez donc que nous avons ici une colonne de commentaires, qui peut être un NaN, ce qui signifie noter un nombre, donc une valeur nulle, ou une chaîne, quelque chose qu'un étudiant a écrit comme critique d'un cours en particulier. Nous voulons obtenir la moyenne des notes qui n' ont aucune commande. Donc, pour ce faire, vous dites que les données, la condition, commentaire des données, sont nulles. s'agit en fait d'une méthode, Il s'agit en fait d'une méthode, qui nous donne une trame de données filtrée avec uniquement les lignes dont la valeur de commentaire est NaN. Le contraire n'est pas nul. Ensuite, vous obtenez les lignes avec des commentaires. Ce que nous voulons est nul cette fois et à partir de là, nous voulons la colonne de notation et la moyenne. C'est le moyen. Bien entendu, le contraire ne serait pas nul. Et nous constatons que la note moyenne des notes avec commentaires est supérieure la moyenne des notes sans commentaire, ce qui me semble normal. Les personnes qui aiment le cours ont peut-être aussi tendance à écrire quelque chose pour exprimer leur gratitude. Je ne sais pas, mais cela nous dit quelque chose. C'est vrai, le nombre d'évaluations non commentées. Eh bien, c'est facile, il suffit de le copier, coller une larme et au lieu de dire « comptez ». Et voici le décompte. Le contraire ne serait pas nul. Donc, les évaluations avec le nombre de commentaires. Et cela ajouté, j'en suis sûr, donne 45 000, soit un nombre total de rangées de notes Donc, des évaluations sans commentaire, des évaluations avec commentaire. Ensuite, le nombre de commentaires contenant un certain mot. Dans le cadre de données du commentaire, disons que certains étudiants parlent de l' accent du professeur. Quelle est la moyenne des notes contenant un accent ? Les gens se plaignent-ils de l'accent et combien de personnes se plaignent de l'accent du professeur ? Trouvons cette information. Encore une fois, la condition est que le commentaire Delta, la chaîne de ce commentaire contienne le mot accent. Nous obtenons une erreur. Le problème est que Python ne peut pas masquer avec un tableau non booléen contenant des valeurs nulles Python ne peut donc pas rechercher ces valeurs nulles dans les commentaires, ni rechercher de chaîne dans ces types de données. Nous voulons donc indiquer à Python par le biais de l' argument NA défini sur fold. Dans ce cas, Python ignorera ces nouvelles valeurs et ne recherchera l'accent dans les commentaires qu'avec une chaîne contenant une valeur. Et il s'agit d'une trame de données filtrée. Donc, tous ces commentaires mentionnent en fait le mot accent. Combien d'entre eux ? Ce ne sont que les évaluations. Le nombre de notes est de 77. Donc, 77 sur 45 000 au total, bien sûr, la moyenne serait simplement cela, mais en changeant ce nombre pour une moyenne Et c'est une note faible, comme je m'y attendais. Comme les cours sont dispensés par des étudiants de différents pays, certains d'entre eux peuvent trouver l'accent du professeur désagréable. Alors peut-être qu'ils laissent un commentaire négatif et une note négative le long du commentaire. Et c'est ainsi que s'achève notre conférence ici. Merci de m'avoir suivi. Dans les prochaines vidéos, nous allons créer des tracés, ce qui est très amusant, à mon avis, et c'est une belle façon de présenter informations au public à l'utilisateur Merci, je te parlerai plus tard. 137. 136. Agrégation et traçage des notes moyennes par jour: Bonjour. Dans cette vidéo, je vais vous montrer comment créer un graphique des notes moyennes quotidiennes. Notre graphique indiquera donc la note moyenne pour chaque jour. Pour ce faire, je ne vais pas travailler sur le précédent fichier Jupiter car j'aime bien séparer les choses. Donc, pour la partie visualisation, je vais créer un nouveau bloc-notes. Je vous suggère de faire de même. Donc, tout d'abord, nous devons charger le bloc de données. Je vais donc simplement copier cette cellule du bloc-notes précédent, l' y copier et imprimer rapidement l'en-tête des données, juste pour vérifier que tout est correct. Oui, ce sont donc le Delta, le Delta brut. Appuyez ensuite sur Escape et appuyez sur B sur votre clavier pour créer une nouvelle cellule. Appuyez sur Entrée pour entrer dans la nouvelle cellule et créons ce graphique. Mais avant de créer le graphique, nous devons effectuer une sorte d'agrégation de données. vrai, nous transformons les données en informations, mais nos données sont assez brutes. Vous voyez que pendant une journée, nous avons plusieurs évaluations laissées par différents étudiants. Par exemple, à la seconde d' un prill, nous avons cette note, nous avons ceci et cela, et ainsi de suite Nous voulons agréger ces chiffres pour obtenir une note moyenne. Comment s'y prend-on ? C'est ce que nous faisons. Nous pouvons le faire en utilisant la méthode du groupe B de Pandas, qui produit une nouvelle trame de données. Il s'agira donc d' une nouvelle trame de données, mais avec des données agrégées. Donc, quelques nouvelles données qui sont des moyennes de la trame de données brutes Je vais vous montrer comment fonctionne le groupe B. J'ai donc dit que le groupe B produit une nouvelle trame de données. Par conséquent, je vais créer une nouvelle variable dans laquelle le nouveau bloc de données sera stocké. La moyenne journalière est donc ma nouvelle variable, et cela équivaudrait aux données. Donc, ce groupe de trames de données B. J'aime vraiment cette méthode. C'est très intuitif. Vous regroupez donc ces données. Par. Par quoi voulons-nous regrouper ? Eh bien, par horodatage. Voyons ce que cela nous donne. Je vais donc imprimer la moyenne ici, le début de l'exécution moyenne et voyons ce que nous avons obtenu. Nous avons essentiellement le même bloc de données. Cela est dû au fait que le groupe n'a pas pu regrouper les données par horodatage, car le groupe B essaie de trouver des valeurs identiques dans cette colonne donnée Dans ce cas, l' horodatage n'a pas valeurs identiques car chaque valeur est unique, vous pouvez le voir, c'est le même jour, mais cet avis a été laissé pour le moment L'autre avis a été laissé à ce moment-là et ainsi de suite. Chaque valeur est donc différente. Par conséquent, avant d'appliquer le groupe B, nous devons effectuer un certain traitement ici. Nous devons ajouter une nouvelle colonne dans le bloc de données. Je vais nommer cette colonne D en majuscule D. J'essaie simplement d' être cohérent avec les noms des colonnes. Comme ils sont en majuscules, ils commencent par une majuscule plus tard. Je vais créer cette nouvelle colonne avec une majuscule plus tard. Le jour des données est donc égal à l'horodatage des données. Ce DT DT est une propriété qui nous donne accès à un certain nombre d'attributs temporels tels que la date, désolé, la date, vous pouvez faire le mois. Et ainsi de suite. Pour l'instant, il nous faut la date. Permettez-moi de commenter ceci Je vais donc les sélectionner et appuyer sur barre oblique Ctrl ou sur la barre oblique de commande pour les commenter. Et je vais vous montrer le nouveau bloc de données. C'est donc le cadre de données. Donc ce que je viens de faire, c' est d'extraire de cet horodatage, j'ai extrait uniquement la date Par conséquent, ce que j'ai obtenu, c'est que pour chaque horodatage, j'ai obtenu la date Donc, pour cet horodatage, c'est le deuxième avril, le 2 avril, et ainsi de suite De cette façon, nous avons obtenu des données identiques. Tu sais, si tu le veux par mois, tu auras le numéro du mois. Donc quatre, quatre, quatre, et ainsi de suite. Mais nous avons besoin d'une date, donc je vais m'en tenir à cette date. Maintenant, nous pouvons éviter cela et supprimons les points de données parce que nous n'en avons plus besoin. Et maintenant, nous pouvons réessayer ce groupe par méthode , mais attention. Cette fois, nous avons besoin d'une journée ici. Comme nous l'avons dit, nous voulons nous regrouper par jour. Exécutons et voyons ce que nous obtenons. Ce n'est peut-être pas le résultat que nous attendions. Vous voyez donc que ce jour n'est pas encore agrégé car nous devons donner une autre commande ici. Nous devons expliquer aux pandas la méthode d'agrégation. Voulez-vous donc agréger en fonction de la moyenne ou du nombre ? Dans ce cas, c'est la moyenne. Nous dirions donc point mean, la méthode, execute, et cette fois, c'est ce que nous avons obtenu. Donc c'est juste la tête. Mais si vous imprimez le bloc de données dans son intégralité, vous verrez qu'il en sera ainsi jusqu'à cette date. Donc, pour chaque ligne, nous avons un jour, premier janvier, le 2 janvier, le 3 janvier, et ainsi de suite. C'est donc la note moyenne de tous les cours de cette journée. Maintenant, vous devez comprendre ce produit. Comme je vous l'ai dit, il s'agit d'un type de trame de données. Donc, le dataframe de Panda, mais celui-ci n'a qu'une colonne. Ce n'est donc pas une colonne. Le jour n'est pas une colonne. Le jour est en fait l'indice. Vous voyez que si vous dites « moyenne journalière » de ces colonnes, note est la seule colonne. Et si vous voulez accéder à la notation, vous devez faire comme ça. Évaluez, et vous obtiendrez cette série. Maintenant, c'est quoi ça ? Voici l'indice. Par conséquent, si vous souhaitez accéder à la colonne du jour, vous ne le faites pas comme ça car il s'agit d'une syntaxe pour accéder aux colonnes. Lorsque vous souhaitez accéder à cette colonne spéciale, c'est-à-dire à cette colonne d'index, vous devez dire index à points. Et puis nous obtenons cette série qui est de type index. Mais vous pouvez facilement le convertir en liste. Par exemple, si vous aimez les tracer. Ainsi, tout comme les colonnes, les index, tels que celui-ci, sont également des types de listes Donc des tableaux de données. Faisons maintenant le tracé. Pour effectuer le traçage, nous allons avoir besoin de la bibliothèque MT plot leap Je vais donc le saisir ici. Importez donc MT plot lib PyPlot. Nous avons besoin de ce module de la bibliothèque, et une bonne pratique consiste à utiliser SPLT. Vous verrez donc sur le Web que tout le monde utilise le PLT. Donc, si vous voulez être cohérent avec les autres programmeurs, vous devez importer un PLT Cela vous facilite également la tâche, car vous n'avez pas à le taper, mais vous pouvez simplement dire PLT, comme nous le ferons ici diagramme à points PLT est donc la méthode, et cette méthode obtient essentiellement deux arguments, le X et le Y. Nous construisons donc un graphique avec un axe X et un axe Y. Le long de l'axe X, nous allons avoir les jours. Cela signifie que nous voulons l'indice de points moyen. Donc, ce tableau est là. Et le long de Y, nous voulons la colonne de notation moyenne. Exécuter. J'ai eu une erreur, PLT n'est pas défini car j'ai oublié d'exécuter cette cellule pour que l'importation soit valide Maintenant, je peux l'exécuter à nouveau, et c'est un produit. Le long de l'axe Y, nous avons les dates, dont je sais qu'elles sont un peu invisibles, mais nous allons corriger cela Le long de l'axe Y, nous avons la colonne des évaluations. Vous voyez que cela commence à 3,8 quelque part ici jusqu'à cinq. Maintenant, matplot leap choisit automatiquement cette plage en examinant les données Dans notre colonne de notation, si vous y jetez un œil, vous dites la note moyenne. Si vous extrayez la valeur maximale, vous verrez qu'elle est de 5,0. Et si vous voyez le minimum, vous voyez qu'il se situe autour de 3,8. Un jour, les étudiants ont laissé une note moyenne de 5,0, donc tous. Un autre jour, ils sont partis 3,8. Matplot Lip place donc ces deux limites de l' axe Y au lieu de commencer l'axe de zéro à cinq, ce qui rendrait le tracé moins lisible C'est donc une bonne chose pour MT Plot Lip. Le problème, c'est que, comme vous pouvez le constater, ce graphique n'est pas interactif, il s'agit donc simplement d'un fichier image. Vous ne pouvez pas avoir de fonctionnalités contextuelles, vous pourriez donc voir certaines valeurs si vous passez votre souris quelque part. Matplot Lip ne peut donc pas faire cela. Cependant, nous pouvons améliorer un peu cela en déclarant un objet figure et lui donnant un argument de taille fixe, disons 253. C'est la largeur et c'est la hauteur du tracé. Alors maintenant, vous pouvez voir que nous avons un axe X plus long et un axe Y plus court. Maintenant, si vous n'êtes pas d'accord avec ce graphique, si vous pensez qu'il n' est toujours pas lisible, cela ne vous dit pas grand-chose sur la tendance. Donc, si la note augmente avec le temps ou non, nous pourrions sous-échantillonner les données Ainsi, au lieu d'extraire des moyennes quotidiennes, nous pourrions extraire des moyennes hebdomadaires. Ainsi, nous aurions moins de points le long l'axe X et une Donc, à mon avis, ce sont trop de données. C'est illisible, ce n'est pas utile. Nous allons les sous-échantillonner avec un meilleur graphique dans la vidéo suivante Voici donc ce que vous avez appris dans cette vidéo. Vous avez appris à regrouper des données et à les tracer. Maintenant, permettez-moi de faire une petite révision du groupe par méthode au cas où vous seriez toujours confus. Permettez-moi donc de le supprimer dans une autre cellule et d' imprimer l'en-tête du bloc de données agrégé. Vous voyez donc que nous avons une note et un indice des jours ici. Que s'est-il passé avec le nom du cours ? Avec cette chronique ? Que s'est-il passé avec la colonne des commentaires ? Que s'est-il passé avec la colonne d'horodatage ? Eh bien, ils ont disparu parce que cette méthode de moyenne ne fonctionne qu'avec les colonnes contenant des valeurs numériques telles que l'évaluation. Je ne peux pas calculer de moyenne sur cette colonne, ce commentaire, ce nom de cours ou cet horodatage Par conséquent, les colonnes telles que horodatage courant et les noms de cours seront automatiquement supprimées par cette méthode, et seules ces colonnes seront conservées De même, vous pourriez faire un décompte à la place de cela. Dans ce cas, vous obtiendrez un bloc de données différent. Vous voyez donc que nous avons le nombre de noms de cours, ce qui signifie que 46 lignes ont été créées pour cette date. En d'autres termes, 46 avis. Nous avons donc 46 évaluations, quel que soit le nom que vous voulez lui donner. Nous en avons sept ici parce ce que fait Pandas, c'est qu'il ne prend pas en compte des valeurs autres que celle-ci, celle-là, etc. Nous pourrions donc avoir ce diagramme de dénombrement. Nous indiquons donc le nombre d' évaluations que nous avons reçues chaque jour. C'est ce que je voulais vous apprendre dans cette vidéo. Merci beaucoup Je te parlerai plus tard. 138. 137. Sous-échantillonnage et traçage des notes moyennes par semaine: Je vais revenir. Dans la vidéo précédente, nous avons développé un graphique montrant les moyennes quotidiennes des notes, mais également le nombre quotidien de notes Dans cette vidéo, nous voulons reconstruire ce graphique, mais sur une base hebdomadaire. C'est ce que nous allons faire. Organisons donc un peu ce bloc de données. Je vais cliquer ici, appuyer sur A, sur Entrée, appuyer sur M, sur Entrée, et donner à cette section une note moyenne des titres par jour, puisque nous avons fait à la fois des moyennes et des dénombrements Exécutez cette cellule. Nous avons maintenant besoin d'une nouvelle cellule, notée B en moyenne par semaine. Encore une fois, assurez-vous d'avoir accès à la variable de données. Voici donc mon bloc de données. Sinon, vous devez d' abord exécuter cette cellule , puis effectuer les opérations suivantes. Donc, la première chose que nous voulons faire, c'est que nous voulons copier cette ligne. Et ce que nous voulons changer , c'est d'abord créer une nouvelle colonne dans le bloc de données. Disons-le donc « faible ». Et nous extrayons de l' horodatage le point T. Doit-il être faible ? Essayons ça. Ou imprimez simplement le dataframe dans son intégralité. C'est bon. Nous recevons un avertissement. Ignorons cela pendant un moment. Et nous avons la colonne de la semaine. Nous voyons donc que c'est la 13e semaine. C'est la première semaine. Voyons voir. En fait, quel est le maximum de cette colonne ? Donc c'est 53. Quel est le minimum ? C'en est un, je suppose. Hmm. Cela signifie que nous n' avons que 53 semaines. Pandas agrège donc les semaines de différentes années, ce agrège donc les semaines de différentes années, qui signifie qu' il agrège les notes de, disons, la première semaine de 2019 avec les notes de la première semaine de 2019 et les notes de la première semaine de Toutes ces trois semaines seront donc regroupées en une seule, et ce sera la première semaine. Ensuite, nous avons la deuxième semaine pour la deuxième semaine de 2019, 2019 et 2020, et ainsi de suite. Au total, nous avons eu 53 semaines car c'est le nombre de semaines par an. Eh bien, normalement, il y a 52 semaines pour autant que je sache, mais peut-être que l'une de ces années est probablement une année bissextile, 53 semaines, je suppose. Quoi qu'il en soit, tu as compris l'idée. Ce n'est pas ce dont nous avons besoin. Essayons ce que l'avertissement suggère DT so calendar. Cette semaine-là. Hum. Il semble que le maximum soit à nouveau de 53. Nous avons tout de même des semaines agrégées. Par conséquent, la solution consiste à utiliser SDR f time, ce qui signifie chaîne à partir du temps. Et cela prend comme argument certains codes de date et d'heure tels que le pourcentage Y, peut-être un tiret ou un espace qui dépend de vous. C'est facultatif. Mais c'est le code que vous devez utiliser si vous souhaitez extraire l'année. Ensuite, nous extrayons le numéro de la semaine. Voyons ce que nous obtiendrons cette fois. Nous sommes en train de discuter. Donc, cette fois, nous avons l' année et la semaine. Par conséquent, nous pouvons distinguer les différentes lignes. La semaine 13 de 2021 porte donc désormais ce nom. Il n'y en a pas que 13. Nous aurons donc, encore une fois, 20 2013, 2019, 13, etc. Nous avons donc des noms uniques depuis des semaines. Et c'est ce qui nous a aidés à créer ce format datetime Vous pouvez utiliser d'autres codes. Donc, si tu voulais un mois, tu utiliserais un mois inférieur. Ensuite, nous obtiendrions le numéro du mois, avril ici, et celui de la semaine, le numéro de la semaine. Comme je vous l'ai dit, c'est facultatif. Ainsi, au lieu du tiret, vous pouvez utiliser un espace, et vous pouvez obtenir l'espace entre le mois et la semaine. Où pouvez-vous trouver ces codes ? Eh bien, vous pouvez simplement utiliser les codes de format datetime de Google Python, et vous verrez une liste, une grande liste de ce que vous pouvez utiliser Utilisons donc ici le tiret et le numéro de semaine. Alors, quelle est la prochaine étape ? Eh bien, la prochaine étape consiste à regrouper les données. Supposons donc que la moyenne faible d'une nouvelle trame de données égale à un groupe de points de données par semaine. Donc cette colonne. Et nous voulons en extraire le moyen. Voyons ce que nous allons obtenir. Cela semble donc fonctionner. Tu vois ? Eh bien, d'accord, Python envisage la première semaine, zéro, mais cela n'a pas d'importance. Je pense que c'est bon. Nous avons donc la moyenne pour chaque semaine. Encore une fois, ne l'oubliez pas. La colonne de la semaine est en fait l'index. C'est donc la première semaine, la deuxième semaine, et ainsi de suite. Et la note, c'est la colonne. Faisons donc le complot maintenant. Diagramme à points PLT. Nous devons donc donner un X et un Y. Cette fois, le X sera un indice à points moyen faible, sorte que la colonne de la semaine et l'évaluation des données s'exécutent J'ai reçu cette erreur. X et Y doivent avoir la même première dimension, mais avoir des formes telles ou telles. Il semble donc que j' utilise des colonnes provenant de différents blocs de données. Il s'agit donc d'une trame de données moyenne hebdomadaire, qui compte 173 lignes, et voici l'autre trame de données qui compte 45 000 lignes Donc je voulais dire par jour, désolé, moyenne hebdomadaire. Attendez, voici le graphique. Encore une fois, si vous souhaitez appliquer un certain dimensionnement, vous devez le copier et le coller ici Cela modifie essentiellement l'objet de la figure. Et voici le graphique. Donc note moyenne par semaine. Maintenant, vous voyez que les étiquettes ici sont écrasées les unes avec les autres Et il existe des moyens d'y remédier. Mais je dirais que cela ne vaut pas la peine de le faire ici avec Matt Plot Lee, car si vous voulez vraiment montrer vos données aux utilisateurs, vous devez utiliser une bibliothèque de traçage plus moderne, telle que des graphiques élevés, nous utiliserons dans les prochaines vidéos Les graphiques élevés afficheront désormais un graphique plus intelligent , convivial, offrant une expérience utilisateur exceptionnelle et essayant montrer les informations de manière plus efficace. Je dirais donc que cette représentation est suffisante pour utiliser Matplot Leap dans le bloc-notes Jupiter Nous ne faisons donc qu'explorer les données. Je peux voir maintenant que nous observons une tendance selon laquelle les notes augmentent avec le temps. Peut-être que cela n'était pas très visible dans le graphique quotidien. Vous pouvez donc voir ce graphique ici. Cela contient les chiffres actuels, mais nous pouvons changer cela pour signifier exécuter à nouveau la cellule, puis exécuter à nouveau les cellules de traçage, et nous pouvons voir les moyennes quotidiennes ici, les moyennes hebdomadaires Je crois donc que vous êtes d'accord avec moi pour dire qu'il est plus facile de voir la tendance dans ce graphique que dans celui-ci. Et c'est là le pouvoir du sous-échantillonnage des données. Dans la vidéo suivante, nous allons sous-échantillonner encore davantage les données, et nous allons montrer les notes moyennes par mois Rendez-vous dans la prochaine vidéo. 139. 138. Sous-échantillonnage et traçage des notes moyennes par mois: Bonjour. Dans cette vidéo, je vais vous montrer comment créer un graphique montrant la note moyenne par mois. Ce sera une conférence très courte car nous savons déjà comment faire. Tout ce que nous avons à faire est de simplement copier cette cellule comme ça ou vous pouvez également la copier en appuyant sur Escape puis sur CC. Appuyez deux fois sur la touche C. Ensuite, il vous suffit d'y aller et de dire V, et cela collera la cellule pour que vous n'ayez pas à copier tous les codes comme ça. Mais au lieu de copier les codes, vous pouvez copier la cellule entière. Ensuite, nous devons apporter quelques modifications ici, le mois ici, l'horodatage, puis au lieu de U, nous avons M. Au lieu de la semaine, nous avons Au lieu d'une semaine ici, nous avons un mois. C'est très bien. Ensuite, nous mettons à jour ici la moyenne mensuelle variable. Exécution moyenne mensuelle, et il s'agit de la moyenne mensuelle. Je pense donc que ça s'améliore. Vous voyez que nous voyons la différence plus clairement maintenant. Et c'est aussi parce que vous voyez que la fourchette a changé au fil du graphique depuis que nous disposons de plus en plus de données agrégées Nous avons donc maintenant des moyennes mensuelles Cela signifie qu'il n'y a pas une grande amplitude, une grande différence entre la valeur la plus élevée. Vous voyez donc que la valeur la plus élevée se situe maintenant entre 4,6 et la valeur la plus basse, qui se situe entre 4,3 ou 4,35 Cela rendra les hauteurs et sommets plus apparents pour l'utilisateur. C'est vrai, et c'est à propos de cette vidéo. Dans la prochaine vidéo, nous allons faire quelque chose de plus différent. Nous allons chercher à créer plusieurs lignes dans un seul graphique, et chaque ligne représentera la moyenne mensuelle des notes pour chaque cours. Jusqu'à présent, nous n'avions que des cours agrégés. Alors parlons-en avec vous dans la prochaine vidéo. 140. 139. Notes moyennes par cours par mois: Bonjour, bon retour. Dans cette vidéo, nous allons générer un graphique contenant différentes lignes, et chaque ligne représentera la note moyenne par mois pour un cours donné. Nous avons donc plusieurs cours. Nous allons avoir une ligne pour chaque cours. C'est ce que nous allons faire. Mettons un titre à l'âge de trois ans. Il s'agirait d' une note moyenne par mois et par cours. C'est vrai. C'est ainsi que nous procédons. Tout d'abord, nous avons besoin d'une colonne de mois dans le bloc de données. Maintenant, je sais que c'est ce que nous avons fait ici. Nous avons déjà cette colonne du mois, mais je veux garder le code séparé, afin que cela ne fasse pas de mal si vous le refaites ici juste pour des raisons de cohérence. Donc, pour dire que cette cellule fait cette chose en particulier, elle construit un graphe de plusieurs lignes, et pour ce graphique, nous avons besoin de cette expression. C'est donc la même expression. Je peux juste le copier et le coller ici. Bien, nous n'avons pas besoin de changer quoi que ce soit, il suffit donc d'extraire le mois et de vérifier. Nous avons donc le mois pour chaque ligne. Puisque nous regroupons par mois, il est logique de l'avoir. Ensuite, nous devons utiliser la méthode group by pour créer une nouvelle trame de données, qui serait une agrégation. Maintenant, juste pour que nous le comparions pour le comparer. Voyons à quoi ressemble le cadre de données moyen du mois précédent . Encore une fois, c'est ce que nous avions. Ce bloc de données ne contient pas d'informations sur les cours. Il manque donc les informations sur le nom du cours. Vous voyez ici que nous avons cette colonne. Nous devons intégrer cette dimension d' une manière ou d'une autre dans notre nouveau cadre de données agrégées. Ce que nous devons faire ici, c'est donc quelque chose de différent. Encore une fois, nous devons créer une nouvelle variable. Appelons cela un CRS moyen mensuel, bien sûr, pour faire la distinction entre cette trame de données et ce CRS mensuel moyen Encore une fois, il s'agira d'un produit par produit de cette trame de données, en utilisant un groupe par méthode. Mais dans ce cas, laissez-moi le supprimer afin que vous puissiez voir l'autre code ici pour voir la différence. Dans ce cas, non seulement le mois figurera dans la liste des colonnes à utiliser pour le processus d'agrégation, mais aussi, pouvez-vous deviner le nom du cours ? Donc, mois par mois, c'est ce dont nous avons besoin. Appliquons maintenant sérieusement et voyons ce que nous avons obtenu jusqu'à présent. Il s'agit donc d'un bloc de données. Et en gros, celui-ci comporte en fait deux niveaux d'index. Il contient le mois et le nom du cours. Vous pouvez le constater si vous faites cet index. Vous voyez donc que c'est un index multiple. Vous voyez la colonne du mois ainsi qu'un nom de cours qui n'apparaît pas ici, mais il est là et tel que vous l'avez vu, vous pouvez le voir ici. Vous voyez qu'ils sont en gras. Ces valeurs, ce sont donc des index. Et voici une chronique. Les colonnes ne sont donc que des notes, une seule colonne. Maintenant, ce n'est pas encore très utile car la façon dont cela est construit est que nous avons une ligne ici. Il s'agit donc d'un groupe de lignes. Tout commence ici. Donc le premier cours, le deuxième cours, le troisième, le quatrième, le cinquième. Et il y a aussi d'autres cours ici , que nous pouvons voir en appliquant ici une tranche. Voyons donc les 20 premiers enregistrements. Nous voyons maintenant les 20 premiers enregistrements dans leur intégralité, le premier jour de pardon, premier mois de 2018, deuxième mois de 2018, et ainsi de suite. Ce cours a obtenu cette note pour ce mois-là. Ce cours a obtenu cette note moyenne pour ce mois et pour tous les autres cours. Ensuite, le même schéma, tel que celui-ci ici, se répète encore et encore pendant tous les mois. Maintenant, pour avoir ces données dans une meilleure structure, nous devrions appliquer ici méthode de dépile pour décompresser essentiellement cette trame de données et obtenir cette meilleure Maintenant, nous avons une sorte de tableau croisé dynamique, pour ainsi dire, nous avons le mois ici, premier mois, le deuxième mois, le troisième mois, et chaque colonne représente désormais un cours. Si vous voulez savoir, par exemple, l'évaluation de l'ensemble du cours de Python créé dix applications OOP professionnelles pour un mois donné, disons que celle-ci n'est aucune parce que le cours n'a pas été publié Pourtant, à cette date. Mais si vous regardez à la fin, disons -20 Vous verrez que dès le premier mois de 2020, nous avons une note moyenne pour ce cours, n'est-ce pas ? Et ainsi de suite, que pouvons-nous faire cette trame de données maintenant ? Eh bien, nous pouvons le planifier. Mais cette fois, nous allons utiliser une approche différente, car nous ne pouvons pas utiliser ce diagramme à points , car nous avons plusieurs colonnes Cela suppose donc un X et un Y, mais lequel est le X ? Le X, bien sûr, est le mois. Nous sommes clairs à ce sujet. Mais lequel est le Y ? C'est ça, ça ou ça ? Nous avons donc plusieurs colonnes. Une solution serait d' écrire cette fonction de tracé plusieurs fois, ou peut-être de créer une boucle qui itère dans le bloc de données, mais une autre méthode plus simple consiste à simplement pointer vers le diagramme à points CRs moyen et Villa, nous l'avons Bien sûr, cela semble un gâchis, mais améliorons-le un peu. Puisque nous avons utilisé la fonction de tracé directement à partir du bloc de données, non du PLT, nous pouvons utiliser des arguments de taille de figure ici Disons 253. Et maintenant, ça a l'air un peu mieux. Ce n'est toujours pas l'idéal, peut-être pourrions-nous augmenter ce chiffre à huit. OK. Maintenant, ça marche. Nous avons donc une légende qui indique la couleur de chacun des cours. Encore une fois, je ne suis pas fan de ce type de graphique, mais lorsque nous utiliserons la bibliothèque de graphiques High avec l'interface Web, cela va beaucoup mieux paraître. Et si nous utilisions le nombre ici ? Nous obtiendrions le graphique correctement, mais la légende serait un peu confuse. En effet, dans le cadre de données CRS moyen du mois, nous avons non seulement le décompte des notes, mais également d'autres comptes d' horodatages et d' éléments dont nous n'avons pas besoin Vous voyez que, par exemple, dans ce cours, 100 exercices Python, l'un d'eux est horodaté Vous voyez que c'est un autre niveau de colonnes. Donc tout cela appartient à l'horodatage, non ? Le nombre d'horodatages. Ensuite, nous avons le décompte des évaluations, commençant par ici et jusqu'à quelque part. Nous ne voyons pas toutes les colonnes parce que Jupiter les tronque, mais vous voyez l' idée, jour et semaine Alors, comment extraire uniquement la note ? Eh bien, c'est facile en fait. Je vous ai dit que le groupe B, qui commence ici et se termine ici, renvoie une trame de données. Maintenant, à partir de cette trame de données, nous n'extrayons que l'évaluation. Et le problème est résolu. Nous obtenons maintenant un graphique clair indiquant le nombre de notes restantes pour chaque mois de l'année. Ainsi, à partir du tout début de 2019 et jusqu'en 2020, vous pouvez voir cette ligne rose ici, qui représente le nouveau cours, le cours complet de Python. Cela commence quelque part en 2021. Donc, le premier mois de 2021. Et bien sûr, vous pouvez encore une fois obtenir la moyenne comme vous le faisiez auparavant. Mais avec la moyenne, nous obtenons encore une fois les mêmes résultats puisque la méthode moyenne ignore ces horodatages et ces colonnes non numériques Bref, ça les fait tomber. Mais le décompte ne les fait pas tomber. Il les compte et nous donne tellement de données. Bien, j'espère que c'était clair, et je te parlerai plus tard. On se voit. 141. 140. Quel jour de la semaine sont les personnes les plus heureuses: Quel jour de la semaine les gens sont-ils les plus heureux ? Pouvons-nous répondre à cette question en utilisant Python et les données dont nous disposons actuellement ? Eh bien, je pense que oui, nous pouvons le faire, et c' est ce qui fait la beauté de l'analyse des données. Si vous êtes un peu créatif, vous pouvez répondre à des questions très intéressantes sur vos données. Dans cette vidéo, nous allons donc découvrir ensemble quel jour de la semaine les gens sont les plus heureux ? Comment s'y prend-on ? Eh bien, en générant un graphique. Alors, comment pouvons-nous le faire ? Eh bien, à mon avis, nous pouvons utiliser la logique selon laquelle si la note moyenne de tous les cours, disons le mercredi, est la plus élevée de la semaine, nous pouvons constater que les participants sont peut-être plus positifs ce jour-là le mercredi Je suis sûr que nous pouvons le dire parce que nous avons tellement de données ici. Donc, des milliers d'évaluations, et statistiquement, cela nous donne, je pense, une grande confiance dans le résultat. Ce que nous devons faire, c'est créer un graphique, qui comportera sept jours sur l'axe horizontal, du lundi au dimanche, et sur l'axe vertical, nous aurons la moyenne pour chaque jour. Cela signifie que nous devons effectuer une grande partie de l'agrégation de données. C'est ce que nous allons faire. Quel est le jour où les gens sont les plus heureux ? Maintenant, nous allons utiliser comme toujours le bloc de données. nous reste donc ces évaluations à des horodatages particuliers Alors, que devons-nous extraire ? Eh bien, le jour de la semaine. Appelons ça comme ça. Ce qui est égal à Data, timestamp. Donc, à partir de l'horodatage, nous accédons à la propriété DT, et pour cela, nous avons besoin de SDR FT. Et le jour de la semaine. Donc, si vous voulez le dimanche, le lundi ou le mardi, le nom du jour de la semaine peut être extrait l'aide du code au format A. Vous pouvez le rechercher sur Google. C'est ce que je fais aussi. Il est impossible de se souvenir de tout. Maintenant, nous pouvons à nouveau imprimer les données, et nous voyons que nous avons un jour de semaine. Colonne. Les vendredis, vendredis et vendredis se répètent donc encore et encore, et nous devons maintenant agréger les données pour obtenir la moyenne pour chaque jour de la semaine Supposons donc la moyenne par jour de la semaine pour le bloc de données qui va contenir les données agrégées. Encore une fois, le groupe B est notre épargnant. Mm. Qu'est-ce qu'on utilise cette fois ? Eh bien, en semaine. Et puis fais le méchant. Et voyons ce que nous obtenons en moyenne par jour de la semaine Et c'est tout. Alors, il ne nous reste plus qu'à le supprimer. Tout ce que nous avons à faire est de tracer un diagramme à points. L'axe X serait la semaine, l'indice moyen des points, et l'axe Y, la note moyenne, le jour de la semaine, désolé. Plot, c'est la réponse. Je sais que la commande n'est pas celle vous vous attendiez, mais nous pouvons régler ce problème. Quoi qu'il en soit, nous pouvons dire que le vendredi est très différent des autres jours. Ainsi, le vendredi, les gens laissent une note moyenne de 4,455 sur une échelle de un à cinq Et c'est logique. Je pense que je me situe également dans cette fourchette, donc j'ai tendance à être plus heureuse le vendredi fin de semaine et le week-end approchent donc c'est logique. Maintenant, comment pouvons-nous ordonner ces données ? Nous devons donc commander la colonne des jours de semaine. Eh bien, nous pouvons le faire. Permettez-moi commenter cela pendant un moment. La moyenne des jours de la semaine est égale à la moyenne des jours de la semaine. Triez les valeurs par jour de la semaine , puis imprimez-les pour voir quelle est la moyenne des jours de la semaine. Et vous allez voir que ce n'est pas l'ordre auquel nous nous attendions. Cela se produit, bien sûr, parce que la colonne d'index, ici, contient des valeurs de chaîne. Donc, le vendredi, le lundi, un jour, tout est une question de conditions. Par conséquent, Python les classe dans un ordre alphabétique Donc, le vendredi, le premier, le lundi, etc., sont des chaînes car cette méthode produit une chaîne, une colonne de jour de la semaine Vous voyez une chaîne de temps en temps. horodatage était donc l'heure, mais nous l'avons converti en chaîne Maintenant, il peut y avoir différentes solutions pour résoudre ce problème. Ce qui me vient à l'esprit, c'est que nous pourrions ajouter un numéro de jour de semaine. Ou simplement le numéro. Pour le bloc de données, et à partir de là, encore une fois, vous utilisez une chaîne de temps en temps, mais cette fois, nous allons utiliser pourcentage en minuscules W. Et ce que cela nous donnerait, c'est que laissez-moi vous montrer que Data now est ce bloc de données et qu'il porte ce numéro de jour Nous avons donc maintenant un numéro attaché à chaque ligne en plus du nom du jour de la semaine. Cela nous permet maintenant de trier les valeurs en fonction de cette colonne du numéro du jour. lundi est le premier, le vendredi est le 5 et ainsi de suite. C'est ce que nous allons faire. Je vais supprimer ce bloc de données delta à partir de là, l'impression, ce qui est rare, et le remplacer par le numéro du jour. Et ici, moyenne des jours de la semaine, supprimer, peu fréquent ceci, exécuter. Nous avons le numéro du jour de l'erreur clé. Oh, parce que j'ai oublié d'ajouter le numéro du jour ici. Encore une fois, nous avons une erreur. Voyons où l' erreur s'est produite. Voici donc les erreurs profondément ancrées dans les bibliothèques, que vous voyez dans MT plot Lip et cela montre l' erreur dans notre code. C'est donc dans ce diagramme à points linéaire. Et il dit que la valeur doit être un inceste de chaîne ou d' octets, pas un tuple Essayons donc de résoudre l'erreur ici. Je vais décommenter cela et voir quelle est la moyenne par jour de la semaine Le problème ici est donc que la moyenne des jours de la semaine de cet indice renvoie un indice double, qui ressemble à ceci, il s'agit donc d'un indice multiple. Il contient le jour de la semaine et le numéro du jour. Par conséquent, la méthode de tracé sera confuse, sorte qu'elle ne saura pas lequel de ces tableaux doit être tracé le long de l'axe X. Nous avons donc besoin d'un moyen d' extraire uniquement les colonnes. Donc, les noms des jours de la semaine. Vous pouvez le faire en utilisant les valeurs de niveau get. C'est une méthode qui attend un argument. Dans ce cas, nous pouvons saisir zéro ou un. Zéro signifie que nous extrayons, que nous accédons à la première colonne du multi-index, et un serait la deuxième colonne Nous avons donc besoin de la première colonne. Et cela nous donne ces jours, donc les noms des jours. Par conséquent, nous pouvons maintenant l'utiliser ici pour copier cette expression. C'est le tableau que nous voulons tracer le long de l'axe X. Nous l'avons donc mis ici. Exécutez, et voici le résultat. Si nous voulons agrandir l'image, nous devons faire en sorte que la taille de la figure soit égale à une liste de 253, cela fonctionne bien, ou peut-être un peu Plus petit. Oui, c'est mieux. Il faut donc trouver un bon rapport entre la largeur et la hauteur. Et encore une fois, nous constatons que le vendredi est le jour où la note moyenne est la plus élevée. C'était donc à propos de cette vidéo. Merci beaucoup de m'avoir suivi. Je vous parlerai dans les prochaines vidéos. À bientôt. 142. 141. Autres types de parcelles +: Bonjour. Dans cette vidéo, je vais vous donner quelques informations importantes sur les différents types de parcelles. Nous avons créé plusieurs intrigues dans les vidéos précédentes, et elles avaient toutes quelque chose en commun. C'étaient tous des tracés linéaires. Alors, comment utilisons-nous différents types de graphes ? Eh bien, ces diagrammes linéaires sont générés par la méthode du tracé. Mais si vous utilisez la méthode du cerf pour explorer le PLT, donc le PLT, vous pouvez voir que vous pouvez également saisir des informations ici. Vous voyez que vous pouvez également utiliser d'autres types de graphes. Ils ne sont pas tous des graphiques. Certaines d'entre elles sont des propriétés que vous attribuez au graphique que vous produisez, mais vous verrez, par exemple, diagramme se trouve quelque part ici. C'était donc un complot, et vous pouvez voir, par exemple, que nous avons un bar, celui-ci. Si vous remplacez cela par une barre, nous placerons ces barres à l'intérieur de la ligne. Mais ce n'est pas une très bonne représentation pour ce type de graphique car les différences sont très faibles entre les notations. J'opterais donc pour l'intrigue. Certains de ces types de diagrammes, par exemple Pi, ne conviennent pas à ce type de données. Donc, si vous essayez ce Pi, vous allez obtenir une erreur. Parce que si vous utilisez de l'aide, disons « aidez PLT Pi Donc, un graphique à secteurs, vous allez voir que Pi attend un X mais pas un Y. Alors, comment pourrions-nous utiliser un graphique à secteurs avec nos données ? Eh bien, peut-être, alors laissez-moi créer une nouvelle entrée ici. Nous pourrions peut-être créer un graphique circulaire, disons, nombre de notes par cours, ce qui serait logique. Voici donc ce que nous pourrions faire. Supposons que partager le nouveau bloc de données soit égal aux données du groupe B. Nous voulons les regrouper par nom de cours, par cours, puis appliquer le nombre. Et cela nous donnerait ce nouveau cadre de données. Nous nous intéressons donc à la colonne de notation. Nous voyons combien de notes chaque cours a reçu au total. Maintenant, si nous ne voulons pas toutes ces autres données, seule la colonne de notation nous intéresse. Donc, entre le décompte des groupes B et D, nous évaluons, nous extrayons donc la colonne de notation. Cela nous donnerait alors du sérieux. Nous pouvons donc l'utiliser. Permettez-moi de créer une nouvelle cellule avec le point PLT pi Nous avons donc dit que Pi avait un X comme argument. Ce serait donc la série d'actions. Le X est donc au moins une série, une colonne de blocs de données. Ainsi, tout type de tableau s'exécute. Et oui, c'est la carte Pi. Mais il n'a pas d'étiquettes, alors donnons-lui quelques étiquettes. C'était comme ça ? L'argument. Des étiquettes ? Oui. Actuellement, il est défini sur none, donc la valeur par défaut est none. Donc, si vous voulez donner des étiquettes, vous diriez partager un index par points. L'index est la colonne contenant le nom de chaque ligne. Exécuter. Et oui, cette fois, nous recevons ces étiquettes pour chaque tranche de tarte. Vous voyez donc que le méga-cours de Python, par exemple, a obtenu le plus grand nombre de notes. Puis vient le Python pour débutants avec des exemples, la tranche brune qu'elle contient, et ainsi de suite, d'autres cours également. Maintenant, nous obtenons également ici un tas de métadonnées produites par cette méthode. Mais comme je l'ai dit, matplot leap n'est pas la bibliothèque de traçage la plus conviviale Elle est donc idéale pour l'exploration de données, mais elle n'est pas très bonne pour présentations destinées à d'autres spectateurs, à d'autres lecteurs, à d' autres utilisateurs qui souhaitent voir Maintenant, c'est la fin de cette vidéo. Et comme je vous l'ai déjà dit, nous allons créer tous ces graphiques, chacun d' entre eux que vous avez vus, y compris celui-ci, laissez-moi le reconvertir en graphique. Nous allons reproduire ces graphiques, mais cette fois en utilisant une bibliothèque Web plus moderne qui trace les données dans un navigateur. Vous pouvez créer une application Web très facilement afin de donner l'URL de votre application Web vers votre site Web aux utilisateurs afin qu'ils puissent explorer ces graphiques eux-mêmes de manière interactive La bonne nouvelle, c'est que nous n'allons plus faire d'agrégations en utilisant le groupe car nos données sont prêtes Nous allons simplement les copier , puis utiliser la fonction de traçage de la nouvelle bibliothèque de graphiques élevés que nous allons utiliser dans les prochaines vidéos Merci donc beaucoup d'avoir suivi cette série. Je te parlerai dans le prochain. À bientôt. 143. 142. App 4 (partie 2) : analyse et visualisation de données avec des tracés interactifs dans le navigateur: Bienvenue dans une nouvelle série de vidéos. Dans ces vidéos, nous allons apprendre à créer des graphiques interactifs avec Python. Permettez-moi de vous montrer les graphiques exo que nous allons créer tout au long de ces vidéos Ce sera le premier graphique. Vous voyez qu'ils sont interactifs. Par exemple, lorsque nous passons la souris sur le graphique, ces fenêtres contextuelles indiquent la valeur exacte à l' endroit où le curseur est pointé Ce sera une note moyenne par jour. Ensuite, nous avons une note moyenne par semaine mois par mois, par cours, pour plusieurs cours. Ensuite, nous avons ce graphique sympa. C'est un graphe de flux. Encore une fois, il s'agit de notes moyennes par mois et par cours, mais présentées dans un graphique différent. Ensuite, nous avons la question de savoir quand les gens sont les plus heureux. Enfin, nous avons ce diagramme circulaire qui, encore une fois, est interactif. Et il est bien plus beau que les autres graphiques que nous avons créés avec Matt Plot Lip. Ces graphiques sont donc construits avec des graphiques élevés. Maintenant, High Charts est une bibliothèque de traçage JavaScript, mais nous pouvons utiliser des graphiques élevés en Python via Just Pi Et Just Pi est un framework Web pour Python. C'est assez nouveau, y a donc de fortes chances que vous n'en ayez pas entendu parler. Juspi est donc un framework Web comme FAS, mais Juspi présente un avantage crucial L'avantage de Juspi est que vous n'avez pas besoin d'écrire du HTML, du JavaScript ou du CSS Vous pouvez créer des applications complètes, des sites Web complets d'apparence moderne uniquement avec Jus Pi. Vous allez donc tirer 2 pierres avec un seul oiseau. Je veux dire, un oiseau avec deux pierres ou deux oiseaux avec une pierre. Tu as compris l'idée. Vous allez donc apprendre à la fois le Jpi et les high charts. C'est ce que je voulais dire. Et voici le plan. Dans la vidéo suivante, je vais vous montrer comment créer un site Web Pi d'une page, qui ne contient qu'un titre et un paragraphe avec du texte. Donc, une simple page Web. Ensuite, dans la vidéo qui suit, nous allons développer ce site Web en ajoutant un graphique haut de gamme à la page Web. En d'autres termes, dans les deux vidéos suivantes, vous allez apprendre à la fois comment créer une application Web Just By et comment ajouter un graphique à graphiques à Justpy WebApp comment ajouter un graphique à graphiques à Justpy Ensuite, dans les vidéos qui suivront ces deux vidéos, nous allons apprendre à créer d'autres graphiques. Donc, celles que je vous ai montrées ici sont les cartes que nous avons construites et que nous avons créées sur Jupiter avec Mat Plot Lip. Nous allons donc créer chacune d'entre elles. Alors préparez-vous, et je vous parlerai dans la prochaine vidéo. 144. 143. Créer une application Web simple: Bonjour. Dans cette vidéo, vous allez apprendre à créer une application Web simple avec le framework Web Just Spy. Je vais utiliser le code Visual Studio pour écrire l'application Web. Jupiter ne fonctionnerait donc pas ici. Je vous suggère donc d' utiliser un IDE tel que le code Visual Studio ou tout autre IDE ou éditeur de texte que vous utilisez. J'ai donc lancé le code Visual Studio ici. Je vais aller sur File Open. Dans le code Visual Studio , allez ensuite dans le dossier où se trouve mes révisions, ce fichier CSV et appuyez sur Ouvrir Cela créera un nouveau code Visual Studio, répertoire de projet, pointant vers le dossier où se trouvent les révisions de ce fichier CSV. Nous n'avons pas besoin de revoir ce fichier CSV pour le moment, car dans cette vidéo, nous allons simplement créer l'application Web. Créons donc un fichier Python. Je vais l'appeler zero simple app point PY. Je vais donc créer plusieurs applications Web, et j'utilise maintenant 01234 Dans les noms de ces fichiers. Pour utiliser Juspy, nous devons avoir installé Justpy. J'utilise donc Python 3.9 3.9 maintenant, et je vais aller au terminal New Terminal, et ici j'utiliserai PIP 3.9 puisque j' utilise Python 3.9, installez uniquement PY C'est bon. Cela a été un succès. n'ai donc commis aucune erreur. J'ai reçu ce message indiquant qu'il était déjà installé. Quoi qu'il en soit, j'espère que vous avez également réussi l'installation. Ensuite, nous devons simplement importer. Pi. Une bonne pratique consiste à l'importer en tant que JP car vous allez consulter la documentation de Just Pi, et tous les exemples utilisent ce nom JP. C'est donc une bonne idée d'être cohérent avec la documentation. Désormais, chaque application By aura un objet principal appelé page Quasar C'est donc la page Web, en gros. Et cette page Web peut contenir différents éléments. Il peut donc contenir, par exemple, sur la première page, un titre, un paragraphe ou peut-être un tableau. Tous ces éléments seront donc ajoutés à cette page Quasar sur la page Web Pourquoi s'appelle-t-il Quasar ? Eh bien, parce que Jus Pi utilise le framework Quasar, qui est essentiellement un framework qui n'est pas lié à Python C'est un framework construit avec JavaScript, mais Jus Pi utilise ce framework et nous pouvons utiliser ce framework via Python. Permettez-moi donc de créer une page Quasar. Ce que nous faisons d'abord, c'est créer une fonction d'application. Vous pouvez le nommer où vous le souhaitez, mais en gros, l'idée est que cette application renvoie cette page Quasar Ainsi, à l'intérieur de la fonction, nous créons une variable égale à Jp quasar page Donc Q, P. C'est une classe que nous instancions Nous créons donc une instance d' objet d'instance de page quasar , cette fonction devrait alors renvoyer cette instance cette fonction devrait alors de page quasar Et c'est entre les deux que nous écrivons les éléments que cette page va contenir. Créons donc une variable pour chaque élément. Créons un titre. Un titre est donc essentiellement du texte, mais avec une très grande taille de police. Et nous faisons JP, donc nous pointons sur ce point QD, donc QDV Il s'agit essentiellement d'une division si vous connaissez le HTML. C'est une division, mais c'est une division Quasar. Il a donc un style Quasar qui lui donne un aspect moderne et vous permet également de le personnaliser très facilement, comme vous allez le voir dans un instant. Comme premier argument, nous devons passer à sa place. Bien sûr, cela appartient à WP cette variable, que j'ai nommée WP pour représenter page Web, page Web. Cela fait partie de ça. Ensuite, les autres arguments que QD obtient sont le texte Quel texte voulons-nous y afficher ? Sous forme de chaîne, disons, une analyse des révisions de cours. Ajoutons également un paragraphe. Appelons à nouveau cela P un égal à p point QDV. Nous utilisons toujours QDV et A, cela appartient à nouveau à WP. Le texte, cette fois. Écrivons donc comme une description de la page Web, ces graphiques représentent la révision du cours. Analyse de la révision des cours. Ce serait une application Web très minimaliste. Mais si nous en sommes là maintenant, rien ne se passera car nous créons la fonction, mais aucune instance n' appelle cette fonction, donc nous ne l' appelons nulle part. Faisons donc ce que nous appelons cette fonction. Nous pouvons utiliser Pi de JP. Jus Pi est donc une fonction et elle attend en entrée une fonction qui renvoie une page quasar, qui est cette fonction ici Vous pouvez donc simplement écrire une application sans appeler la fonction de l'application. Donc Pi, cette fonction se chargera d'appeler cette fonction. C'est vrai. Si nous l'exécutons maintenant, vous devriez voir ce message ici indiquant que Just By est prêt à se rendre à cette adresse avec ce numéro de port de 8 000. Si vous appuyez sur Ctrl et cliquez sur Commande puis sur Commande, cela devrait ouvrir votre navigateur par défaut. Et voici l' application Web, donc elle fonctionne. Maintenant, vous pouvez vous attendre à ce que ce soit dans une police plus grande. Cela ne s'est pas produit car nous n'avons ajouté aucun style à aucune de ces divs. Ces divisions ne sont donc que du texte brut. Pour ajouter du style aux éléments, vous pouvez ajouter un argument classes à n'importe quel élément Q div, qui est égal à une chaîne. Alors, comment pouvons-nous agrandir cette division ? Eh bien, je peux vous le montrer, bien sûr, mais je veux vous montrer comment vous pouvez trouver n'importe quel type de style que vous pouvez utiliser avec Pi. Donc, ce que vous devez faire est simplement de rechercher le style Quasar. Et puis passez au premier résultat. style et d'identité, vous allez voir les attributs que vous pouvez modifier pour les éléments de page, tels que l'élément div que nous avons actuellement sous la main Nous sommes donc préoccupés par la topographie. Si vous cliquez ici, vous verrez des exemples ici. Donc, si vous voulez que le texte soit aussi grand, vous devez utiliser le texte H. Essayons donc ça. Copiez-le et modifiez-le ici. Envoyez un texto à H. Maintenant, si vous utilisez du code Visual Studio, vous devez savoir utilisez du code Visual Studio, vous que si vous réexécutez le code avec ce bouton, alors que le code est en cours d'exécution, rien ne se passera. Le programme va donc simplement se bloquer et si vous revenez à l'hôte local, vous verrez que l'ancienne application est toujours en cours d'exécution. Donc, ce que vous devez faire, c'est vous rendre ici et appuyer sur Ctrl C pour arrêter le processus en cours, puis aller sur ce bouton et l'exécuter à nouveau. Ensuite, vous allez voir que l'application est mise à jour et que nous avons ces gros téléphones maintenant. Regardons donc Quasar sous l'angle du style et de l'identité Nous parlions donc de typographie. Vous avez également ici d'autres exemples que vous pouvez modifier. Donc, si vous voulez ajouter une autre propriété, disons que vous voulez placer ce texte au centre, vous voulez utiliser du texte pour écrire. Donc, tu le copies. Accédez à votre application, créez un espace et collez l'autre propriété de style. Arrêtez le code, réexécutez. Rechargez la page. Et vous voyez que le texte est parti vers la droite. Oui, donc je voulais en faire un point central. Disons un centre de texte. Arrête de courir à nouveau. Nous recevons parfois cette fenêtre contextuelle qui envoie un SMS indiquant que l'application change, nous pouvons donc appuyer sur OK, et cela rechargera la page C'est donc ce à quoi je m'attendais. Si vous souhaitez un peu de rembourrage, c'est-à-dire si vous voulez que ce texte ne soit pas trop proche de la limite supérieure de la page Web, vous pouvez examiner l'espacement Donc, en termes d'espacement, vous allez voir ici que vous avez toutes ces options Ainsi, par exemple, si vous souhaitez que le rembourrage sur le dessus soit très petit, vous utilisez ce texte Si vous voulez avoir un rembourrage complet, donc tout autour du texte, vous devez avoir un espace ici, espace entre le texte et la limite supérieure et un espace entre ce texte et l'élément suivant, qui serait celui-ci ici Ensuite, vous voulez peut-être utiliser le rembourrage sur tous les supports, donc vous voulez le copier et l'y ajouter Alors créez un espace. Réexécutez, rechargez Et vous voyez que maintenant nous avions un peu plus d'espace entre cela et cela. La dernière modification que je souhaite apporter est de réduire un peu le texte. Contrôlez C, exécutez à nouveau, allez ici, rechargez, et maintenant c'est plus beau C'est ainsi que vous créez simplement avec des applications Web. Notez que l'ordre dans lequel vous créez ces éléments est important. Vous voyez donc que l'analyse, bien sûr, les avis sont au top. De l'autre élément ici. Donc, si vous voulez continuer à ajouter des éléments ci-dessous, vous devez respecter l'ordre. Vous souhaitez donc ajouter d'autres éléments ici et n'oubliez pas que vous devez toujours connecter cet élément à la page Web. Voilà comment créer une page Web simple. Mais les Q DFs ne sont pas le seul élément que nous pouvons utiliser. Nous pouvons également utiliser un élément graphique élevé, qui est un graphique que nous pouvons ajouter à notre page utilisateur. C'est ce que nous allons faire dans la vidéo suivante. À bientôt. 145. 144. Créer une application Web de visualisation de données: Bonjour, bon retour. Dans la vidéo précédente, nous avons créé une application avec Just Pi. Cette application contenait deux composants, ils sont donc appelés composants dans Jus Pi. Donc, ce composant ici, Q Div et un autre composant Q Div, sont tous deux ajoutés au composant principal, qui est la page Quasar Dans cette conférence, nous allons ajouter un troisième composant, qui sera un graphique haut de gamme, qui est toujours un composant de Just Pi. Faisons donc cela étape par étape. Je vais créer un nouveau Python dans lequel je vais écrire cette nouvelle application Appelons-le « jour de notation moyen ». Donc, note moyenne par jour, c'est PY. Je vais juste copier ce code parce que nous en avons besoin et l'espacer ici. Il ne nous reste plus qu'à ajouter le composant High Charts. Alors allons-y étape par étape. La toute première étape que nous voulons franchir est de trouver le graphique approprié dont nous avons besoin. Il existe un très bon moyen de le faire. Nous pouvons consulter la documentation sur les graphiques élevés et regarder les exemples de graphiques qu'ils montrent sur cette page, puis nous pouvons choisir l'un d'entre eux. Faisons-le. Choisissons le graphique dont nous avons besoin. Accédez à votre navigateur et recherchez simplement les documents sur les graphiques élevés sur Google. Vous trouverez sur cette page la documentation de High Charts. High Charts est donc également une bibliothèque JavaScript permettant de produire des tracés. Donc, tout comme Quasar, Quasar était une bibliothèque JavaScript. Cela n'a rien à voir avec les palmarès élevés. Et Python réunit ces deux bibliothèques, ces deux frameworks, ce qui est vraiment génial pour nous, programmeurs Python, d'utiliser ces deux bibliothèques JavaScript modernes de Python Nous voici donc dans la documentation sur les graphiques élevés, et nous voulons passer aux types de graphiques et de séries. Et ici, vous allez voir que nous avons différents types de graphiques. Donc, dans notre cas, je pense qu'un graphique spline serait approprié Donc, si vous cliquez sur le graphique Spline, vous verrez cet exemple ici Il s'agit de la température par altitude. Il a cet axe de température horizontalement et cet axe d'altitude verticalement. Maintenant, chaque graphique fournit le code, le code JavaScript qui produit ce graphique en particulier, et vous pouvez voir que vous pouvez y accéder à partir du JSFiddle ou du stylo de code, qui sont essentiellement deux éditeurs de code en ligne Si vous cliquez sur JSFiddle, le code qui produit ce graphique s'ouvre Et chaque graphique possède son propre code. Donc, si vous accédez au graphe de flux, vous revenez à JS v, il vous montrera le code de ce graphe de flux. Bref, revenons en arrière. C'est donc le graphique qui nous intéresse, et voici le code qui produit ce graphique. Vous pouvez donc également voir une version en direct du graphique ici. Si vous modifiez quelque chose ici, cela produira ce graphique. Mais je ne dis pas que vous devez apprendre le Javascript. Tout ce que nous avons à faire est de copier le code qui commence après le coma de ce conteneur ici. Cela signifie donc qu'à partir de ce support bouclé, vous devez le sélectionner Et descendez jusqu'à ce que vous voyiez cette demi-colonne et cette parenthèse ronde, et que vous vouliez copier vers le haut jusqu' à ce que vous voyiez cette demi-colonne avec cette parenthèse ronde. Vous voulez donc inclure ce support bouclé. Appuyez donc sur Ctrl C ou allez-y et copiez-le , puis passez à Python. Et ce que nous devons faire, c'est créer une chaîne. Créons une variable. Supposons que la définition du graphique soit égale à une chaîne. Je vais utiliser des guillemets. Donc six citations, et je vais les partager. Donc trois citations ici, trois citations ici. Ici, je vais coller tout ce code. Encore une fois, il faut être très prudent ici. Ce code commence par ce crochet, puis il passe sous forme de graphique et ainsi de suite, et il se termine par ce crochet bouclé. Maintenant, avant de vous expliquer ce que je fais ici, laissez-moi d'abord le faire fonctionner rapidement, puis je reviendrai au code et je vous expliquerai ce qui se passe ici. Donc, une fois que vous avez la définition du code, c'est une définition, vous pouvez aller ici et disons HC pour les cartes hautes, JP, C. C'est donc le composant que nous voulons utiliser. Un égal à WP, donc l'argument des standards. Et maintenant, ce composant High Charts attend un argument options, égal à cette variable, qui contient le graphique de code JavaScript Def dans mon cas. C'est ça. Maintenant, si j' exécute ce code, vous voyez que l'application est en cours d'exécution, cliquez sur Commande ou Ctrl, et voici l'application Web avec le graphique à l'intérieur. Il s'agissait donc de la première étape pour obtenir le code de la documentation de haut niveau et le coller dans votre programme Python Maintenant, laissez-moi vous expliquer la première étape, ce que nous venons de faire. Donc, comme je vous l'ai expliqué, High charts est une librairie JavaScript. Il s'agit donc ici d' un code JavaScript. Mais dans ce cas, il s'agit de JSN. JavaScript utilise donc JSON et le format JSON est un format familier pour Python. Cela ressemble donc à un dictionnaire. Vous pouvez voir que cela commence par ce crochet, puis vous avez cette clé Ainsi, même s'il s'agit d'une chaîne, actuellement, c'est une chaîne Python, ce qui se passe lorsque nous faisons cela ici, c'est que Juspi la convertira en dictionnaire Python Il s'agit donc d'un objet réel que Python peut lire et manipuler. Juspi traitera donc ce dictionnaire et le rendra sous forme de graphique sur la page Web Je peux vous prouver que Python a réussi à lire cette chaîne sous forme de dictionnaire en l'imprimant donc avec les options de point HC. Donc, les options, parce que nous l'avons passé ici en argument, deviendront un attribut de HC et nous pourrons y accéder comme ça. Je vais donc imprimer le dictionnaire, et ici, j'imprimerai également le type de cette option HC, afin que vous puissiez voir de quel type il s'agit, et la console C pour interrompre à l'instance en cours de l'application s'exécute à nouveau, et rien ne se passera maintenant car je n'ai encore chargé aucune instance de la page. Donc, si je vais sur la page puis que je reviens ici, vous verrez que quelque chose a été imprimé depuis que j'ai chargé la page, cette fonction de l'application est exécutée, et par conséquent, ces deux lignes sont exécutées. Alors voyons voir. C'est le dictionnaire, non ? Ça commence là, ça s'arrête là. C'est dans le même dictionnaire que nous le collons ici sous forme de chaîne. Vérifiez également que le type n'est pas exactement un dictionnaire. C'est un type de dictionnaire différent qui ressemble à un dictionnaire Python en plus. Cela nous permet d'accéder aux clés du dictionnaire en utilisant une notation par points. Alors, par exemple, laissez-moi vous montrer ce que cela signifie. Si vous allez dans hc point Options et que vous répétez point, vous pouvez accéder à toutes les clés de ce dictionnaire. Par exemple, supposons que nous voulions changer le titre de ce titre ici, n'est-ce pas ? Nous pouvons donc accéder à cette clé de titre en utilisant le point title. Et puis ce titre possède également un dictionnaire à part entière. Nous pouvons accéder au texte du titre en utilisant à nouveau la notation par points. Alors laisse-moi faire le texte du titre, non ? Le texte du titre est une hiérarchie. Permettez-moi donc d'arrêter l' instance de l'application et de l'exécuter à nouveau. Rechargez la page et voyez ce que nous allons imprimer cette fois. Vous voyez, nous avons eu accès à la valeur de cette clé de texte, qui était ce titre. Maintenant, cela nous permet de changer le titre pour un autre titre, comme une note moyenne par jour. Permettez-moi donc d'arrêter l'instance, de l' exécuter à nouveau, de la recharger. Et vous voyez que le titre est devenu une note moyenne par jour. Ce que j' essaie de comprendre, c'est que vous pouvez tout changer à partir de ce graphique, tout ce que vous voulez, tout ce que vous devez changer à partir de ce graphique. Et, bien sûr, notre premier intérêt est de modifier les données de ce graphique car actuellement, vous voyez que le graphique possède cette clé sérieuse. Et cette clé de série a un nom, température et les données. Ce sont les données qui sont tracées sur le graphique. Vous voyez donc un zéro, 15, dix -50. Ainsi, vous voyez, par exemple, 15 est une température, zéro est un kilomètre. Et puis, comme je l'ai dit, nous en avons dix -50. Ainsi, à 10 kilomètres d' altitude , la température est d'environ -50 Telles sont donc les données. Remplaçons ces données par autre chose. Pour ce faire, nous devons avoir accès à la série de points H C but options. C'est vrai, série. Et la série est une liste. Il faut donc être très prudent ici. Vous devez comprendre les structures de données Python, et c'est une excellente pratique pour vraiment comprendre et améliorer vos compétences avec structures de données Python telles que les listes et les dictionnaires La série est donc une clé et la valeur de cette clé est une liste. Et cette liste est composée d'un dictionnaire. Il n'y a donc qu'un seul article. Cette liste et cet élément constituent le dictionnaire. Ce dictionnaire comporte alors deux clés, une clé de nom et une clé de données. La clé de nom a pour valeur la température. La clé de données a pour valeur cette liste. Il s'agit d'une liste contenant plusieurs valeurs sous forme de listes et d'éléments. C'est une liste de listes. Donc, la deuxième liste, la troisième liste, et ainsi de suite. Et jusqu'à présent, cela nous donne cette liste, n'est-ce pas ? Et de cette liste, nous voulons le premier élément. Ce sera donc un élément avec un indice zéro, c'est vrai. Quel est donc le dictionnaire ? Cela signifie que pour l'instant, nous avons un dictionnaire. que ces données soient extraites du dictionnaire Nous voulons que ces données soient extraites du dictionnaire. Voici donc cette liste. Nous avons accès à cette liste et nous pouvons la modifier. Nous pouvons ajouter une nouvelle valeur, une nouvelle liste à cette liste. Par exemple, laissez-moi créer des données fictives, trois, quatre, six, 789 Nous avons donc trois points. Permettez-moi d'arrêter l'application, de l'exécuter à nouveau. Charge R, et voici un nouveau graphique. Encore une fois, les données étaient trois, quatre, six, sept, huit, neuf, trois, quatre, donc trois, c'est le X. Donc, c'est un graphique inversé, en fait. Trois, c'est Y, quatre, c'est X. Si vous voulez inverser ce graphique, si cela ne vous convient pas, vous pouvez vous rendre ici et changer cela en chutes. Et vous pouvez également modifier ces données directement ici sans avoir à les modifier ici via le dictionnaire. Mais plus tard, nous allons injecter des trames de données, donc des colonnes à partir de trames de données. Et c'est une bonne façon de le faire. Donc celui-ci ici parce qu' il nous permet de travailler avec un dictionnaire au lieu de travailler avec une chaîne de caractères. Et la chaîne n'est pas une structure de données conçue pour contenir des données. Quoi qu'il en soit, pour des choses simples comme ça, vous pouvez simplement modifier les valeurs directement ici. Donc, à l'envers, je vais le régler pour qu'il se plie arrête, qu'il fonctionne, qu'il recharge Maintenant, le graphique est différent. Vous voyez donc que l' altitude est en bas ici. La température est maintenant sur l'axe Y. accord, donc je tape manuellement quelques données ici, mais ce n'est pas à cela que ressemble la vraie vie. Donc, dans la vraie vie, vous n' aurez pas de données dans ce format. Habituellement, vous les avez dans un bloc de données dans un fichier CSV, tout comme nous les avons dans notre application. Nous avons donc les données dans les avis au format CSV. Le format sera donc légèrement différent. Habituellement, nous allons avoir quelque chose comme un tableau X pour l'axe X, nous devrions regarder, disons, trois, six et huit, puis nous avons Y égal à quatre, sept et neuf. Donc pas comme ça. Par conséquent, notre objectif est de transformer ces deux listes en cette liste. Comment s'y prend-on ? Pour ce faire, nous utilisons l'objet zip, qui produit essentiellement ce type de liste. Donc dans les formats avec des paires de listes. Cela suppose X et Y. Donc deux listes Cependant, il ne s'agit pas encore d'une liste. Il s'agit d'un objet zip. Je peux vous le montrer dans un shell Python. Supposons donc que nous ayons cette liste et que nous ayons cette liste. Et Zp XY restera un objet zip. Vous souhaitez convertir cet objet zip en liste à l'aide de la fonction list. Donc X et Y. Maintenant, nous avons la liste à laquelle nous nous attendions Par conséquent, nous pouvons obtenir cette liste et l'utiliser là-bas. Maintenant, si je vais sur l' autre terminal ici, j'arrête l'application, je la lance à nouveau. Rechargez, et nous obtenons toujours le même graphique avec ces données. Et s'ils proviennent d'une trame de données ? Cela nous amène donc à notre application avec nos données d'avis. Permettez-moi donc de passer au code sur lequel nous travaillions sur Jupiter. C'est celui-ci ici. Nous chargeons donc le bloc de données avec ce code. Je vais le copier et le coller ici en haut après avoir importé Jus Pi, non ? Nous avons maintenant ce bloc de données. Et que savons-nous d'autre pour calculer la note moyenne ? Oui, nous avions cette trame de données moyenne quotidienne, qui était une version agrégée de la trame de données. Je vais donc copier ces deux lignes, et je vais les coller ici. La moyenne journalière est donc le cadre de données qui nous intéresse, et il contient un indice, qui sera la date, et une colonne de notation contenant les notes moyennes pour chaque jour. Vous pouvez donc simplement vous rafraîchir la mémoire, cela ressemble à ceci. C'est vrai. Maintenant, au lieu de X, nous aurions une moyenne de d, l'indice de points de la trame de données. Il sera donc utilisé comme axe X. Ensuite, pour Y, nous aurions une note moyenne journalière. Donc cette colonne. Elles sont donc traitées comme deux listes par ZIP, puis par ZIP, nous les associons, afin de créer une paire de date et d'évaluation. Ainsi, par exemple, en arrière-plan, cela ressemblera à une liste de listes, comme je vous l'ai expliqué. Donc, le premier rendez-vous serait comme 2020 133, et la note 4,51, disons, répondez une, la date suivante et vous aurez compris l'idée Alors essayons ça. Cela ne marchera pas, et je vais vous dire pourquoi. Donc, comme je vous l'ai dit, nous obtenons un graphique vide et aucune erreur. La raison pour laquelle cela ne fonctionne pas est que les graphiques élevés tiennent compte de la date. Ces types de données sont donc considérés comme des catégories, des types de données, et non comme des chiffres. Dans ce cas, vous devez fournir ces données d'une autre manière. Cela se fait par le biais des options, des catégories de points de l'axe X. Alors c'est quoi ça ? Eh bien, l'axe X est réellement là. Et nous créons des catégories de points sur l'axe X. Maintenant, vous ne voyez pas de clé ici, mais nous sommes en train de créer cette clé. Cela sera égal pour indiquer l'indice de points moyen. Nous convertissons donc cela en liste et fournissons cette liste à ces catégories. Voici une liste de dates. Ensuite, pour Delta, il ne nous reste plus qu' à convertir en liste la colonne de notation. Laissez-moi arrêter le script et voir ce que nous allons obtenir cette fois. Rafraîchissez et boum, nous obtenons le graphique que nous attendions. Le graphique est interactif, mais vous voyez que nous avons quelques étiquettes ici et quelques titres pour les axes, qui proviennent de l'ancien exemple, donc altitude et température, mais nous pouvons les modifier. Je vous suggère donc de les modifier directement dans le code JavaScript. Vous pouvez donc modifier le texte du titre à partir d'ici. Vous pouvez modifier le sous-titre à partir de là. Je pense donc que c'est facile à faire dans le code. Juste pour vous donner un bref résumé, nous avons chargé le bloc de données dont nous avions besoin ici. La moyenne journalière est donc le cadre de données qui contient nos données. Ensuite, nous avons le code JavaScript des High Charts. Ensuite, nous avons la fonction qui affiche la page Web. Nous avons le composant page Web. Nous avons ces deux composants, les composants normaux, le texte, le QD. Et puis nous avons le composant high charts, qui contient maintenant ce graphique D JSON sous forme de dictionnaire. Nous pouvons donc accéder à ce dictionnaire par le biais d'options, car celui-ci est stocké dans les options. Donc maintenant, HC options est le dictionnaire, et nous pouvons donc accéder aux propriétés de ce dictionnaire et les modifier comme nous le souhaitons. Et l'utilisation la plus importante de cela est de définir les données. Vous avez donc vu que pour les données contenant des catégories, et non des nombres, vous pouvez utiliser cet axe X et définir la propriété de cette catégorie sur une liste, c' est-à-dire une liste de dates. Et puis les données sont équivalentes à une simple liste de notes. Voici l'appli. Merci de m'avoir suivi. C'était une longue vidéo, mais les prochaines applications prendront beaucoup moins de temps, car vous connaissez maintenant le processus et avec un peu d'entraînement, vous serez capable de créer le graphique de votre choix. Merci. 146. 145. Modifier les étiquettes de graphiques dans l'application Web: Bonjour, bon retour. Dans la vidéo précédente, nous avons créé ce graphique chronologique des notes moyennes affichées quotidiennement. Vous voyez maintenant que nous avons des étiquettes indésirables ici, telles que la température ici, nous avons des kilomètres comme fin des étiquettes de l'axe X. Je vais donc rapidement modifier cela dans mon code. Maintenant, vous pouvez soit le faire via Python en utilisant la notation par points du dictionnaire, soit pour ces choses, je vous suggère de passer directement par le code JavaScript. Par exemple, nous parlons de l'axe X, et ici nous avons l'altitude. Donc, l'axe X devrait en fait être la date et la date. Ensuite, nous avons ces étiquettes, le format des étiquettes de l'axe X. Il y a donc ce kilomètre qui se termine, celui que vous voyez ici. Si tu veux autre chose, écris-le ici. Sinon, il suffit de le supprimer et de laisser la valeur telle quelle. Ne supprimez pas ce type de balises Javascript. Vous pouvez également modifier la description de la plage, même si elle n'apparaît nulle part. Je vais donc passer à la température. C'est pourquoi nous avons la note moyenne sur cet axe. Où d'autre avons-nous ce symbole de degrés Celsius ici. Je vais le supprimer. Et nous avons ce nom de température ici, qui est en fait le nom que nous obtenons ici dans la fenêtre contextuelle. Donc une température qui correspond à ça. Vous pouvez donc répéter ici, note moyenne, puis contrôler C, exécuter à nouveau. Et voyons les changements. Alors rechargez. Oui, note moyenne ici, dates ici, note moyenne là-bas. Nous voyons toujours ce kilomètre dans la fenêtre contextuelle. Vous voyez 506 kilomètres. C'est ce que vous trouverez dans l'infobulle. Vous voulez donc le supprimer et le supprimer également. L'infobulle a ce format d'en-tête, qui est un nom de série, donc la température, et c'était la température avant , c'est une note moyenne. C'est donc le nom du point de la série. Et nous avons également le point X. Il va donc afficher la valeur X. Dans notre cas, il s'agit du nombre, donc de la colonne d'index, qui est un nombre compris entre zéro et un certain nombre. Donc, le numéro de la ligne, et c'est la note moyenne que vous y voyez. Nous sommes donc à nouveau en fuite et cette fois, tout devrait bien se passer. Et c'est ainsi que s'achève cette vidéo. Je te parlerai dans le prochain. 147. 146. Ajouter un graphique de série temporelle à l'application Web: Bonjour, bon retour. Dans les vidéos précédentes, nous avons créé ce graphique quotidien des notes moyennes. Dans cette vidéo, nous allons créer le même graphique mais sur une base hebdomadaire. Maintenant, ce sera une courte vidéo car je ne vais pas expliquer le code parce que je l'ai déjà fait, donc vous pourrez facilement comprendre ce que je fais. Permettez-moi donc de revenir au code de Visual Studio, et je vais créer un nouveau fichier. Je vais appeler ce F pour Average un Terrett pour Rating et Week C'est donc le numéro deux. Et ce que je fais habituellement lorsque je ces graphiques, c'est d'aller sur ce modèle d'espion et de le coller ici, puis je crée un nouveau composant de cartes hautes qui appartient à WP et, en option , il contient ce graphique de variable, , il contient ce graphique de variable, qui sera une variable ici. Ce sera une chaîne multiligne entre guillemets. Alors maintenant, je vais trouver un exemple à partir de graphiques élevés. Je vais donc réutiliser la spline pour ce graphique hebdomadaire, car je pense que c'est le type de graphique le plus approprié pour ce type d'analyse et pour ce type de visualisations Je vais donc cliquer sur JS Fiddle et cela me montrera le code JavaScript, qui est celui-ci ici Je peux copier tout cela , accéder à Python et le coller là-bas, puis bien sûr, supprimer cette partie. Cela commence par le premier crochet avant le graphique, puis il se termine par un crochet bouclé Je vais donc supprimer la demi-colonne Options pointe vers cette chaîne de documentation. Avant d'appliquer mes propres données, j'essaie d'abord ce code pour voir s'il fonctionne, mais je dois d'abord arrêter le processus en cours avec Control C et exécuter Go to buy reload Oui, ça marche. Ensuite, je veux importer des pandas. Donc, comme je faisais déjà l' analyse sur Jupiter, je peux simplement copier-coller ces lignes. Collez-les là. Nous n'avons pas besoin de mes lèvres, je peux les supprimer. C'est notre cadre de données. Nous devons maintenant analyser ces données. Retournez donc à Jupiter et trouvez l'analyse hebdomadaire qui s'y trouve. La moyenne hebdomadaire est la donnée dont nous avons besoin. Alors collez-les sous le cadre de données d'origine et nous devrions avoir la moyenne de cette semaine maintenant. Maintenant, la moyenne hebdomadaire aura comme colonne d'index les semaines. Donc, ici et par semaine, ce sera l'indice moyen par points de la semaine. Et il y aura également une colonne de notation dans le cadre de données de la moyenne hebdomadaire. Utilisons donc ces deux colonnes pour tracer les données. Nous devrions donc accéder aux Hc point options catégories Hc point options point X axis pour les données catégoriques telles que la date Ce serait donc un indice de points moyen faible, mais sous forme de liste. Nous devons donc le convertir en liste juste pour le reconnaître. Et puis HC Options, c'est sérieux. Ces données. qui signifie que la série zéro nous donne ce premier élément, qui est un dictionnaire. Nous avons donc le dictionnaire ici, puis nous accédons à la clé de données à partir de ce dictionnaire. Cela nous donnera donc réellement la valeur de cette clé, qui est cette liste. Et nous remplaçons cette liste par une autre liste, qui est une note moyenne faible. Cela devrait suffire. Alors arrêtez le contrôle C, relancez, rechargez Voici notre graphique. Cela semble étrange parce que nous devons l'inverser. En fait, c'est à l'origine inversé. Nous devrions donc dire falls en tant que valeur du contrôle C inversé, et réexécuter. Rechargez. Et oui, c'est ça. Je ne vais pas vous faire perdre votre temps et changer toutes ces étiquettes comme je l'ai fait dans la vidéo précédente. ai donc déjà fait. Cela suffit donc pour cette vidéo. Merci de m'avoir suivi. Je te le dirai plus tard. 148. 147. Plusieurs séries chronologiques: Bonjour, bon retour. Dans cette vidéo, nous allons créer une note moyenne par mois et par graphique de cours. Comme vous le savez peut-être, nous avons créé ce graphe déjà acheté avec Jupiter et Matplot Lib. Donc ça ressemblait à ça. L'idée est que nous allons avoir le mois sur l' axe horizontal et les notes moyennes sur l' axe vertical, et nous allons avoir plusieurs graphiques dans cette zone de graphique, chacun représentant un cours dans notre Et comme vous le savez peut-être déjà, un bon moyen de créer des graphiques à l'aide de diagrammes B et High est de consulter le site Web higchart.com Vous passez donc sous les graphiques et les types de séries et nous trouvons un graphique qui serait un bon représentant de nos données. J'ai donc jeté un coup d'œil à ces exemples et j'ai découvert que j'aimerais utiliser graphique Area Spline, qui ressemble à ceci Vous voyez qu'il comporte plusieurs lignes, donc deux, dans ce cas, et qu'il a cet axe X avec des données catégorielles Ce ne sont donc pas des chiffres, c'est lundi, le mardi, le mercredi, etc. Et nous avons cet axe Y numérique, donc des unités de fruits. Et cela représente la consommation moyenne de fruits pendant une semaine pour John et Jane. Dans notre cas, nous allons modifier ce graphique et avoir six ou sept lignes. Je ne sais pas combien de cours il y a. Donc, une ligne pour chaque cours indiquant les notes moyennes obtenues sur une longue période au fil des mois. Avant de copier les codes, préparons d'abord l'environnement. Créez le script et créez l'application by, etc. Je vais nommer ces quatre notes moyennes. Ce serait, disons, le mois du cours. Donc, note moyenne par cours et par mois que PY. Vous voyez que c'est différent du mois d'évaluation moyen. Il s'agit de la note moyenne par cours et par mois. Ensuite, je vais copier ce modèle de J Pi. Copiez-le ici. HC sera le composant des graphiques supérieurs, qui appartient à WP, et les options seront généralement une définition graphique, qui doit être une variable quelque part ici. Est égal à une chaîne, une chaîne multiligne. Copions donc ce code JavaScript. Donc, celui-ci ici, je vais tout copier coller dedans, puis juste avant le graphique, puis juste avant le graphique, nous laissons cette parenthèse frisée avant le graphique ici Nous laissons cela et supprimons la demi-colonne et la parenthèse Nous sommes maintenant prêts à remplacer les données par les nôtres. Mais ce que je vous suggère de faire d'abord, c'est d'essayer cet exemple pour voir si cela fonctionne actuellement sans modifier les données avec vos propres données. Ce que je voudrais faire maintenant, c'est essayer de l'exécuter puis de visiter l'URL, et vous allez voir une erreur. Donc, erreur Jason Decode, identifiant inconnu, high charts Cela se produit à cause de cette ligne. Python ne peut pas reconnaître cette expression ici car il s'agit de JavaScript. Vous voulez donc le supprimer et ne laisser que cette chaîne ici, la couleur de la couleur de fond. Et maintenant, si j'arrête le script et que je le lance à nouveau, et que je recharge la page, nous devrions voir l' exemple tel que avons obtenu sur le site Web de High Chart Maintenant, ces deux graphes sont des splines de zones. Mais si vous voulez les transformer en spline, vous devez accéder à votre code et changer cette zone spline en spline, arrêter le script, exécuter à nouveau. Et rechargez. Et voici le résultat. Nous sommes maintenant prêts à injecter nos propres données dans les données. Pour cela, nous voulons nous rendre sur Jupiter où notre analyse est prête. Copiez ce code, collez-le ici, et nous devons également effectuer les agrégations nécessaires pour extraire le mois, les cours par mois, qui est ce code ici, et qui nous donne ce cadre de données Maintenant, rafraîchissons notre mémoire quoi ressemblait le bloc de données. Vous pouvez donc soit les imprimer ici et exécuter le script, recharger la page et voir ce que vous avez imprimé dans le terminal, soit voir le résultat de Jupiter Donc, quoi que vous préfériez, je vais juste exécuter le script ici. Nous imprimons donc le bloc de données avant même de charger l'application Web, car il est imprimé parce que l' application Web se trouve à l'intérieur de la fonction Il se trouve donc simplement dans l'espace de noms global, dans la portée globale Ainsi, lorsque le script est exécuté, ceux-ci sont exécutés. Si cela se trouvait dans la fonction ici, elle ne serait exécutée que lorsque nous chargerons la page. Et voici le cadre de données. Il a donc l'index de ce mois, et il comporte différentes colonnes. Voici donc la première colonne. Ensuite, nous avons d'autres colonnes , que nous ne voyons pas ici. Et puis la dernière colonne est celle-ci et les valeurs de chaque colonne. Donc, le nom d'une colonne, les valeurs de cette colonne, qui sont les notes moyennes. Et nous avons un mois pour chaque ligne. Nous sommes donc en juillet 2019, août 2019, janvier 2021. Donc, indexez les colonnes. Voyons maintenant comment injecter ces données dans ces données ? Nous voyons donc que XXIs a ces catégories avec ces jours de semaine Nous pouvons donc faire la même chose maintenant. Ici, nous disons hc point options point XXI. XXs est donc la clé du dictionnaire principal. Il est donc directement exposé au premier niveau. Donc, titre du graphique, axe de légende. Et puis il y a le deuxième niveau. La catégorie fait donc partie de l'axe. Par conséquent, nous pouvons y accéder comme si les catégories étaient une liste, comme vous pouvez le voir ici. Par conséquent, nous devons le remplacer par une liste de CRS par mois en moyenne Il s'agit donc de l'indice par points de notre trame de données. Donc cette colonne là-dedans, 20185, 20186 et ainsi de suite C'est vrai. C'était la partie la plus facile. Viennent maintenant les données. Ce que vous devez faire, c'est comprendre la structure des données. C'est la première étape très importante. La série est donc une clé de premier niveau. Par conséquent, nous pouvons dire Hc options, c'est une série, n'est-ce pas ? Cela nous donnera donc cette liste. Alors, cette liste contient combien d'éléments ? Je vois un dictionnaire allant de là jusqu'ici. C'est un dictionnaire qui porte le nom John (paire de clé et de valeur). Le nom est donc la clé, John la valeur. Ensuite, nous avons ces autres données clés et une liste, et le dictionnaire s'arrête là. Et puis nous avons l' autre dictionnaire. C'est donc Jane How et voici les données pour Jane. La liste est composée de dictionnaires, et chaque dictionnaire représente une ligne dans le graphique. Donc c'est pour Jane et c'est pour John. Par conséquent, ce que nous devons faire, c'est être là. Ce serait donc le nom d'un cours. Supposons que le premier cours soit composé de 100 exercices de Python, et ainsi de suite, du titre complet. Ensuite, les données contiendraient une liste des notes moyennes pour ce cours en particulier. Donc celui-ci, celui-là, celui-là, et ainsi de suite. Ensuite, nous devrons répéter ce processus pour chacun des six ou sept cours que nous avons ici. Comment s'y prend-on ? Eh bien, vous pouvez le faire manuellement. Par exemple, vous pourriez l' injecter à partir d'une série, vous diriez de la première intrigue, pour obtenir le premier dictionnaire. Cette expression est le premier dictionnaire. Ensuite, nous pourrions accéder au nom et le remplacer par peut-être la moyenne mensuelle des colonnes de points CRS Ce serait donc la première colonne et ainsi de suite. Ce serait bien, mais ce n'est pas un processus automatique. Ainsi, lorsque vous effectuez un travail manuel, c'est le signe que vous ne programmez pas correctement. Ce que nous devons faire à la place, c'est créer cette liste complète de manière dynamique. Et c'est un point très, très crucial maintenant pour utiliser des graphiques élevés, mais aussi pour savoir comment manipuler les structures de données en Python. Il s'agit donc d'une excellente pratique. Je suis très content que cela soit sorti. C'est une très bonne pratique pour toi. Permettez-moi donc de vous montrer comment vous pouvez construire cette liste à partir de ce cadre de données. Donc, avant de faire cela, avant d'attribuer la liste, nous voulons construire la liste. Appelons donc ce soulignement HC Delta. Et cela équivaut à. Nous devons donc créer une liste. C'est donc une liste. Par conséquent, nous écrivons des crochets. La liste est composée de dictionnaires. Par conséquent, nous écrivons des crochets. Et puis dans chaque dictionnaire, nous avons une clé de nom. Nous avons toujours cette clé de nom et une variable pour cette clé de nom. Pourquoi je dis variable ? Eh bien, comme le nom est toujours un nom, c'est donc une constante. C'est pourquoi je suis en train de coder en dur que nous y ayons toujours un nom. Mais la valeur du nom est une variable, elle change donc à chaque fois. Et puis quoi d'autre ? Nous avons cette paire, d'accord. Dans le dictionnaire, ce dictionnaire. Ce dictionnaire en a donc une autre paire. Donc les données et la liste. Alors écrivons ça. Como Data, la chaîne, une colonne, et nous avons une liste. Cette liste est essentiellement représentative de chacune des parcelles, de chacune des sept parcelles que nous allons avoir pour chaque cours. Ce qui signifie donc que cette liste sera composée de ces évaluations. Par exemple, la première liste sera la première colonne, par exemple, pour les exercices Python, une pour ce cours, cette colonne sous forme de liste, puis l'autre colonne. Après ce cours, le suivant , le suivant et le suivant. Donc, une colonne pour chaque cours, et V une va être remplacée par le titre de la colonne. Donc, avant d'écrire l' expression dans cette liste, je voudrais d'abord terminer compréhension de la liste supérieure car nous avons ici deux compréhensions de liste Nous avons le premier niveau, alors appelons-le le niveau supérieur. Nous construisons ici des dictionnaires. Il s'agit donc d'une liste de dictionnaires , ce qui signifie que nous devrions dire ici pour V une colonne moyenne mensuelle de CRS tat. Il s'agit donc d'une liste contenant sept chaînes, une chaîne pour chaque titre de cours. Il s'agira donc d'une liste contenant 100 exercices Python, l'un, évaluez et améliorez vos compétences, puis l'autre titre de l'autre cours, et ainsi de suite, c'est une liste de ces titres. Ce que nous faisons, c'est injecter ici un titre, le premier titre de cette liste lors de la première itération, puis le titre suivant de la liste moyenne des colonnes CRS de ce mois lors de la prochaine liste moyenne des colonnes CRS de ce mois lors de la d'abord, nous allons avoir sept ou six itérations, quel que soit le nombre de cours que nous avons choisi. Mais ensuite, à l'intérieur, nous avons une itération imbriquée, une compréhension de liste imbriquée, désolé, qui est celle-ci ici nous avons une itération imbriquée, une compréhension de liste imbriquée, désolé, qui est Et ce sera, encore une fois, écrivons une autre variable, telle que V deux pour V deux en moyenne mensuelle du CRS. Hum. Alors, qu'est-ce que ça va être ? Eh bien, ça doit être cette chronique, non ? Alors, quelle est cette colonne ? Quel est le nom de cette colonne ? Eh bien, pour ce cours, c' est le nom de la colonne. Nous devons donc écrire ici le nom de la colonne. Vous voyez, c'est une syntaxe de Pandas. Vous écrivez donc le nom de la colonne, mais nous avons des noms de colonne différents. Donc, ce que nous entrons ici est V un. Parce que V one sera le titre actuel dans la compréhension de la liste de niveau supérieur Donc, en gros, pendant qu'il itère le premier titre, Python va pendant qu'il itère le premier titre, s'arrêter à cette première itération de niveau supérieur, et il va itérer dans cette colonne en particulier à travers cette colonne en particulier à travers ces évaluations pour 100 exercices Python Et il construira cette liste une fois qu'il aura fini avec tous ces chiffres, il construira cette liste, puis il passera à la deuxième itération de l'itération de premier niveau Dans la deuxième itération des autres colonnes, ce sera le cours suivant Et ainsi de suite, j'espère que c'est clair. Bien, il ne nous reste plus qu'à attribuer cette nouvelle liste, afin de l'injecter dans nos données parce que nous l'avons créée, mais que nous ne l'avons pas connectée à HC. Il s'agit donc simplement d'une variable flottante dans notre script, sans aucun lien avec les autres parties. Donc, ce que nous devons faire, c'est dire que cette liste, c'est cette liste. Nous devons donc l' attribuer à Series, non ? Série de points Ct, égale aux données HC. C'est vrai. Maintenant, je vais arrêter le script exécuter et visiter l'application. Et voici le résultat. Voici l'axe X avec le mois, et voici notre note de 2,5 à 5,5. Le maximum se trouve quelque part ici. Vous pouvez donc passer votre souris dessus et voir les évaluations de chaque cours, n'est-ce pas ? La légende flotte ici. Donc, si vous souhaitez changer cela, vous pouvez revenir à votre code et localiser les légendes ici. Vous avez donc ici quelques paramètres que vous pouvez expérimenter. Mais si je mets la valeur flottante à la valeur des chutes, cela devrait changer la vue du graphique. Je pense donc que c'est plus clair. Maintenant, je ne suis pas d'accord pour dire que ce type de graphique est la meilleure représentation pour ce type de données, car nous avons plusieurs lignes ici, mais elles sont si proches les unes des autres. y a donc pas beaucoup de variations entre un cours et l'autre. Je pense que ces splines seraient plus représentatives si, au lieu de moyennes, nous avions le décompte des évaluations des notes restantes pour chaque cours, ce qui signifie que nous devons passer à la section de traitement et dire ici «  compter » plutôt Et laisse-moi essayer. Hmm. Donc oui, ça a l'air mieux, je pense. Il y a plus de variation, plus de différence entre ce graphique et les autres. Bien que les autres ne soient toujours pas aussi visibles , ce graphique occupe une grande partie de la plage de l'axe Y. Par conséquent, dans la vidéo suivante , je vais utiliser un autre type de graphique pour représenter exactement les mêmes données. Notes moyennes par cours, par mois, mais à l'aide d'un graphique de flux. Je vous parlerai dans la prochaine vidéo. 149. 148. Créer plusieurs streamgraphes de séries temporelles: Bonjour, bon retour. Dans cette vidéo, nous allons créer ce graphe de flux. Vous pouvez donc le trouver sur le site Web hichart.com sous les types de graphiques et de séries Descendez donc au Stream Graph. Dans l'axe X de ce graphique, dans cet exemple, nous avons les années, il s'agit donc d'une donnée catégorique de l'axe X du temps Sur l'axe Y, nous avons le nombre de médailles remportées par les athlètes, et chaque couleur représente un pays. Chaque pays a donc remporté un certain nombre de médailles par ses athlètes au cours d'une année donnée. Maintenant, nous allons avoir le même graphique, vous voyez l'idée. Nous avons les mois le long de l'axe X et chaque couleur représente un cours, puis nous pouvons avoir soit les notes moyennes soit le nombre de notes sur l'axe Y. Avant de copier le code JavaScript de ce graphique, préparons notre environnement. Je vais le dupliquer en le copiant et en appuyant simplement sur Ctrl V pour le coller. Je le duplique et je vais le renommer en cinq autres. Appelons-le stream. C'est vrai. Accédez ensuite au fichier que nous venons de créer. À partir de là, il suffit de changer cette définition du graphique, supprimer et d'aller ici, sélectionner tout cela, de contrôler A, de contrôler C, copier, d'aller ici, de contrôler V pour la coller, sans oublier de supprimer le caractère inutile, de sorte que le point-virgule soit la parenthèse, et ici nous avons besoin de graphiques et avant les graphiques Donc, tout ce qui se trouve avant ce crochet est supprimé, comme ça Jetons donc maintenant un coup d'œil à ces données. Oui, comment les données sont construites. La série est donc une liste. Il s'agit d'une longue liste contenant plusieurs dictionnaires. Par exemple, il s'agit du premier dictionnaire. Tout commence ici. Ça s'arrête là. Et il est composé de cette paire de clés et de valeurs, d'un nom et du nom du pays, qui seront remplacés par le nom d'un cours. Et nous avons des données , c'est cette liste. Ces dictionnaires sont donc répétés encore et encore avec des données différentes Cela signifie que nous n'avons pas à modifier notre code ici. Nous avions donc ce code. Nous l'avons déjà construit dans la vidéo précédente. Donc ça devrait aller. Essayons de l'exécuter. Nous allons avoir une erreur, et nous allons la corriger. Arrêtez donc le processus en cours s'il y en a un en cours d'exécution. Assurez-vous d'exécuter le nouveau fichier que nous avons créé. Appuyez donc sur Exécuter. Voici donc l'erreur. Et lorsque vous obtenez cette erreur de décodage Jason, cela signifie qu'il s'agit du code JavaScript que nous avons Nous voulons donc passer aux codes, et vous voyez qu'il s' agit de couleurs et identifiant inconnu, car ce que nous avons ici, ce sont ces couleurs, et nous devons les supprimer. Et vous pouvez supprimer toutes les couleurs. Donc, de là à ici, y compris la virgule, car Python n'est pas capable d'utiliser ces couleurs Supprimez-le donc, et cela ne changera aucune sortie. Et laisse-moi te montrer. Nous en avons un autre, Peto. Oui, donc c'est ici. Nous avons donc ce type de syntaxe JavaScript que Python n' est pas capable de reconnaître. Donc, comme nous allons le remplacer de toute façon, vous pouvez, désolé, supprimer toutes les valeurs de la liste des catégories et laisser les catégories une liste vide. Donc, juste comme ça, les catégories. Les catégories sont donc remplacées, comme vous le savez, ici par cette expression. Laisse-moi m'arrêter encore une fois et courir. Cette fois-ci semble fonctionner. s'agit donc en fait du nombre de notes restantes pour chaque cours, Il s'agit donc en fait du nombre de notes restantes pour chaque cours, ce qui vous montre la différence entre ce cours, le méga-cours de Python et les autres cours. Et c'est quelque chose d' intéressant ici. Vous voyez donc que ce nouveau cours vient d'être lancé il n'y a pas longtemps , du 20 au 21 janvier. Le cours complet de Python a donc créé dix applications opérationnelles professionnelles, et High Charts est très intelligent pour l'ajuster dans ce graphique de flux. Maintenant, vous souhaiterez peut-être modifier ces étiquettes afin de les retrouver facilement. Vous pouvez les localiser là où ils se trouvent ici afin que je puisse effectuer une recherche en Allemagne, dont le texte est ici. Cela fait donc partie des annotations. Vous voyez, vous pourriez dire, par exemple, cours a été lancé ou que Python est devenu populaire. C'est vrai. Si je l'arrête et que je m'enfuis. Nous devrions voir ces étiquettes mises à jour. Vous pouvez également mettre à jour leur localisation. Ainsi, par exemple, vous voyez, avec la première annotation, c'est à X 5,5, y 30. Donc X 5.5. Donc zéro ici, un, deux, trois, quatre, cinq, six, donc c'est 5-6. 5,5 30 le long de l'axe Y. Donc 30 devrait être quelque part ici. Vous avez donc compris l'idée. Cela conclut cette vidéo, et je vous parlerai dans les prochaines. 150. 149. Ajouter un graphique à secteurs à l'application Web +: Bonjour. Dans cette vidéo, nous allons créer un diagramme circulaire, exactement comme celui que vous regardez. Vous pouvez donc le trouver sur pchart.com, aller dans Types de graphiques et de séries et aller dans Celui-ci indique le pourcentage d'utilisateurs des principaux navigateurs Internet. Par exemple, Chrome est majoritaire. Vous voyez ces grandes tranches ici et chaque tranche est associée au pourcentage. Dans notre cas, nous allons avoir effectué cette analyse plus tôt, afin d'avoir ces données. Pour chaque cours, il nous reste un certain nombre de notes pour ce cours. Par conséquent, nous allons nous retrouver avec quelque chose comme ça, mais interactif, comme vous pouvez le voir ici. Allons préparer notre environnement. Je vais donc créer un nouveau classement des fichiers par cours. C'est un pi. Et comme d'habitude, j' utiliserai ce modèle, ce modèle Pi, puis j'ajouterai un composant graphique élevé qui appartenait à WP et qui affichera ce code JavaScript, que nous devons coller ici. Donc, à l'intérieur, se trouve le code de ce graphique. Donc celui-ci est là. Contrôlez A, copiez-le et collez-le là, et n'oubliez pas de supprimer la demi-colonne, les parenthèses et, en haut, supprimer tout ce qui se trouve avant ce crochet. J'aimerais essayer le code avant d'apporter des modifications. Mais j'ai cette erreur ici. Il existe quatre codes. Je dois en supprimer un, puis exécuter. Ainsi, le graphique circulaire est correctement visualisé. Ensuite, je veux que ce code soit collé en haut ici. Nous voulons également avoir cette agrégation du cadre de données où nous comptons essentiellement le nombre de notes attribuées à chaque cours. Donc, évaluation du nom du cours. Comptez ça. C'est vrai. Ensuite, nous devons examiner la structure des données. Comme vous pouvez le constater, il s'agit d'une longue liste de dictionnaires. Voici donc le premier dictionnaire, mais attention. D'après ce que je vois, nous avons ici ce dictionnaire qui contient cette clé et cette valeur, cette clé et cette valeur, puis cette clé et cette valeur, qui est une liste. Donc ça s'arrête là. Par conséquent, cette fois, nous devons accéder aux données hc point options point point serious point. Donc, contrairement aux autres fois où nous avons créé des séries de points hc options, car les données se trouvaient directement après les séries. La série était la liste. Mais cette fois, Series possède une clé de données, et cette clé de données contient les données réelles, qui sont constituées de dictionnaires Donc, le premier dictionnaire avec le nom et Y, le second avec le nom et encore une fois pourquoi. Le premier dictionnaire possède également ces autres propriétés, telles que tranché et sélectionné, ce qui indique que ce chrome est tranché. Tu vois, c'est séparé par les autres tranches de tarte. C'est donc pour Chrome. Les autres n'ont pas ces propriétés, ce qui est bien. Donc je vais juste laisser les choses comme ça. Mais chacun d'entre eux a un nom et un Y. Par conséquent, cela équivaudra à quelque chose, et ce quelque chose est quelque chose que nous devons construire maintenant Donc, les données du HC seront que c'est une liste. C'est une liste de dictionnaires, non ? Une liste de dictionnaires dont nom est égal à trouvons le nom d'une variable V, n'est-ce pas ? Et puis le nom et Y, l'étiquette de l' autre valeur est Y. Prenons une variable V deux Donc, comme elles changent toujours opera ici, QQ ici, donc allez explorer là-bas, cela signifie que nous avons besoin d'une variable après le nom et aussi d'une variable après Y puisque ces valeurs changent également Et ce que nous faisons, c'est construire une liste de compréhension. Donc, pour V un et V deux entrées. Alors, où trouvons-nous cela ? En gros, nous avons besoin pour V one, des noms de chaque cours, des titres des cours. Et pour V deux, nous avons besoin du nombre de notes attribuées au cours. Examinons donc le bloc de données, à quoi il ressemble, partagez-le. Je pense donc que l'index contient le nom du cours. Laisse-moi vraiment te montrer que c'est toi. Je vais exécuter cette cellule et l'exécuter également. Nous avons donc compris cela, mais partager cet index est essentiellement un objet semblable à une liste, qui contient tous les noms des cours. Et partager en fait, le partage de liste contient le nombre d'évaluations. Ce que nous allons faire, c'est faire pour V un, V deux dans Zip share point index, share print V un, V deux. Et ce qui se passe ici, c'est que lors de la première itération, V one sera imprimé, le titre du premier cours et le nombre de notes laissées pour ce cours Donc v1v2 puis v1v2 encore et encore. C'est ce dont nous avons besoin ici. Donc, pour la v1v2 dans Zip, partagez désolé, partagez l'index et Ces valeurs vont donc être injectées ici et ici dans ce dictionnaire. Ensuite, nous l'attribuons à cela, puis nous arrêtons le script et nous l' exécutons à nouveau pour voir où nous en sommes. Nous avons donc une erreur. L'objet de la liste d'attributs ne contient aucune donnée d'attribut. Allons donc voir où l'erreur s'est produite, une ligne 84, qui se trouve ici. Et il indique que l'objet List n' a aucune donnée d'attribut, ce qui signifie qu' il s'agit du dernier objet et que c'est l'attribut de données. Comme il s'agit d'une liste, bien sûr, elle ne possède pas cet attribut de données car nous pensions qu'il s'agissait d'un dictionnaire. D'une manière ou d'une autre, j'ai pensé que ce n'était peut-être pas C'est tellement sérieux. Hmm. La série est vraiment une liste. C'était donc une erreur de logique de ma part, mais c'est le but des erreurs. Ils vous expliquent donc ce qui se passe. Vous l'avez lu, et vous réglez le problème. Donc, puisque la série est une liste, cela signifie qu'elle contient des éléments, et dans ce cas, elle n'en a qu'un. C'est donc le grand dictionnaire qui contient cette clé et cette valeur, cette clé et cette valeur, et cette valeur clé. La liste des séries ne comporte donc qu'un seul élément. Par conséquent, nous devons accéder à cet élément. De la série, donc l' élément d'indice zéro, qui nous donnera alors ce dictionnaire. Et de ce dictionnaire, nous extrayons la clé de données de ce dictionnaire. Ainsi, en extrayant les données en accédant à la clé de données, nous obtenons la liste des clés de données Alors maintenant, tout devrait bien se passer. Hé, ça a l'air bien. Et cela met également fin à cette vidéo, et c'est une série de graphiques que nous avons développés tout au long de ces sections. Je vous remercie de m'avoir suivi, et je vous parlerai dans les prochaines vidéos. À bientôt. 151. 150. Démo de l'application 5 : développement Web avec Flask : créer un site Web personnel: Bonjour, et bienvenue dans cette nouvelle section du cours. Et c'est la toute première conférence où je vais vous faire une démonstration de ce que vous allez construire dans cette section. C'est donc l'une de ces sections du cours où vous allez créer une application. Cette application particulière est un site Web avec Python. Python peut créer des sites Web, tout comme les autres langages de programmation. Bien entendu, vous avez besoin du langage HTML et vous aurez peut-être également besoin de CSS et de JavaScript pour que le site client affiche la page Web dans le navigateur Mais sur le back-end, vous utilisez Python, tout comme vous le faites avec PHP et d'autres langages de programmation. Oui, le site Web que vous allez créer est celui-ci que vous voyez ici. Je veux dire, il est assez vide pour le moment, il n'y a aucun contenu, mais vous pouvez le remplir contenu et l'utiliser comme vitrine pour votre travail, comme portfolio ou quoi que ce soit d'autre. Ainsi, une fois que vous aurez atteint ce point, vous pourrez l'améliorer avec Easy. Sachez également que ce site Web est désormais en ligne Je vais donc vous apprendre à déployer un site Web sur un serveur en direct afin que tout le monde puisse naviguer et visiter votre site Web. Il s'agit donc d'un tutoriel complet pour créer le site Web à partir de zéro et le faire fonctionner en ligne. Et maintenant, il s'agit d'un site Web statique. Mais plus tard dans le cours, nous aurons d'autres applications dans lesquelles vous créerez des sites Web plus dynamiques avec une base de données en arrière-plan et également des fonctionnalités dynamiques. Mais c'est un excellent point de départ. J'espère donc que cette section vous plaira, et si vous avez des questions, n'hésitez pas à les poser. Et oui, je vous parlerai lors de la prochaine conférence. 152. 151. Votre première flasque sur site avec avertissement de serveur ajouté: Bonjour Et dans cette conférence, vous allez créer votre premier site Web avec FLASK si vous ne l' avez pas déjà fait FLASK est un framework Python qui possède tous les outils les modèles et les fonctions pour créer des sites Web avec Python Et avant d'approfondir FAS et de vous expliquer comment utiliser FLASK, probablement pour créer des applications Web Python, j'aimerais que vous passiez 3 minutes à créer un site Web très basique avec Et cela se fait avec seulement quelques lignes de code Python. C'est donc ce que nous allons faire maintenant. Pour créer une application Web avec FLASK, vous devez avoir installé Flask PIP install Flask devrait donc installer Flask dans votre environnement Python C'est bon. Cela a été installé avec succès. Et créons notre site Web dès maintenant. Ce dont vous avez besoin, c'est d'un fichier Python. Je suis donc en train d'en créer un ici. Disons que c'est un script, pas un gâteau. Et puis c'est ici que vous écrivez le code qui créera votre application Web, et tout commence par l'importation de Flask Et en fait, vous n' importez pas le framework flask, mais vous importez la classe flask à partir d'un framework flask Donc, à partir d'un flacon d'importation. FLASK est une classe de cette bibliothèque, contient tous les prototypes qui contient tous les prototypes dont vous avez besoin pour créer des applications Web avec Python Cela traitera donc les demandes pour vous. Vous n'êtes pas obligé de configurer vous-même les demandes. Mais concentrons-nous sur cet exemple pour le moment. Une fois cela fait, vous devez créer une variable dans laquelle vous stockerez votre instance d'objet FLASK, votre application FLASK Ce serait égal à la classe FLASK. Et vous y transmettez la variable name, ne vous inquiétez pas pour le moment. Ensuite, vous avez besoin d'un décorateur, root, et voici une URL où vous allez consulter votre site Web Donc, cette barre oblique signifie la page d'accueil. Et juste après cela, vous devez écrire la fonction, la fonction Python. Et c'est cette fonction qui définit ce que fera votre page Web. Dans ce cas, nous retournerons une chaîne. Disons une chaîne ici. Le contenu du site Web se trouve ici. Juste après cela, vous avez besoin de deux lignes de code supplémentaires, et c'est une déclaration conditionnelle. Si le nom est égal à la chaîne principale, point d'exécution de l'application. Debug est égal à True. C'est ça. Ne t'en fais pas pour le moment. Cliquez simplement sur Enregistrer, ouvrez le terminal et exécutez le script avec le script Python 1, Python Et il semble que votre application Web soit actuellement en cours d'exécution, alors ouvrez le navigateur. Et votre site Web doit être en ligne sur votre hébergeur local. C'est ça. Rien d'impressionnant, mais vous voyez quel point il est facile de créer un site Web avec Python. Et dans ce cas, nous renvoyons simplement un équipement à cordes sur le site Web. Il n'y a donc rien d'extraordinaire là-dedans. Mais plus tard, je vous expliquerai comment vous pouvez renvoyer pages HTML au lieu de jouer des chaînes Python sur votre site Web. Cela vous permettra d' avoir différents formats, différentes polices sur votre texte, puis vous pourrez également appliquer un style CSS à votre code HTML, et vous aurez ainsi un site Web complet doté de fonctionnalités modernes. Pour l'instant, assurons-nous que vous avez bien compris ces sept lignes de code. Oui, ça fait sept lignes. Comme je l'ai dit, sur la première ligne, vous importez l'objet de classe FAS depuis la bibliothèque FAS Ensuite, dans la ligne suivante, une fois que vous avez importé la classe flask ici, l'objet flask, en d'autres termes, vous instanciez cette classe, cet Il s'agit d'une variable spéciale qui aura comme valeur le nom du script Python. Désormais, lorsque vous exécutez un fichier Python, un script Python, Python assigne le nom main this string au fichier Lorsque vous importez un script dans un autre script, par exemple si nous importons ce script à partir d'un autre script, le nom du script est attribué à un point py. Mais lorsque vous exécutez ce script, Python lui attribue le nom underscore underscore, main score underscore main Alors, qu'est-ce qui se passe ? Dans cette ligne, nous disons que le nom est égal à main, puis autour de l'application. Cela est vrai lorsque nous exécutons le script comme nous l'avons fait ici. Mais si nous importions ce script depuis un autre script, cette ligne ne serait pas exécutée. Cela nous permet donc de contrôler ce script en utilisant cette ligne ici. Ensuite, nous avons ces deux lignes. C'est un décorateur. À présent, la sortie produite par cette fonction sera mappée à cette URL Donc, si vous le souhaitez, vous pouvez remplacer cette URL par celle-ci, par exemple, enregistrer le script. Bien sûr, vous avez besoin d'une URL ici. Enregistrez le script, exécutez-le et accédez à l'hôte local, rechargez-le. Et cette fois, vous allez avoir un message d'erreur. Python n'a pas pu trouver cette page, mais il peut trouver la page À propos. Oui, c'est ça. Si vous voulez toujours la page d'accueil, vous ajoutez un autre décorateur et une autre fonction juste après le décorateur Il suffit donc de partir avec cette page d'accueil et de dire page d'accueil. Ici. Enregistrer. Encore une fois, nous avons une erreur car nous ne pouvons pas avoir de fonctions portant le même nom. Nous pouvons donc le transformer en bot. Le nom n'a pas d'importance. Il n'est donc pas nécessaire que ce soit pareil pour celui-ci. Cliquez à nouveau sur Enregistrer dans le script. Et allez sur le site Web. Cela fonctionne. Essayez le Web sur la page d'accueil. Cela fonctionne aussi. Si vous souhaitez modifier quelque chose, disons que le contenu se trouve ici, vous enregistrez le script. Et l'application Web redémarrera d'elle-même afin que vous n'ayez pas à la fermer et à réexécuter le script comme je l'ai fait précédemment. Si vous obtenez une erreur comme celle que j' ai reçue précédemment, le script s'arrêtera. Mais si tout va bien, vous n'aurez pas d'erreur, alors réessayez. La page d'accueil est bonne. La page À propos va bien aussi, et avec le nouveau contenu. Donc c'est à peu près tout. Dans la prochaine conférence, vous apprendrez comment renvoyer un modèle HTML, un fichier HTML à l'aide de vos fonctions Python. Cela vous donnera le plein pouvoir publier tout ce que vous voulez votre site Web, et pas simplement jouer des cordes comme nous l'avons fait dans cette conférence. Nous vous verrons donc lors de la prochaine conférence. 153. 152. Préparer des modèles HTML +: Bienvenue à nouveau. Dans cette conférence, vous allez apprendre à générer des pages HTML à l'aide de votre application Web Python. Dans la conférence précédente, nous renvoyons simplement des chaînes simples, comme vous le voyez ici, donc renvoyez une chaîne. Nous allons maintenant renvoyer un modèle HTML ici. Pour ce faire, nous devons utiliser la méthode du modèle de rendu de la bibliothèque Flask Et ce que fait le modèle de rendu, c'est accéder à un fichier HTML, stocké quelque part dans notre application Python, dans nos fichiers Python, puis affiche ce code HTML à l'URL de toutes les requêtes Nous devons donc le remplacer par le nom d'une page HDML, disons home point HTML Et ce nom ici, ce nom de fichier doit refléter un vrai fichier HTML, qui doit être stocké dans un dossier, qui doit lui-même être nommé templates. Veillez donc à utiliser ces noms lorsque vous créez un dossier. Dans le dossier, vous devez créer un fichier HTML, home point HTML. Et le nom doit refléter le nom que vous renvoyez ici dans la méthode du modèle Eder. C'est ça. Et c'est ici que vous écrivez le code HTML maintenant Si vous connaissez déjà le HTML, cela devrait être aussi simple que de respirer. Si vous ne le savez pas, cela devrait être facile à apprendre. Si vous connaissez un peu Python maintenant , apprendre le HTML est un jeu d'enfant. Alors allez-y et apprenez un peu de HTML. C'est aussi simple que cela. Quoi qu'il en soit, je vais créer un fichier HTML ici. Tout commence par une déclaration du type de document, HTML. Ensuite, vous avez les balises HTML. Il y avait une étiquette d'ouverture, et vous avez également une étiquette de fermeture. C'est ça. Tu as des marques corporelles. Juste comme ça, et à l'intérieur se trouve le contenu de votre page Web. Disons que je veux un titre comme celui-ci. Et à l'intérieur, tu peux mettre du texte. Ma page d'accueil, par exemple. Et voici un autre type de balise différent, qui est une balise de paragraphe, et disons qu'il s'agit d'un site Web de test. Clicksaf et, oui, tu devrais être prêt à partir. Accédez à votre script, assurez-vous de l'avoir enregistré. Et le Web redémarre, et je vais maintenant visiter ma page d'accueil Voici la page du bot. Cela devrait être la page d'accueil, comment. J'ai l'impression d'avoir une petite faute de frappe, je suppose. Oui, cela devrait être la première page comme balise d'ouverture. Cliquez sur Enregistrer pour ne pas avoir à lire le script Python. Il suffit d'aller ici, de recharger la page. Et c'est un texte normal maintenant. Il s'agit donc d'un paragraphe, et celui-ci s'intitule Super. Nous pouvons donc également avoir une autre page pour la page À propos. Si vous voulez simplement le dupliquer rapidement, parlez de ma page À propos. Ici, il s'agit d'un site de test. Encore une fois, juste comme ça, vous allez dans votre script et le modifiez en modèle de rendu, puis vous passez du HTML à points. Cliquez sur Enregistrer, accédez à l'hôte local. Cela devrait être la page d'accueil. Vous avez la page À propos. Oui, ma page À propos. Il s'agit à nouveau de ce site Web. Donc, c'est ça. C'est ainsi que vous transmettez des modèles HE Mel à votre application Web Python et que vous les mappez à vos URL Passons ensuite à la prochaine conférence. 154. 153. Ajouter un menu de navigation sur le site Web: Bien, dans cette conférence, je vais continuer à travailler sur le site Web. Plus précisément, je vais ajouter un menu de navigation afin que l'utilisateur puisse facilement naviguer dans les pages. Permettez-moi d'abord d'illustrer l'idée. Dans un premier temps, j'aimerais exécuter ce que nous avons fait jusqu'à présent. Donc, un script Python. L'application est donc en cours d'exécution. Et si vous accédez à votre navigateur, hôte local, le port par défaut est 5 000, et c'est le site Web. Et nous avons également deux pages ici. À propos de la page. Bien. Donc à propos de la page et de la page d'accueil. Maintenant, ce que je vais développer dans cette conférence, c'est ce qui se trouve ici. J'ai une capture d'écran. Donc, la page d'accueil, la page À propos, d'accueil, la page à propos. Nous avons donc ici un menu de navigation qui, si vous cliquez sur l'un de ces textes, vous accédez à la page correspondante. Et nous avons également un titre et quelque chose que vous devriez remarquer maintenant, ce qui est important de noter, c'est que cette partie est la même dans les deux pages. Cela signifie que nous allons ajouter cette partie ici, le code de cette partie dans la page HTML Comment est-ce que ça sonne ? Eh bien, cela ne me semble pas très intelligent. Une façon plus intelligente de le faire serait de créer une page HTML distincte pour cette partie ici, puis de lier la page A et la page d'accueil à cette page C'est donc ce que nous allons faire dans cette conférence. Nous avons donc besoin du code HTML de cet en-tête et du menu de navigation. Et j'ai déjà ce code, donc je n'irai pas taper tout le code HTML. Ici. C'est bon. Mais je vais vous expliquer ce que fait le HTML. Donc, tout d'abord, j'aimerais double-cliquer dessus et simplement l'afficher localement. Nous ne l'exécutons donc pas sur un serveur, double-cliquez dessus. Nous avons donc ici l'en-tête et le menu de navigation, sur lesquels, si vous cliquez, vous n'allez nulle part car nous n'avons pas encore lié la mise en page de cette page HTML à A et à la page d'accueil. Et comme vous pouvez le voir, je l'ai mis dans le dossier des modèles. Ainsi, chaque page HTML est envoyée dans le dossier des modèles. Donc, ce que nous avons ici, c'est la déclaration du document et nous avons les balises HTML qui se terminent ici. Ensuite, nous avons un élément d'en-tête, qui contient ici DF. Et nous utiliserons ce nom de classe ultérieurement pour faire référence à notre code CSS. Ensuite, nous avons ici une fonction qui dit URL quatre. Et ce que cela fait, c'est que cela déclenchera la fonction home, la fonction Python. Que nous avons ici. Donc, ici, cette fonction sera déclenchée lorsque l'utilisateur cliquera sur le lien d'accueil Donc celui-ci ici. Et il en va de même pour le labo. Ainsi, lorsque l'utilisateur clique sur, la fonction Python est exécutée et le fichier HTML à propos de ce fichier HTML est rendu via la méthode du modèle de rendu. J'espère donc que c'est clair. Si vous êtes paresseux comme moi, vous ne voulez pas taper chaque ligne de ce fichier, vous pouvez le trouver dans la section des ressources, qui se trouve à droite de l'écran. Nous devons maintenant trouver un moyen de lier ce fichier HTML de mise en page à ce fichier HTML de mise en page à la page d'accueil et aux pages HTML ci-dessus. Je vais rapidement revenir à l' apparence de la page. Ainsi, comme vous le voyez ici, nous avons l'en-tête, et juste en bas de l'en-tête, nous avons la page HTML A. Donc, juste ici. Cela signifie que juste en dessous de l'en-tête, nous allons entrer un code qui renverra à la page HTML à points d'accueil ou à la page HTML à points A en fonction de l'objet sur lequel l'utilisateur cliquera. Nous avons donc une division ici, qui la ferme. Et je vais lui donner un nom de classe afin de pouvoir me référer plus tard au code CSS. Ensuite, vous avez des crochets bouclés. C'est donc une syntaxe, et vous devez également y utiliser le signe du pourcentage. Ensuite, vous écrivez la balise de bloc, puis vous donnez un nom au bloc. Et ce que nous faisons ici, c'est en fait un héritage de modèles. La page HTML à points de mise en page, que nous sommes en train de modifier en ce moment, est donc que nous sommes en train de modifier en ce moment, un modèle de base Le modèle enfant sera la page HTML à points d'accueil ou la page HTML à propos des points Et ce modèle pour enfant remplira ce bloc ici. Il y a également une autre ligne entre crochets et des signes de pourcentage Il s'agit du mot clé end block, qui indique la fin du bloc. Et nous en avons terminé avec la mise en page HTML. Ce que je vais faire ici, c'est aller dans Panes et diviser la fenêtre à droite J'ai donc la page HTML à points de mise en page ici, fermez-la ici. Et je vais maintenant passer au point d' accueil HTML. Et comme il s' agira d'un modèle enfant, je n'ai pas besoin de la déclaration ici ni de la balise HTML, et je n'ai même pas besoin de la balise body. Je vais le remplacer par un DIV. Et disons que class est égal à Home, fermez-la ici et supprimez les deux. Et ce que vous devez faire maintenant, c'est réutiliser la syntaxe des modèles, comme ça, et utiliser le mot clé extends Ensuite, vous déclarez ce que vous souhaitez prolonger. Disposez ce fichier HTML. Ensuite, vous avez également besoin d'une autre ligne. Et ici, vous devez spécifier le nom du bloc. Cela doit donc correspondre à celui-ci ici. Alors, que se passe-t-il ici ? Eh bien, passons au script du script Python. Ce qui se passe, c'est que lorsque l'utilisateur visite cette URL, c'est-à-dire la page d'accueil ou celle-ci, disons celle-ci, Python exécute la fonction home car la fonction home est mappée à cette URL, et la fonction home affiche le modèle HTML home point Python va donc accéder à la page HTML du point d'accueil, et il verra que la page HTML du point d'accueil étend le code HTML du point de mise en page. Donc celui-ci ici. Donc, ce qu' il fera, c'est qu'il enverra ce code dans ce bloc ici, puis cette page sera rendue dans l'URL d'accueil. Aussi simple que cela, l' utilisateur verra la mise en page cette page HTML avec son contenu secondaire Il s'agit donc du modèle de base, du modèle enfant. Et nous avons également un autre enfant dans ce cas, qui concerne ce HTML Alors laisse-moi apporter ça ici. Et je vais juste copier ceci je l'ai mis ici, et cela aussi. Contrôlez C, et vous. Assurez-vous d'avoir enregistré tous les fichiers et celui-ci. Ouaip. Et voyons si l'application est en cours d'exécution. Oui, ça a l'air en direct. Et je vais aller à la page d'accueil. Oui, ça a l'air bien. Nous avons chez nous et à. Passons à la question de l'encre. Ouaip. Il semble que nous ayons perdu le cap. Le format de cette ligne, jetons un coup d'œil à la page ab. Oui, j'ai oublié de fermer le Div ici, sauvegarder à nouveau, d'aller dans le navigateur, recharger, et c'est bon Donc c'est à peu près tout. J'espère que les choses fonctionnent de votre côté. Si ce n'est pas le cas, n' hésitez pas à poser une question, ou vous pouvez même consulter mes fichiers, que je place dans la section des ressources à droite de votre écran. Et oui, je pense que notre application est prête à en recevoir davantage. Passons donc à autre chose et à la prochaine conférence. 155. 154. Améliorer le front-end du site avec CSS ++: Génial. Nous avons beaucoup progressé. Nous avons un script Python qui génère Flashcap et nous avons deux fonctions Et chacun d'eux fait correspondre deux pages HTML à deux URL différentes Et voici notre site Web avec deux pages Web. Dans cette conférence, nous ajouterons un style CSS à ce site Web afin qu' ressemble à n'importe quel autre site Web moderne, qu'il soit visuellement attrayant et qu'il ne ressemble pas aux années 80. D'accord. Pour ce faire, nous devons essentiellement faire deux choses. La première chose à faire est de créer un fichier CSS et d'y écrire le code CSS. Et la deuxième chose est qu' une fois que nous avons écrit ce code CSS, une fois que nous avons le fichier CSS, nous devons créer un lien vers celui-ci à partir de notre fichier HTML à points de mise en page. Le CSS est un CCS HTML. Donc, si vous ne le connaissez pas, je vous suggère de consulter quelques tutoriels, et je suis sûr que vous vous habituerez très rapidement au CSS. J'ai déjà un fichier CSS qui va styliser mon site Web. Je vais le couper et le mettre dans un dossier que j'appellerai static. Ici, je vais créer un autre dossier et l'appeler CSS, et je vais coller le fichier CSS juste à l'intérieur. Alors laisse-moi clore ça. Comme vous le voyez, le dossier que j'ai créé et le fichier ont été reflétés dans la vue d' arbre ici à l'intérieur d'Atom. L'idée est donc que Python recherche les fichiers statiques dans le dossier statique. Donc, ici, dans le dossier statique, vous pouvez mettre différents fichiers. Par exemple, si vous souhaitez ajouter une image à votre site Web, vous devez créer ici un dossier appelé Images, puis y placer des images . Vous pouvez ensuite lier ces fichiers statiques à partir de votre page HTML de mise en page ou de toute autre page. Maintenant, avant d'ouvrir le fichier CSS et de le parcourir rapidement, j'aimerais vous montrer comment vous pouvez créer un lien vers le fichier CSS. Maintenant, n'oubliez pas que la partie visible d' un code HTML se trouve à l'intérieur du corps du texte, tandis que les liens, tels liens vers des fichiers JavaScript ou des liens vers des fichiers CSS, en sortent. Et ils devraient être placés dans des étiquettes. Alors vas-y ici et là-bas. Et puis nous avons une balise de lien. Et le L signifie la relation. La relation avec le fichier vers lequel nous établissons le lien est donc une feuille de style Nous déclarons donc en quelque sorte le type de fichier vers lequel nous créons un lien. Il s'agit donc d'une feuille de style CSS, puis nous avons la référence ici qui sera égale à la fonction URL four, qui prend comme argument nom du dossier où se trouve le fichier et le paramètre du nom de fichier, qui est égal au point principal CSS CSS CSS Donc, ce que nous avons ici, c'est que nous déclarons le type de fichier vers lequel nous sommes liés, puis nous mettons le lien du fichier. Et cela devrait être entre guillemets. Donc tout ça. Et j'aimerais également ajouter un titre pour le site Web, disons, l'application Flask C'est ça. Je vais enregistrer ça. Et je vais essayer le site Web. Waouh. Tu vois la différence ? Ouais Nous avons le menu ici très bien. À propos de la page, de la page d'accueil, et nous avons le titre juste ici. Ensuite, le contenu de la page Web est affiché ici. Maintenant, toutes ces barres, la couleur de fond, les garnitures, tout cela a été défini en utilisant du CSS Alors allons-y et jetons un coup d'œil au code CSS. C'est le cas. Je pense que cela va de soi. Quoi qu'il en soit, ce que nous avons, c'est essentiellement un élément HTML, donc le corps est là. Une fois que nous avons écrit l' élément HTML dans le script CSS, nous utilisons des crochets, puis à l'intérieur des crochets, nous définissons ces attributs Donc, la marge, la peinture, la famille de police du texte et la couleur du texte. Si vous voulez changer cela, disons 999, enregistrez et rechargez la page Web, vous verrez que le texte a pris une couleur différente C'est donc assez bon. Cela signifie donc que cet attribut affecte le corps du site Web. Je vais le remettre à quatre pour quatre. Ensuite, vous avez l'élément d'en-tête, qui est responsable de cet en-tête ici. Donc, au sommet. Ensuite, si vous souhaitez styliser une partie spécifique de votre page Web, disons, uniquement le logo, qui est celui-ci ici, vous devez référer à l'en-tête abord vous référer à l'en-tête, puis à l'élément agon, puis à la classe de logo Il s'agit donc d'un nom de classe juste ici. Et ainsi de suite, vous pouvez consulter ce code à votre propre rythme, je crois. La logique est donc la même. Génial. Nous sommes maintenant prêts à déployer ce site Web en ligne sur le Cloud. C'est ce que nous ferons lors des prochaines conférences. On se voit. 156. 155. Créer un environnement virtuel Python: Nous avons donc un site Web fonctionnel, qui a l'air plutôt bon. Le problème est que c' est chez notre hébergeur local. Donc, la seule personne qui voit cela est, oui, vous ou quelqu'un qui a accès à votre ordinateur. Nous voulons donc plutôt déployer ce site Web sur un serveur Web ou sur le cloud, comme nous le ferons dans ce cours. Et nous utiliserons le cloud Hogu. Heroku est un service qui permet de déployer des applications Python dans leur cloud bonne nouvelle est que vous pouvez déployer une application gratuitement et que vous pouvez également avoir votre domaine public gratuitement. Cependant, vous aurez besoin d'un sous-domaine d'Heroko, par exemple ardit.heroko.com ardit.heroko.com Toutefois, si votre site doit générer beaucoup de trafic par la suite, vous devriez mettre à niveau votre forfait et acheter plus de bande passante. Le déploiement sur Heroko est relativement simple. Vous n'avez pas à réfléchir ni à effectuer de tâches administratives. Un Heroko permet donc d'économiser beaucoup de temps et d'efforts, ce qui vous permet de vous concentrer sur la programmation plutôt que sur les parties serveur Avant de déployer sur Heroku, nous devons cependant faire quelque chose Il y a quelque chose que nous aurions dû faire depuis le début de cette section. Donc, avant même d'écrire un fichier ici, vous devez créer un environnement virtuel isolé de vos autres fichiers et de votre installation principale de Python. Donc, pour exécuter notre application, nous utilisons Python, qui provient de notre installation principale. Donc celui-ci ici, ceux que j'ai ici. Ce n'est pas une bonne pratique. Une bonne pratique consiste à disposer d'une installation propre de Python, qui n'est utilisée que pour votre application. Ainsi, dans cette installation, vous ne voulez pas que les bibliothèques installent des bibliothèques dont vous n'avez pas besoin pour créer des applications FLASK Nous devons donc créer un environnement virtuel. Et ici, je vais vous montrer comment vous pouvez le faire. Pour créer un environnement virtuel, vous devez utiliser une bibliothèque Python Virtual F. Et pour utiliser la bibliothèque Virtual Python, vous devez installer Virtual F. Donc, PIP installe Virtual NV. Nous utilisons donc l'installation principale de Python ici pour installer Virtual Génial. Cela a été installé avec succès, et nous allons maintenant créer un environnement virtuel. L'environnement virtuel doit être créé au même niveau le dossier principal qui contient les fichiers de l'application. Donc, si nous allons dans notre répertoire, juste ici, voici où se trouvent les fichiers. Et ce que je vais faire, c'est créer un dossier principal ici et l'appeler mon site. Et je vais fermer Atom pendant un moment. Et ça rentrerait dedans. Donc, juste ici. Et maintenant, vous pouvez ouvrir atom dans ce répertoire car c'est ici que nous allons créer l'environnement virtuel. Ouvrons donc la ligne de commande maintenant, et nous sommes prêts à créer un environnement virtuel. Et pour cela, vous devez utiliser une bibliothèque Visual M en disant Python. L'argument, alors vous avez Vn, qui est le nom de la bibliothèque du module Et voici un argument qui permet à Python de localiser les modules à exécuter sous forme de scripts. Ensuite, vous devez spécifier un nom pour le dossier dans lequel les fichiers de l'environnement virtuel seront stockés, afin que cela fonctionne. Voyons voir que le dossier virtuel a été créé. Et l'environnement a été créé avec succès. Ce que nous avons ici est une installation isolée de Python, et dans les scripts, vous verrez que Python s'y trouve. C'est ici. OK, ne t'inquiète pas pour ça. Et voici aussi PIP. Donc, pip dot. Et cela signifie que vous pouvez utiliser ce Python si vous le souhaitez. Laisse-moi essayer. Nous sommes donc maintenant dans le répertoire Mside. Cela signifie que nous devons nous référer aux cryptes virtuelles et à Python. Et cela déclenchera notre nouveau Python dans la console. Cependant, nous ne sommes pas intéressés à exécuter Python à partir de l'étagère. Donc je vais juste quitter ça. Et ce qui nous intéresse, c'est d'exécuter l'application FLASK en utilisant la nouvelle installation de Python Mais avant cela, nous devons réellement installer Flask dans notre Visual Python, si vous le souhaitez Et pour cela, vous devez utiliser la bibliothèque PIP de votre Python isolé Vous devez donc pointer vers le dossier virtuel vers le dossier de script, puis vers PIP install Flask ainsi que FASC est en train d'installer et il a également installé ses dépendances Et nous devrions être prêts à partir maintenant. Lancez donc notre application Web à l' aide de notre nouvelle installation de Python Pour ce faire, vous devez pointer vers le nouveau Python et celui vers la démo, car nous sommes sur mon site en ce moment, comme vous le voyez ici, donc Demo backslash script one point pi Cela devrait fonctionner. Génial. Et si vous allez sur le site Web maintenant, vous verrez qu' il fonctionne bien. C'est ça. Vous êtes maintenant plus que prêt à déployer votre application FASC sur le cloud, et c'est exactement ce que nous ferons lors de la prochaine conférence Et je tiens à le répéter oubliez pas que vous devez toujours créer un environnement virtuel avant de créer votre application FLASK Donc, avant d'écrire du code, vous devez utiliser une nouvelle installation de Python. 157. 156. Comment utiliser le service PythonAnywhere: Bonjour, bienvenue à une nouvelle conférence sur la façon de déployer votre application Web Flask sur un serveur en direct, ce qui signifie que vous aurez votre propre nom de domaine que vous pourrez donner à n'importe qui et qu'il pourra utiliser votre application Web Et nous allons utiliser Python Anywhere. Allez donc sur python ware.com. Python Anywhere propose un service gratuit où vous pouvez héberger vos applications FLASK C'est donc ce que nous allons faire, et c'est relativement facile à déployer sur Python n'importe où. Il s'agit donc d'une vidéo mise à jour, bien sûr. Avant cela, nous utilisions Heroku. Désormais, Heroku et Python Nware vous permettent tous deux héberger et de déployer des applications FLASK gratuitement La différence est que Python Aware a tendance à être plus convivial. Et Heroku, en revanche, complique les choses. Je suggère donc généralement qu'en tant que programmeur, vous souhaitiez vous concentrer sur vos codes au lieu de vous occuper des problèmes d' administration du serveur. Mais je voudrais également dire que les logiciels Hiroko et Python sont relativement simples par rapport à ce que vous auriez à faire si vous aviez votre propre serveur sur lequel vous devriez tout gérer Hoco et Python Aware facilitent tout de même les choses. Pour pouvoir déployer votre application Web FAS sur Python n'importe où, vous devez créer un compte Alors, allez sur Tarification et inscrivez-vous, et vous voulez trouver la section où vous pouvez créer un compte débutant, car c'est gratuit. Et ils ont également d'autres forfaits payants. Donc, si vous avez plus de visiteurs, vous devrez passer à un compte payant. Je vais donc créer un nouveau compte. Très bien, je me suis inscrit et mon nom d'utilisateur est Ardit 12345. C'est mon nom d'utilisateur, et c'est un tableau de bord. Désormais, sur Python Anywhere, outre le déploiement d'applications Web, vous pouvez également effectuer d' autres tâches. Avant de déployer l'application Web, permettez-moi de vous présenter brièvement Python Anywhere. En gros, vous devriez pouvoir voir le menu du tableau de bord ici, puis nous avons les consoles. Dans les consoles, si vous allez sur les consoles, vous pouvez essentiellement créer une console Bash Cela vous donne accès à votre propre serveur sur lequel vous déploierez votre application Web, et vous pouvez également faire d'autres choses , comme démarrer Python 3. Et il lance cette version de Python. C'est donc un Python interactif vous pouvez même importer des bibliothèques ici, donc Pandas est déjà installé, vous pouvez l'utiliser L'inconvénient est que vous n'avez pas d'interface utilisateur graphique Donc, si vous voulez montrer pour générer des graphiques et que vous voulez les voir, ce n'est possible nulle part sur Python car vous n'avez que ce shell. Donc, le shell Python, et vous revenez au terminal. Et par exemple, avec PWD, vous pouvez voir où vous vous trouvez actuellement C'est donc votre position sur le serveur. Vous êtes donc dans la maison, puis dans le 20 2345, donc dans ce dossier du dossier d'accueil Ici, vous pouvez également créer des fichiers Python, par exemple Nano example point PY. Nano est un éditeur de texte que vous pouvez utiliser dans ce type d'interfaces de ligne de commande. Cela créera donc un nouveau fichier, lequel vous pourrez écrire du code Python tel que print. Bonjour. Parenthèse. Maintenant, pour enregistrer ce fichier, vous devez suivre ces commandes. Alors, sors. Vous voulez quitter avec Control X. Appuyez donc sur Ctrl X. Vous verrez ce message. Il dit, enregistrer le tampon modifié, ce qui signifie que vous voulez enregistrer ce fichier ? Y pour oui ou N pour non. Je vais donc appuyer sur Y, puis il vous demande à nouveau quel nom souhaitez-vous attribuer à votre fichier ? Exemple de point PY S c'est le cas, oui. Il suffit donc d'appuyer sur Entrée. Entrez et le fichier est enregistré. Pour le faire fonctionner. Vous utilisez Python 3.9. Exemple point PY, exécutez et vous obtenez le résultat. Voilà ce que vous pouvez faire avec la console. Si vous revenez en arrière, vous aurez ces fichiers. Et maintenant, vous pouvez voir cet exemple de PY, que nous avons créé précédemment, se trouve ici. Et vous voyez le répertoire actuel, donc un répertoire d'accueil Rit un, deux, trois, quatre, cinq, c'est un répertoire. Nous étions dans l'interface de ligne de commande. C'est donc une autre façon de créer des fichiers. Donc, si vous voulez créer un fichier ici, vous devez donner un nom ici. Prenons l'exemple 2 de PY et passons à Nouveau fichier. Et disons que je suis ici imprimé. Bonjour encore une fois. Et maintenant, vous pouvez également exécuter ce fichier, enregistrer et l'exécuter à partir d'ici. Alors enregistrez-le d'abord et cliquez sur le bouton Exécuter. Et vous devriez voir le résultat ici. C'est un peu plus lent que la méthode précédente pour exécuter une application pour exécuter des fichiers Python. Mais de toute façon, c'est le résultat. C'est donc une autre façon d'exécuter des fichiers Python. Si tu veux y retourner maintenant, tu peux appuyer ici. Il s'agit donc d'une page de fichiers, puis nous avons le Web. C'est ici que nous allons créer une nouvelle application Web, mais dans la prochaine conférence. Ensuite, nous avons des tâches avec des tâches. Ce que vous pouvez faire, c'est saisir ici le chemin d'un de vos fichiers Python Anywhere. Par exemple, si je voulais donner le chemin de l'exemple PY, je dirais home.r1, deux, trois, quatre, cinq, le répertoire et l' Puis définissez une heure. Je vais définir une heure ici dans le système horaire UTC. Ce script serait alors exécuté tous les jours à cette heure-là. Cela peut être utile pour des choses comme le scraping Web . Si vous voulez écrire quelque chose à une certaine heure de la journée, vous pouvez également le faire n'importe où sur Python Enfin, nous disposons d'une base de données. Le menu ici vous permet de créer une base de données. Ainsi, si votre application Web possède une base de données dans laquelle elle enregistre les données, vous souhaitez créer une nouvelle base de données ici, puis créer une table pour cette base de données. Encore une fois, vous pouvez le faire dans cette interface, ici dans les bases de données, puis votre application Web pourra interagir avec cette base de données. Il s'agissait donc d'une introduction à Python Anywhere. Dans la vidéo suivante, nous allons déployer notre application Python, donc notre flashap sur Python n'importe où. À bientôt. 158. 157. Déployer l'application Flask sur PythonAnywhere +: Bon retour. Je suis ravi de vous montrer comment déployer votre application Web sur Python Anywhere. Voici donc mon compte Python Anywhere, et je suis actuellement dans la section du tableau de bord. Vous voulez accéder au Web et créer une nouvelle application Web et vous recevez ce message ici. Python Anywhere vous indique que vous ne pouvez pas avoir de nom de domaine personnalisé, disons ardit.com, car il s'agit d'un compte gratuit Si vous souhaitez un nom de domaine personnalisé, vous devez payer pour obtenir l'un des comptes payants. Cependant, vous devez d'abord trouver un fournisseur de domaine pour acheter un nom de domaine. Donc, si vous voulez acheter le nom de domaine exemple.com, par exemple, vous devriez vous adresser à peut-être Name Chip La puce de nom est, je pense, la meilleure solution pour obtenir des noms de domaine. Alors nommez chip.com, et une fois que vous y aurez acheté un nom de domaine, alors name chip vous donnera des noms DNS, et ces noms vous devrez les mettre n'importe où dans un Python pour les connecter à votre site Web, mais ce n'est pas ce que nous faisons pour le moment Pour notre objectif, il suffit d'avoir ce type de nom de domaine, qui est, dans mon cas, celui-ci ici. Donc Rs un, deux, trois, quatre, cinq, point Python Anywhere, point com. Il s'agit donc d'un sous-domaine de Python aware.com . Appuyez sur Suivant. Et plusieurs options s'offrent à vous. Celui que nous voulons est FLASK, afin que vous puissiez déployer différents types d' applications Web sur Python n'importe où Nous appuyons sur FLASK, et Python 3.9 est prêt. Alors, appuyez dessus. Et c'est désormais le point d'entrée de l'application Flask. Par point d'entrée, je veux dire le fichier que vous exécutez pour démarrer l'application FLASK Donc dans notre cas, il s'agit du script one point PY. Il s'agit d'un fichier que nous exécutons avec le script Python PY. Alors ne changez pas cela, laissez-le tel quel. Appuyez donc sur Suivant pour le moment. Et l'application est créée, mais nous devons ajouter nos fichiers à notre application. Donc, pour cela, vous devez accéder au menu des fichiers. Et maintenant, sur la gauche, vous pouvez voir mon site. Si vous cliquez ici, vous verrez le fichier créé par Python Anywhere. C'est donc le point d'entrée dont je parlais, application Flask Underscore qui est Vous voulez cliquer ici et supprimer ce code et le coller, copier votre propre code et y coller votre code et appuyer sur Enregistrer. Vous pouvez donc voir maintenant que nous sommes dans ce répertoire. Donc, coupez O R un, deux, trois, 45. Donc, votre nom d'utilisateur MySite, fA FAS Underscore app that PY est Donc, si vous cliquez sur mon site, vous revenez dans le répertoire racine de votre projet. Il s'agit donc du répertoire racine de Python Anywhere, et il s'agit du répertoire racine de notre projet local. Donc, un script indiquant que PY est là, puis il contient un dossier statique et un dossier de modèle dans le même répertoire racine. Par conséquent, dans ce répertoire racine de Mist, nous voulons créer un dossier de modèles. Écrivez-y donc des modèles et appuyez sur le nouveau répertoire. Cela créera un nouveau dossier de modèles. Vous voyez maintenant qu'il a été remplacé par ce dossier. Donc, si vous revenez à mon côté, vous voyez que des modèles sont ajoutés dans le répertoire. L'application Flask Underscore se trouve également dans le même dossier, mon site Et nous voulons également créer un dossier statique vide. Nouveau répertoire, appuyez sur ce bouton et il devrait créer un dossier statique. Alors, retournez à mes côtés. Vous voyez que les modèles sont statiques et qu'ils sont maintenant présents. Nous devons donc ajouter nos fichiers statiques. Appuyez donc sur statique. Vous êtes maintenant sur static dans static et vous souhaitez télécharger un fichier principal en CSS, mais attendez, c'est dans un autre dossier. CSS est le dossier, vous devez donc le créer dans static. Vous souhaitez créer un répertoire CSS. Appuyez sur le nouveau répertoire. Assurez-vous que vous êtes dans ce répertoire, donc mon site slash statique CSS Et maintenant, nous voulons télécharger le fichier. Et ce fichier est ce CSS principal. Je suis donc là. C'est le répertoire du projet avec nos fichiers locaux. Sous Static sous CSS, nous avons le Dot Css principal. Double-cliquez, et le fichier sera téléchargé dans le CSS. Retournez ensuite sur mon site, accédez aux modèles et téléchargez-les. Les fichiers contenus dans les modèles, qui concernent le code HTML par points d'accueil, et le troisième, le code HTML par points de mise en page. Ces trois sont des modèles intégrés. Assurez-vous donc qu'ils se trouvent dans les modèles. Ensuite, retournez sur mon site et jetez un œil si tout va bien. Cela me semble bon. L'une des modifications que vous souhaitez également apporter est que vous souhaitez accéder à votre application, et lorsque votre application est en production, vous souhaitez la remplacer par false. Vous ne voulez donc pas afficher les erreurs Python aux visiteurs car cela pourrait rendre votre application sujette au piratage. Parce que les utilisateurs ou les pirates informatiques verront les erreurs de votre application. Ils peuvent comprendre comment votre application Web est structurée et vous pouvez également exposer des données que vous ne souhaitez pas exposer dans les messages d'erreur de débogage affichés par Flask Donc faux et présent en toute sécurité et maintenant nous sommes prêts à voir notre application, mais après l'avoir rechargée avec ce bouton Donc, dans la section Web, appuyez sur ce bouton et rechargez-le pour obtenir la dernière version des fichiers servis par Python n'importe où Ensuite, vous devez cliquer sur cette URL. C'est donc l'URL de mon application, appuyez dessus, et mon site est en ligne. Cela fonctionne donc très bien. J'espère que le vôtre fonctionne aussi. Si ce n'est pas le cas, vous devez retourner à la section Web, faire défiler la page vers le bas localiser ces journaux d'erreurs. Si vous appuyez dessus, vous verrez les dernières erreurs que vous avez reçues de votre application Web. Ce sont donc des erreurs de Python et essayez de les lire pour comprendre ce qui se passe. Si vous ne les comprenez pas, hésitez pas à poser une question dans les questions-réponses, mais assurez-vous de copier-coller ces erreurs n' hésitez pas à poser une question dans les questions-réponses, mais assurez-vous de copier-coller ces erreurs ainsi que le code de votre application Web, et nous serons heureux de vous aider Merci beaucoup Je vous parlerai dans les prochaines vidéos. 159. 158. Introduction à la bibliothèque Tkinter: Bonjour, et bienvenue dans cette nouvelle section du cours. Dans cette section, vous allez apprendre à créer des interfaces utilisateur graphiques avec Python. Et plus précisément, nous allons utiliser la bibliothèque Tkinter pour Donc, dans cette section, vous n'allez pas créer de programme réel. Je vais vous présenter la bibliothèque Tkinter et, bien sûr, créer une interface utilisateur graphique, un petit programme qui vous permettra de démarrer avec Ensuite, dans la section suivante, une fois que nous en aurons terminé avec cette section dans la section suivante, vous allez apprendre à interagir avec les bases de données avec Python. Nous allons donc utiliser Python comme enveloppe de code SQL afin de pouvoir stocker des données dans une base de données, demander des données, les supprimer, etc. C'était donc une section après celle-ci. Ensuite, dans la première section, après ces deux sections, nous allons créer un programme concret. Et ce programme, c'est celui-ci. Je l'ai donc appelée librairie, et cela vous permet stocker des informations sur les livres dans une base de données Il s'agit d'une interface utilisateur graphique. Ce programme est donc composé de deux parties. Vous disposez d'une interface utilisateur graphique, de boutons appelée Widgets, qui est un visualiseur Et cela a été construit avec Tkinter. Et puis vous avez le back-end, qui consiste en un code qui communique avec la base de données. Ainsi, par exemple, si nous appuyons sur le bouton Afficher, nous acquérons la base de données pour charger tous les livres pour nous. Oh, nous avons le titre. Donc, si vous appuyez sur l'un d'entre eux, vous obtenez le titre ici, l'auteur et l'année du livre. Et aussi le numéro d'identification du livre , appelé ISBN Vous pouvez également rechercher une entrée. Donc, si vous souhaitez rechercher un auteur, vous devez écrire le nom de l'auteur, Ni et appuyer sur Rechercher. Et si vous souhaitez ajouter une entrée, il vous suffit de la saisir. Et oui, quelque chose comme ça. Ajoutez une entrée. Et si vous les chargez à nouveau, votre entrée devrait se trouver ici. Il s'agit donc d'un programme. Nous allons construire deux sections après celle-ci. Permettez-moi donc de clore celui-ci ici, et lors de la prochaine conférence, je vous présenterai la bibliothèque Tinder. Nous allons donc créer des interfaces simples avec des widgets. Je vous verrai lors de la prochaine conférence. 160. 159. Créer une fenêtre GUI et ajouter des widgets: Alors, on y va. J'ai ouvert Atom ici, donc je vais utiliser Atom pour créer le programme de librairie, pour ainsi dire, qui utilise Kinder et Aquia Light Three Je vais donc créer un nouveau fichier Python ici. Quel script. Tarte gagnée. Maintenant, pour créer des interfaces utilisateur graphiques avec Kiner, vous avez besoin de la bibliothèque inter, et vous n'avez pas besoin de l'installer car Tkinter est une bibliothèque Python intégrée Il ne vous reste plus qu'à importer Tkinter. Si vous utilisez Python 2, ce serait avec at T. En Python 3, c'est simplement Tkinter comme ça La bonne pratique, cependant, consiste à tout importer depuis Tkinter Donc, depuis Skiner, tout importer Alors pourquoi faisons-nous cela ? Nous le faisons parce que nous allons utiliser de nombreux objets Tkinter dans nos scripts Il est donc logique de simplement les charger tous au lieu de les référencer avec le bouton à point Tkinter, Au lieu de cela, nous pouvons simplement dire bouton, puis entrer les paramètres et ainsi de suite. Permettez-moi donc de créer une interface utilisateur graphique. Maintenant, le programme Kinter est composé de deux éléments principaux. Vous avez la fenêtre et les widgets. Ainsi, par exemple, la fenêtre est tout ce programme que vous voyez ici, puis vous avez des boutons et des choses comme ça, que on appelle des widgets. Donc, tout d'abord, vous devez créer la fenêtre. Et j'aime appeler ma variable window, ce qui équivaudrait à decay. C'est ça. Cela créerait une fenêtre vide pour nous, mais nous devons faire quelque chose de plus dans ce domaine. Nous disons fenêtre cette boucle principale. Cela est toujours nécessaire. Nous ouvrons donc une fenêtre, nous créons une fenêtre, puis tout se passe entre ces deux lignes. Vous créez donc des widgets entre les deux. Et c'est nécessaire car si vous ne l'avez pas, votre programme s'ouvrira et se fermera en une fraction de seconde. Donc, en gros, cela vous permet d'appuyer sur ce bouton dans le coin de votre fenêtre et de fermer le programme. Cela devrait donc toujours être à la fin de votre code. Je vais enregistrer ce script et je vais l'exécuter. Et nous avons reçu une erreur, elle indique que TK n'est pas défini, donc Python ne reconnaît pas cette fonction ici car elle devrait être T. Et exécutez-la à nouveau. Et voici la fenêtre, et il n'y a rien à l'intérieur, alors allons-y et ajoutons un bouton. Nous stockons donc la fenêtre principale dans une variable, et nous allons créer les quatre mêmes widgets. Nous allons donc créer des variables. Disons que B un est égal à un bouton. Le bouton est donc une fonction qui génère un widget de bouton. La fonction du bas prend quelques arguments. Si vous souhaitez obtenir une liste complète des arguments, vous devez effectuer une introspection du code Disons IPython ici. Et de la peau à l'import. Tirez, puis disons bouton et point d'interrogation. Et ici, vous pouvez voir quels paramètres vous pouvez passer à la fonction inférieure. Maintenant, le tout premier paramètre que vous souhaitez ajouter au widget est la variable de la fenêtre de la fenêtre principale. Vous devez donc indiquer à votre widget, la fenêtre que le widget doit également être emballé. Donc, fenêtre et ensuite vous pouvez passer des paramètres comme celui que vous voyez ici. Disons que l'un des principaux paramètres serait le texte. Le texte est donc égal, disons, à la chaîne d'exécution. C'est donc le texte de l'étiquette qui sera affiché en bas. Maintenant, si nous essayons d' exécuter ce script maintenant, vous verrez que nous n' avons pas encore de bouton, et c'est parce que nous n'avons pas précisé où le placer en bas. Pour ce faire, vous devez utiliser la méthode pack, qui est une méthode de widget, puis l'exécuter à nouveau. Et maintenant tu vois le fond. Cependant, il existe un autre moyen de placer votre widget dans votre fenêtre. Il s'agit d'une méthode de grille. Grille. Et souvent, c'est une question de préférence d' utiliser le pack ou le grid. Mais l'idée de la grille est qu'avec la méthode de la grille, vous avez plus de contrôle sur la position de vos boutons ou de vos widgets en général car vous spécifiez ici la ligne et la colonne où vous souhaitez placer votre bas de page. Tout part donc de zéro. Ainsi, la première ligne a un indice de zéro, et la première colonne a un indice de zéro et ainsi de suite. J'ai en fait trouvé une illustration pour cela. C'est donc un programme plus gentil, et nous avons deux lignes ici Nous avons donc cette première ligne, qui devrait avoir un indice de zéro, et vous avez la deuxième ligne, qui devrait avoir un indice de un. Et vous avez des colonnes, donc zéro, un, deux, trois, etc. Supposons que le bouton OK, qui est celui-ci, ait une ligne de zéro, un, deux, donc deux pour la ligne, puis zéro, un, deux, trois, trois pour la colonne. , vous pouvez également avoir des widgets Dans ce cas, vous pouvez également avoir des widgets qui s'étendent sur plusieurs lignes ou colonnes. Dans ce cas, vous devez ajouter ici un autre paramètre appelé rowspan Et cela équivaudrait à un chiffre. Disons que si vous placez le bouton, il s'étendra sur deux rangées. Dans notre cas, ce n'est pas nécessaire, en fait, car nous n'avons pas beaucoup de widgets. Nous n' avons qu'un seul bouton. Laissez-moi exécuter ce script maintenant et voir ce que nous obtiendrons. Nous obtenons donc un bouton, qui ne fait en fait rien car nous n'avons pas précisé l'action à effectuer lorsque vous appuyez sur le bouton. Et j'expliquerai cela dans la prochaine conférence. Mais pour l'instant, ajoutons quelques widgets supplémentaires ici, juste pour que vous vous familiarisiez avec les widgets. Ajoutons donc un widget de saisie. Et disons E E un pour ça. Donc, l'entrée 1 est égale à l'entrée, puis devinez quel est le premier paramètre. Et c'est le paramètre de fenêtre. Et on peut laisser les choses comme ça pour le moment. Et disons un E grade. Et gardons-le dans la même ligne et dans la première colonne. Enregistrez et exécutez. Et nous avons ici une entrée. Alors, qu'est-ce qu'une entrée ? Une entrée est comme une zone dans laquelle vous pouvez saisir une valeur, puis interagir avec cette valeur dans votre script. Supposons donc que vous saisissiez des kilomètres ici et que vous souhaitiez avoir un bouton qui convertit ces kilomètres en miles. Ainsi, le bouton obtiendrait la valeur de cette zone ici, et il l' afficherait dans un autre widget, qui pourrait être un widget de texte. Ajoutons donc un widget de texte. Disons que T un est égal à une fenêtre de texte, bien sûr. Et disons T un, ligne zéro de la grille, colonne deux. C'est ça. Exécuter. Nous avons obtenu un très gros widget de texte car la taille par défaut, la hauteur et la largeur par sont en fait un nombre assez important. Nous devons donc spécifier deux paramètres pour le widget de texte. Il faudrait indiquer la hauteur. Disons une cellule et la largeur. Disons 20. Voici donc la zone des widgets. Voici l'entrée, et voici le bas. Et c'est tout pour cette conférence. Dans la prochaine conférence, je vais vous montrer comment donner vie à ces widgets afin qu'ils puissent réellement faire quelque chose. Rendez-vous lors de la prochaine conférence. 161. 160. Relier des widgets GUI avec des fonctions ++: Bonjour, encore une fois, dans la conférence précédente, nous avons construit cette interface utilisateur graphique avec Kiner. Et le problème, c'est que cela ne fait rien pour le moment, alors nous appuyons dessus, mais cela ne fait rien. Donc, ce que j'aimerais faire ici, le résultat final que j'aimerais avoir est lorsque j'exécute ce bas de page, nous avons donc une entrée ici. Nous pouvons saisir une valeur, et je veux exécuter ce bouton et obtenir des miles ici dans la zone de texte. Ainsi, les miles sont comme unité de kilomètre égale à 1 mile multiplié par 1,6. Donc, si je l'exécute, je veux que quelque chose comme 16 soit généré ici. C'est donc un programme très simple. Notez que ce n'est pas l'un des vrais programmes que j'ai promis de développer dans ce cours. Donc c'est juste pour vous aider à démarrer avec Kinder. Alors, fermons ça maintenant. Et pour qu'un bouton fasse quelque chose, nous devons ajouter un paramètre de commande ici. Le paramètre de commande prend donc une fonction ici comme argument, comme valeur. Et puis lorsque vous appuyez sur ce bouton, sur le bouton d' exécution, dans ce cas, la fonction que vous avez ici sera exécutée. Supposons donc que nous ayons ici une fonction qui consiste à convertir des kilomètres en miles. Disons que cette fonction pour le moment imprime simplement du texte. Imaginons le succès, par exemple, parce que vous savez qu'avant d'écrire votre propre programme, il est bon d'utiliser des instructions imprimées pour essayer des choses. Cela vous permet donc d' isoler vos problèmes. Si quelque chose se produit ici, vous savez que vous ne pouvez pas avoir problème avec une instruction d'impression, mais s'il s'agit d'une expression plus complexe, il devient plus difficile de savoir si le problème se produit ici, si vous ne pointez pas sur la bonne fonction ou si vous avez un problème avec votre instruction. Il est donc conseillé d'utiliser d' abord des instructions simples, comme la déclaration d'impression. Donc, vous devriez aller ici et parcourir 2 miles, c'est la fonction. Et une chose que vous devez garder à l'esprit, c'est que vous ne devez pas passer entre crochets ici. Il ne s'agit donc pas d'un appel de fonction habituel. Vous faites simplement référence à la fonction ici et laissez Python s' occuper du reste Le nom de la fonction se trouve donc ici et essayons-le. Exécutez, et vous verrez que le succès est imprimé ici. Appuyez à nouveau, succès, succès, succès. Donc ça marche. Cependant, il n'est pas nécessaire d' afficher le succès dans la ligne de commande. Nous voulons imprimer une valeur dans la zone de texte. Maintenant, nous devons regarder le widget de saisie. C'est ici que nous allons obtenir la valeur, donc l'utilisateur saisit une valeur dans le widget de saisie, puis nous saisissons cette valeur, puis nous utilisons cette valeur dans notre fonction. Et pour cela, il existe un paramètre appelé variable de texte. Et cela équivaudrait à un objet string var, que nous devons déclarer plus haut ici. Supposons donc que vous vouliez une valeur, donc c'est variable, et ce serait égal à la fonction string var. Ensuite, nous pointons sur E une variable de valeur, que nous venons de créer. Cette variable obtiendra donc la valeur en fonction de ce que l'utilisateur saisira dans le widget de saisie. Ensuite, nous pouvons utiliser cette valeur comme bon nous semble. Supposons que nous voulions l' imprimer en valeur, et que nous devions également ajouter quelque chose de plus ici, qui est une méthode get de l'objet chaîne. Il s'agit donc d'un objet spécial. Ce n'est pas une chaîne, c'est une chaîne de jeu en Python. Pour obtenir une chaîne réelle à partir de cet objet, nous devons appliquer la méthode G. Alors sauvegardez ceci et essayez le script. Disons dix ici, exécutons, et nous en imprimons dix sur le terminal. Nous n'avons donc pas encore connecté cette chaîne ici à un widget de texte. C'est donc exactement ce que nous allons faire ici. L'idée ici est que nous devons insérer une valeur dans le widget de texte. Et pour ce faire, le widget de texte dispose d'une méthode appelée insert. Vous devez donc vous référer au widget de texte que vous souhaitez. Donc, T one est notre objet texte, puis appliquez la méthode d' insertion. Et la méthode obtient d'abord un argument, qui est un endroit où vous souhaitez insérer le texte. Supposons que nous voulions l'insérer à la fin du widget de texte. Supposons, par exemple, que vous insérez de nombreuses lignes de texte dans votre widget et que vous deviez appliquer cette méthode plusieurs fois Et à chaque fois si vous le mettez, vous entrez le nouveau texte en bas du texte existant. Vous dites donc de mettre ce texte à la fin. Vous voulez le point de valeur G. Donc, la chaîne de valeur que l'utilisateur saisira dans le widget de saisie. Voyons donc comment cela se passe. Exécutez la fonction et insérez du texte ici. Vous pouvez également y mettre n'importe quoi, exécuter et vous obtiendrez la chaîne imprimée dans le widget de texte. accord, mais nous ne voulons pas simplement saisir cette valeur et l' insérer dans le texte. Nous voulons d'abord faire quelque chose avec cette valeur, puis nous insérons le produit, la sortie dans le widget de texte. Supposons que nous saisissions le point obtenu par la valeur et que nous le multiplions par 1,6. Et ce serait des kilomètres. miles est donc égal à la valeur saisie par l' utilisateur multipliée par 1,6. Vous demandez donc à l' utilisateur de saisir des kilomètres, et 1 mile est égal à 1 kilomètre multiplié par 1,6, ce qui correspond en fait à 1,6 ou six. Je ne me souviens pas de la valeur exacte, mais vous voyez l'idée. Enfin, vous voudriez parcourir des kilomètres ici. Vous souhaitez donc insérer la valeur de sortie dans le widget, en toute sécurité. Et exécutez. Et je m'attends à une erreur ici. Disons dix. Oui, nous avons reçu une erreur. Ainsi, lorsque vous recevez des erreurs, n'essayez pas simplement de copier cette erreur, de la coller sur Google et d'essayer de voir ce que disent les autres. Vous risquez de perdre beaucoup de temps. Investissez plutôt du temps et essayez de comprendre cette erreur. Donc, ce que cela signifie, c'est une erreur de type. Impossible de multiplier la séquence par un nombre non entier de type float. Ainsi, une séquence peut être une liste peut être une chaîne, un tuple, etc. Python essaie de multiplier les séquences avec un nombre non entier qui est un nombre flottant. Donc, float est le nombre 1.6, et Python essaie de multiplier 1,6 par une séquence avec celui-ci ici. s'agit donc pas d'un nombre car la méthode G extrait en fait une chaîne d'un objet chaîne Et une chaîne ne peut pas être multipliée par un nombre de flux. S'il s'agissait de deux, il était possible de les multiplier. Par exemple, si vous multipliez M, la chaîne M par deux, vous obtiendrez Mimi Donc, mais vous ne pouvez pas me multiplier par 1,6 car cela n'a aucun sens. Quoi qu'il en soit, la solution est de convertir la valeur saisie par l' utilisateur en valeur flottante, et vous le faites en ajoutant la fonction flottante. Alors attention aux crochets. Vous voyez qu'il y a un soulignement sous le crochet et vous avez un soulignement ici. Cela signifie donc que ce support se ferme ici. Donc, tout semble correct, sûr et exécutez-le à nouveau, puis exécutez. Et nous obtenons le résultat attendu. Vous pouvez supprimer la fonction d'impression. Nous n'en avons plus besoin. Je pense que c'était un bon début avec la bibliothèque Kiner, et vous devriez maintenant être en mesure créer des interfaces plus avancées Cependant, nous allons créer une véritable interface utilisateur graphique avancée avec Kiner, qui interagira avec la base Ce sera donc un programme du monde réel Et pour l'instant, je vais juste vous donner un exercice lors la prochaine conférence afin que vous puissiez pratiquer un peu Kiner Et vous apprenez également à connaître certains aspects plus cosmétiques. Vous allez donc rendre le programme que nous avons conçu dans cette conférence, vous le rendrez plus attrayant visuellement et vous vous assurerez de vous salir les mains avec un peu de gentillesse Je te parlerai plus tard. 162. 161. Comment Python interagit avec les bases de données: Bonjour, et je suis heureuse de vous présenter cette nouvelle section du cours. Dans cette section, vous allez apprendre à interagir avec des bases de données via Python. Cela signifie que vous utiliserez des bibliothèques Python spécifiques et que vous allez exploiter une base de données à partir de Python en utilisant Python. Vous allez effectuer des opérations telles que l'insertion de données dans des tables de base de données Vous pourrez mettre à jour les données, supprimer et interroger les données de la base de données. Vous pouvez ensuite utiliser ces données dans votre programme Python. Python est capable d'interagir avec de nombreuses bases de données telles que MySQL, Post Graculocle ou SQLite Dans cette section, vous allez apprendre à interagir avec une base de données SQL Light et une base de données post-SQL. SQL Lite et PostGrasul sont différents en cela. SQLite n'est pas une base de données client-serveur. Il est plutôt intégré au programme final. Alors, qu'est-ce que cela signifie ? Eh bien, regardons ce programme. Si vous suivez la section précédente, vous savez que nous allons développer ce programme dans la section suivante. Lorsque vous cliquez sur un bouton ici, certaines données s'affichent, et ces données sont stockées dans la base de données SQL Lite. Contrairement à d'autres bases de données telles que Postgrad SQL, SQLite est basé sur des fichiers Toutes ces données sont donc stockées dans le fichier de base de données point DBFle Cela signifie donc que vous pouvez simplement donner ce programme à quelqu'un d'autre qui n'a pas installé SQLite, et il peut utiliser ce programme, afin qu'il puisse ajouter plus de données ici, mettre à jour les données et les supprimer, etc. Mais si vous avez ce programme dans une base de données SQL de troisième cycle, l'utilisateur à qui vous le confiez devra avoir installé PostgreSQL sur son ordinateur pour pouvoir exploiter Pensez donc à SQLite, une petite base de données, que vous pouvez qualifier de portable, mais elle est très populaire et post GrascUL serait plus approprié à utiliser dans une application Web Supposons donc que vous ayez des formulaires, vous obteniez des données de l'utilisateur sur votre site Web et que vous stockiez vos données dans une base de données post-GrascUL sur votre serveur Python est un programme qui obtient les données de vos formulaires sur le client du navigateur et les envoie dans votre base de données. Pour pouvoir interagir avec ces bases de données, vous devez disposer de deux bibliothèques, et ces bibliothèques servent d'interfaces pour envoyer du code SQL à la base de données, et la bibliothèque pour interagir avec une base de données SQLite s'appelle SQLite Three, et la bibliothèque pour fonctionner avec une base de données SQL post-grade est Psycho Donc, dans cette section, dans la prochaine conférence, je vais vous montrer comment travailler avec SQLite Three , puis nous passerons à psychopg two. Passons donc à autre chose. 163. 162. Se raccorder à une base de données SQLite avec Python: C'est bon. Dans cette conférence, vous allez apprendre à utiliser SQLite Three Acul Three est donc une bibliothèque Python permettant d'interagir avec les bases de données SQL Lite Considérez-le donc comme un wrapper Python de code SQL. Vous pouvez donc réellement écrire du code SQL dans Python en utilisant Ascoli Three Vous n'avez pas besoin d'installer Scull Three car SQLite Three est une bibliothèque Python intégrée Il vous suffit donc d'importer Cult Three. Laisse-moi le tester. Scénario 1. Oui, ça marche. Désormais, le processus standard d'interaction avec une base de données comporterait cinq étapes. Vous devez d'abord vous connecter à la base de données. Ensuite, vous créez un objet curseur, ressemble à un pointeur permettant d'accéder aux lignes d' une table d'une base de données. Ensuite, la première étape consiste à appliquer une requête SQL Vous souhaiterez peut-être insérer des données dans la base de données ou sélectionner des données dans la table, etc. Ensuite, la quatrième étape consiste à valider vos modifications dans la base de données, puis à fermer la connexion. Alors allons-y et écrivons un exemple avec les cinq étapes que je viens de mentionner. Donc, tout d'abord, vous devez créer une connexion, et vous souhaitez stocker cet objet de connexion dans une variable. Supposons donc C. Cela équivaudrait connexion à trois points culte. Et ce que vous transmettez ici est le fichier de base de données. Disons que c'est point DB. Et si vous n'avez pas encore de fichier de base de données, votre base de données sera créée par cette ligne de code et la connexion sera établie. Si vous avez une base de données, une connexion sera établie avec votre base de données existante aussi simplement que cela. Ensuite, vous devez créer un objet curseur, donc modifier la variable, et vous devez vous référer à votre connexion, puis à la méthode du curseur, qui est une méthode de l'objet de connexion. Jusqu'ici tout va bien, alors voici le code SQL proprement dit. Vous souhaitez pointer sur votre objet curseur, puis utiliser la méthode d'exécution. Et puis entre crochets trouve l'endroit où vous entrez votre code SQL. N'oubliez pas que votre code SQL se trouve toujours dans le code. Vous transmettez donc du code SQL sous forme de chaîne à la méthode d'exécution de l'objet curseur de la bibliothèque SQL Lite Three. Donc, si vous connaissez le SQL, cela devrait être facile pour vous. Si vous n'êtes pas familier avec le SQL, le SQL est assez simple, vous pourrez donc l' apprendre assez rapidement. À ce stade, nous avons une base de données, mais nous n'avons aucune table dans la base de données car une base de données est composée de tables et les tables ont des lignes et des colonnes. Vous devez donc d'abord créer une table. Et une bonne pratique consiste à utiliser des majuscules pour les mots clés SQL. Create est donc un mot clé ASCl. Table est également un mot clé ASCuL. Ensuite, vous souhaitez spécifier le nom que vous souhaitez donner à la table. Disons magasin. C'est ainsi que vous ordonnez à Python VASqul de créer une table, mais vous devez ensuite spécifier les colonnes champs que vous souhaitez inclure dans votre Supposons donc que nous créions une table. Nous avons un magasin, nous avons un magasin et nous voulons stocker nos produits dans une table de base de données SQL. Nous voudrions donc avoir l'article. Ce serait donc le nom de l'article. Et l'élément serait de type de données texte. Le texte est donc comme des chaînes en Python, et vous voudriez avoir une quantité. Et ce serait un entier. Alors, combien de cet article avez-vous dans votre magasin et le prix également. Et disons réel pour le prix, qui devrait être un flottant en Python. Donc, un nombre décimal. C'est ça. Ici ferme le code du code SL, et voici le dernier crochet de la méthode d'exécution. Vous devez ensuite valider ces modifications dans la base de données. Vous vous référez donc à la connexion, puis vous validez, puis vous souhaitez fermer la connexion. Alors c'est tout. Vous l'enregistrez et vous vous lancez dans l'exécution. Qlite n'est pas défini, bien sûr, car j'ai commis une erreur ici chez Typo Et encore une fois, comme vous le voyez, une base de données a été créée. Maintenant, si vous réutilisez le programme, vous obtenez un message d'erreur car la table existe déjà dans la base de données. Donc, ce que vous pourriez faire ici est une astuce simple. Vous devez ajouter du code dans votre ligne SQL. Vous dites de créer une table si elle n'en existe pas. Tellement sûr. Et si vous reprenez votre code maintenant, rien ne se passera car Python va se connecter à la base de données, puis créer un curseur. Et puis s'il y a une table appelée store, elle ne fait rien, et elle passe à la ligne suivante. S'il n'y avait pas de table, cela créerait une table. Il est donc bon d'avoir ce simple conditionnel ici dans le code SQL. Pourquoi ne pas ajouter des données à notre table vide ? Essayons ça. C exécute. Nous exécutons donc à nouveau du code SQL, et le mot-clé qui insère les données dans la base de données est insert. Ensuite, vous devez spécifier endroit où vous souhaitez insérer les données. Insérez donc dans le magasin. Et quelles valeurs souhaitez-vous insérer dans le tableau de votre boutique. Donc, vous ouvrez les crochets et à l'intérieur des crochets, vous entrez les valeurs dans le bon ordre. Donc, dans l'ordre dans lequel vous avez défini vos colonnes, vous aurez la quantité et le prix des articles, et disons un verre à vin. Maintenant, il s'agit d'une chaîne, elle doit donc être placée entre guillemets. Et vous devez utiliser des guillemets simples ici, car vous utilisez des guillemets doubles pour l'expression extérieure. Donc, si vous utilisez des guillemets doubles ici, vous allez confondre Python et vous allez donc utiliser des guillemets simples. C'est pourquoi nous avons différents types de guillemets pour entourer les chaînes. Nous avons donc le verre à vin à cordes, et disons que nous en avons une quantité de huit pour un prix de 10,5 Enregistrez cela et allez-y et exécutez. Nous n'avons pas reçu d'erreur, c'est donc un succès. Et si nous voulions insérer une autre ligne ? Eh bien, nous pourrions ajouter cette ligne ici en dessous. Mais ensuite, lorsque nous exécutons le code, cette ligne est également exécutée. Nous aurions donc une copie de cette ligne. Par conséquent, ce que nous pourrions faire dans ce cas, c'est utiliser une fonction pour encapsuler nos instructions SQL distinctes. Vous pouvez donc indenter ce bloc de code si vous le souhaitez, vous pouvez accéder à l'indentation des lignes, ou vous pouvez utiliser un raccourci, qui peut être spécifique à votre Il suffit donc de regarder ici votre raccourci clavier, puis vous pourrez simplement l'utiliser. Donc, la raison pour laquelle j' utilise le bloc de code est que je veux créer une fonction ici Disons que la fonction crée une table. N'oubliez pas la colonne qui s'y trouve. Et puis je veux une fonction séparée. Pour les données insérées. Ce serait donc l' instruction SQL pour la fonction d' insertion, mais vous pouvez voir la différence entre cette fonction et cette fonction. Ici, nous ne créons pas de connexion à la base de données, ce qui est faux. Vous devriez donc insérer ces lignes ici. Pour établir une connexion avec la base de données. Ensuite, vous fermez correctement cette connexion. Vous savez donc comment utiliser les fonctions Python maintenant. Et naturellement, il est nécessaire de passer des paramètres à votre fonction ici. Vous voulez donc dire article, donc juste quelques variables et quantité. Prix. Ensuite, vous voudriez remplacer ces paramètres ici afin que chaque fois que vous appelez la fonction, vous insériez des arguments et ces valeurs soient insérées dans votre table. Vous pouvez désormais utiliser des espaces réservés aux chaînes, espaces réservés aux chaînes Python pour remplacer ces valeurs par les valeurs que l'utilisateur transmettra lorsqu'il appellera la fonction Mais ce n'est pas une bonne pratique car votre code serait sujet aux injections de SQL provenant de prostituées, et cela s'applique lorsque, bien entendu, votre application Web est sur le Web Quoi qu'il en soit, une bonne pratique consiste à mettre des points d'interrogation ici. Ensuite, après l' instruction SQL, après le double code, vous devez transmettre les variables par lesquelles ces points d'interrogation peuvent être remplacés. Vous voudriez donc un article, donc dans la bonne quantité et au bon prix de commande. Essayons donc tout cela maintenant. J'aimerais exécuter la fonction d' insertion que je viens de créer avec de nouveaux éléments. Disons donc de l'eau, du verre, nous en avons dix, et ce serait moins cher. Enregistrez cela et lancez l'exécution. J'ai commis une terrible erreur ici. J'ai encapsulé avec du code tous les arguments. Le verre à eau doit donc être placé à proximité, et ce sont des chiffres. Enregistrez donc à nouveau et réessayez. Et vos données doivent être répertoriées dans la base de données. Alors encore une fois, disons tasse à café. Exécutez à nouveau en toute sécurité. Maintenant, je suis sûr que vous voudriez voir les données que vous avez insérées dans votre base de données dans votre table Créons donc une fonction qui fasse exactement cela. Disons une vue en profondeur. Et vous souhaiteriez établir une connexion avec la base de données. Donc, copions-le. Collez-le ici, puis voici le code SQL, donc cur execute. Nous utilisons donc toujours la méthode execute pour envoyer du code SQL à la base de données. Et puis nous avons des citations. Supposons que nous voulions sélectionner les données de toutes les colonnes de la table des magasins. Sélectionnez donc un astérisque, ce qui signifie « tout depuis le magasin C'est bon. Nous les avons donc sélectionnés, mais comment pouvons-nous réellement récupérer ces données afin de pouvoir les utiliser en Python Eh bien, la façon de les récupérer est d'utiliser les méthodes fetch all Et nous voulons choisir de stocker ces lignes dans une variable. Supposons donc que les lignes récupèrent tout. Ensuite, nous devons fermer la connexion. Ainsi, contrairement aux autres méthodes où nous écrivions des données dans aux autres méthodes où la table, nous ne faisons ici que sélectionner des données, nous n'avons donc pas à utiliser la méthode de validation. Et nous voulons renvoyer la variable rose. Et j'aime juste imprimer le résultat de la fonction. La sortie de la fonction est donc variable en rose. Je vais donc faire imprimer la valeur de la rose sur la ligne de commande. Enregistrez le script, exécutez-le. Bien sûr, j'ai une faute de frappe et je dois être renvoyé. Essaie à nouveau. Et voici nos données. Nous avons donc un verre à eau en verre et deux gammes de tasses à café. C'est parce que nous avons exécuté la fonction plus tôt, la fonction d'insertion, et maintenant que j'ai réexécuté le script but d'exécuter la fonction de vue, la fonction d'insertion a également été exécutée pour la deuxième fois. Une tasse à café a donc été insérée deux fois dans la table. Très bien, c'est pour cette conférence. Dans la prochaine conférence, je vais vous montrer d' autres opérations vous pouvez effectuer avec la base de données. Je te parlerai donc plus tard. 164. 163. SQLite : sélection, insertion, suppression et mise à jour d'enregistrements SQL: Dans la conférence précédente, je vous ai donc présenté la bibliothèque SQLite Three, et je vous ai montré comment créer une table dans votre base de données SQL comment insérer des données dans votre base de données et comment sélectionner des données et les afficher en Python Nous avons donc ces quatre lignes, quatre lignes dans notre table de base de données. Dans cette conférence, je vais rapidement vous montrer comment supprimer et mettre à jour les données de votre tableau. Encore une fois, je vais créer une fonction, alors laissez-moi la copier. Nous devons encore nous connecter à la base de données et créer un objet curseur. Ensuite, nous devons utiliser la méthode d'exécution. Et dans ce cas, je voudrais supprimer la ligne contenant le verre à vin. Donc, dans Execute, nous écririons, supprimerions du magasin où l'élément est égal, j'aimerais utiliser un espace réservé au point d' interrogation ici Donc, marquez et entre crochets, nous voudrions le paramètre que nous voudrions transmettre à travers notre fonction. Donc, cet élément est celui que nous avons mis ici, élément, et laissez-moi changer le nom de notre fonction. C'est donc celui-ci. Ne le confondez pas avec ça. Il s'agit de la colonne de notre tableau, et c'était la ligne de la fonction précédente. Supprimez-le également. Et vous souhaitez également valider les modifications apportées à votre base de données. Alors engagez-vous. Alors c'est tout. Et j'aimerais commenter cela afin de ne pas réexécuter la fonction d'insertion. Et je veux que la fonction d'affichage soit exécutée après avoir supprimé la ligne. Supprimez donc. Alors, quel article voudriez-vous supprimer ? Donc, l'article : verre à vin. Et voyons ce qui va se passer. Nous avons reçu une erreur et nous vous demandons trois erreurs, le numéro de reliure fourni est incorrect. Ligne 28, je vois bien que oui, il y a quelque chose que j'oublie souvent. Vous devez ajouter un coma ici. Vous le verrez lorsque je vous apprendrai comment vous connecter à une base de données postgrascule et comment interroger les données de la base de données postgrascule Le code est assez similaire, mais il comporte quelques modifications critiques, comme celle-ci ici. Cela peut donc être source de confusion lorsque vous travaillez avec différents types de bases de données. Essayons encore une fois. Et cela semble fonctionner maintenant. Wineglass n'est pas là. C'est ainsi que vous supprimez une ligne. Ajoutons maintenant une autre fonction. Pour mettre à jour les données. Dans celui-ci, j' aimerais mettre à jour la quantité de lunettes photo. Je veux donc changer cela 10-11. Encore une fois, vous établissez votre connexion à la base de données, créez un objet curseur, puis vous l'exécutez, et vous entrez ici la commande SQL de mise à jour. Donc, mettez à jour ce que vous voulez mettre à jour, c'est la table du magasin. Et quelle colonne souhaitez-vous mettre à jour à partir de la table des magasins ? Vous souhaitez donc définir le nom de la colonne, qui dans ce cas serait la quantité. Et ça équivaudrait à quoi ? Devinez quoi ? interrogation. Et puis vous dites : où ? Ou laissez-moi vous montrer comment mettre à jour plusieurs colonnes. Donc, si vous vouliez plus d'une colonne, vous utiliseriez une virgule, puis vous diriez que prix est égal à un autre point d' interrogation Bien, donc nous disons mettre à jour, stocker et définir la quantité et le prix, mais quelle ligne ? Vous devez donc spécifier le conditionnel ici. Donc, notre article est égal à un verre à vin. Vous pouvez également définir ce paramètre sur un point d'interrogation. Vous avez donc trois espaces réservés ici, puis vous avez le devis pour clore votre relevé cL, puis entre crochets, vous voulez transmettre les paramètres quantité, et vous en avez un second qui porte sur le prix et l'article. Lorsque vous avez plusieurs paramètres ici, vous ne mettez pas de virgule à la fin, donc cela se termine ainsi Vous souhaitez également transmettre ces paramètres ici afin qu'ils reflètent l'entrée de votre fonction. Nous sommes donc en train mettre à jour le tableau des magasins et définir la valeur de la colonne des quantités et de la colonne des prix sur ces valeurs, mais uniquement pour les lignes où l'article sera égal à une valeur donnée. Nous donnons donc cette valeur à celui-ci ici et les deux premières à ceux-ci. Tu as compris l'idée. Enregistrez le script et vous devez l'appeler ici. Permettez-moi donc de le commenter et de le mettre à jour. Alors, quelle quantité souhaitez-vous transférer ? 11, disons. Et le prix était de cinq. Disons que cela passerait à six, et quel élément souhaitez-vous mettre à jour ? Un verre à eau ? C'est ça. Enregistrez votre script et essayez-le. Et nous avons mis à jour ces valeurs comme prévu. C'est ce que je voulais vous apprendre dans cette conférence. Il pourrait être plus pratique d'avoir une pièce d'identité ici. Nous parlons donc de quantité et prix lorsque l'identifiant est égal à un chiffre. Nous n'avons donc pas à transmettre le nom complet, Nous n'avons donc pas à transmettre le nom complet ce qui peut prêter à confusion ou inciter les porteurs à le porter Dans ce cas, nous voudrions modifier le tableau ici et ajouter une clé primaire qui s'incrémente toutes Mais vous apprendrez à le faire dans la section suivante du cours. Je vais donc vous montrer comment créer le programme du monde réel, et nous l'implémenterons dans ce programme. Il s'agissait donc de quelques exemples triviaux, et vous en aurez une bien meilleure idée dans la section suivante Ensuite, nous passerons au SQL de troisième cycle et nous travaillerons avec la bibliothèque cycle PG two. À plus tard. 165. 164. Base de données PostgreSQL avec Python: Bienvenue à cette conférence. Nous en avons terminé avec SQLite 3, donc j'espère que vous avez pu créer ce script que je vous ai montré lors des conférences précédentes Parce que dans cette conférence, nous allons utiliser ce script, mais je vais le modifier pour qu'il soit compatible avec l'interaction avec des bases de données SQL de niveau supérieur. Heureusement, la majeure partie du code est la même avec quelques légères modifications. Bien sûr, nous aurions besoin d' une autre bibliothèque appelée Psycho PG two Ensuite, nous allons récupérer les méthodes de cette bibliothèque. Et contrairement à SQLite Three, Psycopg Two doit être installé, il s'agit donc d'une bibliothèque tierce Il ne s'agit pas d'une bibliothèque Python intégrée. Vous devez donc installer psychopg two, et vous avez également besoin de Postgrad QL installé sur votre ordinateur Donc, dans cette conférence, j'aimerais également vous montrer comment installer PostGraql et psychopg C'est bon. Ceci est la page Web officielle de PostgreSQL et vous pouvez simplement accéder aux téléchargements ici. Ensuite, vous devez trouver votre système d'exploitation. PostGraqul fonctionne donc sur Mac, Linux et Windows, ainsi que sur Solaris Je suis donc sous Windows. Je vais simplement cliquer sur Windows, et lorsque vous installez PostGrasul, vous installez également PG Admin Three, un outil graphique dans lequel vous pouvez voir vos Vous connaissez MySQL, PG admin est l'équivalent de PHB Madmin Post grad QL est également fourni avec un Stack Builder, un package que vous pouvez utiliser pour télécharger et installer d'autres extensions SQL post-grade. Supposons donc que vous souhaitiez une extension pour les données spatiales, afin de les stocker dans PostQL afin de pouvoir les utiliser pour des applications JS Il existe donc une extension pour cela appelée Post GS. Bref, je vais vous montrer comment installer les extensions. abord, vous devez télécharger PostgreSQL et je suis sous Windows, je vais donc cliquer dessus Et je vais attendre un moment jusqu'à ce que mon téléchargement soit terminé. Je vais donc passer rapidement en revue le processus d'installation. me demande donc simplement où je veux installer Post grass QL et où mes données seront stockées. Et ici, vous devez faire attention à ces informations d'identification. Donc, votre superutilisateur, ceux qui ont le plus de privilèges sur vos bases de données, et votre nom de superutilisateur est Postgres, et j'aimerais en fait créer un Un fichier texte juste pour enregistrer mes informations d'identification. J'aimerais aussi dire le mot de passe. Un, deux, trois. Très bien, je saisis Postgress 1, 2, 3 comme mot de Ensuite, il s'agit d'un port de votre serveur ou de votre serveur de base de données. Je voudrais donc également en prendre note. Il s'agit de votre paramètre local, je vais donc laisser ce paramètre par défaut. Et vous n'aurez qu'à attendre un moment jusqu'à ce que l' installation soit terminée. Très bien, c'est réussi. Maintenant, si vous souhaitez lancer Stock Builder pour installer des extensions pour la base de données d'échelle supérieure, vous voudrez peut-être la faire vérifier pour qu'il s' agisse de mon serveur de base de données. Et ici, vous avez un tas d'extensions que vous voudrez peut-être installer, par exemple des extensions spatiales, et vous avez Post gs pour 32 bits et Post Gs pour 60 pour bits. Si je clique sur Suivant, cela me dit qu'ils ont besoin d' au moins un package pour être installés. Permettez-moi d'installer Post gs. Très bien, acceptez la licence Poss, puis passez à la suivante Cela m'interroge sur DEL, qui est une autre interface pour les données SIG. D'accord, il était difficile d' installer des extensions externes. Si vous souhaitez revenir à Stack Builder plus tard, votre Stack Builder devrait se trouver ici ou vous pouvez simplement accéder à Postgres SQL Nous avons également PG admin, et voici le générateur de balises d' applications accord, mais si vous voulez travailler avec Python, vous devez accéder aux bases de données PostGraqul via Python, afin de ne pas avoir à interagir avec ces La façon d'interagir avec PostgrasQUL avec Python est d' installer Psycho PG two, et vous pouvez installer psychopg two et vous pouvez installer psychopg Cependant, vous pouvez rencontrer des problèmes car Cyclopedia Two est écrit en C, vous avez donc besoin d'un compilateur C installé sur votre système sous Windows, au moins, vous n' avez pas ce problème sur Mac et Linux, j'en suis sûr La solution à cela, il existe en fait quelques solutions. L'une des solutions est que vous voudrez peut-être installer un studio visuel sur votre machine Windows, mais c'est un programme assez volumineux et je ne voudrais pas l' installer. La deuxième solution, que je préfère le plus, est donc que je préfère le plus, est d'utiliser des bibliothèques Python pré-compilées. Et vous pouvez trouver presque toutes les bibliothèques Python qui nécessitent un compilateur C. Vous pouvez trouver ces bibliothèques sur cette page gérée par Christoph Goldke Nous recherchons donc un appel SIP. PG 2. Vous avez ici les dossiers des roues. Un fichier de roue est donc un fichier qui peut être installé avec PIP. Alors, que faites-vous lorsque vous installez quelque chose avec PIP PIP install Psycho BG two. PIP télécharge le fichier We depuis un serveur distant, puis il l'installe dans votre système Vous pouvez donc rechercher votre version ici. Ce serait le fichier pour mon système. Il suffit donc de le récupérer d' ici et de le coller ici pour que je puisse y accéder depuis la ligne de commande atom. Voici donc le fichier que je viens de télécharger. Alors allez-y et installez pip, puis vous devez pointer vers le fichier Well Ce sera donc Oliged. Et cela a été installé avec succès. Je peux vérifier rapidement si c'est disponible. Et ça a l'air de fonctionner. Vous pouvez également vérifier la version de votre bibliothèque si vous le souhaitez. C'est donc 2,6 0,1. Bien, dans la prochaine conférence, nous nous connecterons à la base de données à la base de données post gradsqll, puis nous créerons des tables et insérerons des données, les visualiserons, les supprimerons et les mettrons à jour Passons donc à autre chose. 166. 165. PostGreSQL : sélection, insertion, suppression et mise à jour d'enregistrements SQL: Très bien Dans cette conférence, vous apprendrez à vous connecter à une base de données Post GradeSCL et à créer des tables dans une base de données post-gradescule, à stocker des données, à afficher des données, ainsi qu'à supprimer et mettre à jour des supprimer et Le script que vous regardez maintenant est un script que vous avez créé dans leçons précédentes à l' aide de la base de données SQLi Donc, si vous n'avez pas regardé ces conférences, je vous recommande vivement de les lire d'abord, puis de venir ici. Parce que dans cette conférence, je vais simplement parcourir ce code et n'en remplacer que quelques lignes, ce qui suggère que le code que vous utilisez pour bibliothèque Q 3 est très similaire au code que nous utiliserons pour psycopg two, une bibliothèque que vous utilisez pour vous connecter aux bases de données Postgrascue La principale différence est que votre base de données ne sera pas un fichier de base de données stocké dans votre système de fichiers. Il s'agira d'une base de données intégrée à votre installation post-grascule La première exigence est donc que vous ayez une base de données existante sur votre serveur de base de données. Post grass SquL est fourni avec une base de données par défaut. Ainsi, une fois que vous aurez installé PostgreSQL, vous aurez une base de données appelée PostGres Vous pouvez donc simplement transmettre la base de données ici, ou si vous le souhaitez, créer votre propre Il vous suffit donc d'accéder à votre installation de PostgreSQL et de créer une base de données via PG Voici donc vos serveurs de base de données, et celui-ci est un serveur par défaut. Vous devez d'abord vous connecter à votre serveur de base de données. Que ce soit le mot de passe que vous avez créé lors de l'installation de Postgress PostGress 123 m'appartenait. C'est bon. J'ai donc été connecté avec succès et j'ai trois bases de données. C'est donc la base de données par défaut dont je parlais, et ce sont deux autres bases de données que j'ai créées. Donc, pour créer une nouvelle base de données, il suffit de cliquer avec le bouton droit de la souris sur les bases de données et sur la nouvelle base de données. Supposons la première base de données, et vous devez spécifier le propriétaire, c'est-à-dire l'utilisateur de votre base de données. PostgreST est ce que j'ai spécifié lorsque j'ai installé Postgres UL, cela devrait suffire Très bien, vous avez maintenant une base de données ici. Si vous cliquez dessus, vous vous y connecterez. Maintenant, vous pouvez simplement le fermer et revenir à Python. OK, permettez-moi d'abord de commenter ces lignes afin que lorsque j'exécute le script, ces instances de fonction ne soient pas appelées. Nous avons donc une base de données vide. La première chose que nous aimerions faire est donc de créer une table. Mais tout d'abord, j' aimerais également changer cela. Psycopie 2. Et bien sûr, j'aimerais remplacer par lots le SQ L trois, le remplacer par le PG deux. Je veux donc que tous ces noms de bibliothèques soient remplacés par Pycopg two Remplacez donc tout et appuyez simplement sur Escape. Cela disparaît. Heureusement, ce code est le même que celui de la bibliothèque SQLite Three. Nous avons donc connect, puis nous avons l'objet curseur, puis nous avons la méthode d'exécution commit et close. Il suffit de modifier les paramètres ici. Ici, nous voudrions transmettre le nom de la base de données, le nom d'utilisateur, l'hôte, le mot de passe et le numéro de port de votre serveur de base de données. Et tout cela entre guillemets. Il est donc transmis sous forme de chaîne à la méthode connect. Tout d'abord, nous avons un nom de base de données. Donc, le paramètre dbname sera égal à une valeur Vous devez donc insérer la valeur entre guillemets simples. C'est donc une base de données. Eh bien, le nom de la base de données. Ensuite, vous avez un utilisateur, et sachez que vous n'avez pas besoin d'utiliser des virgules ici Tout cela se présente donc sous forme de chaîne et il est lu sous forme de chaîne par la méthode connect. Donc, l'utilisateur entre guillemets, publie grass, puis nous avons le mot de passe, post grass, un, deux, trois, puis vous avez le nom d'hôte, donc le paramètre d'hôte. Cela devrait être un hôte local. C'est bon. L'hôte local doit donc être votre nom d'hôte et c'est toujours comme ça. Enfin, nous avons le numéro de port, qui figure également entre guillemets. Donc 532 Ce sont donc les paramètres que vous transmettez à votre méthode de connexion ou à la bibliothèque cycle PG two. Essayons alors d' appeler cette fonction. Créer une table est donc une fonction, et je vais enregistrer le script. Alors laissez-moi m'assurer que vous êtes au courant de ce qui se passe ici. Nous nous connectons donc à la base de données, puis nous avons les mêmes méthodes pour la bibliothèque cycle PG two. Nous créons donc un magasin de noms de table, puis nous avons trois colonnes pour cette table. Nous validons ces modifications et nous fermons la connexion. Enregistrez donc le script. Contrôlez S. Alan, appelez le script. Et ça a l'air d'être une réussite. Si vous le souhaitez, vous pouvez simplement aller chez PG at Mean. Et ici, vous pouvez voir le tableau que vous venez de créer. Il suffit donc d'entrer le mot de passe et vous devez accéder à votre base de données. Donc, base de données 1, développez-la. Ensuite, vous devez accéder aux schémas, aux tables publiques. Et voici le nom de notre table. Nous avons donc le tableau du magasin, et vous avez trois colonnes, quantité des articles et le prix. C'est bon. Nous avons une table vide, alors allons-y et insérons des données dans cette table. Je vais simplement copier cette chaîne de connexion et la coller. Ici. N'oubliez pas que nous utilisons des points d' interrogation lorsque nous insérons des valeurs correspondant à trois valeurs. Si vous le souhaitez, vous pouvez utiliser des espaces réservés pour le formatage des chaînes Donc un pour l'article, un pour la quantité et un autre pour le prix. Ensuite, après la virgule, laissez-moi retarder cela. Après le guillemet, désolé, vous transmettez le pourcentage, vous connaissez donc déjà le formatage des chaînes, puis vous spécifiez le tuple des variables dans lesquelles vous souhaitez insérer Donc, quantité et prix de l'article. Vous pouvez donc l'utiliser, mais cela serait sujet aux injections de SQL de la part de tuckers Ce n'est donc pas une bonne idée. Je peux aller de l'avant et exécuter cela juste pour voir ce qui se passe. Disons donc avril, 10 et 15 avril pour le prix. Et laisse-moi exécuter ça. Cela semble donc avoir fonctionné, et nous pouvons le vérifier dans le tableau ici. Vous pouvez donc simplement accéder à votre base de données, qui est la base de données 1. Et ici, vous pouvez exécuter une simple requête SQL, tout sélectionner depuis le magasin passer à Exécuter et vous verrez qu' Apple a été ajouté à la table. Cela fonctionne donc, mais il est risqué d' utiliser le formatage de chaînes Python. Donc, ce que vous voulez faire, c'est que je vais juste le laisser là pendant un moment pour que vous puissiez comparer les choses et pour éviter les injections de crâne, vous devriez en fait transmettre vos variables en tant que deuxième paramètre à la méthode d'exécution Donc, qu'est-ce que cela signifie, c'est que vous n'avez pas à utiliser d'odes, vous devez donc simplement passer le pourcentage S, juste comme ça. Ensuite, vous mettez une virgule ici pour que cette chaîne entre guillemets soit un argument, puis celui-ci soit l'autre argument Ensuite, vous transmettez vos variables, donc cela devrait fonctionner maintenant. Donc je suis sûr que vous pouvez voir la différence entre ceci et cela. Et je vais juste le commenter pour qu'il ne soit pas exécuté. Et disons orange. Même prix et même quantité exécutés. Et passons à l' enregistrement de PG Mad Man. Permettez-moi donc d'exécuter à nouveau la requête. Et vous voyez que les oranges sont ajoutées en tant que neuro à la table. C'est donc la voie à suivre et je vais le supprimer. C'est bon. Examinons maintenant la fonction d'affichage. Ainsi, la fonction d'affichage se connecte à la base de données et sélectionne toutes les lignes de la table de stockage. Ensuite, nous stockons ces lignes dans la variable de ligne en utilisant la méthode fatale. Ensuite, nous renvoyons ces lignes sous forme de sortie de fonction. Tout ce que vous devez changer ici est l' argument de la méthode de connexion. Il suffit donc de les mettre ici. Et ça devrait être bon d'y aller. Permettez-moi donc de voir, d'appeler la fonction et de l'exécuter. Et oui, il faut l'imprimer. ai oublié. Ouais. Nous avons donc April et trois oranges maintenant parce que, juste au moment où j'ai exécuté le script ici, j'ai réexécuté la fonction d'insertion, donc nous avons obtenu deux oranges et une autre lorsque vous utilisez des espaces réservés pour le formatage de chaînes Donc, vous avez compris l'idée. Regardons la suppression. Fonction. Encore une fois, nous devons transmettre les arguments de psychopg two connection Ensuite, nous avons supprimé du magasin où se trouve l'article. Encore une fois, nous ne pouvons pas utiliser de point d'interrogation, nous devons donc utiliser des pourcentages Et puis comme deuxième argument, nous passons la variable item. C'est donc la même chose que dans le troisième chapitre, mais nous utilisons des pourcentages ici Et laissez-moi appeler Delete. Je vais le commenter et le supprimer ici. Donc, ce que vous voulez supprimer, c'est l'article, quel article ? Supposons que nous voulions supprimer les lignes où l'élément est égal à orange. Voyons donc comment cela se passe. Oui, l'article a été supprimé. Les lignes contenant l'élément orange ont été supprimées et la fonction d'affichage a été exécutée Nous avons donc une ligne maintenant. Notre tableau ne comporte qu'une seule ligne. Voici un bref aperçu de la méthode de mise à jour. Juste comme ça. Et ici, nous mettons à jour le tableau des magasins, et voilà que nous définissons . Nous mettons donc à jour la quantité à cette valeur et le prix également à cette valeur où l' article est égal à cette valeur. Très bien, nous avons donc une, deux, trois valeurs et nous passons trois variables ici après la virgule Ainsi, en tant que deuxième argument de la méthode execute, la méthode de mise à jour obtient trois arguments. Permettez-moi donc de commenter et de mettre à jour, nous n'avons qu'une seule ligne. J'aimerais donc régler la quantité de pommes à 20, disons. Et le prix, maintenons le même prix. Et pour ce qui est de l'article, Apple aime ça et exécute. Et nous avons fait passer la quantité à 20. C'était donc ça. Je crois que c'était très simple. Donc, si vous avez appris S comme trois auparavant, c'était assez simple pour vous. Et si vous avez des questions, n'hésitez pas à les déposer dans la section de discussion. Je me ferai un plaisir de répondre. Rendez-vous lors de la prochaine conférence. 167. 166. App 6 : application d'inventaire de livres: Bienvenue dans cette nouvelle section. Et dans cette section, vous allez apprendre à créer un véritable programme qui permet l'utilisateur de stocker des informations sur les livres. J'ai donc déjà créé ce programme, et je vais vous montrer étape par étape comment vous pouvez faire de même. J'ai le programme ici, et c'est un fichier exécutable. Ainsi, en plus d'apprendre à créer le programme point pi, vous apprendrez également à créer des fichiers exécutables qui s'exécutent sous Windows et des fichiers d'application point qui s'exécutent sur un Mac. Vous pouvez donc donner votre programme à n' importe qui sans qu'il ait besoin d'installer Python sur son ordinateur. J'appelle donc le programme Bookstore. Et cela a été construit principalement avec Kinte, qui est une bibliothèque d'interface utilisateur graphique, et la bibliothèque ASQ Light Three, qui est une bibliothèque permettant d'interagir avec la base de données ASQE Nous avons donc quatre entrées lesquelles vous pouvez saisir un nouveau record comptable. Supposons que vous ayez un nouveau livre dans votre boutique et que vous souhaitiez l' ajouter à votre base de données. Et ici vous pouvez voir tous les livres qui ont été ajoutés au programme. Vous pouvez ajouter un nouveau livre, disons Pythons pour le titre rdt quickly and 1918 Vous avez le numéro ISBN, qui est le numéro d'identification unique des livres. C'est assez long. Supposons que vous ajoutiez une entrée, puis que vous consultiez tout à nouveau et vous verrez que la nouvelle entrée a été ajoutée à la base de données. Ainsi, chaque enregistrement que vous voyez ici est en fait stocké dans une table à l'intérieur de cette base de données Light one. Ensuite, vous avez d'autres boutons ici. Donc, si vous le souhaitez, vous pouvez réellement rechercher une entrée pour un enregistrement, rechercher une entrée, puis l'entrée que vous recherchez s' affichera . Lorsque vous cliquez sur l'entrée, vous obtenez tous les champs affichés dans chacun des manuels ici Résolvez tout à nouveau, et vous pouvez également mettre à jour et supprimer des enregistrements. Enfin, vous pouvez fermer la fenêtre. Ce n'est donc pas une excellente interface utilisateur. Je ne suis pas un grand concepteur d' interface utilisateur, mais on apprend beaucoup en développant ce programme. C'est donc une question assez longue , mais elle portera ses fruits. Alors allons-y. 168. 167. Conception de l'interface utilisateur: Bonjour. Et dans cette conférence, vous allez commencer à développer notre programme de librairie Plus précisément, nous allons travailler sur l'interface utilisateur graphique parce que, vous savez, ce programme comporte deux parties, pour ainsi dire. Il a donc un backend et un front-end. Le backend est le code de base de données Sculi Three. Donc le code qui interagit avec la base de données. Et le front-end est le code de la bibliothèque Tkinter. Donc, le code qui crée tous ces boutons, ces entrées, ce texte, cette zone de liste et cette barre de défilement. Donc, normalement, vous devez choisir si vous voulez d'abord travailler sur le code principal ou commencer à créer le code frontal. Mais tout d'abord, la toute première chose que vous voulez faire est de commencer à définir certaines exigences. Vous voulez donc dire ce que fera votre programme. Supposons donc que vous souhaitiez que votre programme affiche une liste des enregistrements actuels. Ainsi, lorsque vous appuyez sur VO, vous voyez la liste des enregistrements ici. Ensuite, vous voulez que votre programme recherche une entrée en cours, puis vous voulez ajouter Andrea, mettre à jour et sélectionner les données. Ensuite, vous voulez que le programme ferme la fenêtre. Donc, en gros, ce sont nos exigences, et maintenant vous pouvez choisir de commencer à écrire la fin Beck, afin d'écrire une fonction qui sélectionne toutes les données de la base de données. Vous pouvez ensuite renvoyer ces données sous forme de texte. Vous pouvez donc simplement les imprimer pour le moment Si vous voulez d' abord écrire le back-end parce que vous n' avez pas le front-end, vous n'avez pas encore intégré l'interface utilisateur graphique. Vous pouvez donc simplement écrire les fonctions du back-end, puis imprimer la sortie. Ou vous pouvez commencer à écrire le front-end en premier. Vous créez donc cette interface utilisateur graphique. Mais lorsque vous cliquez sur ces boutons, rien ne se passe. Donc, en gros, il suffit de dessiner ce truc avec Python. Une fois cela fait, vous commencez à créer le back-end, puis vous connectez tous les widgets et toutes les commandes de ces boutons à vos fonctions principales. C'est donc une question de préférence que vous choisissiez de travailler d'abord avec le back-end ou le front-end. Dans ce cours, dans cette section, nous allons d'abord créer le front-end. Nous allons donc créer une interface utilisateur graphique qui ne fera rien pendant un certain temps tant que nous pas connectée au backend. Très bien alors. Je voudrais d'abord supprimer cette barre verticale ici car je vais dessiner l'interface utilisateur graphique ici. Je vais donc faire un croquis pour que vous voir et l'avoir ici tout le temps. Donc, pour supprimer cette barre, si vous êtes curieux, vous pouvez simplement accéder aux paramètres. Ensuite, il existe un package qui affiche réellement cette barre appelée rap guide, et vous souhaitez déplacer tous les affichages d'une ligne du huitième caractère dans Et cela peut vous aider si vous souhaitez, cela peut vous aider à conserver un schéma particulier. Vous ne voulez donc pas avoir plus de 80 caractères dans votre code. Cette barre vous aide donc à respecter cette règle. Quoi qu'il en soit, nous ne le voulons pas, alors je l'ai simplement retiré. Et je vais juste écrire quelques notes dans la chaîne doc. Vous savez donc qu'une chaîne de documents est comme une ligne de commentaire. Donc, si vous mettez quelque chose dans ces codes triples, cela n'est pas lu comme du code par Pathon mais comme une chaîne de documentation Donc, juste pour que les humains puissent lire. Disons que je veux un programme. Cela stocke les informations de ce livre. Donc titre, auteur et ISBN. Donc le numéro d'identification des livres. Et l'utilisateur peut consulter tous les enregistrements. Ils peuvent rechercher une entrée et en ajouter une, mettre à jour une entrée, la supprimer, et ils peuvent fermer le programme s'ils le souhaitent. Fermer. Huit. Donc, si vous commencez à y penser, vous voudriez maintenant avoir une interface utilisateur graphique contenant tous ces boutons afin que l'utilisateur puisse effectuer ces actions via certains boutons. Ensuite, vous réfléchissez à la façon dont ils peuvent consulter les enregistrements. Et vous savez que Tkinter possède la list box, widget qui permet d'afficher un widget qui permet d'afficher du texte sous forme de liste. Donc ligne par ligne. Ensuite, vous voulez que l'utilisateur recherche une entrée dans une entrée de mise à jour d'entrée. Vous avez donc besoin de quelques widgets de saisie. Et puis, bien sûr, vous voudriez des étiquettes qui puissent indiquer le sujet de chaque entrée. Ce serait donc un widget d'étiquette. Vous pouvez également avoir besoin d'une barre de défilement pour que votre liste défile. Ainsi, s' il y a de nombreux enregistrements, l'utilisateur peut les parcourir et voir les enregistrements situés sous la liste. Nous avons donc un croquis. Ceci, bien sûr, nécessite un peu de fantaisie et peut-être une certaine expérience dans la conception d'interfaces utilisateur. Mais il est très important que vous ayez un croquis. Je vais donc garder ce croquis à l'écran pendant que je code le programme. Normalement, dans la vraie vie, vous voudriez dessiner, peut-être sur un vrai papier ou simplement sur un écran numérique. Mais c'est important de l'avoir, et maintenant que nous l'avons, commençons à le construire lors de la prochaine conférence. 169. 168. Codage de l'interface frontale: Génial. Nous avons maintenant un croquis de notre interface utilisateur graphique, ce qui devrait faciliter les choses. Vous pouvez donc maintenant simplement coder votre interface utilisateur graphique en Python à l'aide des fonctionnalités de Kiner Salt Kiner est une bibliothèque que nous utiliserons pour créer cette interface Et je suppose que vous connaissez déjà Kinder parce que je l'ai expliqué dans l'une des sections précédentes Donc, si vous ne connaissez pas Kinder, veuillez consulter les deux sections précédentes, et vous serez alors en mesure de comprendre de quoi je parle ici Je vais donc garder le croquis sur la droite. Vous savez maintenant que pour créer une interface utilisateur graphique avec Kiner, vous pouvez soit utiliser les méthodes pack pour emballer votre widget, soit la méthode grille Nous utiliserons la méthode de la grille, il peut donc être judicieux de créer une grille sur votre croquis. Ainsi, lorsque vous créez vos widgets, disons que vous créez un fond, vous devez transmettre le numéro de la ligne et le numéro de la colonne. Donc, avoir une telle grille facilitera les choses. C'est bon. Et j'aimerais juste supprimer cette chaîne de documentation. Nous n'en avons pas besoin, et cela me permet d'économiser de l'espace afin que vous puissiez voir un espace de travail plus propre ici. C'est bon. De Skinerimport. Je n'explique donc pas le code maintenant parce que vous savez déjà ces choses. S'il y a quelque chose de nouveau, je vais le passer en revue. Window est égal à TK, la méthode TK qui crée un objet window, puis vous souhaitez appliquer la méthode de la boucle principale, qui est essentiellement un moyen de regrouper tous les widgets que vous allez entrer dans cet espace maintenant. Très bien, nous avons donc quatre étiquettes ici. Nous avons donc le titre du label et l'auteur ici, ainsi que l'ISBN. Je vais donc simplement créer les quatre objets d'étiquette de Fobels. Je vais donc nommer mes objets, mes variables de L un à L quatre et nous utilisons la méthode des étiquettes d'objets pour cela. fenêtre est la fenêtre parent et le texte doit être le titre. Donc, contrôlez la saisie, vous pouvez passer à la ligne suivante, peu importe où vous vous trouvez sur la ligne précédente. Vous n'avez donc pas besoin de simplement changer, d'aller ici, puis d'appuyer sur Entrée, il vous suffit d'appuyer sur Ctrl Entrée et de passer à la ligne suivante. Tout d'abord, vous appliquez la méthode de la grille. La première étiquette est donc la ligne zéro, la colonne zéro également. Ensuite, vous pouvez simplement le copier et le coller trois fois de plus. Ce serait donc L deux, L trois et L quatre. Et vous souhaiteriez également modifier le texte de votre étiquette. Ici et ISBN. L'auteur serait la deuxième colonne, comme vous le voyez sur le croquis. Donc 02, alors nous avons ici un, zéro, puis 12 pour la dernière étiquette. Voyons donc ce que nous avons. J'aimerais juste appeler mon script. D'accord, ça semble prometteur. Ajoutons maintenant les entrées. Il s'agissait donc de widgets statiques. Nous devons maintenant ajouter quelques entrées. Donc, A un serait une entrée. Et l'entrée obtient la fenêtre comme premier paramètre, comme n'importe quel autre widget. Et également un paramètre de variable de texte. Ce paramètre de variable de texte attend comme argument la valeur que l'utilisateur saisira dans le widget de saisie. Il s'agit d'un type de données spatiales. Vous devez donc d'abord créer un type de données ici, un objet de ce type de données. Alors appelons-le. Nous créons l' entrée pour le titre, disons le texte du titre, égale à string vary. C'est donc cette fonction qui crée cet objet spatial. Cela équivaudrait à ce titre « sexe ». Alors c'est tout. Et vous devez également quadriller ce widget de saisie de manière à ce qu'il soit quadrillé. Et les premiers widgets du widget de titre correspondent à la ligne zéro et à la première colonne. Alors c'est tout. Je peux rapidement le multiplier ici et le texte de l'auteur ici, le texte et le texte ISBN Vous devez également modifier les nombres ou réduire le nombre de variables de cette manière. Et, bien sûr, vous devez transmettre ce que l'utilisateur saisit ici. Cela devrait donc être le cas et ces deux-là. C'est bon. Enfin, vous devez également spécifier les lignes et les colonnes pour les entrées. Ce serait donc zéro, trois, puis nous avons le widget de texte, un, un. C'est bon. Et la dernière entrée. Un. Trois. C'est bon. Allons y jeter un œil. Ouais. Ça a l'air bien. Génial. Et maintenant c'est au tour de la boîte de location. Appelons-le donc List One. Pourquoi pas ? Cela équivaudrait à une fenêtre de liste. Ensuite, vous devez spécifier la hauteur de votre dernière boîte ainsi que la largeur. J'ai donc pensé à en mettre six et 35. Ce serait une bonne hauteur et une bonne largeur. Vous pouvez goûter à différentes hauteurs et largeurs et voir ce qui vous convient le mieux. Ensuite, j'aimerais noter ceci. Grille. Cela commencerait donc à la ligne numéro deux et à la colonne zéro. Cependant, si on laisse les choses comme ça, les choses ne se passeront pas comme prévu. En fait, on peut essayer ça. Comme vous pouvez le constater, la zone de liste n' occupait que la première cellule. Donc, la première cellule de la première colonne de la ligne zéro, un, deux, donc de la ligne deux, de la colonne zéro. Nous voulons plutôt étendre cette zone de liste sur les autres colonnes et sur les autres lignes, car nous aurons des boutons ici plus tard Nous voulons donc étendre cette zone. Et vous pouvez voir le croquis ici. Nous pouvons donc ajouter un paramètre d' envergure de ligne, ce qui serait également égal à six colonnes d'envergure. y en aurait donc deux. C'est bon. Ce serait donc une zone de liste. Cependant, nous devons également y ajouter une barre de défilement afin que la liste puisse être parcourue lorsqu'il y a beaucoup de données dans la liste, de nombreux enregistrements pour joindre une barre de défilement à La logique ici fonctionne comme suit. Vous créez votre barre de défilement, puis vous indiquez à votre barre de défilement la liste que la barre de défilement doit faire défiler Ensuite, vous indiquez également à votre liste qui est sa barre de défilement. Créons donc d'abord le scroll, une barre de défilement indépendante Disons donc SB One. Méthode de la barre de défilement. Cela se touche par la fenêtre. Ensuite, vous appliquez la méthode verte. La barre de défilement se trouverait donc sur une troisième colonne. Et une fois que vous avez créé ces deux objets, vous souhaitez appliquer une méthode de configuration à la boîte de location et une méthode de configuration. Vers l'objet de la barre de défilement. Et ces méthodes de configuration obtiennent des arguments. Ce serait donc une commande de défilement, égale à un ensemble de points. C'est ça. Cela signifie donc que la barre de défilement verticale le long de l'axe Y sera définie sur cette barre de défilement, puis vous passerez à la méthode de la barre de défilement. Désolé, cela doit être configuré, puis vous passez une commande égale à répertorier une vue Y. Cela devrait donc fonctionner. transmettez ici un paramètre de commande, ce qui signifie que lorsque vous faites défiler la barre, la vue verticale de la dernière barre change. Voyons donc comment cela se passe. Et il semblerait que j'ai foiré quelque chose ici. J'ai placé la position de la barre de défilement sur la première ligne, je suppose, et sur la troisième colonne. La barre de défilement doit donc être en fait la ligne deux et la deuxième colonne. Vérifions-le encore une fois. Oui, ça a l'air de fonctionner. Cependant, il ne semble pas très centré car nous devons le répartir les mêmes lignes que celles que nous avons tracées dans la boîte ici. Nous devons donc ajouter ici un paramètre rowspan et définir sur six autres looks centrés sur la barre de défilement Très bien, il ne nous reste plus qu' à ajouter ces widgets de boutons juste ici Génial. Nous avons donc six boutons. Commençons par le premier. Nous avons la méthode des boutons. Fenêtre et texte, les boutons contiennent donc du texte. A est le premier. Et puis j'ai pensé à mettre une largeur de 12. Alors, sois parti, encorné. Il s'agirait de la deuxième colonne, de la troisième ligne. Et nous avons encore cinq boutons. Je vais donc coller ces six, je crois. Donc b2b3, quatre, quatre, Bien entendu, ces boutons n' ont pas de paramètre de commande pour le moment, car plus tard, nous ajouterons ici un paramètre de commande, qui décidera de ce que feront les boutons. Mais pour le moment, c'est très bien. Ces boutons seront donc tous alignés dans la troisième colonne , et chacun aura une valeur de ligne différente. Et six. Génial. Voyons donc ce que nous avons. Et boum. J'ai oublié de mettre un numéro de ligne pour le bas fermé. Sept. Et maintenant, ça a l'air mieux. Voici donc comment créer une interface utilisateur graphique. Bien entendu, ces boutons ne servent à rien pour le moment. de la prochaine conférence, je vais donc vous montrer comment associer des actions à cette interface utilisateur graphique. Nous travaillerons donc sur le back-end et nous utiliserons SQLite Three pour interagir avec la base de données et récupérer ces données dans cette interface utilisateur graphique J'espère donc que mes routines et mes pratiques vous aideront à créer des interfaces utilisateur graphiques avec EZ et je vous verrai lors de la prochaine conférence. 170. 169. Codage du backend de l'application: Bonjour, bienvenue à cette nouvelle conférence. Et ici, nous continuons à développer notre programme de librairie qui stocke et extrait des notices comptables à partir d'une Pour autant que, vous le savez, nous avons créé l'interface utilisateur graphique avec Kinder Voici donc notre script. Donc, en gros, nous avons le front-end de notre programme. Et maintenant, voici notre interface utilisateur graphique. Et en gros, ce que nous devons faire maintenant, c'est associer certaines fonctions à tous ces boutons. Supposons, par exemple, que lorsque nous appuyons sur le bouton Afficher tout, une fonction se déclenche pour sélectionner les données d'une base de données SQL Lite, puis les récupérer et les placer dans cette zone de liste ici. Cela signifie donc que nous devons créer une base de données, une base de données SQLite avec SQLite trois Nous devons également d'abord créer une table. Nous pourrions donc le faire dans le script, mais je préfère créer un autre script, puis l' importer ici. Alors, importez, appelons le nouveau backend de script. Nous devons donc créer un backend avec ce script Pi. C'est bon. Et maintenant, je veux en changer le nom mon script frontal afin que nous gardions le même schéma. Disons donc le front end. C'est bon. Nous sommes donc dans le script frontal maintenant, et nous voici dans le script principal. Cela signifie donc que vous créez une fonction d'affichage, qui sélectionne les données de la base de données et que vous créez cette fonction ici, puis que vous cliquez sur le bouton Afficher tout, puis que vous entrez le paramètre de commande ici, et ce serait égal. Disons donc commande juste pour vous donner une idée, commande égale au backend et au nom de la fonction. Donc quelque chose comme ça. C'est bon. J'espère que cela a du sens. Cependant, pour le moment, ce serait formidable d' oublier ce script. Nous devons donc garder à l'esprit l'interface utilisateur graphique, mais il est bon de ne pas interagir avec ces widgets pour le moment. Donc, ce que nous faisons à la place, c'est imprimer les sorties des fonctions, les fonctions que nous avons créées sous forme de chaînes dans la ligne de commande ici. Nous ne jetterons donc pas ces données dans la moindre case, mais dans le terminal ici. C'est bon. Commençons à coder. Importez SQLite trois. C'est la première chose que tu veux faire. Et je vais conserver une image de l' interface utilisateur graphique ici afin que vous puissiez vous y référer facilement. Nous devons donc créer une fonction d'affichage. Mais avant cela, j' aimerais créer une base de données, donc une connexion à la base de données. Et j'aimerais mettre cela dans la fonction. Disons donc Function Connect. Et nous avons un objet de connexion. Ce serait donc un Scul Three Connect. Et appelons la base de données books point dB. C'est bon. Nous établissons donc une connexion à la base de données. Ensuite, nous définissons un objet curseur comme celui-ci. Ensuite, nous devons exécuter une instruction SQL. Donc, objet curseur, exécution et mise entre guillemets, nous saisissons l'instruction SQL. Nous avons donc une base de données, et nous avons également besoin d'une table dans la base de données où stocker les informations de nos livres. Maintenant, pensez-y. Utilisateur Lorsque vous donnez ce programme à un utilisateur, celui-ci exécutera le programme. Et chaque fois qu'ils exécutent le programme, votre script doit vérifier s'il existe une table dans la base de données du livre. Donc, s'il y a une table, dites-vous de ne pas la créer. S'il n'y a pas de table, vous devez créer la table. Créez donc une table si elle n'existe pas. Et appelons un livre de table, juste pour le différencier du nom de la base de données. Ensuite, vous voudriez transmettre certains paramètres. Le premier paramètre que j' aimerais transmettre est l'ID. Ne le confondez donc pas avec le numéro ISBN. L'identification du livre, c'est juste un numéro qui partira de zéro, et il sera automatiquement incrémenté d'un afin que nous puissions contrôler le nombre d' enregistrements que nous avons dans la base C'est donc une bonne idée d'avoir cet identifiant ici, qui serait un entier, et vous devez le définir comme clé primaire. Il s'agit donc d'une colonne obligatoire dans votre tableau. Ensuite, vous avez le titre sous forme de texte, l'auteur, ici sous forme de texte entier, et l'ISBN, qui est également un entier bon, c'est ça. Vous souhaitez valider les modifications, puis fermer la connexion. Très bien, nous avons donc créé une fonction de connexion. Plus tard, nous exécuterons ce script, donc le script frontal, puis vous importerez le backend, ce script, le script du back-end. Le code du backend sera donc lu par Python. Mais si vous n'avez pas appelé cette fonction, ce code ne sera pas exécuté. Donc, ce que vous voulez faire à la place, c'est avoir cette fonction. Exécuté chaque fois que vous exécutez cette fonction. Vous exécutez donc le front-end et cela importe le backend, sorte qu'il exécute tout le code Et cette ligne est exécutée ici. Ainsi, la fonction s'exécutera chaque fois que vous exécuterez le front-end. C'est bon. J'espère que cela a du sens. Ou permettez-moi de mieux expliquer cela rapidement. Nous avons donc un script A point pi, et nous avons un script point pi B. Et dans le script A point pi, nous importons le script B. Et ce que nous avons dans le script B, c'est une fonction PU qui imprime quelque chose à l'écran. Hé, et sauvegardez ceci et sauvegardez-le également. Ainsi, lorsque vous exécutez un point pi, rien ne se passe pour le moment car vous venez de définir votre script. Mais si vous appelez le script ici, right, food, safe, et que vous exécutez à nouveau A, vous obtenez cette fois le résultat de la fonction. C'est donc l'idée. Merci. Et revenons à notre scénario du monde réel. C'est bon. Nous avons maintenant la fonction de connexion. Commençons par créer une fonction d'insertion qui insérera des données dans la base de données. Je commence donc la fonction d'insertion car c'est une fonction plus simple que l'autre. J'aimerais donc commencer par les choses les plus simples. Insertion de développement. C'est ainsi que j'appelle ma fonction. Et pensez-y, vous y avez quatre entrées. Vous attendez donc de l'utilisateur qu'il saisisse titre, l'auteur, l'année et le numéro ISBN Vous voulez donc transmettre quatre paramètres ici, ainsi que l'ISBN. C'est bon. Et puis, bien sûr, vous devez vous connecter à la base de données. Grâce à cette fonction, elle se connectera simplement temporairement à la base de données, vérifiera s'il existe une table et fermera la connexion. Vous avez donc une connexion fermée ici, lorsque vous appuyez sur le bouton d'insertion lorsque vous appuyez sur le bouton d'entrée, vous devez créer une nouvelle connexion à la base de données. Et permettez-moi d'aller de l'avant et de lire ces deux lignes également, parce que nous en avons également besoin, n'est-ce pas ? Et c'est ici que nous exécutons notre instruction SQL spécifique entre guillemets. Donc, le bouton Adentry va faire l'insertion. Dans le livre, donc les valeurs comptables de table. Et voici un truc maintenant. Nous avons un identifiant ici, il s' agit donc d'une valeur d'incrémentation automatique, nous n'avons donc pas à la transmettre manuellement Et ce que nous pouvons faire à la place, c'est transmettre une nouvelle valeur ici. Et Python le comprend, et il créera l'identifiant automatiquement. Ensuite, nous avons quatre points d'interrogation, un pour chacune de nos valeurs. Ensuite, vous devez passer vos paramètres en tant que second paramètre de la fonction d'exécution. Donc, sous forme de tuple ici, titre ici et ISBN Bien, laissez-moi écrire une autre fonction, puis nous exécuterons le script pour l'essayer et voir comment cela se passe. Donc, disons la fonction d'affichage. Cela récupérera donc toutes les lignes de données de la table. Nous le copions donc et les mettons ici. Nous nous connectons donc à la base de données, créons un objet curseur, puis nous exécutons une instruction SQL. Et puis, comme il s' agira d'une instruction select, nous n'apporterons aucune modification à la base de données, nous n'avons donc pas besoin d'une méthode de validation ici. Et c'est en fait assez simple. Tout sélectionner dans le livre. Vous devez donc renvoyer votre sélection sous forme de renversement. Ensuite, vous saisissez cette sélection et vous la mettez dans la zone de liste. Vous voulez donc que la fonction d'affichage renvoie un basculement. Supposons que rose soit égal à cur fetch all, soit égal à cur fetch puis vous pouvez fermer la connexion, mais vos données resteront stockées dans la variable rose Vous pouvez donc simplement renvoyer des lignes ici. C'est bon. Essayons donc le script maintenant. Et la façon de l'essayer serait d'utiliser une déclaration imprimée. Nous voudrions donc appeler insert, puis saisir certaines données manuellement. Ainsi, dans le programme réel, cette fonction d'insertion sera exécutée quelque part dans l'entrée publicitaire. Bouton Mais pour l'instant, nous devons rester simples et atteindre notre objectif étape par étape. Insérez, passons quelques valeurs ici le titre. Disons la tablette C puis celle de l'auteur John. C'est bon. Et voici un entier, il vous suffit donc de passer un nombre et ISBL est donc un entier Il n'est donc pas nécessaire de les mettre entre guillemets. Ensuite, vous souhaitez également imprimer le résultat de la fonction d'affichage. Génial. Voyons donc comment cela se passe. Ce serait le script principal. Génial. L'enregistrement a donc été inséré dans la base de données et imprimé à partir de la fonction d'affichage. Si vous réexécutez le script, vous obtiendrez deux enregistrements car la fonction d'insertion a été exécutée deux fois. C'est bon. Ça a l'air de bien se passer. Alors, qu'avons-nous d'autre ? Nous avons une fonction de recherche. Et nous implémenterions une recherche or. Cela signifie donc que l' utilisateur saisira un titre ou un nom d'auteur, l' année ou le numéro ISBN, ou qu'il pourra choisir de les saisir tous en même temps Mais supposons qu'il entre uniquement dans l'année, il obtiendra toutes les lignes correspondant à cette année. Ici, nous devons donc également transmettre quatre paramètres. Ben, d'accord. Ensuite, nous avons besoin de ces lignes de code, alors connectez-vous à la base de données, l'objet curseur, puis exécutez. Restons donc ici un moment. Nous voulons tout sélectionner parmi les livres dont le titre est égal à quelque chose, l'auteur est égal à quelque chose ou l'année est égale à quelque chose ou l'ISBN Et puis le deuxième paramètre serait le tuple des arguments, PhtalesBN Ensuite, nous devons récupérer toutes les lignes qui seront renvoyées par cette requête et les stocker dans cette variable de lignes, fermer la connexion et, à nouveau, renvoyer les lignes. Cependant, un problème que nous pouvons rencontrer est que l'utilisateur peut vouloir transmettre, disons, le nom de l'auteur uniquement aux entrées. Cette fonction obtiendra donc uniquement les arguments du paramètre author. Ces autres paramètres resteront sans valeur. Ensuite, vous recevrez une erreur car votre fonction est conçue pour avoir quatre paramètres. Dans ce cas, vous souhaiterez transmettre des chaînes vides comme valeurs par défaut. C'est bon. Et ces deux-là. présent, si l'utilisateur transmet un nom d'auteur, disons John Smith, cette instruction SQL recherchera un titre vide ou nom de l'auteur John Smith ou un Ear et un ISBN vides, etc. Et il renverra toutes les lignes avec John Smith comme nom d'auteur. D'accord. Disons-le donc et essayons-le. Nous avons donc connect, insert to print view. Disons la Terre. J' insère un autre enregistrement ici. John Smith. C'est bon. Et puis, disons, imprimez la recherche, et vous souhaitez transmettre quelques arguments. Par exemple, auteur est égal à John Smith. C'est bon. Sans citation ici. Et voyons comment cela se passe. Nous avons donc obtenu ici cette liste de lignes de la fonction de vue car nous avons également la fonction de vue ici. Ensuite, la fonction de recherche renverra cette ligne pour nous. Donc, la ligne avec l'ID trois et avec John Smith comme auteur. Cela fonctionne donc bien. Allons-y et créons une fonction de dilution. Réfléchissons donc à la manière dont l'utilisateur souhaite supprimer un enregistrement. Ils voudraient donc probablement voir des disques dans leur boîte. Ils voudront ensuite sélectionner l'un des enregistrements. Disons le record pour ID 3, la Terre, John Smith, etc. Ils le sélectionneraient donc , puis appuieraient sur le bouton de suppression. Cela signifie donc que nous voulons d'abord récupérer la sélection de la liste, donc la sélection dans la zone de liste, nous la saisirons sous forme de tuple, mais nous y réfléchirons plus tard Nous allons donc le prendre sous forme de tuple. Ce tuple possède des numéros d'identification uniques ou l'ID. Nous voudrions donc faire référence à cet identifiant, puis accéder à notre table de base de données et supprimer la ligne portant cet identifiant. J'espère donc que cela ne prête pas beaucoup à confusion dans la fonction de suppression, nous nous attendons donc à l'ID du tuple que l' utilisateur sélectionnera Ensuite, nous voudrions avoir ce code et partir de là. Connectez-vous donc à la base de données, l'objet curseur, exécutez une instruction. C'est bon. Voyons comment cela se passe. Nous voulons donc supprimer du livre où l'identifiant est égal à quelque chose. Génial. Et puis ce quelque chose est le paramètre ID. Donc, l'argument de ce paramètre est ici, et c'est le nom de la colonne. Ne le confondez donc pas avec ce paramètre de fonction de nom de colonne. N'oubliez pas la virgule ici. Et oui, en gros, c'est ça. Sauvegardons ce script maintenant, et exécutons-le. Nous y insérons des données. Disons le soleil cette fois. Nous aurions donc le C, le C à nouveau, la Terre et le soleil, donc j'aimerais supprimer la Terre. Et je voudrais les mettre ici, les supprimer. La Terre en a donc une idée. Nous voudrions donc en passer trois ici. Ensuite, nous consulterons tous les enregistrements actuels une fois que nous les aurons supprimés. C'est bon. Voici donc nos archives, et la Terre a disparu. Cela fonctionne donc très bien. Encore une fois, comme je l'ai dit, cet identifiant sera extrait du tableau. Le tuple aura donc l'ID comme premier élément. Donc, en gros, à partir de Tuple, nous allons obtenir l'élément avec l'index zéro, et nous passerons ce premier élément à cette fonction de suppression Génial. La fonction serait mise à jour. Mettre à jour. Et encore une fois, comment souhaitez-vous mettre à jour les enregistrements ? Alors, comment l'utilisateur souhaiterait-il mettre à jour un enregistrement ? Eh bien, encore une fois, ils peuvent s'attendre à sélectionner une ligne dans la zone de liste de la zone Tinder is, et les valeurs de cette barre s' affichent dans les widgets de saisie. À partir de là, l'utilisateur peut vouloir modifier l'une de ces cellules de ces entrées et appuyer sur le bouton de mise à jour en bas. Encore une fois, nous allons obtenir la sélection dans la zone de liste, puis nous nous référerons à l'idée. identifiant est donc ici comme premier paramètre, mais nous voudrions également obtenir les nouvelles valeurs que l' utilisateur souhaiterait obtenir à partir de ces entrées. Supposons donc que l'utilisateur veuille changer le titre du soleil en celui de la lune, et vous obtiendrez ce titre. Le titre sera donc dans le champ de saisie et transmis ici. Pareil pour l'auteur ici et l'ISBN, d'accord. Ensuite, vous souhaiterez mettre à jour votre tableau. Mettez donc à jour la table où l'ID est égal à celui-ci. Mettez à jour le tableau avec ces nouvelles valeurs, où ID est égal à ceci. Mais tout d'abord, nous devons obtenir toutes ces lignes. C'est bon. Alors mettez à jour, réservez, et vous dites « set ». Le titre du jeu de mots clés est donc égal au point d'interrogation. Idem ici, point d'interrogation, et ISBN est égal à point d'interrogation Mettez donc à jour le livre et définissez ces valeurs où ID est égal à un autre point d'interrogation. Alors on passe le triple ici. Donc, identifiant, titre, auteur et ISBN. Donc ça a l'air bien. Nous validons les modifications et nous fermons la connexion. Et voyons comment cela se passe. Donc actuellement, nous avons les lignes dans le tableau, le C, encore une fois le C, le soleil. Oui, ces trois rangées. Et mettons à jour le soleil. Je veux donc d'abord le commenter et également le supprimer. Concentrons-nous donc sur la fonction de mise à jour et la mise à jour. Vous voudriez donc transmettre l'idée de la ligne afin de la mettre à jour. Ensuite, vous voulez transmettre les valeurs dans le bon ordre. Alors, ce que vous voulez pour le nouveau titre, disons, la lune. Ensuite, dans l'interface réelle l'interface utilisateur graphique, si l'utilisateur souhaite modifier uniquement le titre, il laissera les autres valeurs telles quelles. Ces valeurs seront donc remplacées par les valeurs existantes. Donc John Smith et l'année 1919 le numéro ISBN. Mais dans ce cas, nous sommes juste en mode dégustation afin de pouvoir transmettre ces valeurs. Lisse. C'est bon. Et un chiffre. Voyons donc comment cela se passe maintenant. Et il semblerait que cela n'ait pas fonctionné. Le soleil est toujours là. Voyons donc ce que nous avons ici. Mettez à jour le titre, l'auteur ici, l'ISBN, où les identifiants. L'identifiant devrait donc se trouver au bout du rouleau. Hmm. B, tu sais, nous les avons mis dans le bon ordre que nous avons défini ici. Essayons donc à nouveau. Hum. Maintenant, ça marche. L'ID quatre a donc été remplacé par la lune, John Smooth, et les autres valeurs. Génial. Je pense donc que le script de Ben est prêt. Et ce dont nous avons besoin maintenant, c'est d'associer toutes ces fonctions à nos boutons. Nous avons donc encore du travail à faire, et nous le ferons lors de la prochaine conférence. 171. 170. Raccordement de l'interface frontale avec le backend, partie 1: Hey, bienvenue encore une fois. Et c'est le dernier coup de pouce que nous allons donner à notre application. À la fin de cette conférence, vous aurez un programme entièrement fonctionnel capable de stocker et de récupérer des enregistrements comptables dans une base de données ASQE Lit Donc, comme vous le savez, nous avons deux scripts. Nous avons le script front et point py, et le script point pi principal. Nous en avons complètement terminé avec le script Bend point pi. Nous avons donc créé toutes nos fonctions qui se connectent à la base de données et qui se connectent à la base de données et troisièmement, consultent, suppriment et mettent à jour les données. Et maintenant, nous devons passer au script frontal, car nous devons le modifier légèrement pour que le script frontal puisse récupérer des données à partir du script principal ou, plus précisément, il puisse obtenir les sorties de fonction qui sont essentiellement des tuples Ensuite, insérez ces tables de données dans la zone de liste. Donc, en gros, l'utilisateur appuie sur un bouton, puis ces fonctions sont déclenchées et les données sont insérées dans la zone de liste. Commençons donc par les choses les plus simples. La première chose que j' aimerais implémenter est d'obtenir les enregistrements dans la zone de liste lorsque l'utilisateur appuie sur la vue ou sur le bouton. Tout d'abord, comme je l'ai déjà mentionné, vous devez importer le script Ben ici afin de pouvoir ultérieurement faire référence à vos fonctions comme une vue par points du backend, par exemple pour la fonction d'affichage de base de données Non, j'ai mentionné que pour attacher une fonction à un bas, vous devez aller là où vous avez défini ce bas. Donc, jusqu'à la fonction inférieure, puis vous ajoutez une commande ici. Donc, commandez, puis voici la fonction. Maintenant, si nous appelons simplement la fonction view du script Bend. Donc, si nous utilisons la vue Bent, nous ne faisons qu' exécuter la fonction de vue, donc nous n'insérons aucune donnée dans la zone de liste Donc, ce que nous voulons faire, c'est avoir une autre fonction et avoir cette fonction, récupérer les données de la fonction d'affichage et les insérer dans la zone de liste. Par exemple, appelons cette commande function view. Juste comme ça. N'oubliez pas que vous ne passez pas de crochets ici, car si vous le faites lorsque vous exécutez le script, cette fonction ici, si vous faites comme ça, cette fonction sera exécutée lorsque Python lira votre script, mais ce n'est pas ce que vous voulez. C'est ce que vous voulez lorsque vous appuyez sur le bouton lorsque l'utilisateur appuie sur le bouton. Cette fonction est exécutée. Tkinter le sait donc et si vous le transmettez comme ça, Python Tkinter l'exécutera lorsque vous appuierez sur le bouton Donc, commande d'affichage, et maintenant vous avez besoin d'une fonction de commande d'affichage. Écrivons donc nos fonctions ici. La commande d'affichage. Pensez donc à la sortie maintenant. La sortie que nous obtenons est un tuple. Je vais donc exécuter la fonction d'affichage ici, donc imprimer la vue juste pour voir ce que nous avons, si vous l'avez oublié. Donc Python Band point pi. Et donc en fait, nous avons une liste de tuples. Donc, il renverse dans la liste. Et ce que nous voulons faire maintenant, c'est insérer chacun de ces tuples Ainsi, chacune de ces lignes de base est une nouvelle ligne dans la liste à l'intérieur de la zone de liste. Donc, ce que nous pouvons faire, c'est itérer à travers ce tuple. Ce serait donc pour, disons, une ligne dans la vue par points du backend. Il s'agit donc en fait de cette liste ici. Il s'agit donc en fait d'un objet et d'un objet de liste. Et puis, liste 1, je crois, c'est ainsi que notre zone de liste est codée. Oui, donc c'est la première liste. Il s'agit d'une variable contenant le point « Insert » de notre boîte de location. Ensuite, la méthode d'insertion obtient deux arguments. Le premier argument est l'index dans lequel vous souhaitez insérer vos valeurs. Vous avez donc une zone de liste, et cette zone de liste comporte plusieurs emplacements. Il a donc la première place, puis la deuxième, la troisième, et ainsi de suite. Donc, si vous voulez le mettre en premier lieu, vous entrez zéro. Si vous voulez le mettre dans le second, vous devez entrer un index d'un ici et ainsi de suite. Mais pensez-y. Nous sommes en train de parcourir ces tubes. Nous allons donc au premier tuple, puis nous voudrions le mettre, et nous voudrions placer ce tuple comme premier élément de la liste Ensuite, nous voudrions que le second soit mis comme deuxième élément, et ainsi de suite. Ainsi, dans de tels cas, la méthode d'insertion possède également un index spécial appelé end, puis vous passez la ligne. Cela signifie donc que les nouvelles lignes seront placées à la fin de la zone is. Vous avez donc cette ligne et celle-ci est placée la première, puis elle sera placée à la fin des lignes existantes. Cela garantit donc que chaque nouvelle ligne est insérée à la fin de la zone de liste. J'espère donc que c'est clair. Et j'aimerais vraiment exécuter le script. Nous avons donc maintenant le front end. Ce n'est pas une tarte. J'ai fait une erreur ici. Donc, en fait, je veux importer le backend ici comme ça. Exécutez à nouveau. Et nous avons l'interface. Voyons donc ce que propose VO. Le nom du revers n'est pas défini à la cinquième ligne. Donc oui, bien sûr, ce n'est pas défini car j'ai une faute de frappe ici Pliez. C'est bon. Essayons encore une fois. Ferme-le. Voyons voir. Génial. Nous avons donc affiché les lignes dans la case is. Mais lorsque vous appuyez dessus encore et encore, ces lignes seront ajoutées aux lignes existantes. Nous devons donc réfléchir à la manière dont nous pouvons réellement avoir une zone de liste vide lorsque nous appuyons sur le bas. C'est en fait très facile à faire. Nous devons nous assurer ici que lorsque ces lignes sont exécutées, la zone de liste est déjà vide. Donc, ce que nous pouvons faire, c'est lister un, supprimer et zéro pour garantir que vous supprimez tout depuis l'indice zéro de la ligne avec un indice de zéro jusqu' à la fin de la dernière ligne. Voyons donc comment cela se passe. Oui, et si vous appuyez à nouveau sur le mode Vegain, vous obtenez toujours toutes les lignes de la base de données dans la table Génial. Passons maintenant à la définition d' une fonction similaire pour le bas de l'entrée de recherche. Le bouton est donc celui-ci ici, entrée de recherche. Encore une fois, nous voulons que l'utilisateur saisisse au moins une valeur dans les entrées des zones de saisie, puis qu'il appuie sur le bouton de recherche, puis il s'attend à ce que le programme renvoie les lignes contenant l'entrée que l' utilisateur a saisie dans la zone de saisie. Encore une fois, vous devez insérer des données dans la boîte. Encore une fois, vous pouvez simplement appeler la fonction de recherche ou le script Ben dans la commande ici. Vous avez donc besoin d'une fonction wrapper. Disons donc commande de recherche. Une autre bonne raison pour laquelle vous souhaitez utiliser ces fonctions wrapper, c' est que dans certains cas, comme celui-ci ici, vous transmettez certains paramètres à la fonction Donc, si vous regardez le backend et la fonction d'affichage n'avait aucun paramètre, mais que la fonction de recherche possède certains paramètres. Cela signifie donc que vous n'êtes pas autorisé à mettre des crochets ici Vous devez donc utiliser une autre fonction dans laquelle vous appelez votre fonction de recherche principale avec des paramètres, en fait Et c'est ce que nous allons faire maintenant. Donc, définition, recherche, commande. Et encore une fois, pour la commande de recherche, ce que nous obtenons en fait comme argument est un titre dans lequel l'utilisateur saisira un nom d'auteur et ici un numéro ISBN Maintenant, nous allons obtenir ces paramètres à partir des widgets de saisie. Alors, où est l'entrée ? Voici les widgets d'entrée, et vous devez vous rappeler que nous avons cet objet string var ici. Cette variable dont le type de données est une chaîne sera donnée sous forme de valeur, de texte ou de nombre que l'utilisateur saisira dans le widget de saisie. Gardez donc cela à l'esprit. Allons-y et la première chose à faire est de supprimer un point. Vous souhaitez donc vider la liste. C'est bon. Ensuite, vous devez parcourir la sortie de la liste principale car, vous savez, dans ce cas, exécutons-la rapidement, donc le script principal. Nous recherchons donc le nom de l'auteur John Smith, backend point pi Très bien, nous n'avons pas de John Smith pour le moment, alors cherchons John Smooth. Nous avons donc une liste vide. Enregistrez à nouveau, et vous verrez que nous avons une liste de renversements. Donc dans ce cas, nous n'avons qu'un seul tuple, mais vous voyez l'idée Cela signifie que nous devons effectuer une itération par quatre, une nouvelle ligne dans le backend, un point, une recherche Et ici, vous devez faire attention. La fonction de recherche comporte donc des paramètres, et le premier paramètre sera le texte du titre. Donc, le texte que l' utilisateur saisit dans le widget de saisie, widget de saisie de texte Cependant, nous n'avons pas terminé car le texte du titre est en fait une chaîne ou un objet, il ne s'agit donc pas d'une chaîne ordinaire. Et ce que nous devons faire, c'est ajouter une méthode get ici, et cela produira un objet chaîne Ainsi, si l'utilisateur saisit le tarif John Smooth dans le widget, cela produira une simple chaîne John Smooth. J'espère donc que cela a du sens. Auteur à nouveau du texte, méthode get. Ensuite, nous avons le point de texte de l'année Get et enfin le point de texte ISBN Get Donc, pour un élément de la liste la fonction de recherche affichera pour nous lorsqu'elle effectuera une recherche dans la base de données, nous voulons simplement insérer nouvelles valeurs à la fin de la liste, comme ça. Je peux voir que la mise en évidence de la syntaxe ne fonctionne pas ici, donc j'ai probablement une sorte de faute de frappe Il me manque une colonne ici. Alors maintenant, quatre et un étaient colorés en violet. OK, alors essayons le script frontal. Et cherchons l' auteur John Smooth. Eh bien, évidemment, j'appuie sur le bouton du trou de visualisation, donc j'ai tout là. Vous voulez donc appuyer sur le bouton de recherche. C'est bon. Rechercher une recherche. Et on y voit toujours John Smooth. Si vous dites « trou de vue », cela montre tout. Cela semble donc fonctionner. Et le suivant se trouve en bas de la page d'entrée. L'utilisateur appuie donc sur le bas de la saisie. Ils s'attendent à ce que les données qu'ils ont saisies dans les quatre widgets de saisie soient stockées quelque part. Ils ne savent pas où, mais ils seront entreposés quelque part et ils pourront les récupérer. Cela signifie donc que vous devez appeler la fonction d'insertion ici dans le script Bend. Cette fonction obtiendra donc ces quatre arguments. Donc, la valeur autour des widgets de saisie, et elle les posera dans le tableau du livre. est aussi simple que ça. Donc, la première chose que nous pourrions vouloir faire est d'aller en bas de la page d' ajout. Donc ici, puis ajoutez une fonction wrapper ici. Au commandement. Ensuite, nous créons une fonction de commande Ajouter. Et c'est assez simple, en fait. Il suffit de dire « backend point insert et vous transmettez ces valeurs ici. Je vais donc simplement le copier et en payer une partie ici. Essayons donc ça. Essayons d'ajouter quelques entrées. Disons des arbres et de l'herbe. Supposons Been Sand, année 1917, et il suffit de mettre un O pour l' ISBN et d'ajouter une entrée L'entrée a donc probablement été ajoutée dans la base de données, mais nous n'avons rien vu, et vous pouvez probablement la voir avec une fonction VL Donc, si j'appuie sur VL, verrai des arbres et de l'herbe Mais il serait bon que lorsque nous ajoutons une entrée, cette entrée, la nouvelle entrée soit affichée ici afin que l'utilisateur sache que l' entrée a été ajoutée avec succès à la base de données. Voici donc des arbres et de l'herbe. Allons-y et faisons quelque chose pour que l'entrée apparaisse dans la zone de liste lorsque l'utilisateur appuie sur une entrée. Et ce que nous pouvons faire, c'est d'abord nous assurer que la liste est vide. Supprimez donc zéro pour terminer la liste. Cela nous donne une liste vide. Ensuite, nous insérons de nouvelles valeurs à la fin de la liste. Quelles valeurs alors ? Eh bien, c'en est un. Donc, les valeurs que l'utilisateur va entrer, c'est comme ça. Voyons donc comment cela se passe. Disons qu'il s'agit de prairies. Disons que Kirk a rencontré l'année 1910 et un certain nombre là-bas. Et ce n'est pas tout à fait ce à quoi nous nous attendions, en fait. Et nous l'avons obtenu parce que nous insérons ici de nombreuses valeurs en effet Nous disons donc à Python d'insérer tout cela dans une nouvelle valeur, ceci dans une nouvelle valeur, ceci aussi, et ainsi de suite. La solution ici est donc simple. Il suffit de le définir sous la forme d'une valeur unique. Donc, en triple et relancez le programme. d'une erreur, nous avons donc besoin d'un autre support car ce support se ferme ici. Alors, juste comme ça, réessayez. Disons Warm et Elena Gomez, 1944, et un chiffre ici. Ajoutez une entrée. Et maintenant, nous avons la ligne sur une seule ligne. L'objectif Fuel, and Wonder est là. La lentille Grass est également présente. Passons donc à autre chose. 172. 171. Raccordement de l'interface avec le backend, partie 2 ++: OK, nous avons encore du code à ajouter. Nous avons défini la vue, la recherche et les boutons publicitaires. Nous avons donc maintenant la mise à jour et le fond fermé. Et j'aimerais continuer avec le bouton de suppression, car le bouton de suppression est plus facile à implémenter que le bouton de mise à jour. Permettez-moi donc d'appeler à nouveau l' interface. Et encore une fois, pensez à l'utilisateur. quoi l'utilisateur peut s'attendre, c'est qu' il souhaitera peut-être supprimer l'une des lignes, disons cette ligne. Ils s'attendent donc à sélectionner cette ligne, puis à appuyer sur le bouton Supprimer la sélection, et cette ligne disparaîtra de la base de données. Et ils voudront peut-être aussi, lorsqu'ils sélectionnent une ligne, voir les données contenues dans ces entrées, et nous nous en occuperons également. Nous allons donc remplir ces entrées avec les valeurs correspondantes lorsque l'utilisateur clique sur l'une des lignes ici. C'est bon. C'est logique, je crois. Examinons maintenant la fonction de suppression dans le script principal Delete attend donc un identifiant, l'idée de la ligne, puis cette instruction SQL recherche cet identifiant et supprime la ligne entière de la table du livre où le D est égal au D donné ici Donc lorsque l'utilisateur sélectionne l'une des lignes de la zone de liste, nous devons saisir l'ID de cette ligne, puis envoyer cet identifiant à la fonction de suppression du script principal. Et puis la fonction de suppression s'occupe de la ligne. Oh, c'est bien. Et encore une fois, dans ce cas, vous souhaiteriez également ajouter une sorte de fonction de commande de suppression ici, en bas de Mais dans ce cas, j'aimerais en fait adopter une approche ascendante. Réfléchissons donc d'abord à la manière dont nous allons faire en sorte que le rôle soit sélectionné par l'utilisateur. Alors réfléchissons-y d'abord. Et vous ne connaissez pas le problème, mais il existe une méthode appelée bind de la bibliothèque Kinder, et bind est utilisée pour lier une fonction à un événement de widget Permettez-moi donc d'écrire cette méthode de liaison afin que vous compreniez mieux les choses. Nous associons donc une méthode ici au widget de zone de liste. Il est donc logique d' écrire cette méthode après avoir défini la liste. Widget. Nous définissons donc le widget de liste ici, nous le configurons, puis nous listons une liaison. Et la méthode bond prend deux arguments. Il prend donc le type d'événement, ainsi qu'une fonction que vous souhaitez lier au type d'événement. Le type d'événement indiqué ici se trouve en fait dans ces caractères, et il s'appelle List Box select. Ensuite, vous voulez spécifier ici une fonction qui renvoie un objet de liste avec une sélection. Donc quelque chose comme ça. En fait, nous nous attendrons à un tuple dans ce cas, un tuple avec l'ID, le titre, l'auteur, l' année et le numéro ISBN Appelons donc cette fonction, sélectionnons Row. Ensuite, nous allons de l'avant et définissons cette fonction. Définissons-le au tout début ici. Donc, je vais obtenir la ligne sélectionnée. Et cette fonction maintenant, parce que nous l'avons liée à un événement de widget, elle obtient un paramètre spécial appelé event. Et le paramètre d'événement contient des informations sur le type de l'événement. Python sait donc que lorsque vous le transmettez à la méthode bind, il s'attend à ce que la fonction ait ce paramètre d'événement. Et ensuite. Encore une fois, cette fonction retournera au tuple sélectionné Mais tout d'abord, pour que cela fonctionne, nous devons d'abord obtenir l'index de la liste à partir de la zone de liste. La liste peut comporter, disons, dix lignes, et la première ligne aura un indice de zéro, la seconde un indice, et ainsi de suite, jusqu'à neuf si nous avons dix lignes. Ainsi, pour obtenir l'index de la ligne sélectionnée de la zone de liste, nous nous référons à la zone de liste puis à la méthode de sélection cur de la zone de liste. C'est bon. Et j'aimerais simplement faire un retour temporaire de l'index ici afin que vous puissiez voir ce qu' est cet objet et à quoi il ressemble. Espérons donc que cela fonctionnera. Cela devrait fonctionner. Python. Front end, oui. Donc, en fait, nous aurions dû imprimer l'index ici. Nous ne faisons que le renvoyer, donc Imprimez l'index. Essayons encore une fois. Je pense donc imprimer l'index ici, oui. Il s'agit donc de l'index d'une ligne sélectionnée. Donc c'est zéro, un, désolé zéro entre zéro, un, deux, et ainsi de suite. Cependant, comme vous le voyez, il ne s' agit pas d'un simple chiffre. Il s'agit en fait d'un tuple, d'un tuple avec un seul élément Nous devons donc faire une astuce très simple, et nous saisissons simplement l'élément dont l'indice est zéro du tuple, qui est le numéro deux dans ce cas, zéro dans ce cas, et ainsi de suite Ensuite, nous pourrions réessayer, tout afficher, et maintenant nous obtiendrons des numéros uniques. Génial. Nous en sommes donc très proches, mais pas encore car nous devons obtenir le tuple réel avec toutes les valeurs de la ligne Et pour y parvenir, vous devez appliquer une autre méthode appelée get, disons le tuple sélectionné Ainsi, le tuple réel que nous voulons, la ligne réelle que nous voulons est égal à au moins un qui obtient un index Vous pouvez donc le lire comme ceci à partir de la case la plus petite, obtenir le tuple avec l'index X. Et ensuite nous pourrons l'essayer Alors, qu'est-ce que nous allons obtenir ici ? Ne vous y trompez pas avec cette ligne. Ceci est imprimé parce que dans le script Ben, nous avons en fait une fonction de recherche imprimée. Il s'agit donc d'imprimer le résultat de la fonction de recherche. Cette fonction dit donc de me donner la ligne avec John Smith comme nom d'auteur, et la prochaine fois, cela ne sera pas exécuté. Donc, ce que nous voulons faire c'est sélectionner une ligne et la faire imprimer sous forme de tuple Donc c'est génial. Alors, quelle est la prochaine étape ? Eh bien, nous devons ensuite transmettre l'ID du tuple sélectionné à la fonction de suppression du script principal Nous allons au bouton sélectionné. La commande est égale à la commande de suppression. C'est ainsi que je vais appeler le script, et cela devrait figurer ici. Commande D delete. Et ce que nous avons ici, c'est la suppression des points du backend. Encore une fois, la méthode delete obtient comme argument l'ID. Nous avons donc un tuple appelé get selected row, nous devons donc renvoyer le tuple sélectionné Donc, si nous appelons la fonction maintenant, get selected row selected row. Et nous avons besoin de l'élément avec l'index zéro de la ligne get selected. Enregistrez le script et nous avons une erreur à la ligne 24. Je n'ai pas la chronique ici. Essaie à nouveau. Regardez, et essayons de supprimer la lune. Supprimer. Et Python dit qu'il ligne get selected manque un argument positionnel obligatoire C'est l'argument de l'événement. Python a donc raison car nous avons ici un paramètre d'événement, nous devons donc le passer en argument. Mais ici, nous appelons la fonction sans aucun argument. Nous recevons donc une erreur. En revanche, nous ne pouvons pas supprimer cet événement car cette fonction est également exécutée par la méthode bind. Dans ce cas, le héros du jour serait une variable globale. Vous savez peut-être déjà que les variables locales, comme le tuple sélectionné, sont des variables locales car elles sont définies dans une fonction Donc, si vous imprimez ce tuple, en dehors de la fonction, sélectionnez le tuple Vous recevrez un message d'erreur car Python dira : « Oh, désolé, je ne le reconnais pas ». Il s'agit d'un objet non défini car les variables locales n'ont de sens qu'à l'intérieur de la fonction Dans ce cas, nous pouvons utiliser des variables globales. Et pour créer une variable globale, utilisez le mot clé global , puis déclarez le nom de la variable que vous souhaitez créer. Donc, dans ce cas, si vous imprimez le tuple sélectionné en dehors de la fonction, vous obtenez la valeur du tuple sélectionné, et la valeur du tuple sélectionné dans ce cas serait le tuple avec les valeurs de la ligne Dans ce cas, nous n'avons donc pas besoin de renvoyer le tuple sélectionné car nous pouvons simplement pointer vers la variable de tuple sélectionnée dans ce cas, et nous devons corriger notre fonction différée ici Nous voulons donc le tuple sélectionné et nous voulons l'élément dont l' indice est zéro à partir du tuple sélectionné Exécutons donc à nouveau. Et visualisons tout et supprimons la lune. Supprimer la sélection. Regardez tout et la lune disparaîtra. Cela semble donc fonctionner. Maintenant, je voudrais remplir les entrées avec un tuple ou une ligne sélectionné, si vous le souhaitez Nous devons donc utiliser la fonction d'insertion du widget enter, et nous pourrions réellement écrire ces méthodes dans la fonction get selected row. Comme vous savez lorsque l' utilisateur clique sur l'une des lignes, lorsqu'il sélectionne l'une des lignes, nous voulons immédiatement remplir ces entrées avec des valeurs. Et le premier serait la fin du titre et nous voulons nous assurer que l'entrée est vide. Supprimez donc zéro pour terminer. Supprimez tout de l' entrée s'il y a quelque chose. Et puis E un, insérez. Donc, ce que nous voulons insérer dans l'entrée de l'auteur. Eh bien, ce serait le tuple sélectionné avec un indice de un. L'ID a donc un indice de zéro. Le troisième titre a un index d'un, et il en serait de même pour les autres entrées. Nous avons donc E un, deux, E trois et E quatre. Et puis ici, nous voulons récupérer le nom de l'auteur. Ici, nous voulons le E et le numéro ISBN. Génial. J'espère donc que cela fonctionnera. Cela devrait fonctionner. Donc, tout afficher, sélectionner quelque chose, et il manque un argument obligatoire à la méthode d'insertion. Je pense que j'ai oublié de mettre l'endroit où je veux insérer les nouvelles valeurs. Nous avons donc besoin d'ici, ici, d'ici et d'ici. Voyons donc encore une fois, visualisons tout et maintenant cela semble fonctionner. Donc des arbres, de l'herbe, des virages et ainsi de suite. Et laissez-moi essayer de le supprimer, le supprimer, et l'entrée disparaîtra. Génial. Alors maintenant allons-y. Sans perdre de temps, allons-y et implémentons la fonction de mise à jour. Pour en revenir à notre script principal, la fonction de mise à jour obtient un identifiant et un titre, l'auteur et l'ICBM Donc, contrairement à la fonction de suppression qui n'a obtenu qu'un seul élément, elle obtient quatre éléments, cinq éléments, en fait. Ainsi, dans la fonction de commande de suppression, nous passons le tuple sélectionné avec un indice de zéro Maintenant, la fonction de mise à jour aura une structure similaire, mais nous aurons alors plusieurs arguments ici. Nous avons donc l' auteur du fichier d'identification et l'ISBN. Ainsi, le tuple sélectionné avec un indice de un est sélectionné, le tuple avec un indice de deux est sélectionné, le tuple avec un indice de trois et le tuple sélectionné avec un Ensuite, nous devons ajouter cette fonction en bas de la mise à jour. Donc, mettez à jour la commande. D'accord. Et j'ai oublié de le changer. Commande de mise à jour. Cela devrait fonctionner. Alors voyons voir. J'ai oublié de passer le nom du paramètre ici. Ainsi, la commande équivaut à la commande de mise à jour, sauvegarde et à la réexécution. Essayons de mettre à jour cette ligne. Disons donc neuf. Une mise à jour de presse sélectionnée. Et encore une erreur, n' ayez pas peur des erreurs. Plus vous voyez d'erreurs, plus vous vous familiarisez avec Python. Il est important de vous concentrer sur l'erreur, de voir sur quelle ligne elle s'affiche et d' essayer de comprendre le type d'erreur et le message que vous recevez. Dans ce cas, delete prend un argument positionnel, mais cinq ont été donnés Nous n'avons pas exécuté de fonction de suppression ici. Nous avons exécuté le bouton de mise à jour qui obtient une fonction de commande de mise à jour, et vous passez à la commande de mise à jour. Donc, la commande de mise à jour B et delete. C'est pourquoi nous recevons cette erreur. La commande de mise à jour exécute en fait la méthode de suppression du script Bend. Nous voulons donc mettre à jour au lieu de supprimer. Enregistrez le script et exécutez-le à nouveau. Tout afficher. Je veux vraiment mettre à jour ce numéro ici. Neuf mises à jour ont donc été sélectionnées, tout afficher, et cela ne fonctionne pas. Et dans ce cas, nous n'avons même pas reçu d'erreur, vous pouvez donc vous sentir perdu pour le moment. Dans ce cas, vous pouvez donc vérifier ce que vous renvoyez dans votre fonction de commande de mise à jour. Vous savez donc que vous pouvez isoler les problèmes en utilisant des instructions d'impression. Supposons donc que vous souhaitiez vérifier ce que vous envoyez à la fonction de mise à jour. Je connais le problème ici, mais juste pour vous montrer comment vous pouvez résoudre les problèmes. Alors imprimez-le et exécutez-le à nouveau. Nous sélectionnons tous les mises à jour sur les prairies. Et vous voyez que le tople est imprimé tel quel. Ce chiffre ne change donc pas. En fait, je ne l'ai pas changé. Permettez-moi donc de le modifier à nouveau. Disons 24 et mise à jour sélectionnée. Vous voyez donc que le numéro 24 n'est pas imprimé ici. Cela signifie donc que nous envoyons à la base de données. Cet enregistrement, encore une fois, nous n'envoyons donc pas l'enregistrement mis à jour. Alors pourquoi ça ? Si vous l'avez déjà trouvée plus tôt lorsque j'ai écrit cette fonction, c'est très bien. Si ce n'est pas le cas, eh bien, la raison en est que nous envoyons à la méthode de mise à jour le tuple sélectionné Et la table de sélection est celle que l' utilisateur a sélectionnée Ce ne sont donc pas les entrées réelles que l'utilisateur envoie à la commande de mise à jour. Donc, dans ce cas, nous voulons réellement envoyer ces valeurs, donc les valeurs actuelles des entrées. Je vais donc le copier et le coller ici. D'accord. Et le premier tople sélectionné est l'ID Nous voulons donc conserver le D de ligne sélectionnée car l'utilisateur modifie les autres valeurs, pas l'ID Et ça a l'air bien. Le support se ferme ici. Sûr Supprimez donc celui-ci, en toute sécurité, exécutez-le à nouveau. Nous y allons et disons trois, mise à jour est sélectionnée, V et trois sont là. Supprimez, visualisez tout, tout disparaît. Vous pouvez l'ajouter à nouveau parce que vous l'avez dans vos entrées, à l'entrée, et qu'il a été ajouté à nouveau, et vous pouvez le voir ici. Tout fonctionne donc très bien. Et nous voulons fermer ce programme, mais nous avons fermé le bouton, il ne fonctionne pas pour le moment, alors allons-y et implémentons-le également. Et c'est très simple. Il vous suffit de vous rendre ici et de commander Eagle Two. Donc tu veux détruire la fenêtre, non ? Donc, les points de fenêtre sont détruits. C'est ça. Enregistrez le script. Et essayez-le. Ils fonctionnent donc comme d'habitude, se ferment et la fenêtre se ferme. Et vous pouvez également attribuer un titre à votre fenêtre et utiliser la méthode WM title de l'objet window. Titre. Disons livre, magasin. Et vous devriez voir ce nom dans la barre de titre. Enfin, nous en avons terminé avec ce programme, et je sais qu'il y a peut-être des choses à améliorer, et je serais heureuse de recevoir toute suggestion de votre part afin que nous puissions améliorer le programme. Les programmes ont des versions dont c'est la version zéro, pourrait-on dire. J'espère que vous l'avez trouvé très utile et que vous en avez beaucoup appris. Je te parlerai donc plus tard. 173. 172. Créer des exécutables .exe et .app à partir du script Python: Salut encore une fois. Nous avons donc cet excellent programme qui fonctionne très bien. Et il se compose de trois fichiers. Donc deux fichiers Python et un fichier de base de données à points, où les données sont stockées. C'est une bonne chose. Nous pouvons exécuter les scripts comme ceci. Donc, en utilisant Python, nous obtenons le programme affiché. Mais je pense que si vous voulez donner votre programme à quelqu'un d'autre, vous pouvez simplement lui dire  : Oh, installez Python et vous pouvez exécuter le programme en allant sur le terminal et en invoquant Python et un script Cela peut donc devenir très difficile pour les utilisateurs qui n'ont pas d' expérience en programmation Dans ce cas, vous voulez créer un programme exécutable autonome que vous pouvez simplement envoyer à n'importe qui, et il peut simplement double-cliquer dessus, insérer des données et récupérer des données, etc. Dans cette conférence, je vais donc vous montrer comment créer un fichier exécutable, et comment créer ce fichier, que vous soyez sur Mac, Windows ou Linux. Le code est donc le même. Il existe une excellente bibliothèque pour créer des exécutables autonomes. C'est le programme d'installation du Pi. Vous pouvez donc installer Pi Installer à l'aide PIP. Maintenant, il est très facile de créer un fichier exécutable autonome à partir de votre script Python Tout ce que vous avez à faire est d'appeler programme d'installation de Pi, puis de pointer sur votre script. Dans ce cas, notre script principal est front and point py. Il s' agit donc d'un script qui contient tout le code et qui importe également le script principal. Nous voulons donc pointer vers ce fichier. Et si vous le laissez comme ça, vous obtiendrez un fichier point X si vous êtes sous Windows, un fichier si vous êtes sur un Mac Et avec ces fichiers, vous obtiendrez également un tas d' autres fichiers associés à votre programme. L'avantage de cela est qu'il devient plus facile de résoudre les erreurs que vous pourriez rencontrer Vous avez donc beaucoup de fichiers, puis vous pouvez accéder à ces fichiers et trouver l'erreur, etc. Mais si vous voulez être pratique, vous devez passer un paramètre ici. Appelé un fichier. Cela créera donc un seul fichier exécutable pour vous. Et dans ce formulaire, vous verrez également la ligne de commande du terminal affichée en arrière-plan de votre interface utilisateur graphique. Donc, si vous ne le souhaitez pas, vous pouvez spécifier un autre paramètre appelé fenêtré comme celui-ci et exécuter Et tu devras attendre un moment. Et mon exécutable a été créé. Donc, si vous étiez sur un Mac, il s'agirait d'un fichier. Le mien est donc ici dans le dossier du disque. Donc, dans ce dossier, je peux regarder ici. Donc point frontal x. Si vous exécutez cela, vous obtenez la fenêtre. Et comme vous le voyez, vous avez également obtenu les livres générés par le fichier DB. Par défaut, cela crée uniquement un fichier exécutable. Ensuite, lorsque vous exécutez le programme pour la première fois, souvenez-vous que nous avions une fonction de connexion dans le script principal Cette fonction crée donc une base de données. C'est donc ce que cela a fait. Et si vous les visualisez maintenant, vous n'avez aucune ligne. Vous n'avez donc aucune donnée, car cela a été créé de toutes pièces. Ainsi, si vous souhaitez disposer de la base de données existante, vous devez fournir à votre utilisateur à la fois le fichier exécutable et la base de données existante que vous possédez. Donc, par exemple, supposons que cela n'existe pas, et que je puisse accéder à ma base de données existante, et si je la mets ici, Python sache où rechercher la base de données. Maintenant, si vous les visualisez toutes, vous obtiendrez les données de la base de données existante. Et nous pouvons faire un test rapide. Ajoutons un livre, le grand court métrage D Taylor, année 1913, et ajoutons-y un chiffre. À l'entrée, et l'entrée est ajoutée à la base de données. Et vous pouvez fermer le programme, et c'est tout. J'espère que cela vous plaira. Je vous verrai lors de la prochaine conférence. 174. 173. Qu'est-ce que la programmation orientée objet (OOP): Bonjour, et bienvenue dans cette nouvelle section où vous découvrirez la programmation orientée objet, souvent appelée OOP en abrégé Maintenant, si vous avez de l'expérience en programmation, c'est probablement un concept familier pour vous car le POO est utilisé dans la plupart des langages Mais je suppose que vous ne savez rien de la programmation orientée objet Je vais donc expliquer le concept dès le début. Maintenant, il existe différentes définitions de l'OP, et certaines deviennent très délicates. Mais je pense que la meilleure chose à savoir est que programmation orientée objet n'est qu'un moyen d' organiser votre code. Cela signifie que l'OOP n'est pas indispensable. Vous pouvez donc simplement utiliser des fonctions pour créer une application, comme nous l'avons fait ici avec notre application de librairie, et de nombreux programmeurs choisissent de ne pas utiliser programmation orientée objet pour organiser leur code, donc ils n'utilisent pas la méthode OOP pour écrire leur code, en Cependant, il est généralement admis que si vous avez plus de deux fonctions, elles appliquent des opérations au même objet. Par exemple, un programme qui applique des opérations à une interface Kiner. Vous avez donc ces fonctions de rappel. Vous devez donc organiser ces fonctions dans ce qu'on appelle une classe. programmation orientée objet étant La programmation orientée objet étant un concept complexe, je ne l'ai pas inclus au début de ce cours. Je voulais donc que vous créiez d'abord des applications en utilisant des fonctions, ce qui est plus intuitif, puis que vous passiez à la programmation orientée objet. Revenons donc à notre application d'interface utilisateur graphique. Donc, l'objet ici, je parle d'objets, et l'objet ici est également la fenêtre entière avec les boutons et autres widgets. Nous pouvons maintenant placer tous les attributs qui définissent cet objet, donc cette fenêtre, tels que le titre des boutons, les étiquettes, ainsi que les fonctions de rappel attachées à cet objet dans une classe Dans notre application, nous n'avons donc pas utilisé de classes, nous avons utilisé des fonctions. Ce script ne s'applique donc pas à la programmation orientée objet, et placer cet objet dans une classe signifie que nous organisons le code dans une classe, ce qui crée un objet C'est pourquoi nous l'appelons programmation orientée objet. Et l'utilisation de classes pour organiser votre code est appelée programmation orientée objet. Et ce que je vais faire ensuite, c'est dans mon script principal où se trouvent les opérations de base de données. Je vais transformer ce script en le plaçant dans une classe. Ensuite, vous pouvez faire de même pour l' interface frontale afin de pratiquer la programmation orientée objet. Maintenant, mon but ici n'est pas de vous apprendre à écrire des cours. Je veux d'abord que vous compreniez les cours, et de nombreuses ressources d'apprentissage expliquent la programmation orientée objet en disant quelque chose comme nous créons une classe qui crée un objet en forme de chien, et un chien peut chauffer et aboyer, etc. » C'est un bon exemple à suivre pour apprendre la syntaxe d'une classe. Mais bon, qu'est-ce qu'un chien dans la programmation ? Je veux dire, vous pouvez vous gratter la tête toute la journée en essayant de trouver un scénario dans lequel vous auriez un chien comme objet dans votre application. C'est toujours un bon exemple, mais uniquement si vous avez quelques années d'expérience en programmation et que vous pouvez rapidement déterminer où et quand utiliser des classes sur la base de tels exemples. Je suppose que vous n'avez pas ces années d'expérience Je vais donc utiliser de vrais objets de programmation dans cette section pour expliquer un concept aussi délicat que la programmation orientée objet. La meilleure façon de comprendre OP est donc de créer d'abord un programme avec une approche connue de programmation orientée objet , donc en utilisant des fonctions, et une fois que vous connaissez bien ce programme, vous le reconstruisez à nouveau, en utilisant OP, puis vous comprenez automatiquement ce qu' est OP en regardant en quoi les choses sont différentes. Permettez-moi donc d'organiser ce code à l'aide de classes maintenant. Plus tard, nous créerons un programme plus simple à partir de zéro, lequel nous créerons un objet de compte bancaire avec Python, et nous appliquerons des fonctions à cet objet, telles que le retrait de dépôt, etc. Oh, c'est génial. Et oui, c'est à propos de cette introduction. Passons à la prochaine conférence et écrivons quelques cours. 175. 174. Utiliser la POO dans un programme, partie 1: Bien. Je vais maintenant transformer ce script en un style de programmation orienté objet. En d'autres termes, je vais organiser ces fonctions de manière plus efficace. Et juste pour vous rafraîchir la mémoire, ce que fait ce script , nous avons un script principal et un script frontal, et le front-end construit l' interface utilisateur graphique, donc vous le savez Et nous avons le fichier de base de données de ces livres, et il y a des données là-bas. Et vous pouvez rechercher des entrées pour des lignes dans la base de données sur Nouveau, etc. Et ce front end point pi construit l'interface utilisateur graphique, et ce back-end est responsable de l'interaction avec la base de données La programmation orientée objet consiste donc à encapsuler des fonctions dans une classe so class et appelons cette base de Et oui, c'est ça, en gros. Nous avons encore beaucoup de choses à faire, mais réfléchissons à ce qu' est cette classe de base de données. Eh bien, chaque fois que vous décidez d'utiliser la programmation orientée objet, vous devez d'abord réfléchir à l'objet que vous souhaitez utiliser, c'est-à-dire à l'objet auquel vous souhaitez appliquer ces méthodes. Et dans notre cas, ce serait la base de données. Ensuite, nous insérons des données dans les tables de cette base de données et nous les visualisons, etc. De cet objet, cet objet, vous devez d'abord créer un objet minimal lorsque vous appelez la classe. Et je vais vous montrer comment organiser un cours en une minute. Mais pour le moment, concentrons-nous sur la création du plan de l'objet Vous créez donc le plan de l'objet, qui est celui-ci ici, puis vous créez des instances d'objet à l'aide de ce plan, et vous le faites en appelant la classe Maintenant, lorsque vous appelez la classe, vous voulez avoir cet objet minimal. Dans ce cas, il s'agirait donc d'établir une connexion à cette base de données. Ensuite, créez un objet curseur et vérifiez peut-être la table afin de vous assurer que votre base de données possède une table afin de vous permettre d' appliquer ultérieurement des méthodes à cette table de base de données. Dans le cas contraire, la base de données serait inutile. Il doit donc avoir une table et une connexion établie. Cela signifie que vous devez trouver un moyen d'exécuter ces lignes ici lorsque vous appelez la classe . Et Python a réservé une syntaxe spéciale pour cela. La première fonction de votre script doit donc appelée avec un double soulignement au recto et au verso Il s'agit donc d'une fonction d'initialisation, qui signifie initialiser un objet Dans d'autres langages de programmation, cela s'appelle un constructeur, pourquoi il construit l'objet. Ainsi, lorsque vous appelez une classe, cette fonction est exécutée, mais pas les autres. Elles sont exécutées si vous vous y référez, dans ce cas, ce serait quelque chose comme l'insertion de points dans une base de données, puis vous y transmettez les paramètres, les arguments. Nous avons maintenant pas mal de choses à ajouter dans le script pour que cela fonctionne. Mais je préférerais le faire par essais et erreurs. Nous l'exécutons et verrons quelle erreur nous obtenons afin que vous compreniez comment les choses fonctionnent là-bas. Ce que je vais faire, c'est appeler ce cours tel qu'il est actuellement. Nous n'avons donc pas besoin de cette fonction. Cette fonction a disparu maintenant parce que je la remplace par elle. Vous n'appelez donc plus les fonctions comme nous le faisions ici. Ainsi, par exemple, nous appelons ici des fonctions depuis le module principal, qui est comme un module, vous l'importez en tant que module Et dans ce cas, ce que nous faisons, c'est à partir du backend, importer la base de données Nous importons donc la classe de base de données depuis le script Becan. Cela rend donc disponible la classe de base de données pour nous. Donc, le plan de base de données. Ce n'est donc qu'un plan. Nous devons maintenant créer un objet à partir de ce plan. Appelons donc cette base de données d'objets. Cela équivaut à une base de données. Donc, la classe et pour l'instant, ne passons aucun argument ici. Ensuite, nous devons remplacer ces références afin de ne plus faire de backend. Nous faisons une base de données de cette vue. Nous faisons donc référence à la fonction d'affichage de l'objet de base de données, qui est une instance de cette classe. Génial. Je vais donc remplacer ces autres par une base de données. Alors revenez en arrière et remplacez cela, remplacez, remplacez. Oui, c'est ça. C'est le nom du script, et il devrait être comme ça. Échappez-vous ici. Génial. Maintenant, je vais aller de l'avant et exécuter cela. Ne vous attendez donc pas à ce que cela fonctionne, mais nous devons examiner de près l'erreur, essayant de comprendre ce qu'elle dit. Donc, retracez le fichier avant le point pi, ligne 4. Ici. Il ne prend aucun argument positionnel, mais un seul a été donné. Et ce qui se passe ici maintenant, c'est que lorsque vous appelez la classe, celle-ci crée une instance d'objet et la stocke dans cette variable. Ensuite, il envoie cette instance d'objet à cette fonction. Permettez-moi donc de le diviser sur la droite afin que nous ayons les deux scripts ici. Donc, le front end et le back end. Donc, en gros, cette instance d'objet de base de données est envoyée à cet objet d'initialisation Même s'il s'agit d'un support vide. C'est donc comme une syntaxe cachée. Et pour résoudre ce problème, vous devez effectuer une astuce ici. Il dit donc qu'il ne prend aucun argument positionnel car il y a en fait un crochet vide ici C'est donc comme une fonction et des fonctions normales si vous n'y mettez pas de paramètre, mais que vous transmettez ensuite un paramètre lorsque vous l'appelez. La fonction dira : « Je ne prends aucun argument positionnel ni aucun argument obligatoire Mais un argument m' a été donné, je vais donc signaler une erreur. Maintenant, pour résoudre ce problème, vous devez y passer un paramètre. Et tout le monde s'y transmet. Vous pouvez donc transmettre n'importe quel mot qui fonctionnera toujours. Mais en tant que convention pour que votre code soit lisible par d'autres personnes, vous devez vous transmettre vous-même. Maintenant, votre fonction d' initialisation prend un paramètre, et lorsque vous appelez cette classe, cette classe envoie l'instance d'objet, et cette instance d'objet entre dans ce paramètre Ce paramètre sera donc remplacé par l' argument d'instance d'objet. Génial. Si vous ne comprenez toujours pas cela, je suis sûr que vous le ferez plus tard au fur et à mesure que vous écrirez d'autres cours. Bien. Maintenant, je vais enregistrer ceci et cela et réessayer le script . Et super. Cela signifie donc que la classe a été initialisée avec succès et qu'elle a créé une instance d' objet pour nous Maintenant, permettez-moi de fermer ceci et peut-être d'y ajouter quelque chose. Ce n'est pas nécessaire, mais juste pour vous montrer que si vous souhaitez ajouter plus de paramètres à votre fonction d'initialisation, vous devez faire quelque chose comme DB, puis le remplacer par Dib, puis vous passez ici l'argument qui sera transmis à ce paramètre de base Ce serait donc books point dB le chemin du fichier vers notre base de données. Génial. Et si vous l' exécutez à nouveau, vous obtenez le même résultat. Ce qui se passe ici, c'est que Python sert à envoyer l'instance de l'objet de base de données au paramètre self, puis il envoie le chemin du fichier au paramètre de base de données, et que les paramètres de base de données envoient ce chemin au paramètre de base de données de la méthode de connexion. Génial. Voyons maintenant comment ces méthodes fonctionneront. Nous avons donc le bouton d'affichage Si nous appuyons dessus, fonction d'affichage de la classe de base de données se produira . En fait, la méthode d'affichage de la classe de base de données sera exécutée. Alors celui-ci, voyons voir si nous pouvons l'obtenir. Eh bien, erreur, permettez-moi de fermer ceci. Il indique donc une vue sans aucun argument positionnel, mais aucun argument n'a été donné Cela suggère donc à nouveau que lorsque vous appelez une méthode de classe, la classe envoie également l' instance d'objet à cette méthode, comme elle l'a fait avec la fonction init Cela signifie que nous devons refaire l'affaire. Passez-y el et réessayez, voyez quelle erreur nous obtenons cette fois. Eh bien, pas d'erreur. Les choses fonctionnent, évidemment. Donc c'est génial. Cependant, si vous essayez maintenant les autres méthodes, comme l'insertion, vous obtiendrez probablement une erreur. Alors laisse-moi essayer. Donc, si vous êtes tous, cela fonctionne bien, mais si nous insérons quelque chose, disons bonjour et oui, à l'entrée. insertion prend donc quatre arguments positionnels, mais cinq ont été donnés. Alors insérez. Et ces valeurs sont transmises à ces paramètres, mais nous transmettons également l'instance de l'objet. Allons-y donc par nous-mêmes, et je ferai de même pour la recherche. Supprimer et mettre à jour. Oui, c'est ce que nous avons. Ça a l'air bien. Essayons encore une fois. Alors, visualisez tout et ajoutez une entrée. Oui, ça a l'air de fonctionner. Tout afficher et nous avons ici l'un ou l'autre Fermer. Nous avons donc pu créer une classe et y placer toutes les fonctions. Nous avons donc maintenant un programme organisé. C'est donc de la programmation orientée objet, mais la programmation orientée objet ne consiste pas simplement à placer certaines fonctions dans la classe. La programmation orientée objet est une question de bon design. Ce script n'est donc probablement pas le meilleur design que nous puissions trouver. C'est parce que nous n'utilisons pas les avantages réels que nous avons en utilisant des classes. Donc, ce que je veux dire, c'est qu' ici nous créons ces méthodes, et dans chaque méthode, nous exécutons des fonctions proches et créons également une connexion dans chacune des méthodes. Nous pouvons donc réduire davantage ce code en supprimant les actions répétées. Donc, dans une classe, vous devez d' abord penser à un moyen de un moyen de construire quelque chose, dans la fonction d'initialisation Et puis vous faites référence à ce quelque chose dans les autres fonctions des autres méthodes. Nous parlons donc de méthodes ici. Donc, même si notre script fonctionne bien, lors de la prochaine conférence, nous allons continuer à en améliorer la conception. Alors je t'y verrai. 176. 175. Utiliser la POO dans un programme, partie 2: Bien. Nous avons pu transformer notre script, qui a été construit à l'aide de fonctions, et nous avons créé une classe et placé ces fonctions dans cette classe. Elles sont donc maintenant appelées méthodes. Et bien qu'il s' agisse d'une utilisation d'une classe, ce n'est toujours pas la meilleure utilisation du paradigme de programmation orientée objet. Parce que nous avons ici une base de données, un objet de base de données en cours de création, mais que nous ne le traitons pas comme un objet solide, nous l'ouvrons et le fermons dans chaque méthode. Donc, ce que je pense, c'est que nous créons une connexion lorsque nous appelons la classe. Ainsi, lorsque cette fonction est exécutée, nous y créons une connexion et nous la maintenons ouverte. Je n'inclus donc pas cette méthode de fermeture ici, mais je laisse la méthode de validation au cas où il n'y aurait pas de table, et une table sera créée, et les modifications seront validées dans la connexion ouverte. Maintenant qu'une connexion y est ouverte, il n'est pas nécessaire d'en établir une nouvelle dans chaque méthode. Et nous n'avons même pas besoin de créer un objet curseur, car l'objet curseur est créé ici. Nous nous débarrassons donc de ces deux lignes dans chaque méthode. Donc, dans la vue, nous avons un objet curseur lorsque nous allons ici, puis nous exécutons cette instruction sur cet objet curseur. C'est donc une bonne chose. Ensuite, nous descendons ici, ces deux-là aussi. Et pour la méthode de suppression. Une mise à jour également. Génial. Maintenant, voyons comment cela se passe. Laisse-moi m'en rapprocher. Nous appelons donc le script frontal dans lequel nous créons une instance de notre objet. Jusqu'ici, tout va bien. Tout afficher. Et il est indiqué qu'aucune courbe de nom n' est définie à la ligne 17. Nous avons donc exécuté la méthode view. Et ce que fait la méthode view, c'est qu'elle essaie de trouver une variable déclarée variable dans la fonction. La variable de courbe ne la trouve pas, puis elle recherche s'il existe une variable en dehors de la fonction et elle ne la trouve pas. En fait, une variable a été déclarée dans cette fonction d'initialisation, mais il s' agit d'une variable locale Cela n'a de valeur que dans cette fonction. Vous ne pouvez pas y accéder en dehors de la fonction d'initialisation. Mais si nous nous référons à l'argument self, qui est l'objet de base de données et voyons ce que nous obtenons. Laisse-moi clore ça. Enregistrez cela fonctionne et visualisez tout, et maintenant nous avons un autre type d'erreur. Et cela indique une erreur d'attribut. Alors laisse-moi clore ça. Regardez donc attentivement ici et cela indique que objet de base de données n'a pas de courbe attributaire. C'est dans la ligne 17, donc celle-ci ici. L'objet de base de données, celui-ci est celui-ci ici. self a donc été remplacé par database, qui est l'objet créé par cette classe. Il s'agit d'un attribut de cet objet. Et pour résoudre ce problème, nous devons y créer un attribut. Nous disons donc « self point cursor point cur », Eagles connection point cursor ». Donc, la méthode du curseur de l'objet de connexion de la bibliothèque QSt Three Maintenant, si nous réessayons le code, il indique que la courbe du nom n'est pas définie à la huitième ligne. Maintenant que nous avons créé un attribut. Cela essaie de trouver la courbe variable, la courbe variable locale, qui n'est pas dans cette fonction car il s'agit maintenant d'un attribut de la classe. Cela signifie que nous devons également nous référer à soi ici, à l'objet, puis à l'exécution de la courbe, etc. Donc, si nous essayons cela maintenant, nous obtenons une autre courbe linéaire qui n' est pas définie dans la ligne 18. Donc ici, cela signifie que vous devez faire de même et que nous n'avons plus de variable de courbe. Nous avons l'attribut cur. Donc maintenant, si je l'exécute à nouveau, je vais probablement avoir une erreur concernant la connexion cette fois, la variable Con. Nous ne sommes pas tous définis à la ligne 19. Encore une fois, cette fonction de vue essaie de trouver la variable conconnection, donc auto-commit ici et là aussi. Vous déclarez donc l' attribut ici et vous validez les modifications ici. Et la connexion automatique se ferme. Donc ça a l'air bien maintenant. Une rose est égale à ça. Donc, rose est juste une variable locale créée ici, puis nous renvoyons la rose récupérée à partir de cette expression Cette méthode renvoie donc ceci lorsqu'elle est appelée dans ce script, juste ici. Bien. Et oui, laissez-moi essayer ce que nous avons à ce stade. Le nom C de la ligne 7 mm n'est pas défini. Oh, oui, nous devons faire de même pour ces deux-là, et tout semble bien maintenant. Essayons donc à nouveau. Oui, visualisez tout, et maintenant nous avons les données. Mais lorsque j'appuie dessus pour la deuxième fois, nous obtenons une autre erreur. Il indique donc qu'il ne peut pas fonctionner sur une base de données fermée. Alors pourquoi ça ? Eh bien, j'ai appuyé une fois sur le bouton d' affichage, et cette méthode a été exécutée. L'objet curseur a donc pu récupérer ces données, puis nous avons fermé la connexion J'ai renvoyé les rangées. Nous avons donc pu y placer ces trois rangées. Mais lorsque j'appuie une deuxième fois sur le bouton d'affichage, la méthode de visualisation fait face à une connexion fermée. C'est pourquoi vous obtenez que cela ne peut pas fonctionner en cas d'erreur de base de données fermée. Alors, voyons ce que nous obtiendrons. Alors regardez tout, cela fonctionne bien. Ouaip. Cela signifie que nous pouvons aller de l'avant et modifier les autres méthodes. Donc, curseur automatique et connexion automatique et supprimez la fermeture. Pensons à fermer la connexion plus tard. Alors ne vous concentrez pas là-dessus maintenant. Essayez simplement de faire en sorte que ces méthodes fonctionnent, soi ici, là et là. Encore une fois, pour la méthode Dalit, supprimez la fermeture de la connexion Et tout devrait bien fonctionner à ce stade. Voyons donc si tout cela fonctionne. Cherchons quelque chose. Voyons voir et rechercher une entrée. Oh, nous avons un curseur là-bas. Curr n'est donc pas défini dans la recherche. Oh, oui. Désolée. OK, encore une fois, nous allons tous voir l'entrée de recherche. Et encore une erreur de nom. Le nom rose n'est pas défini. Donc, par erreur, j'ai converti cette variable locale en attribut. Donc rose ici, rose là. OK, encore une fois. Nous tous et maintenant cela semble fonctionner. Ajoutons donc quelques données. Ajoutez-y une entrée et ne pouvez pas opérer sur une base de données fermée. Oh, pourquoi ? Mm. Parce que dans la méthode de recherche, nous avons une base de données fermée, nous la fermons donc. Et je néglige cela, donc nous n'avons plus de méthodes fermées là-bas, non. Alors essayons encore une fois . Désolée pour ça. Ajoutez une entrée, et maintenant cela semble fonctionner correctement. Génial. Donc, tout semble bon, sauf que nous n'avons plus la méthode fermée parce que nous ne pouvons pas conserver cette méthode dans les méthodes de notre classe, car vous vu lorsque nous avons cette méthode là et nous nous retrouvons avec cette erreur. Ou vous pouvez laisser le code sans méthode fermée. Mais vous rencontrerez des problèmes plus tard car si certaines méthodes n' ont pas été validées, lorsqu'un autre programme se connecte à votre base seront validées lorsqu'un autre programme se connecte à votre base de données. Lors de la prochaine opération. Donc ça gâche parfois certaines choses. Donc, en règle générale, vous devez fermer la connexion. Et pour cela, il existe une autre méthode spéciale que vous pouvez ajouter à votre classe, comme celle-ci ici, mais celle-ci sert à détruire votre objet C'est ce qu'on appelle un deal. Donc, pour la suppression, cela permet également d'obtenir l'instance de l'objet en tant que paramètre. Cette méthode est donc appliquée, exécutée lorsque vous appelez une instance de la classe comme nous le faisons dans le script frontal ici, tandis que celle-ci est exécutée lorsque cette instance est supprimée du script, c'est-à-dire lorsque le script est quitté Donc, avant que le script ne se termine, cette méthode sera exécutée. Et ce que nous voulons faire ici, c'est fermer le point de connexion automatique. Cela devrait donc faire l'affaire. Maintenant, si nous essayons cela, nous devrions obtenir les mêmes résultats. Je l'ai donc ajouté par erreur, mais de toute façon, nous verrons si vous pouvez le rechercher et obtenir la rose avec cette valeur particulière. C'est donc ma solution, et il n'y a pas de méthode standard pour écrire un script. Il peut donc y avoir d'autres alternatives pour résoudre ce problème pour créer cette application. Vous pouvez donc également choisir d'ajouter une méthode ici ou là dans l'interface utilisateur graphique. Vous pouvez donc faire quelque chose comme ajouter un bouton, comme le bouton Commit, puis ajouter ici une autre méthode appelée Commit. Ensuite, vous supprimez probablement toutes ces méthodes de validation de ces méthodes des méthodes de vos opérations escult Et puis tu as mis cette méthode. Donc, une méthode commit dans cette méthode de validation de votre classe. Ainsi, lorsque la pression de l'utilisateur est validée, vous validez les modifications apportées à la base de données. Ce serait donc une autre solution, mais c'est ce que nous avons trouvé dans ce cas particulier. J'espère donc que vous comprenez certaines choses maintenant, et cela est rarement utilisé. Donc normalement, vous n'avez qu'à utiliser dedans et ensuite les autres méthodes. Mais cela est approprié lorsque vous souhaitez appliquer quelque chose juste avant de quitter le programme. Donc c'est génial. Et lors de la prochaine conférence, j'écrirai un autre cours. Nous allons donc réfléchir à la manière de modéliser un problème, qui consiste à créer une sorte d'objet de compte bancaire dans lequel nous rétablissons un solde monétaire. Ensuite, nous retirons et déposons de l'argent sur ce solde. Maintenant, à titre d'exercice, vous pouvez convertir ce script , qui fait partie intégrante du programme, le front-end en un formulaire orienté objet Vous mettez donc cela dans un cours et vous essayez de trouver une bonne solution. Je vais également vous fournir une solution à ce problème. Mais avant cela, j'aimerais que vous essayiez vous-même afin de vous entraîner un peu à la programmation orientée objet. Oui, c'est bon pour ça. Je vous verrai lors de la prochaine conférence. 177. 180. Créer une page d'ouverture d'utilisateur: Bonjour. Dans cette conférence, je vais vous montrer comment créer une application mobile minimaliste en utilisant Python et sa bibliothèque Kivi Ce que nous allons créer, c'est cette application d'une page que vous voyez ici. Comme je vous l'ai montré dans la vidéo précédente, cette application est en fait une application multi-écrans. Ainsi, lorsque vous cliquez sur Connexion, vous passez à un autre écran, puis inscrivez à un autre écran et ainsi de suite. Mais dans cette conférence, je vais simplement vous montrer l'application minimale, qui ressemble à un modèle que vous pouvez utiliser pour écrire n'importe quelle autre application, qu'elle ait un seul écran ou plusieurs écrans. Je vais donc garder cette capture d'écran ici à l'écran. Parce que cela est nécessaire lorsque vous créez l'interface, l' interface graphique, pour que vous puissiez coder en regardant votre design. Cela peut également être dans une feuille de papier où vous avez dessiné un croquis de l'apparence de l'interface. Il vous faut donc un fichier Python. C'est ainsi que tout commence. Et je vais appeler mon fichier main point pi. Vous n'êtes pas obligé de le nommer point principal pi, mais c'est une bonne pratique, car plus tard, lorsque nous déploierons notre application, lorsque vous convertirez votre application en une application mobile exécutable qui s'exécute sur un vrai téléphone mobile, vous devrez nommer votre fichier point principal pi. C'est donc une bonne idée de le nommer dès maintenant, afin de ne pas avoir à le renommer plus tard, ou peut-être que vous oublierez plus tard et que vous aurez des erreurs. Donc point principal pi. Ce point principal pi est l' endroit où la logique du programme sera écrite en langage Python. Et il y a aussi un autre fichier que vous devez créer. Vous pouvez le nommer comme bon vous semble, mais je vais l' appeler design KV Il faut donc utiliser l'extension KV et séparer l'écran Je vais le mettre ici. J'ai cette tarte ici, et je vais aussi vous montrer cette photo ici pour qu'elle reste là. Et je veux dire que cette tarte doit rester ici. C'est bon. Alors, c'est quoi ce KV ? Eh bien, pas de quoi s'inquiéter. C'est en fait une bonne chose. Il existe deux manières de créer une application mobile avec Python et la bibliothèque Kivi La première consiste à tout écrire en Python, c' est-à-dire la logique du programme. Ainsi, le traitement et tout ce qui se passe arrière-plan avec les données vous traitez concernent les connexions des utilisateurs, récupération des données d' observation météorologique ou l'emplacement de votre application Et l'autre partie du programme est l' interface utilisateur graphique, c'est ce qu'il y a ici. Donc, une sorte de langage, vous avez besoin d'une sorte de langage pour dire, Oh, une étiquette avec cette taille de police, cette famille de polices, ce manuel, etc. Et vous pouvez le faire en Python, mais ce n'est pas une bonne pratique. C'est une bonne idée d'écrire cette interface graphique dans un fichier KV à points en langue kiwi Mais la langue kiwi est très, très simple. Tu vas l' apprendre en un jour. Je ne vais donc pas vous montrer comment faire dans les deux sens. Je ne vais donc pas vous montrer comment créer une application en utilisant les deux méthodes, c'est-à-dire la méthode qui consiste à avoir tout dans le fichier point py et la méthode avoir la logique dans le fichier point py et l'interface graphique dans le fichier KV, je vais juste vous montrer la bonne méthode, qui consiste à utiliser Python pour la logique et KV pour les C'est ce que tous les professionnels utilisent. Alors, s'il te plaît, apprends de cette façon. Et nous partons du fichier Python. La première étape consiste à importer tous les objets nécessaires depuis KV Depuis l'application qv point App Import. C'est l'objet principal. Il symbolise l'application de KV Lang Import. Si vous vous demandez comment connecter le fichier Python au fichier KV, la réponse est cet objet Builder, que je vais vous montrer dans une minute après avoir importé un autre objet depuis le gestionnaire d'écran qv point UIX, Import, le gestionnaire d'écran et l'écran Et c'est tout. Ensuite, vous utilisez la méthode du générateur qui charge le fichier, et là vous chargez le design de ce fichier KV C'est ainsi que ce script connaîtra le fichier KV. Assurez-vous que ces deux fichiers se trouvent dans le même répertoire, main point pi design point KV Ensuite, vous accédez à votre fichier KV. Le langage KV fonctionne au niveau hiérarchique. Il s'agit donc d'une hiérarchie d'objets. Il s'agit donc d'un écran et cet écran contient des widgets. Donc, si vous n'avez qu'un seul écran, vous allez écrire. Donnez simplement un nom à l'écran et utilisez ces symboles, puis une colonne. J'appelle donc cet écran l'écran de connexion. Et puis si vous avez un autre écran, disons que lorsque vous cliquez sur ce bouton, l'écran d'inscription apparaît. Ensuite, vous souhaitez écrire un autre écran comme un écran d'inscription. De la même manière. Mais pour l'instant, nous n' aurons qu'un seul écran. Et si vous vous demandez, comment ai-je obtenu cette belle couleur violette ? Eh bien, il s'agit d'une mise en évidence syntaxique pour le langage Kiwi, et vous pouvez utiliser une extension, l'extension Kiwi. Il suffit donc de rechercher Kiwi et d'utiliser cette extension. Alors installez-le puis activez-le. Et vous allez obtenir une mise en évidence de la syntaxe dans code de Visual Studio, ce qui est une bonne chose. Alors, l'écran de connexion contient des widgets, j'ai dit. Et une fois que vous avez appuyé sur Entrée, vous souhaitez effectuer une mise en retrait avec un onglet ou quatre espaces, comme en Python Le premier widget est donc une étiquette. Mais au lieu de cela, vous souhaitez ajouter un autre widget au-dessus de l'étiquette. C'est un widget invisible, mais c'est toujours un widget. C'est une mise en page en grille. Vous n'utilisez plus ces symboles. Vous ne l'utilisez que pour l'écran. Une mise en page en grille, c'est essentiellement le type de zone, qui comportera tous les autres widgets. Donc, ici, nous allons ajouter les autres widgets, et c'est un moyen de séparer la zone. Donc l'écran. Et je pense que je pense séparer mon écran ou organiser mon écran en ayant une disposition en grille principale qui contiendra tout, puis cette disposition en grille contiendra deux autres mises en page en grille Disposition en grille pour cette zone ici. Et cette disposition de grille particulière comportera une colonne et un nombre indéfini de lignes Vous pouvez donc ajouter autant de lignes que possible dans cette disposition en grille. Donc, ce que je veux dire, c'est une disposition en grille, puis une autre grille. Disposition. La première disposition de la grille est donc cette grille entière, qui ne comportera qu'une seule colonne. Et cette disposition en grille est composée de deux mises en page en grille. Celui-ci ici, et celui-ci ici. Donc celui-ci est et c'est ça. Si je le lis de cette façon, c'est parce que cette zone contient des widgets organisés de la même manière, ce qui signifie que nous n'avons qu'une seule colonne ici. Et nous avons ici deux colonnes. Donc, dans cette deuxième mise en page en grille, je vais déclarer culte 2, l'attribut. Et ici, par défaut, ces mises en page en grille n' ont qu'une seule colonne Je vais donc le laisser sous forme d'une seule colonne. Ensuite, ce que vous ajoutez ici est étiqueté. C'est le premier widget que nous avons ici. Entrez puis tapez sur Tabulation pour que tout soit indenté Le texte de l'étiquette est entre guillemets, identifiant de l'utilisateur. Ensuite, ce que nous avons sous l'étiquette est une saisie de texte. Le texte du texte saisi. Ce n'est pas ce que nous voulons ici. Ce que nous voulons ici, c'est un texte d'indication. Donc, le nom d'utilisateur que vous voyez dans le manuel est comme un indice pour l'utilisateur Nom d'utilisateur. Nous ajoutons donc ici des widgets sous forme de lignes pour cette disposition en grille. Ensuite, nous avons une autre saisie de texte avec un texte d'indice. Mot de passe. Et puis nous avons un bouton avec connexion par SMS. Ensuite, nous passons à l' autre disposition de la grille. Nous avons deux boutons ici. Le premier a un mot de passe oublié par SMS, et l'autre un texto, inscrivez-vous, et c'est tout. Et c'est tout ce que vous avez à faire pour le moment pour accéder à l'écran de connexion. Maintenant, il y a aussi autre chose que vous devez faire ici. Passez donc au premier niveau d'indentation, identique à l' écran de connexion. Tu vois ici. Juste là, et vous voulez ajouter une autre règle. Donc, dans la langue kiwi, ces éléments, dans les symboles contenus dans ces symboles, sont des règles. Cette autre règle est le widget root. Il s'agit donc essentiellement d'un widget invisible qui enregistre tous les écrans de l'application. Et dans ce cas, nous n'avons qu'un écran de connexion. Et cet écran de connexion doit avoir un nom. Disons donc l' écran de connexion entre guillemets. Vous verrez plus tard que nous aurons besoin de ce nom lorsque nous ferons référence à l'écran de connexion depuis le fichier Python, car la logique sera écrite en Python, où vous dites que si l' utilisateur appuie sur ce bouton, nous allons dire quelque chose comme un écran dont le courant est égal à l'écran de connexion. Nous allons donc donner le nom de l'écran que Python va afficher lorsque l'utilisateur appuie sur ce bouton. Et c'est tout ce que nous devons faire dans le fichier KV. Assurez-vous de ne pas utiliser d'opérateurs d' affectation à la place de colonnes. Utilisez donc des colonnes. J'avais l'habitude de faire cette erreur lorsque j'apprenais langage QV parce que vous êtes habitué à Python où vous utilisez beaucoup d'opérateurs d' assignation, jetez un œil à votre fichier puis vous passez à Python Et ce que nous devons faire en Python maintenant, créer des classes vides qui ont le même nom que ces règles ici. Ce qui signifie classe. L'écran de connexion utilise le même étui. J'utilise donc L et S ici, comme ici. Il faut donc que ce soit exactement la même chaîne. Et cette chaîne doit hériter de l'objet d'écran. Ce sera donc un objet d'écran. Pour l'instant, disons qu'il suffit de passer. Ensuite, vous devez créer une autre classe, qui est, vous l'avez deviné, le widget racine Chaque règle ici doit être représentée par une classe dans Python. Le widget racine doit hériter du gestionnaire d'écran. Donc, ne vous inquiétez pas si ce code est un peu rigide pour le moment. Vous avez donc des règles qui ressemblent à une boîte noire. Mais considérez-le comme un simple modèle. Vous allez utiliser ce modèle pour toutes les applications, c'est donc une bonne chose de le faire également. Enfin, c'est la dernière chose, je te le promets. Vous avez également besoin de l'application principale de la classe. Il s'agit donc de l'objet d'application que nous n'avons pas encore utilisé. Cela doit donc hériter de l'application. C'en est une et cela nécessite une méthode appelée build. Soi. Chaque méthode a donc besoin d'un paramètre propre. Cette méthode de construction est donc en fait une méthode d'application. Vous pouvez le voir si vous l'utilisez ici. J'ai donc exécuté cette ligne et ma chère application. Vous verrez que built fait partie de ces objets, ces méthodes s'y trouvent, build. D'accord. Et donc cette méthode construite va renvoyer le widget racine. Mais assurez-vous qu'il s'agit de l' objet et non de la classe. Nous sommes donc en train d'initialiser le widget root ici. Vous pouvez voir que j'utilise les crochets. Et la toute dernière chose, c'est si et une fois que nous l'avons fait, c'est l'application maintenant. Nous sommes prêts à exécuter. Mais comme vous le voyez ici dans le fichier Python, nous n'appelons aucune classe. La toute dernière chose à faire est donc, bien sûr, d'appeler la classe d'application principale. Une bonne pratique à faire est d' utiliser si le nom est égal à deux. Principal. Ensuite, vous créez une instance de l'application principale, puis vous utilisez la méthode d' exécution de l'application principale, qui est d'ailleurs une méthode d'application. Vous pouvez donc également voir une course ici, juste là. Enregistrez ce script, je vais maintenant exécuter le fichier et voir ce que nous obtenons. Bien entendu, je m'attends à des erreurs, car je ne pense pas avoir tout fait à 100 %. Oui, je n'ai pas reçu d'erreur. Tout va bien dans le terminal, mais l'interface ne ressemble pas à ce à quoi je m'attendais. J'ai donc commis quelques erreurs à cet égard. Ainsi, parfois, vous ne recevez pas d'erreur dans le terminal, ce qui rend plus difficile la résolution du problème Et si aucune erreur ne s'affiche, elle devrait apparaître dans le code de votre fichier Q. Donc, dans ce cas particulier, il semble que la disposition en grille ne fonctionne pas comme elle est censée l'être. Et la raison en est que je n'ai pas précisé nombre de colonnes que la mise en page de grille doit avoir, la disposition de grille principale, mais aussi l' autre, l'enfant de cette disposition de grille parent. Donc, avant d'apporter une modification, vous devez fermer cette fenêtre. Je vais aller ici. Je vais donc transmettre un attribut culte, comme je l'ai fait avec cette disposition en grille. Permettez-moi donc de le tester d'abord avec cette disposition de grille parent. Voici donc ce que nous obtenons. Comme vous pouvez le constater, par rapport à cela, nous ne voyons pas les premiers éléments de mise en page de la grille, savoir une étiquette, le nom d'utilisateur, mot de passe et le bas. Parce que ces widgets sont en fait cachés dans le bas de ce mot de passe oublié. Ils sont donc quelque part ici. Dans le coin. Ainsi, lorsque vous ne spécifiez pas ces colonnes, le nombre de colonnes dont vous disposez, Kiwi place simplement tous les widgets dans le coin inférieur gauche. Donc, si nous le fermons maintenant et que nous ajoutons également un attribut d'appels égal à un, et si je ne l'enregistre pas et que je le réexécute, je verrai le même résultat. Je dois donc enregistrer le script, Control S, puis le réexécuter. Et cette fois, nous voyons plus ou moins ce à quoi nous nous attendions. Eh bien, nous devons encore ajouter du rembourrage et espacement entre les widgets pour que cela ressemble à Mais c'est ce que nous avons obtenu jusqu'ici, et je pense que c'est une bonne chose. Je vais donc fermer ceci maintenant et considérer ce code comme terminé. Mais avant de terminer la vidéo, je vais m'assurer que vous comprenez ce qui se passe ici. Donc, ce fichier Kiv, tous ces éléments que vous voyez ici, la disposition en grille, l'écran de connexion, le bouton de saisie de texte, ce sont en fait des objets Python Certains d'entre eux, tels que l'écran de connexion et les widgets root sont des objets représentés par des classes que nous avons créées dans le fichier Python, l'écran de connexion et le widget racine. Les autres sont des classes que vous importez depuis Kiv. Donc, si nous devions coder en Python uniquement, et non en langage Kiv, nous devrions faire quelque chose comme, à partir du point Kv UixGridayout C'est donc la même classe que celle-ci ici. Mais le fichier KV importera implicitement ces objets. Il les importera donc soit depuis votre fichier Python, tel que l'écran de connexion et widget root, soit depuis la bibliothèque Kivi Dans ce cas, nous n'importons donc aucune disposition en grille ici. Ou il en serait de même avec le bouton. Donc, à partir de KV, cliquez sur le bouton Importer. Idem pour le widget de texte. Nous n'importons donc pas ces objets ici. Il s'agit donc des objets. Ce sont tous des objets, puis vous avez les attributs de ces objets. Donc, si vous ouvrez un shell Python et que vous importez cet objet de mise en page de grille comme je l'ai montré ici, puis que vous faites la mise en page de grille entre crochets, vous verrez que CLS est l'un des attributs de l'objet de mise en page de grille Et il s'agit donc des objets. Maintenant, à propos de la hiérarchie d'une application KV, cela fonctionne comme suit. L'application est la plus haute dans la hiérarchie. Donc, cet objet d'application est ici. Vient ensuite le gestionnaire d'écran, qui est en fait représenté par le widget racine. Le widget root vient donc après l'application, puis nous avons l'écran qui est représenté par l'écran de connexion. Cet écran de connexion n'est donc qu'un enfant de l'écran. Il se comporte de la même manière qu'un écran. Et d'ailleurs, nous aurions également pu faire autre chose ici, que je vais vous montrer tout à l'heure. Vous pouvez simplement passer l'écran de connexion comme ça. Et puis ici, vous pouvez ajouter la racine Tidget qui est dans la hiérarchie, au-dessus de l'écran de connexion Et puis dans l'écran de connexion, vous pouvez passer le nom de connexion. Un écran juste comme ça. Et tu pourrais le supprimer. Ce serait donc le même code, et vous obtiendrez le même résultat, comme vous pouvez le voir ici. Cela indique donc ce que je viens de dire : widget root est un parent , puis vient un écran de connexion et à l'intérieur de l'écran de connexion, vous avez une disposition en grille, vous avez une autre disposition en grille, une autre disposition en grille , une saisie de texte, etc. Cependant, pour que le code reste mieux organisé, car ici, dans le widget racine, plus tard, nous devrons ajouter un autre écran, comme écran d' inscription, pour que celui-ci ait ses propres enfants aurait alors un autre écran, comme écran d'erreur de connexion, où l'utilisateur serait envoyé s'il y avait une erreur dans les informations de connexion. Le code deviendrait donc trop complexe. Par conséquent, nous avons à la place l'écran de connexion en règle générale et également le widget root en règle générale. Ensuite, nous précisons que l'écran de connexion est en fait un enfant du widget root utilisé ici. Et donc, de même, nous ajoutons d'autres écrans de la même manière. C'est donc quelque chose à garder à l'esprit car cela vous aide à mieux comprendre le fonctionnement de Kiwi. C'est ce que j'ai pensé de cette vidéo, et j'espère vous voir dans la prochaine vidéo. 178. 176 . Créer un cours de compte bancaire: Eh bien, dans les conférences précédentes, j'ai mentionné que je créerai un programme et une application dans lesquels nous gérerons une sorte de compte bancaire afin d'avoir un solde, puis nous appliquerons certaines opérations telles que retirer l'argent de l'objet du compte bancaire et déposer de l'argent également. Je vais stocker la valeur , donc le solde, dans un simple fichier texte. Ce n'est donc pas l'un des dix programmes que nous élaborons dans le cadre du cours. C'est juste pour vous familiariser avec cours et pour les expliquer un peu plus. Je vais donc faire un peu de ménage ici. Permettez-moi donc de créer un dossier ici. Et placez tous ces fichiers existants dans ce dossier. Nous avons donc les fichiers précédents ici, et je vais créer un nouveau dossier maintenant. Appelons ce compte. Et dans ce dossier, j' aurai mon script Python. Alors appelons-le comme ça. Donc, en compte, nous avons ce fichier Python, et nous avons également besoin de ce fichier texte. Nous allons économiser le solde actuel de notre compte bancaire. Ce sera donc une application banale car dans la vraie vie, vous ne voulez pas enregistrer les informations du compte bancaire, le solde dans un fichier texte Dans la vraie vie, vous voulez enregistrer cela dans une vraie base de données, comme Post Gras Well, par exemple. Mais pour pratiquer la programmation objet ou autre, nous allons simplement enregistrer la valeur du solde dans ce fichier. Voici donc notre entrepôt. Et par souci de simplicité, nous ne travaillerons que sur un seul compte. Notre programme sera donc en mesure de traiter un seul objet de compte, car si vous avez plusieurs comptes, la solution peut être différente de celle-ci. Vous devrez donc probablement penser à avoir une table et peut-être qu' une base de données serait nécessaire ici. Pensons donc à notre compte personnel. Vous pouvez utiliser ce programme pour vos notes personnelles Vous pouvez donc suivre votre solde et utiliser ce programme Python. Et maintenant, l'objet ici est le compte bancaire. Et cet objet, nous devrions commencer à réfléchir aux attributs que cet objet de compte bancaire devrait avoir comme état initial. Nous avons donc parlé de cet objet minimal, et un compte bancaire aurait, bien entendu, un solde initial. Commençons donc par créer cet objet de compte et appelons-le compte. Tu peux l'appeler comme tu veux, mais je vais l'appeler « compte ». C'est donc la première fonction que nous voulons définir et nous y transmettons self. Et restons comme ça pendant un moment. Et nous avons dit que l'objet de notre compte bancaire comporterait un attribut de solde. Et dans notre cas, nous avons ce point d'équilibre TXT, et créons-y une valeur initiale. Maintenant, pour créer une instance d' objet, nous devons récupérer cette valeur et la transmettre à notre fonction d'initialisation afin construire cet objet minimal Comme nous avons un fichier, nous devons lire ce numéro dans ce fichier. Et naturellement, ce que vous voudriez transmettre ici, c'est un paramètre tel que le chemin du fichier. C'est ainsi que je vais l'appeler et maintenant, si vous vous souvenez, dans l'application librairie du script principal, nous passons également un paramètre à la fonction d'initialisation Ensuite, nous avons créé un objet de connexion à partir de ce fichier de base de données. Dans ce cas particulier, ce que nous voulons créer est un entier, donc un nombre issu de ce fichier à partir de ce chemin de fichier. Vous pourriez donc faire quelque chose comme avec Open. Nous gérons donc les fichiers avec des méthodes avec un chemin de fichier ouvert, et il s'agit d'un fichier texte, nous devons donc utiliser notre mode, qui signifie lire. Nous ouvrons donc le chemin du fichier, ce fichier en mode lecture. En tant que fichier. Il s'agit donc simplement d'une variable temporaire qui existe dedans avec une instruction. Ensuite, nous devons lire ce fichier. Donc quelque chose comme file point RED. Oui, c'est ça. Cela permettra de lire le fichier, mais vous ne le stockerez nulle part. Donc, ce que vous voulez faire, c'est dire que self and balance est égal à file point Read. Cela permettra donc d' enregistrer la valeur dans le fichier texte dans cette variable d' instance. Il s'agit donc d'une variable d'instance. C'est ainsi que ça s'appelle. En fait, il s'agit de la variable d' instance et de l'objet, donc de l'objet du compte. Bien. C'est presque bon. Et nous devons également y ajouter la fonction integer car elle sera lue sous forme de chaîne par défaut. Nous devons donc convertir cette valeur en un entier. Oui, cela devrait fonctionner, et cela devrait construire l'objet pour nous, l'objet de l'acte avec un équilibre. Et avant de créer la méthode de retrait similaire ici, puis la méthode de dépôt. Je préférerai d'abord appeler une instance de cette classe. C'est ce que je vais faire ici. Disons que vous triez cela dans la variable de compte. Ce sera donc l'objet, l'objet qui sera créé à partir de ce plan, le plan du compte, là vous devrez passer cet argument, l'argument de ce paramètre, l'argument de ce paramètre, qui est balance Génial. Et pour lui-même, Python transmettra automatiquement l'instance de l'objet du compte. Bien. Maintenant, cela va créer une instance d'objet. Et laissez-moi imprimer cet objet ici. Nous voyons donc certains résultats en action. Python, et c'est dans le dossier du compte et dans Act Pi. Nous avons reçu une erreur, aucun fichier ou répertoire de ce type pour balance point TXT. Et la raison en est que nous devons également y transmettre le répertoire des comptes. Donc, et cette fois, ça marche. Nous avons dû transmettre le répertoire là parce que nous nous trouvons dans ce dossier dans le dossier de démonstration, et vous devez d' abord transmettre le dossier du compte , puis pointer sur le solde de TXT. Et voici le résultat. Il est donc indiqué « objet du compte point principal ». Donc, l'objet du compte du module principal. Et ce qu'est Min lorsque vous exécutez un script, comme nous l'avons fait ici, si vous pointez sur le script avec Python, Python attribue ce nom au module. Ce module aura donc ce nom et le script, en fait, mais il est traité comme un module. Mais si vous importez ce module. Donc, si je courais, j'ouvre un shell interactif maintenant. Donc, depuis le dossier du compte, importez. AC, ce qui se passe, c'est que vous exécutez également la fonction d'impression. Mais cette fois, lorsque vous importez un fichier, donc lorsque vous ne l' exécutez pas comme nous faisions précédemment avec le compte Python, AC that Pi, lorsque vous importez le module, le module obtient le nom du script dans lequel il est écrit. Donc dans ce cas, c'est AC sans l'extension. Et ici, vous obtenez également le nom du package du module. Les packages sont donc constitués de modules, et un package est comme un dossier, et là vous avez plusieurs modules ou un module, comme nous l'avons dans ce cas. Notre package ici est account, donc account, puis il contient ce module, puis ce module a cette classe, la classe de compte. est donc quelque chose que je voulais vous montrer des packages, des modules et des classes. Génial. Maintenant, je vais quitter ce shell Python et jouer un peu avec ce script. Et ce que nous avons fait ici, nous avons imprimé l'espace du nom de l' objet, mais nous n'avons pas obtenu le solde réel en sortie parce que nous ne le renvoyons pas ici. Mais si vous voulez obtenir le solde, vous devez pointer sur le solde, en utilisant une notation par points pour indiquer l'objet contenant l'attribut solde. Voyons donc ce que nous obtiendrons cette fois. Et oui, 1 000. C'est donc le solde actuel. Comme vous pouvez le constater, vous pouvez accéder aux attributs de votre instance d' objet en utilisant la notation par points. Bien. Ajoutons-y maintenant ces autres méthodes. Et que peut-on faire avec un compte bancaire ? Eh bien, nous pouvons retirer de l'argent. Et vous devez toujours transmettre self dans toutes vos méthodes, puis le paramètre qui s'applique à cette méthode en particulier. Dans ce cas, lorsque vous retirez de l'argent, vous avez en tête le montant que vous souhaitez retirer. Vous y transmettez donc le montant en paramètre. Non, juste pour qu'il soit clair que tu comprends ce que je fais. Ce que je fais ici, c'est que j'ai un solde initial qui est lu à partir de ce fichier, donc de ce fichier texte, puis je veux autoriser l' utilisateur à effectuer des opérations, donc retirer de l'argent de ce solde. Et une fois que l'utilisateur a exécuté la méthode de retrait, je souhaite mettre à jour le numéro de solde dans l'instance de l'objet Et je ne veux pas encore écrire ce solde dans mon fichier de solde. Je veux donc juste calculer quelque chose ici, comme si l' équilibre personnel était égal à l'équilibre personnel. Eh bien, c'est un retrait, donc moins le montant que je souhaite retirer. Cela signifie que l'auto-équilibre sera égal à 100 à 100, disons, et je vais me retrouver avec un solde actualisé de 900 dans ce cas Si je le souhaite, je peux ouvrir à nouveau ce fichier ici , puis y écrire ce solde mis à jour. Ce serait donc une solution. Mais une solution plus constructive serait probablement d'avoir une méthode spécifique qui valide les modifications apportées au fichier. Vous pouvez donc retirer de l' argent, puis déposer de l'argent au cours de la même session, puis appliquer la méthode de validation pour enregistrer les modifications. C'est donc la solution que je souhaite rechercher. Oui, nous en avons fini avec la méthode de retrait. Maintenant, déposez vous-même et effectuez à nouveau le montant. Il s'agit donc d'une variable locale. Il s'agit d'une variable locale. Il se trouve qu'ils portent le même nom, mais ils n'ont pas grand-chose à faire l'un avec l'autre. Et l'auto-équilibre est égal à l' auto-équilibre majoré du montant dans ce cas. Voyons à quoi cela sert. Et je garderai ici cet objet d'instance qui est en cours de génération. , nous insations une instance d'objet En d'autres termes, nous insations une instance d'objet et imprimons le solde actuel Ensuite, je veux retirer de l'argent. Depuis l'objet de mon compte. Cela signifie que j'applique le retrait à l'objet du compte, et le retrait nécessite deux arguments. Donc, l'instance de l'objet, qui est transmise automatiquement, puis le montant, qui peut être de 100. Et une fois cela fait, je veux imprimer le solde mis à jour. Voyons ce que ça va faire. Oui, 1 000. Ainsi, une instance d'objet est créée et vous en imprimez 1 000 parce qu'ici vous en avez 100, puis retirez 100 et vous obtenez 900. Génial. Donc, si vous l'exécutez à nouveau, vous remarquerez qu' une nouvelle instance d'objet est à nouveau créée. Vous n'avez donc plus 900 comme solde actuel. Tu en as 1 000. Cela signifie donc que vous devez écrire les modifications dans le fichier si vous souhaitez conserver cet équilibre. Et nous pouvons le faire en utilisant des méthodes. Appelons cela un commit. Et passez-moi là-bas. Et je ne pense aucun paramètre dont j'ai besoin pour passer par cette méthode de validation car nous ne travaillerons qu' avec les variables existantes. Ce serait donc un peu comme avec open, eh bien, nous devons ouvrir le chemin du fichier, mais nous avons un petit problème ici car une variable de chemin de fichier n'est plus qu'une variable locale dans cette méthode d'initialisation Donc, si nous le transmettons ici, cette fonction, cette méthode, ne la reconnaîtra pas. C'est donc un peu différent de l'autre script de backend que nous avons écrit, car ici nous avions ce paramètre comme ici Mais dans ce cas, ce paramètre n'a été utilisé que dans la méthode d'initialisation Nous ne l'avons donc utilisé nulle part ailleurs. Il existe donc une solution à cela. Une solution serait d'aller de l' avant et d'en emprunter une autre , appelons cette voie ici. Donc un autre paramètre pour la méthode de validation. Ensuite, lorsque nous appelons la méthode de validation comme nous le faisions avec le retrait, nous devions passer le point de solde TXT. En fait, ce chemin vers la méthode de validation. Bien que cela puisse fonctionner, ce n'est toujours pas la meilleure pratique du paradigme orienté objet. Nous devons donc chercher une autre solution. Et cela reviendrait à rendre cette variable locale et cette variable d'instance. Et pour ce faire, vous devez faire quelque chose comme self et le chemin du fichier est égal au chemin du fichier. Et ce que cela fait, c'est le chemin du fichier, ne le confondez pas avec celui-ci. Il se trouve que c'est pareil, mais vous pouvez également écrire autre chose ici, comme n'importe quoi. C'est donc le paramètre de la fonction unitaire. Donc, le solde que TXC ira à ce paramètre. Le chemin de ce fichier ira donc à ce paramètre. Ensuite, vous créez cette variable d'instance, et cette variable d'instance sera égale à ce chemin. Mais tu peux utiliser ce truc ici. Vous pouvez l'utiliser où bon vous semble dans votre classe. Et dans notre cas, nous aimerions l'utiliser ici. Nous ouvrons donc le chemin du fichier self la bonne manière cette fois, car cette fois nous devons écrire ou remplacer avec plus de précision pour remplacer le solde actuel, qui devrait être celui-ci, par exemple Nous voulons remplacer cela par ce fichier. Donc, en tant que fichier, il s'agit simplement d'un fichier variable temporaire et d'un fichier à écriture par points et d'un équilibre automatique des points. Bien, essayons ça. Et nous n'avons reçu aucune mise à jour dans le fichier ici parce que j'ai oublié d'appeler la méthode de validation. Donc, une fois que nous aurons retiré de l'argent, imprimons-le dans la console. Et puis account point Commit sans passer d'argument explicitement car implicitement, nous transmettons l'instance de l'objet Bien. Et nous avons reçu une erreur indiquant littéral n'est pas valide pour un entier en base dix Ce serait donc le nombre entier de la ligne six. Ici, la valeur lue par cette méthode n' est pas convertie en entier. Et la raison en est que cette valeur a disparu de balance that txty, et il s'agit de la lecture d'une chaîne vide Il s'agit donc d'une chaîne vide qui est lue à partir de ce fichier, puis vous essayez de la convertir et cela ne fonctionne pas. Maintenant, la raison pour laquelle nous avons obtenu ce fichier vide de chaîne vide ici est lorsque nous avons reçu l'erreur précédente, donc ici, l'argument doit être une chaîne, pas un entier. Python a donc ouvert le fichier avec la méthode, mais il n'a pas pu réellement écrire de valeur dans ce fichier. Le fichier s'est donc retrouvé vide. Permettez-moi donc d'y écrire la valeur initiale, et maintenant nous devrions pouvoir l'exécuter à nouveau. Et oui, nous avons maintenant la valeur mise à jour. Encore une fois, nous avons créé l'instance d'objet, puis nous avons imprimé le solde actuel, qui a été lu dans ce fichier, qui était de 1 000 au début, puis nous en avons retiré 1 000, afin que le solde soit mis à jour, puis nous avons validé ces modifications dans ce fichier, donc nous en avons obtenu 900. Maintenant, même chose si vous voulez en ajouter, disons, 200 et effectuer un dépôt. Voyons si cela fonctionnera. Euh, oui, ça a été imprimé. Vérifie le dossier. Ouais. C'est donc notre nouvel équilibre. Et oui, j'espère que cela clarifie certains concepts de la programmation orientée objet Si vous êtes créatif, vous pouvez continuer et développer ce script, afin d'y ajouter d'autres méthodes et peut-être d'en faire une application plus réaliste. C'est tellement génial. Il s' agit de cette conférence, et dans la prochaine conférence, je parlerai de l'héritage, et nous développerons ce script en y appliquant l'héritage. Alors, je vous parlerai lors de la prochaine conférence. 179. 177. Créer des classes grâce à l'héritage: Génial Nous en avons presque fini avec les cours. Mais il y a un dernier concept que j'ai besoin que tu saches, c'est l'héritage. L'héritage est le processus de création d'une nouvelle classe à partir d'une classe de base. Donc, une nouvelle classe qui possède toutes les propriétés et les méthodes d'une classe de base, mais qui possède également d' autres méthodes. Alors pourquoi faisons-nous cela ? Eh bien, je vais vous expliquer cela à travers notre exemple. Nous avons donc ce plan, donc ce cours. Et permettez-moi de supprimer ceci pour ne pas vous embrouiller. Nous n'avons donc fait qu' appeler les instances de classe. Nous avons donc cette classe qui crée un objet de compte bancaire pour nous. Ensuite, nous pouvons retirer et déposer de l'argent sur le compte bancaire. Et si nous voulions transférer de l'argent depuis ce compte bancaire ? Donc, depuis notre compte bancaire, transférez de l'argent sur un autre compte bancaire. Eh bien, il faudrait ajouter une méthode de transfert ici. Et puis faites quelque chose comme un équilibre personnel égal à l' équilibre personnel moins le montant. Nous y transférons donc un montant de transfert, qui est soustrait de notre solde ici Mais pour autant que je sache, vous ne pouvez pas transférer d'argent depuis votre compte d'épargne. Vous pouvez transférer de l'argent depuis votre compte courant, mais pas depuis un compte d'épargne. Cette méthode n'aurait donc aucun sens pour un compte courant. Et ce compte est un compte bancaire général. Donc, ce que nous pourrions faire, c'est peut-être créer une autre classe, comme si nous pouvions la copier créer une autre classe et l' appeler autrement. Nous avons donc toutes ces méthodes. C'est donc une solution. L'autre solution consiste à utiliser l'héritage. C'est donc là que l'héritage est utile. Vous dérivez une classe à partir d'une classe de base, qui est une classe plus générale comme cette classe de comptes ici. Créons donc une nouvelle classe. Cette nouvelle classe est appelée sous-classe, et ce sera la classe de base Encore une fois, vous devez utiliser la même syntaxe que vous utilisez pour une classe Q ou là pour créer une Appelons cela un compte courant. La première chose que nous voulons faire est de créer une méthode innit Avec cette méthode d'initialisation, nous allons créer comme cet objet minimal dont je viens de parler Comme dans notre classe de base, nous avons également besoin ici d'un équilibre dans notre fichier, nous avons donc besoin de ce chemin de fichier. Mais au lieu de réécrire ce code, comme je l'ai dit, vous pouvez abord créer une méthode de fonction d'initialisation et, bien sûr, y transmettre self Vous transmettez toujours le paramètre self, qu' il s'agisse d'une classe de base ou d'une sous-classe Ensuite, dans cette méthode d'initialisation, vous souhaitez appeler la méthode d'initialisation de votre classe de compte, ce qui signifie que lorsque vous créez une instance d'objet de votre classe de vérification, cette méthode sera exécutée lorsque cette méthode sera exécutée, cette méthode exécute la fonction d'initialisation de votre méthode de compte afin que vous créiez cet objet minimal, qui est le même que celui-ci votre méthode de compte afin que vous créiez cet objet minimal, qui est le même que mais nous aurons ensuite quelques méthodes supplémentaires ici. Donc, un compte courant, c'est cela et d'autres choses. Et ici, vous devez passer self et l'autre paramètre nécessaire à cette fonction d'initialisation Nous passons donc ici deux paramètres, et nous devrions faire de même ici. Et si je l'exécute maintenant, je vais avoir une erreur. Donc, par intention, je veux que vous voyiez quelle erreur nous obtenons. Permettez-moi donc de créer une instance de cette fonction. Donc, je vérifie Oh, oui, essayons ça. Hum, ici. Ouaip. C'est dans le dossier du compte, donc ici, puis point pi. Voyons voir. Donc, la première chose que cela signifie est que le chemin du fichier n'est pas défini à la ligne 21, qui est celle-ci ici. Et la raison en est que nous n'avons défini aucun chemin de fichier dans cette fonction. Vous pouvez donc le passer entre crochets d'initialisation en tant que paramètre Ensuite, vous devez également le transmettre ici. Supposons donc que l'on compte le point de balance TXT. Bien. Et nous n' y voyons aucune sortie parce que nous n'imprimons rien. Mais ce qui s' est passé en gros, c'est qu'une instance d'objet a été créée et qu'elle a été appelée, cette méthode a été appelée. Et cette classe a également été initialisée. Maintenant, si nous essayons de le faire , le but de l'héritage est de vérifier les méthodes d' accès de la classe de base sans écrire ces méthodes dans votre sous-classe Supposons que nous vérifiions ce dépôt et que nous y mettions un montant. Alors dix. Maintenant, si nous l'exécutons, nous obtenons cette erreur d'attribut qui indique que objet de vérification n'a pas de dépôt d'attribut, donc cela ne reconnaît pas cette méthode. Et la raison en est que nous n'avons pas encore satisfait à la syntaxe de l'héritage. La clé ici est donc de passer un argument à notre sous-classe de vérification Et cet argument est une classe de base, donc le nom de la classe de base. Supposons que si vous faites de même maintenant et que vous imprimez le résultat pour voir ce qui se passe, vous pouvez équilibrer automatiquement les points. Désolée, je voulais dire vérifier ce solde. Je suis désolée pour ça. Et oui, maintenant ça a l'air de fonctionner. Cette méthode a donc été reconnue, et elle est passée de 1 100 , soit le solde initial, à 1 110 Cela a donc imprimé la variable d'accès au solde de la classe de base C'est ainsi que nous déposons l' argent sur notre compte courant. Maintenant, nous voulons transférer de l'argent, nous devons donc définir une nouvelle méthode ici, appelons ce transfert. Transférez vous-même là-bas ainsi qu'un montant variable local, donc en tant que paramètre. Il ne s'agit donc que d'une variable locale. Ça n'a rien à voir avec ça une fois ici. Ensuite, nous voulons mettre à jour le solde. Nous voulons donc transférer de l'argent sur un compte. Ce montant sera soustrait de notre solde. Cela signifie donc que l'auto-équilibre est égal au solde personnel moins le montant. Maintenant, si nous essayons une nouvelle méthode là-bas. Nous en sommes donc à ce stade. Transférons 110. Ouais Je m'attendais à en avoir 1 100 ici, mais j'ai obtenu ce chiffre Et cela s'explique par le fait que nous n'avons pas les modifications plus tôt lorsque nous avons déposé de l'argent. Ainsi, lorsque nous avons exécuté le script maintenant, une instance d'objet a été créée dès le début et elle a obtenu ce numéro ici, qui n'a pas été mis à jour car nous n'avions pas validé les modifications plus tôt, mais vous voyez l'idée. Donc, de cet équilibre, en soustrayant celui-ci ici, nous obtenons Cela signifie que la méthode de transfert fonctionne, mais il suffit d'y appliquer la méthode de validation. Encore une fois, nous pouvons valider ces modifications. Oui, voyons ce que nous allons obtenir maintenant. Donc, à partir de 1 100, je veux en transférer 100, et maintenant je pense que ce chiffre sera mis à jour à 1 000 Voyons voir. Oui, 1 000 imprimés ici et 1 000 ici aussi. Cela fonctionne donc très bien. De plus, une autre chose que je veux que vous sachiez à propos de l'héritage est que vous pouvez ajouter vos propres variables d'instance pour votre sous-classe Par exemple, dans ce cas, notre seule variable d'instance est le solde, qui a été héritée de la classe de base du compte. Mais nous pouvons ajouter nos propres variables d' instance. Supposons donc que ce transfert soit également payant. Ainsi, lorsque vous effectuez un virement, votre banque vous débite de l'argent. Et vous voulez donner ces frais comme paramètre. Restons donc simples et disons que lorsque vous transférez de l'argent, il faut lorsque vous transférez de l'argent, déduire le solde moins le montant moins les frais. N'appliquons donc pas de pourcentages ici. Supposons que nous ayons des frais de 1$ par transfert. Maintenant, si nous appliquons à nouveau la méthode de transfert, nous allons probablement recevoir une erreur car ces frais ne sont ici qu'une variable locale. Donc, ce que vous devez faire dès maintenant, c'est transformer ces frais en une variable d'instance, c' est-à-dire que les frais self-point sont égaux aux frais. Cela signifie que si vous répercutez maintenant des frais ici, disons, 1$ ou toute autre devise , et que vous les répercutez ici, cela ira ici, et cela sera égal aux frais que vous transférez ici. Ensuite, nous pouvons utiliser cette variable d' instance et l' utiliser dans cette méthode de transfert. Génial. Maintenant, nous en sommes à 1 000, et laissez-moi exécuter ceci. Ouais Donc 899, et ce sont les mêmes ici, ce qui signifie 100 à 100 moins les frais, vous obtenez ce numéro Et oui, j'espère que vous pouvez voir en quoi héritage est pratique pour créer des sous-classes à partir de la classe de base C'est tout pour cette conférence, et il nous reste encore une conférence à suivre. Dans la prochaine conférence, je vais clarifier certains termes de la programmation orientée objet. Ce sera donc une courte conférence, qui vous sera utile plus tard lorsque vous vous référerez à la documentation, car il existe de nombreux concepts dans OOP, et je ne veux pas que vous vous y confondiez Je pense donc que c'est une conférence importante. Oui, je te parlerai plus tard. 180. 178. Glossaire OOP +++: Bonjour encore une fois. Et dans cette conférence, j'aimerais m' assurer que vous connaissez la terminologie de la programmation orientée objet en Python. Nous avons maintenant la classe, qui est ce modèle ici, ou vous pouvez l'appeler un prototype qui définit les caractéristiques d' un objet sur le point d'être créé C'est donc la classe, puis nous avons l'instance d'objet ou simplement l'objet. Cette année est donc un objet. donc d'un objet de compte courant qui stocke des données dans ce chemin de fichier spécifique et qui possède cet attribut. Il a donc ces frais. Ensuite, nous avons des variables d'instance, et ce sont des variables définies dans les méthodes de la classe, comme le chemin de défaillance ici. Et ceux-ci sont accessibles par l'instance par l'instance d' objet créée par cette classe. Ensuite, nous avons également quelque chose appelé variable de classe. Donc, variable d'instance et variable de classe. Nous n'avons créé de variable de classe dans aucune des conférences précédentes. Je vais donc aller de l'avant et en créer un maintenant. Créons-en un pour notre compte courant. Donc, ce serait quelque chose comme disons que le type est égal à deux. Secouant. Ainsi, une variable de classe est déclarée en dehors des méthodes de cette classe, et les variables de classe sont partagées par toutes les instances de classe. Les variables d'instance sont donc partagées uniquement par l'instance d'objet. Par exemple, laissez-moi vous expliquer cela. Ici, il s'agit d'une de nos instances d'objet, nous n'avons donc qu'une seule instance d' objet ici, mais nous pourrions en avoir plus. Je vais donc le copier et créer une autre instance d'objet ici. Et j'appellerai ça, disons que c' est le compte courant de Jack. Je vais donc remplacer ceci et cela. Et voici le compte courant de John. Et ils y ont également leur espace de stockage personnel. Disons Jack point TXT et Joan point TXT. Jack a donc 100 dollars et Joan 200 dollars. Bien. Nous devons donc changer cela, Jack Jack et Joan. Et si nous exécutons ce script maintenant, nous obtiendrons deux valeurs imprimées. Donc, moins un pour cette déclaration, parce que Jack en avait donc 100$, mais il a ensuite transféré 100$, puis moins les frais de 1$. Et puis il s'est retrouvé avec moins de 1 dollar là-bas. Il possède de l'argent à la banque. Et puis John en avait 200, il en a 99 maintenant. Donc, ce que j' essaie de dire, c'est que ces variables n'appartiennent qu'à leur objet. Mais si tu essaies maintenant, Jack est en train de cocher la case. Vous souhaitez donc imprimer ce type de point à cocher Print Jones . Vous verrez que cette variable de classe est partagée par toutes les instances de cette classe. Quelle est donc la différence entre les variables de classe et d'instance ? Les variables de classe sont rarement utilisées , vous devrez donc vraiment les transmettre ici. Un autre concept est désormais celui des chaînes de documents. Et une chaîne doc est généralement transmise dès que vous écrivez le mot clé clas, il suffit donc de descendre le mot-clé class Cela fournit l' explication de votre cours. Supposons que cette classe génère des objets de compte courant. Ensuite, vous le fermez par trois guillemets. Donc, vous savez, si nous l'imprimons, pour récupérer l'une de nos instances d' objet, disons que Jo coche le point. Double soulignement, Doc, et encore fois double soulignement . Alors imprimez ça. Comme vous le voyez, une chaîne doc est utilisée pour fournir des informations sur cette classe. Il est donc bon de définir la chaîne lorsque vous écrivez des classes afin que les autres, s'ils utilisent votre classe, puissent appliquer cette opération ici, ils puissent voir de quoi parle la classe. Cela est particulièrement utile lorsque vous importez des classes à partir de modules. Ainsi, lorsque vous ne voyez pas réellement le code de votre classe, vous pouvez le faire et vous avez accès à la chaîne de documentation de la classe. Et puis nous avons un concept de membres de dota, qui fait référence en fait de classe ou à des variables d' instance Il s'agit donc d'un membre de données et c'est également un membre de données. Ensuite, nous avons le constructeur, qui était cette fonction d'initialisation Et comme vous le savez, la fonction init, c'est le constructeur qui construit votre classe. Ensuite, vous avez des méthodes de classe que vous appliquez à votre instance d'objet. Le transfert est donc une méthode de classe. C'est donc aussi une méthode, mais c'est une méthode spéciale, c'est donc un constructeur Et l'instanciation, si vous entendez parler d'instanciation, est un processus de création d'instances d' Donc des instances d'une classe. Comme s'il s'agissait d'une instanciation de la classe. Et celui-ci ici aussi. Et, vous savez, l'héritage se produit maintenant lorsque vous créez une sous-classe à partir d'une classe de base Et cette sous-classe partage les méthodes de la classe de base, en plus d'avoir ses propres méthodes spécifiques à cette sous-classe Parfois, vous entendez également parler d'attributs, et les attributs sont ceux-ci ici. Ainsi, lorsque vous accédez à ces variables d'instance ou même à des variables de classe ou même à des variables d'instance, vous pouvez dire que vous accédez aux attributs de votre instance de classe, de votre objet. Et oui, il s' agit du vocabulaire de la programmation orientée objet en Python. Et je crois vraiment que je vous ai donné une solide compréhension de la programmation orientée objet et de la création classes et d'objets, etc. Si vous trouvez toujours quelque chose de confus, vous pouvez soit revoir les vidéos car je sais que la programmation orientée objet est un peu délicate, mais vous pouvez même poser des questions, et je ferai de mon mieux pour vous expliquer les choses qui ne sont pas encore claires pour vous. Oui, j'espère que cela vous sera utile. Et je vous parlerai lors de la prochaine conférence, nous en avons donc terminé avec cette section, et je vous verrai plus tard. 181. 179. App 7 : démo d'application mobile +: Bonjour, et bienvenue dans une nouvelle section, bien sûr. Cette section est assez spéciale car nous allons créer ici une application mobile. Jusqu'à présent, nous avons travaillé avec des applications de bureau ou des applications Web. Mais dans cette section, l' application que nous allons créer peut fonctionner sur les appareils Android et IOS, et elle peut également fonctionner sur les appareils de bureau. Nous allons donc créer une seule application avec une interface utilisateur graphique, les utilisateurs pourront utiliser sur ordinateur, Android et IOS. Cette application aura une interface de connexion où l'utilisateur pourra connecter et également s'inscrire pour s'inscrire en tant qu'utilisateur de l'application. Ensuite, ils peuvent appuyer sur des boutons pour obtenir des devis. Depuis l'application. Ils diront donc ce qu'ils ressentent s'ils se sentent heureux, tristes ou aimés, afin de donner un sentiment. Et l'application essaiera de faire en sorte que si l'utilisateur est triste, elle essaiera de le rendre heureux en lui donnant une citation adaptée à son état émotionnel. Hein ? Voici donc l'application. Je suis sûr que ça va être intéressant. Nous allons utiliser la bibliothèque KeV. Il s'agit d'une bibliothèque tierce pour Python, qui vous permet de créer des applications, ainsi que des applications de bureau et mobiles. Euh, alors allons-y et je vous parlerai lors de la prochaine conférence. À bientôt. 182. 181. Créer une page d'inscription d'utilisateur: Nous avons précédemment créé ce code Python et ce code Kiv. Il s'agit donc d'une application Kiv, que vous exécutez en exécutant le code Python, pas le code Kiv Alors voilà, appuyez sur le bouton rond, et voici ce que nous avons. Admettons-le, l'interface est belle, mais elle est plutôt froide pour le moment car lorsque nous appuyons sur ces boutons, rien ne se passe. Allons-y donc et implémentons le bouton d'inscription. Ce que nous voulons faire, c'est que lorsque l'utilisateur appuie sur un bouton d'inscription, nous voulons changer la page, l'écran vers un autre écran avec un autre ensemble de widgets. Pour cela, nous devons attribuer un appel de fonction au bouton d'inscription. Allons-y, passons au code QV, localisons le bouton d'inscription, qui se trouve ici Ainsi, le bouton obtient cet attribut, l'attribut text, mais il peut également obtenir un autre attribut appelé en appuyant sur un trait de soulignement Ce que fait cet attribut, c'est lorsque l'utilisateur appuie sur le bouton, vous allez appeler la fonction d'inscription par point racine. N'oubliez pas les parenthèses du code. Alors, qu'est-ce que root et qu'est-ce que sign up ? Root est un nom spécial que vous pouvez utiliser dans un fichier QV, et root fait référence à la classe du widget de règles Le widget de règles ici où nous sommes est l'écran de connexion. Donc, la classe d'écran de connexion, qui est l'écran de connexion. Donc, en fait, root fait référence à la classe d'écran de connexion. Et maintenant, nous utilisons cette notation par points. Ensuite, nous utilisons la méthode de l'écran de connexion. Inscrivez-vous donc à l'écran de connexion où il n'y a pas de méthode d' inscription, mais nous pouvons en créer une. Définissez le signe. En haut, utilisez le paramètre self pour les méthodes de classe. Ensuite, faisons quelque chose de simple pour le moment. Imprimons simplement. La pression sur le bouton d'inscription n'est qu'une chaîne, ce qui signifie qu'elle sera imprimée sur le terminal. Essayons ça. Enregistrez le fichier Kiwi et exécutez le fichier Python. Ensuite, appuyez sur Inscription et comme vous pouvez le voir dans le terminal, la chaîne de pression sur le bouton d' inscription est imprimée chaque fois que j'utilise le bouton d'inscription C'est donc aussi simple que cela. Utilisez l'attribut lorsque vous appuyez sur le bouton, et chaque fois que vous appuyez sur le bouton, inscription sera appelée. Cette fonction. Alors maintenant, ce que nous voulons faire pour vrai, c'est changer d'écran. Mais il faut d'abord créer un écran. La façon dont vous créez des écrans se trouve dans le fichier Kiwi. Nous avons donc l'écran de connexion ici. Maintenant, nous voulons créer, appelons cet écran d'inscription. Après la règle, vous utilisez la colonne, une touche pour mettre en retrait. Et voici à quoi ressemblera ce nouvel écran. Nous avons donc une étiquette. Nous avons deux zones de saisie de texte et un bouton. Et tout se trouve dans un quadrillage. Avec une colonne. Et cette colonne aura simplement un niveau avec du texte. Inscrivez-vous pour un voyage dans l'espace. Pourquoi pas ? N'hésitez pas à utiliser votre imagination, mais assurez-vous que c' est entre guillemets. C'est donc une ficelle. Vient ensuite une saisie de texte. Utilisez-le comme texte d'indication. La chaîne du nom d'utilisateur. Alors, qu'est-ce qui va être affiché dans la zone de texte à titre d'indice ? Une autre saisie de texte avec un indice. Texte. Tu l'as deviné Mot de passe. Et enfin, un bouton. Avec le texte, soumettez. Ou vous pouvez écrire «   inscrivez-vous » comme bon vous semble. Ce ne sont donc que des chaînes. Tu peux utiliser ce que tu veux. L'idée est donc que lorsque l'utilisateur appuie sur le bouton d'envoi, les données, c'est-à-dire le nom d'utilisateur et le mot de passe, soient envoyées à la base de données où nous enregistrons les noms d'utilisateur et les mots de passe. Cette base de données sera donc lisible, afin que nous puissions l'écrire. Nous pouvons ajouter d'autres noms d'utilisateur à cette base de données, et elle sera également lisible, ce qui signifie que lorsqu'un utilisateur essaie de se connecter, nous allons lire cette base de données pour voir si le nom d'utilisateur et le mot de passe qu'il essaie d'envoyer avec un bouton de connexion se trouvent ou non dans cette base de données. Et cette base de données sera un fichier JSON, un moyen simple de gérer les données de nom d'utilisateur et de mot de passe. C'est vrai. Maintenant, si vous enregistrez ce fichier Kiwi et que vous exécutez le script Python, rien ne se passera car le bouton d'inscription imprime toujours cette chaîne de symboles et l'écran que nous venons de créer n'est pas envoyé partout pour être affiché Nous ne donnons donc aucun ordre pour afficher l'écran d'inscription La prochaine chose à faire est donc de répertorier l'écran d' inscription parmi les widgets racines du widget, pour ainsi dire, nommez l'inscription. écran. Les écrans doivent donc avoir un nom. Et la raison en est que maintenant, dans le bouton d'inscription, nous pouvons faire la magie de faire en sorte que le courant des points du gestionnaire de points égal à l'écran d'inscription L'écran d'inscription est donc cette chaîne que nous venons de créer Enregistrez le fichier Kiwi et exécutez le fichier Python pour voir ce qui se passe. Vous pouvez donc avoir cette erreur de temps à autre , exception d' usine au facteur KV, écran d'inscription à une classe inconnu, ce qui signifie qu'il s'agit d'une erreur survenue dans votre fichier KV L'écran d'inscription aux cours, qui est celui-ci ici, inconnu car il n'y a pas de classe KV dans la bibliothèque Kiv, comme c'est le cas pour les étiquettes de mise en page en grille Ce sont tous des cours de la bibliothèque Kiwi. L'écran d'inscription n'est donc pas une classe de la bibliothèque KV, ni une classe déclarée dans le fichier Python Il vous suffit donc de créer une classe d'écran d'inscription. En héritant de l'écran et pour l'instant, il suffit de passer, d'exécuter à nouveau et de s'inscrire. Et voici notre nouvel écran. Nous avons donc obtenu l'étiquette, deux zones de saisie de texte et un bouton d'envoi, qui ne sert à rien pour le moment car cet écran d'inscription est connecté à la classe que nous venons de créer Ainsi, quelles que soient les actions entreprises sur cette page, dans cet écran par l'utilisateur, elles correspondront à certaines fonctions que nous allons ajouter à l'écran d'inscription Et laissez-moi vous expliquer cette ligne ici, self point manager dot current. self fait donc référence à l'instance de cette classe actuelle, de la classe où se trouve self. Donc, objet d'écran de connexion. écran de connexion est la classe, et self est l' objet qui a été instancié à partir de cette classe qui a été créé à partir de cette Et puis le manager est une propriété de l'écran. Donc, comme cette classe hérite de l'écran, l' écran est un parent et l'écran de connexion est un enfant Et le parent donne à l'enfant toutes ses méthodes, toutes ses propriétés, tous ses attributs, y compris le manager, bien sûr. Ainsi, self peut accéder au gestionnaire, puis le gestionnaire a son propre attribut qui est actuel. Donc actuel du manager et du manager de l'écran de connexion. Et cet attribut actuel obtiendra le nom de l'écran vers lequel vous souhaitez passer, qui est l'écran d'inscription, cet écran d'inscription ici, qui est un widget que nous avons créé ici. Et c'est l'idée. Voici comment passer d'un écran à l'autre à l'aide de QV. Merci. 183. 182. Capturer les entrées d'utilisateur: Bonjour, encore une fois. Ce que nous avons jusqu'à présent dans notre application KV est la première page de l'application, que j'ai choisi de nommer comme écran de connexion Voici donc où les utilisateurs se connectent et s'inscrivent. Et le bouton de connexion n'a pas été implémenté, donc le mot de passe oublié et le bouton d' inscription fonctionnent. Maintenant, il y a certaines choses que vous voudrez peut-être faire ensuite, par exemple, vous pouvez faire un travail de conception pour qu' vous pouvez faire il y ait espaces entre ces boutons, ces entrées de texte et ce bouton, ou peut-être réduire ces deux boutons et les afficher simplement sous forme liens au lieu de boutons avec des carrés. Mais vous pouvez le faire, mais ce que je préfère faire moi-même, c'est d'abord créer un design minimal, ce qui signifie que je veux que le design fonctionne. Je veux juste qu'il me suffise de voir les boutons pour le moment. Je m'en fous s'ils sont trop grands ou trop petits. Je veux qu'ils travaillent. J'appuie donc sur un bouton d'inscription, puis je veux pouvoir y aller, non ? J'utilise un nom et un mot de passe. Et lorsque je clique sur Soumettre, je souhaite stocker ces données dans la base de données. Je souhaite donc créer un nouvel utilisateur avec ces données. Et puis, à la fin, une fois que j'ai terminé toutes les fonctionnalités du programme, je veux jouer avec un design pour le rendre plus esthétique. Dans cette conférence, nous allons donc implémenter le bouton d'envoi afin que ces données soient stockées dans un fichier JSON. Bien, localisons le bouton d' envoi qui se trouve ici et ajoutons l'attribut press, qui exécutera le point racine. La racine est donc une classe d' écran d'inscription. Celui-ci, ici. Nous allons exécuter la méthode de cette classe. Appelons cette méthode add user. OK, alors allons-y et ajoutons cette fonction à cette méthode. Ajoutez l'utilisateur Self Let's Pass pour le moment. Cette méthode va donc obtenir les valeurs, donc les valeurs du nom d'utilisateur et du mot de passe, les envoyer et les stocker dans le fichier adjacent. Où sont donc les valeurs ? Eh bien, nous pouvons accéder au nom d'utilisateur en utilisant les identifiants root, point, et nous entrons ici l'ID du widget où le nom d'utilisateur sera saisi. Donc, le widget de saisie de texte. Il n'a pas d'identifiant, mais nous pouvons lui en donner un. pièce d'identité. Nom d'utilisateur. Je ne devrais pas être entre guillemets, c'est donc juste une variable. Ensuite, vous allez écrire ici le nom d'utilisateur. Maintenant, si vous le laissez comme ça et que vous obtenez également un root qui identifie ce mot de passe. Donnons donc également un identifiant au mot de passe. Colonne ID, mot de passe, juste comme ça. Ensuite, dans la fonction d'utilisateur publicitaire, créez des paramètres. Il peut utiliser un mot de passe. Donc, tout comme ces D, mais ce n'est pas lié. Vous pouvez avoir les noms de paramètres que vous voulez ici. Et pour cette raison, j'aimerais écrire le mot Name P, afin de ne pas le confondre avec ces identifiants. Et pour l'instant, permettez-moi d'imprimer le nom U et le mot P, juste pour voir ce que nous avons jusqu'à présent. Très bien, inscrivez-vous. Disons u1p1, nom d'utilisateur et un mot de passe. Pourquoi pas ? Soumettez et si vous n'obtenez rien, nous n'avons peut-être pas enregistré le fichier QB Le fichier Python est enregistré automatiquement, et inscrivez-vous à nouveau, U one, P one, soumettez. Oui, soumettez, soumettez. Donc, ce que nous obtenons en retour, c'est ceci, qui correspond au nom, et ce sont des mots P. Ce sont donc les objets de saisie de texte. Maintenant, si vous voulez que le texte saisi par l'utilisateur soit dans ces zones de saisie de texte, vous devez accéder à la propriété du texte. Idem pour le mot de passe, enregistrez, exécutez et fermez cette fenêtre précédente pour obtenir la nouvelle. Un P, un, envoyer, et maintenant nous obtenons le texte réel que l'utilisateur a saisi. C'est ainsi que nous obtenons les valeurs des zones de saisie de texte et les envoyons à Python pour un traitement ultérieur. Donc, root fait référence à un écran d'inscription. Ajouter un utilisateur est une méthode dans l'écran d'inscription. Un root est à nouveau un écran d'inscription. Les identifiants de classe sont une propriété de l'objet de l'écran d'inscription, qui provient en fait de l'écran L'écran hérite donc de l'écran d' inscription et l'écran d'inscription possède ces identifiants, ce qui donne en fait une sorte de dictionnaire contenant tous les identifiants contenus dans la règle de l' écran ce qui donne en fait une sorte de dictionnaire contenant d'inscription Dans ce cas, il vous donne accès au nom d'utilisateur au mot de passe. root identifie ce mot de passe, vous envoie du texte vers l'objet de saisie de texte qui possède un mot de passe ID, puis avec le texte, vous accédez à la valeur réelle de ce mot de passe lors de la prochaine conférence Passons à travailler avec le fichier JSON pour stocker ces données dans le fichier JSON. 184. 183. Traitement des inscriptions d'utilisateurs +: Bonjour, encore une fois, dans cette conférence, nous allons implémenter l'écran d'inscription de telle sorte que lorsque l'utilisateur saisit le nom d'utilisateur et le mot de passe, puis clique sur Soumettre, ces données seront stockées dans le fichier JSON de l'utilisateur, que j'ai ici. Vous pouvez donc soit créer un fichier vide et l'appeler comme les utilisateurs pointent JSON, soit obtenir mon fichier, que vous pouvez trouver en pièce jointe dans les ressources du cours. Et dans ce fichier, j'ai déjà deux utilisateurs. Il s'agit de données JSON. Pour améliorer son apparence, vous pouvez le formater en utilisant, si vous êtes sous Windows, Shift Alt F. Si vous êtes sur Mac, utilisez l'option Shift F. Si vous êtes sous Linux , utilisez Control Shift I. Lorsque vous utilisez cette combinaison, vous pouvez le formater en utilisant, si vous êtes sous Windows, Shift Alt F. Si vous êtes sur Mac, utilisez l'option Shift F. Si vous êtes sous Linux, utilisez Control Shift I. Lorsque vous utilisez cette combinaison, le code JSON sera formaté comme suit L'idée ici est que l'application ajoutera plus d'utilisateurs ici lorsque l'utilisateur appuiera sur le bouton d'envoi sur la page d'inscription Il s'agit essentiellement d'un gros dictionnaire Python. Cela commence ici et se termine ici. Ce dictionnaire contient des valeurs comme cette clé ici. Et la valeur de cette première clé, c'est donc la clé du grand dictionnaire. La valeur de cette clé est ce dictionnaire. C'est donc un autre dictionnaire dans le grand dictionnaire, mais c'est un autre problème. Cela peut se passer comme dans ce cas. Ce dictionnaire contient donc les données. Donc, le nom d'utilisateur, c'est encore une fois, un utilisateur comme celui-ci. Le mot de passe est Pessah One. Il s'agit donc d'un utilisateur existant. J'ai créé ce fichier manuellement, mais le programme pourra également créer ce fichier et ajouter d'autres utilisateurs. C'est donc ici que la valeur de cette clé se termine, puis commence l'autre clé, l'autre utilisateur deux. C'est le nom d'utilisateur. Vous pouvez également voir ici, étape 2, s'agit de la date à laquelle ce nom d'utilisateur a été inséré dans le fichier JSON Gardons ce dossier ouvert ici. Réduisez l'espace du terminal. L'utilisateur appuie donc sur le bouton d'envoi, le bouton d'envoi, appelle la fonction d'utilisateur publicitaire, et ces deux arguments sont transmis à l'appel de fonction. Donc, ajouter un utilisateur, c'est celui-ci ici. Vous nommez donc P word. Qu'allons-nous faire avec ces deux valeurs que l'utilisateur a saisies dans les zones de texte ? Eh bien, ce que je vais faire, c'est tout d'abord ouvrir le fichier json aux utilisateurs en tant que fichier, et je demande aux utilisateurs de le charger dans un dictionnaire, afin que les utilisateurs soient égaux à une charge de point json. Nous devons saisir Jason ici. JSON est donc une bibliothèque. Et maintenant, juste comme étape intermédiaire, imprimons les utilisateurs pour voir ce que nous avons obtenu jusqu'à présent. Inscrivez-vous U one, P one, soumettez, et voici ce que nous obtenons. C'est donc ce que nous avons actuellement dans le fichier JSON. Et c'est en fait un dictionnaire Python pour les utilisateurs . Maintenant, ce que nous pouvons faire à ce dictionnaire c'est ajouter une autre valeur. Donc, une autre paire de clé et de valeur, ce qui est assez facile à faire. Nous parlons donc d'utilisateurs. Quelle clé devons-nous ajouter ? Eh bien, c'est ce que nous apprend Name. Nous allons donc ajouter le nom d'utilisateur U one que j'ai saisi en tant qu'utilisateur. Nous allons donc avoir un troisième nom d'utilisateur, et sa valeur sera un dictionnaire. Donc, tout comme nous avons pour l'utilisateur 1, ce dictionnaire, nous allons également avoir pour U ce dictionnaire, et donc le nom d'utilisateur. Pour Key, le nom d'utilisateur sera, encore une fois, U Name. Et puis le mot de passe sera P word. Un mot P. Nous sommes donc là. P word, qui va obtenir la valeur P un. Et puis, comme nous n' avons pas beaucoup d'espace ici, je vais mettre une virgule pour continuer l'expression sur une autre ligne Si vous pensez qu' une ligne est trop longue, vous pouvez la diviser en plusieurs lignes uniquement si elle est entre parenthèses, comme dans le cas d'une définition de fonction, ou entre crochets, comme dans le cas d'une liste, ou entre accolades, comme dans le cas d'un dictionnaire Dans les trois cas, le code fonctionnera parfaitement. Vous ne pouvez pas diviser une ligne dépourvue parenthèses, de crochets ou d'accolades Si vous essayez de le faire, vous allez obtenir une erreur de syntaxe, sauf si vous utilisez une barre oblique BC Une barre oblique inverse vous permet de diviser une expression en plusieurs lignes, même si cette expression n'est pas entre parenthèses, crochets division d'une expression en plusieurs lignes améliore la lisibilité du code Il est recommandé de fractionner une expression lorsqu'elle atteint 79 caractères. Il ne s'agit toutefois que d'une recommandation. Cela n'a aucun effet sur le code. Alors, quelle est la prochaine étape ? Eh bien, j'ai créé la clé créée. La valeur de cette valeur sera la date et l'heure. Maintenant, importons d'abord la date et l'heure Date, heure, importation, date, heure. Donc, la classe diurne du module datetime. C'est donc la classe datetime que j'ai saisie ici. En plein jour, je peux vous montrer ce que j' essaie de faire pour arriver ici. Donc, à partir de la date, de l'heure, de l'importation, de la date , de l' heure et du point diurne, nous vous donnerons cet objet datetime Et ce que nous voulons en tirer, c'est extraire une chaîne de caractères. Nous voulons connaître l' ici, le mois, le jour, les heures, les minutes et les secondes. Cela va donc nous donner la date et l'heure dans ce format de chaîne. Donc ça va entrer ici. C'est vrai. Et c'est tout. Maintenant, permettez-moi d'imprimer à nouveau les utilisateurs ici. Fermez cette fenêtre précédente, inscrivez-vous U one, P one, soumettez. Et vous pouvez voir maintenant que nous avons une autre paire de clé et de valeur. Donc, le nom d'utilisateur UO avec le nom d'utilisateur UO le mot de passe P un et créez-le en ce moment même. Alors, que pouvons-nous faire avec ce nouveau dictionnaire maintenant ? Eh bien, rien d'extraordinaire. Nous avons juste besoin d'ouvrir les utilisateurs en JSON, mais cette fois en mode écriture sous forme de fichier, et nous accédons à JSON, le module JSON, déchargeons le dictionnaire de l'utilisateur dans le fichier. Et c'est tout. Donc, ce que je fais à ce stade, je remplace les utilisateurs, les utilisateurs existants dans ce fichier JSON Un tout nouveau fichier va donc être créé à ce stade, un fichier vide. Et dans ce fichier vide, je vais écrire le nouveau dictionnaire des utilisateurs, qui sera celui-ci ici. Le nouveau dictionnaire inclura donc les utilisateurs existants, comme vous l'avez vu ici, l'utilisateur 1 et l'utilisateur 2, et il ajoutera également l'utilisateur actuel. J'espère donc que c'est clair. Vous savez, si nous le testons maintenant, interrompez la session en cours avec Control C, exécutez le code, inscrivez-vous, U un, P un, soumettez. J'appuie donc sur le bouton d'envoi, rien ne se passe maintenant car tout se passe en arrière-plan, donc l'utilisateur a mis à jour le fichier. Maintenant, si vous regardez les utilisateurs de ce fichier JSON, vous verrez qu' il existe actuellement un bogue dans le code de Visual Studio qui empêche d' actualiser les fichiers lors de leur mise à jour. J'espère que cela sera bientôt résolu par les développeurs de code de Visual Studio. Ce problème a été signalé. Quoi qu'il en soit, nous pouvons vous rendre dans l'explorateur de fichiers de votre système d'exploitation où vous avez ces fichiers et utiliser un autre éditeur de texte, tel que Not Pat. J'ai un atome ici, édition de texte. Choisissez donc l'un d'entre eux, et vous verrez que dans l'autre éditeur, les modifications ont été enregistrées dans le fichier JSON de l'utilisateur. Vous pouvez donc voir que U One est là. Donc, en utilisant un U, pass ou un P et la date de création. C'est ainsi que vous ajoutez un nouvel utilisateur au fichier JSON. Enfin, ce que nous devons ajouter ici, car vous voyez que lorsque vous appuyez sur Soumettre et que rien ne se passe, vous ne vous rendez pas compte si vous vous êtes enregistré avec succès en tant qu'utilisateur ou non. Dans l'autre conférence, créons donc un autre écran qui s'affichera lorsque l'utilisateur appuiera sur un bouton d'envoi. À bientôt. 185. 184. Créer une page de réussite d'inscription: À ce stade, nous pouvons ajouter des utilisateurs à la base de données en les écrivant dans ces zones de texte et en appuyant sur le bouton d'envoi. Maintenant, affichons une autre page lorsque l'utilisateur appuie sur Soumettre. Eh bien, nous pouvons le faire de la même manière que lorsque nous sommes passés de l'écran de connexion à l'écran d'inscription Nous l'avons donc fait en écrivant dans la fonction d'inscription de la classe d'écran de connexion, nous avons écrit ce courant d'autogestion égal à l'écran d'inscription Nous pouvons faire la même chose ici. La fonction d'utilisateur publicitaire est donc appelée lorsque l'utilisateur appuie sur un bouton d'envoi. Nous pouvons donc faire en sorte que le courant des points du gestionnaire de points soit égal à. Appelons cela le succès de l'écran d' inscription. Ce sera donc un autre écran que nous allons répertorier ici, inscrivez-vous. Succès de l'écran. Le nom doit être le même que celui que vous avez utilisé ici. Et bien sûr, nous devons créer cet écran. Succès de l'écran d'inscription, une colonne. Et ce à quoi j'aimerais que cette page ressemble, c'est que j'aimerais qu' porte une étiquette où il est écrit «   Inscription réussie ». Et puis il devrait y avoir un bouton sous cette étiquette, qui indiquerait page de connexion. L'utilisateur peut donc appuyer sur ce bouton et revenir à la page de connexion où il peut se connecter. Passons donc à l'écran de connexion. Par conséquent, nous avons tout d'abord besoin d'une disposition en grille. Nous avons juste besoin d'une colonne, puis nous avons besoin d'une étiquette. Le texte de ce serait. Inscrivez-vous avec succès dans les codes, puis vous avez besoin d'un bouton. Le texte du bouton serait la page de connexion. Et laissons les choses comme ça pour le moment. Je vais juste tout exécuter pour voir à quoi cela sert. Nous avons donc eu une erreur (exception d' usine). Bien entendu, nous n'avons pas le succès de l'écran d'inscription. Nous devons donc ajouter une classe d' inscription à l'écran de réussite, qui hérite de l'écran, et passons là Exécutez à nouveau. L'écran de nom n'est pas défini. Oui, j'ai tapé ici, écran Inscrivez-vous trois P trois, soumettez, inscription réussie, le libellé et la page de connexion, qui ne font rien pour le moment car nous n'avons pas d'attribut de pression pour ce bouton. Donc, oui, pour terminer, voici ce que nous avons fait pour implémenter cet écran afin de passer à l'écran suivant. Nous avons donc d'abord ajouté un écran d'autogestion dans la fonction d'utilisateur publicitaire. Cela changera l'écran actuel en cet écran ici. Et cet écran a été défini ici, et il est représenté par cette classe en Python. Et c'est tout. , trois et quatre points Nous avons donc dû ajouter 12, trois et quatre points. Maintenant, essayez comme exercice d' implémenter le bouton de connexion. Ainsi, lorsque l'utilisateur appuie sur le bouton de connexion dans la page, vous souhaitez vous inscrire, quatre ou quatre. Lorsque l'utilisateur appuie sur Login, retournez à la page principale, donc à la page de connexion, qui est celle-ci ici. Essaie de le faire. 186. 185. Commutation d'une page à l'autre: Permettez-moi donc d'implémenter rapidement le bouton de la page de connexion. C'est vrai. Le bouton de la page de connexion se trouve juste ici. Donc, en appuyant sur le point root, accédez à Login. C'est ainsi que j'appelle la fonction. Nous en sommes donc à la règle de réussite de l'écran d'inscription, ce qui signifie que nous devons passer à la classe de réussite de l'écran d'inscription et définir la fonction go to login self et, bien sûr , self, c'est manager, c'est actuel, égal à l'écran de connexion, qui est celui-ci ici Nous avons donc déjà cet écran. Nous n'avons pas besoin de créer un nouvel écran pour le moment. Enregistrez le fichier QV et exécutez-le, inscrivez-vous. Ux, P six, peu importe le nom d'utilisateur et le mot de passe que vous soumettez. Inscription réussie, étiquetée page de connexion, qui vous ramène à l'écran de connexion. Maintenant, il faut garder à l'esprit le sens de la transition des écrans. Donc actuellement, par défaut, la transition s'appelle gauche. Alors tu vas t'inscrire. Le mouvement est donc que l'écran suivant se dirige vers la gauche. Donc, vous réglez le pH. Maintenant, l'écran suivant ira vers la gauche comme ça. Et lorsque vous vous connectez, vous voudrez peut-être aller vers la droite. Donc, pour changer la transition vers la droite, ce qui est plus logique. Donc, si vous voulez le faire, allez à l'endroit où vous réglez l'écran actuel. Nous voulons donc modifier la transition de l'écran de connexion. Ainsi, lorsque nous définissons l'écran actuel comme connexion, nous voulons que le manager fasse la transition dans la bonne direction. Exécutez ça, inscrivez-vous. Je vais juste y soumettre quelques chaînes vides juste pour essayer rapidement l'interface. Soumettez donc qu'il s'agit d'un nouvel utilisateur avec des chaînes vides. Peu importe. Vous pouvez mettre quelques restrictions plus tard si vous le souhaitez. Allez donc sur la page de connexion. Et donc cette fois, l'écran suivant part de la gauche vers la droite. Donc, si c'est ce que vous voulez, qui me semble logique, vous devez utiliser cette propriété de transition de la propriété du gestionnaire, qui possède une propriété de direction, et la définir sur right. C'est l'idée. 187. 186. Traitement des informations d'identification d'utilisateur: Ce que nous avons fait jusqu'à présent avec notre programme, c'est de créer la première page où l' utilisateur peut se connecter et nous avons également créé la page d'inscription où les nouveaux utilisateurs peuvent s'inscrire et devenir membres de notre base de données JSON Dans cette conférence, nous allons implémenter la fonctionnalité de connexion. Laissez-moi vous montrer comment fonctionne la version finale du programme. Je ne te montre pas le code. Pas encore, mais comment fonctionnera le login. Ignorez la belle interface, ou nous le ferons plus tard. Nous devons maintenant réfléchir à la fonctionnalité. Ainsi, lorsque l'utilisateur se connecte, il saisit les données. Ils appuient sur Login, et ils accèdent à cette page interne du programme. Nous avons donc un bouton qui, si nous survolons la souris, deviendra rouge, et si nous cliquons, il nous déconnectera et nous ramènera à la page de connexion Si le Delta se trompe, il indiquera un nom d'utilisateur ou un mot de passe erroné. Encore une fois, lorsque les données seront correctes, nous serons redirigés vers cette page. Donc, dans cette conférence, allons-y et créons cet écran. J'en ai fait une capture d'écran, nous l'avons donc ici pour référence. Nous devons donc ajouter un écran supplémentaire dans la liste des écrans ici. Nommons l'écran « Succès de l'écran de connexion ». Et nommez, disons sur les mêmes lignes, écran de connexion Success, puis créez une règle pour cet écran. Je vais juste le copier-coller. Alors, qu'est-ce que nous avons ici ? Eh bien, nous commençons par la disposition en grille, qui comporte une colonne. Pour l'instant, je vais juste fournir un simple bouton. Plus tard, nous implémenterons les fonctionnalités que vous venez de montrer avec cette animation. Lorsque vous placez votre souris sur le bouton, celui-ci devient rouge. Donc, pour l'instant, utilisons simplement un simple bouton. Avec texte. Attention à la presse. Nous allons donc devoir créer une classe de réussite d'écran de connexion dans le code Python et y créer une fonction pour déconnecter l'utilisateur. Alors attention. Oui, c'est ainsi que j' aimerais appeler la fonction dans la classe de réussite de l'écran de connexion que nous allons créer. Laissons le bouton comme ça, puis nous avons une étiquette. Comment pensez-vous que c'est le label ? Texte Nous demandons donc à l'utilisateur ce qu' il ressent pour qu'il puisse saisir un sentiment, puis nous lui donnons des citations, en fonction de ce qu'il ressent pour le faire se sentir mieux ou pour améliorer son sentiment. Les citations sont une bonne chose. Les gens très intelligents y ont bien pensé, alors utilisons-les. Utilisons-les. Saisie de texte. Avec un indice ? Texte. Ici, vous pouvez écrire ce que vous voulez, mais j'aimerais leur donner un indice pour qu'ils sachent ce qu'ils peuvent saisir ici. Donc, sans avoir à inclure description détaillée ici dans le corps de l' interface de la page, gardons l'interface propre et utilisons cette zone ici dans le manuel Donc des choses à essayer. Heureux, triste, mal aimé. Oui, ça devrait aller. Et puis nous avons un autre bouton avec du texte Enlighten me. N'hésitez pas à utiliser n'importe quel nom. C'est jusqu'où va mon imagination. Et maintenant, à la pression, qu'allons-nous faire lorsque l'utilisateur appuie sur ce bouton ? Eh bien, lorsque l'utilisateur appuie sur ce bouton, nous allons afficher du texte sous le bouton. Nous aurons donc besoin d'une étiquette. Et son texte pour le moment n'est qu'une chaîne vide. Incluons donc un attribut de presse pour le bouton plus tard. Pour l'instant, permettez-moi de rédiger un article sur le succès de l'écran de connexion au cours, qui hérite, bien sûr, de l'écran et qui contient une méthode Déconnectez-vous. Déconnectez-vous pour déconnecter l'utilisateur. Et ici, je voudrais d'abord définir une direction pour la transition de cet écran. Disons-le correctement. La déconnexion revient à la page précédente, il est donc logique d'avoir une bonne direction pour la transition Alors, bien sûr, directeur, c'est actuellement égal à. Où voulons-nous emmener l'utilisateur après sa déconnexion ? Nous voulons amener l'utilisateur à l'écran de connexion. Encore une fois, cela a du sens, non ? Donc, écran de connexion. Très bien, nous avons donc la page. Nous avons créé la page de réussite de l'écran de connexion, qui était celle-ci ici. Permettez-moi donc de clore ceci pour avoir plus de place pour le code. Cependant, nous n'avons pas encore implémenté la fonctionnalité du bouton de connexion. La connexion u1p1 ne fonctionne donc pas. Trouvons donc le bouton de connexion. Ce qui se trouve sur l'écran de connexion. Oui. L'écran de connexion. Oui. Il s'agit donc d'un bouton de connexion. Alors, que voulons-nous faire lors d'un événement de presse ? Eh bien, nous voulons exécuter une route qui enregistre la fonction de connexion, nous devons avoir dans la classe d'écran de connexion juste ici. C'est donc essentiellement la même idée que celle d'un utilisateur d'annonces. Une fonction dans laquelle nous avons attribué la fonction d'utilisateur publicitaire, nous lui avons fourni le nom d'utilisateur et le mot de passe. Encore une fois, nous faisons la même chose avec define login. Soi et donc ici nous devons donner deux arguments. Le premier serait les racines, les identifiants, nom d'utilisateur, le texte. Et le second serait un identifiant root, un point, un mot de passe, un point, un texte. Nous parlons donc ici, désolée pour le type d'ici. Nous parlons du nom d'utilisateur que l'utilisateur saisit dans la zone de saisie de texte et du mot de passe qu'il saisit dans la zone de saisie de texte l'écran de connexion. Donc, root fait référence à l'écran de connexion à la règle actuelle dans laquelle vous écrivez le code ici. Et nous n'avons pas d' identifiant pour la saisie de texte, alors allons-y et faisons un identifiant, utilisons le nom, pareil pour le mot de passe. Ensuite, nous prenons ce nom d'utilisateur et ce mot de passe dans la fonction de connexion. Utilisons le nom et le mot P comme paramètres. Tu peux utiliser le nom que tu veux. Vous pouvez également utiliser un nom d'utilisateur et un mot de passe. Alors, comment connecter un utilisateur ? Eh bien, l'idée est que nous devons ouvrir pour lire le fichier JSON contenant données de l'utilisateur et vérifier si ce nom d'utilisateur et ce mot de passe se trouvent dans ce fichier. Ou plus précisément, si ce nom d'utilisateur figure dans le fichier et qu'il contient un mot de passe, le mot de passe que l'utilisateur fournit dans l'interface utilisateur graphique. Si tel est le cas, nous changeons d'écran en utilisant une propriété manager point current. Nous passons à l' écran que je viens de vous montrer que nous venons de construire et nous n'avons pas encore vu à quoi il ressemble. Permettez-moi donc de l' implémenter rapidement avec open users dot JSON has file. Donc, en mode lecture, lorsque nous ne définissons pas le R comme ça, cela signifie implicitement que nous lisons le fichier Utilisateurs égaux au JSON qui se chargent. Le dossier. Cela nous donnera un dictionnaire. Les utilisateurs seront le dictionnaire contenant toutes les données contenues dans le fichier JSON des utilisateurs. Et puis si vous nommez des utilisateurs. Donc, ce que nous faisons ici, c'est, laissez-moi vous le montrer. Nous avons donc besoin de cette bibliothèque JSON et Users sera le dictionnaire, n'est-ce pas ? beaucoup de données là-bas. Et si nous disons, par exemple, il y a 77 utilisateurs, nous allons réussir parce que U sept figure en fait parmi les clés du dictionnaire. Donc ici, ou sept, vous pouvez ignorer l'utilisateur. s'agit simplement d'un préfixe pour indiquer qu'il s'agit de données Unicode, mais ce sont les chaînes contenues dans les codes U seven fait donc partie des clés du dictionnaire. Vous pouvez également obtenir une liste claire des clés. Avec ça. Donc, les utilisateurs qui s'embrassent, vous voyez que nous sept faisons partie de ces données. C'est pourquoi nous devenons vrais, et nous pouvons nous en servir et dire, je suis le nom d'utilisateur dans les utilisateurs, je suis le nom d'utilisateur dans les utilisateurs, donc nous vérifions d'abord si le nom d'utilisateur se trouve dans la base de données. Mais nous devons également vérifier et, utilisateurs, vous nommez le mot de passe égal à PWord, donc c'est notre condition, en fait La première est donc que le nom d'utilisateur doit exister. Et la seconde est que vous savez, les utilisateurs, vous nommez, disons, sept, donc l'utilisateur U sept est équivalent à cela. Cela nous donnera donc le dictionnaire que possède la clé u seven. C'est comme la valeur du ku sept. C'est donc un dictionnaire. Et si nous continuons notre chaîne d'accès, nous utilisons un mot de passe. Nous accédons donc à la valeur du mot de passe clé. Chacun de ces dictionnaires possède ce mot de passe comme clé, et la valeur de ce mot de passe est le mot de passe réel Donc P sept dans ce cas. Nous vérifions donc si le mot de passe de cet utilisateur est un mot de passe que l'utilisateur fournit ici. Donc, mot de passe, ce texte se trouve ici. Il doit s'agir d'un opérateur d'égalité, et non d'un opérateur d'assignation. Donc, si c'est le cas, alors South Manager est le même que la page de réussite de la connexion, le succès l'écran de connexion que nous avons créé. C'est vrai. Et nous devons également y ajouter un conditionnel s, mais laissez-moi essayer de voir ce que nous avons jusqu'à présent et déboguer le code si nous avons des problèmes Donc sept P sept se connectent, et voici un écran. Il s'agit donc d'un bouton de déconnexion. Comment te sens-tu ? La zone de texte que nous avons créée Enlighten me, et c'est dans cette zone que le texte serait affiché Pour l'instant, cela ne fonctionne pas car nous n'avons pas associé de fonction au bouton Enlighten me Je vais maintenant essayer le bouton de déconnexion. Donc, out n'est pas défini, comme vous pouvez le voir ici l'erreur. Donc, notre bouton de déconnexion qui se trouve ici lorsque vous appuyez dessus indique que nous devons écrire root, c'est Logout Cela indique donc la fonction de déconnexion réussie de l'écran de connexion C'était donc un problème. Nous n'avons pas précisé la classe qui avait ce bouton de sortie. Alors laisse-moi réessayer. P seven login, Lou et nous revenons à la page de connexion lorsque nous nous déconnectons Et si nous saisissons des données erronées, rien ne se passera. Voici donc ce que nous allons faire. Nous allons ajouter une étiquette juste en dessous du bouton de connexion entre ces deux boutons et le bouton de connexion. Alors allons-y et faisons-le. Nous parlons de l'écran de connexion. Il s'agit du bouton de connexion. Ajoutons donc l' étiquette avec du texte, elle est vide pour le moment. Alors enregistrez-le, fermez cette fenêtre, réexécutez. Maintenant, nous avons un espace ici. C'est donc une étiquette. Et maintenant, dans cette étiquette, lorsque les données sont correctes, nous passons à la page de réussite de l'écran de connexion . Nous devons maintenant avoir accès à l'identifiant de l'étiquette. Mettons donc d'abord un identifiant sur l'étiquette, connectez-vous mal. Donc voilà, maintenant nous devons accéder à cette étiquette. La façon dont vous le faites est d'utiliser vous-même. Self pointe vers l'objet de l'écran de connexion. Ensuite, nous cherchons les identifiants de soi. Login, faux identifiant. C'est donc l'objet de l'étiquette. Nous devons maintenant accéder au texte de l' objet d'étiquette et attribuer au texte un nom d'utilisateur ou un mot de passe erroné. Assurez-vous donc d'enregistrer le fichier QV et d'exécuter le code. Juste quelques données aléatoires qui ne figurent pas dans la base de données, connectez-vous et nous y obtenons le label comme prévu. Seven P seven, connectez-vous, et nous allons à la page de connexion. C'est ainsi que vous accédez aux éléments du fichier Ki. Ainsi, lorsque vous êtes dans le KivFle, root pointe vers la classe associée à cette règle Donc, écran de connexion, classe d'écran de connexion, ces noms doivent être les mêmes. Et lorsque vous êtes dans le fichier Python, self pointe vers cette classe d'écran de connexion. Et comme l'écran de connexion ici et l'écran de connexion là-bas communiquent entre eux, ils obtiennent et reçoivent des données. Cela signifie que l' objet personnel connaît les identifiants et tous les widgets que contient l'écran de connexion. Par conséquent, vous recherchez le mauvais identifiant de connexion pour étiqueter cet objet de l'écran de connexion, puis vous accédez au texte. Donc, les racines du selfie sont là, et c'est tout. Passons maintenant à la prochaine conférence et abordons d'autres points intéressants à propos de l'interface. 188. 187. Affichage de la sortie à l'utilisateur +: Pour cette conférence, j'aimerais que vous consultiez les ressources de cette conférence et que vous téléchargiez les trois fichiers texte. Ensuite, dans l' explorateur de votre IDE, créez un nouveau dossier. Donnez-lui un nom tel que des guillemets, puis placez ces trois fichiers dans ce dossier des. Vous pouvez utiliser le glisser-déposer si vous le souhaitez. Par exemple, j'ai ces fichiers quelque part, et je vais simplement les glisser-déposer dans ce dossier. Vous voyez donc que les fichiers se trouvent maintenant dans le dossier des citations. Donc, dans le cadre de cette conférence , dans le cadre du programme que nous avons, nous allons écrire l'un de ces trois remplissages supportés pour le moment Vous pourrez ajouter d'autres fichiers ultérieurement si vous disposez de certaines données. Mais c'est ce que nous avons obtenu jusqu'à présent. Ainsi, lorsque l'utilisateur appuie sur le bouton Enlighten me, nous voulons afficher l'un des guillemets contenus dans le fichier TXT heureux Donc, une de ces lignes. Certaines sont longues, d'autres plus courtes. Ainsi, si l'utilisateur saisit le SAD, vous voulez afficher ici dans cette zone l'une des lignes du SAD, ce fichier TxD Ce sont également nos citations. Vous avez donc compris l'idée. Et si l'utilisateur saisit un remplissage inconnu , par exemple excité. Et lorsqu'ils appuient sur un bouton, vous voulez leur montrer d'essayer un autre remplissage, car vous ne pouvez pas y couvrir tous les remplissages possibles C'est donc ce que nous allons faire dans cette conférence. Point principal pi. Commençons donc par le bouton. Essayez de localiser le bouton Enlighten me. Ou du moins c'est ainsi que s'appelle mon bouton. Donc, ce bouton fait partie de la page de réussite de l'écran de connexion. Et nous n'avons pas encore d'attribut de presse. Donc, sur presse, vous voulez exécuter une méthode de la classe de réussite de l'écran de connexion , que j'ai ici. Pour que l'écran de connexion réussisse, il dispose déjà d'une méthode, Logout, qui est exécutée lorsque ce bouton est enfoncé sur le bouton Logout Nous voulons maintenant implémenter la méthode Gute. Codez vous-même comme d'habitude. Cette méthode doit donc maintenant communiquer la valeur que l'utilisateur a communiquer la valeur que l' saisie dans la saisie de texte. Quelle est donc la racine sur laquelle les identifiants pointent. Nous n'avons pas d' identifiant pour la saisie de texte, alors mettons-en un. Il s'agit donc d'une saisie de texte où l'utilisateur a saisi le remplissage. Mettons-y donc de la garniture. Si ce remplissage est rempli, nous voulons obtenir le texte de cette saisie de texte. Donc, cette garniture ira ici. Appelons-le simplement remplir, à ne pas confondre avec le mot remplissage. Et la première chose que nous pourrions vouloir faire est de voir si nous accédons correctement au texte de remplissage. Alors, imprimez le remplissage. Et assurez-vous d'enregistrer le design selon lequel le fichier KV exécute Login J'ai pu me connecter car j'ai ce nom d'utilisateur que j'ai créé plus tôt. Lorsque je me suis inscrit, j'ai créé un nom d'utilisateur qui est une chaîne vide et une chaîne vide pour le mot de passe. Donc, en gros, il s'agit d'un utilisateur avec une chaîne vide, chaîne vide comme nom d'utilisateur et mot de passe, ce qui fonctionne parce que je n'ai mis aucune restriction sur le nom d'utilisateur et le mot de passe. C'est donc juste pour des raisons de simplicité lorsque vous essayez lorsque vous testez l'application. Joyeux, éclaire-moi, et ainsi nous serons heureux. String, là. Et si c'est avec un grand âge, tu vas être heureuse. La première chose que nous pourrions vouloir faire est de changer le champ en minuscules Même si l'utilisateur est satisfait d'avoir atteint l'âge du capital, nous allons le convertir en minuscules afin de pouvoir le comparer aux noms figurant dans les fichiers texte avec les noms de fichiers Voyons maintenant quels sont nos sentiments disponibles. J'assigne donc une variable available feelings, et je vais utiliser le module globe pour obtenir une liste des noms de fichiers C'est ce que cela va me donner. Une erreur, bien sûr, car je n'ai pas importé Glob. Il vous donne donc une liste de tous les fichiers. Toutes les garnitures disponibles sont disponibles. Nous sommes ici dans la méthode get quote. Désormais, la liste des remplissages disponibles ressemble désormais à une liste de chemins de fichiers Ce que je veux faire, c'est extraire tous les noms de ces fichiers, uniquement la partie définie. Une façon de le faire est d' utiliser l'objet path de la bibliothèque Path Leap, vous n'avez pas besoin d' installer cette bibliothèque. Il est livré avec Python. C'est une bibliothèque standard. En utilisant Path, si vous attribuez un chemin, tel que des codes, définissez TXT puis extrayez le STEM à partir de celui-ci. Je vais vous donner le nom du fichier sans l'extension sans l' autre partie du chemin. En fait, il existe de nombreuses méthodes de cheminement, et STEM est l'une d'entre elles. Vous pouvez donc obtenir le suffixe, le nom du fichier, y compris l'extension telle que celle-ci et ainsi de suite Ce que nous pouvons faire ici maintenant c'est utiliser cette propriété STEM, et nous devons l'appliquer à tous les noms de fichiers Pour ce faire, vous pouvez utiliser un minimum de compréhension. Donc, les sentiments disponibles sont à la hauteur du chemin. Disons nom de fichier pour nom de fichier dans les sentiments disponibles. Et ici, j'aimerais diviser la ligne en plusieurs lignes. Comme c'est entre crochets, je suis autorisé à diviser la ligne. Nous voulons donc en tirer le meilleur parti. Alors nous voudrons peut-être essayer d'imprimer ici les garnitures disponibles Assurez-vous également d'importer depuis path lip Import Path, puis d'exécuter l'application. Et j'ai eu une erreur lorsque j'ai appuyé sur le bouton. L'objet String n'a pas d'attribut STEM. Oui, bien sûr, parce que je l'ai fait ici. Au lieu de mettre STEM après l'objet path, je le place juste à côté du nom du fichier. Le nom du fichier est une chaîne. C'est pourquoi vous obtenez que STR n'a pas de STEM. Mettons-le ici et réessayons. Éclaire-moi. Joyeux set and Loaf. C'est ce que nous voulons. Nous avons maintenant les sentiments disponibles dans une liste. Que puis-je faire maintenant ? Je peux dire que je me sens disponible. Donc, si ce sentiment se trouve dans les sentiments disponibles, alors ce que nous voulons faire ensuite, c'est ouvrir le fichier qui contient ce sentiment qui contient une citation pour ce sentiment. Utilisons donc un open. Je vais utiliser le formatage des chaînes ici. F. Donc, entre guillemets, je vais ouvrir ce chemin de fichier, qui contient ce point de remplissage TXT pour un fichier. Alors, qu'est-ce que je fais ici ? Eh bien, ce que cela va me donner, c'est l'impression que l'utilisateur est content, n'est-ce pas ? Nous obtenons donc cette variable. Elle a une valeur. Et si nous obtenons maintenant cette chaîne, allons nous donner le chemin du fichier pour ce remplissage. Cette expression entre accolades va donc être remplacée par la valeur de cette variable de la variable de champ J'espère donc que c'est clair. Ensuite, nous voulons obtenir tous les fichiers, en utilisant la méthode des lignes de lecture. Cela nous donnera donc une liste de tous les codes. Alors permettez-moi de déconnecter et d'imprimer les codes pour voir à quoi cela sert Contente, les citations étaient heureuses, et voici une liste. Donc, comme je vous l'ai dit, le bonheur, c'est ce que vous pensez, ce que vous dites, etc. Et puis le Mahatma Gandhi l'a dit , puis vous avez une virgule, et c'est là que commence l' Et ainsi, nous avons une liste de plusieurs chaînes, chaque chaîne représentant un guillemet. Alors, que pouvons-nous faire avec cette citation maintenant ? Hmm. Ce que nous pouvons faire, c'est nous en sorte que le moi ait cette idée. L'idée de cette étiquette est d' afficher la citation, qui se trouve juste en dessous du bouton « Je m' éclaire Donc, l'idée, la citation, la citation. Cite, ce texto. Le texte de cette étiquette sera donc un choix aléatoire de la liste des citations. Donc, que fait cette méthode, c' est qu'elle obtient une liste en entrée. Donc un, deux, trois, et il renvoie un élément aléatoire de cette liste chaque fois que vous l'exécutez. Donc, c'est juste un pur hasard. Par conséquent, nous allons obtenir une de ces chaînes, une de ces guillemets, et cette citation sera définie comme le texte de l'étiquette. C'est ainsi que cela fonctionne. Et veillons à ce que l'importation soit aléatoire. Et nous sommes prêts à exécuter l'application. Un login heureux Enlighten me. Et nous avons eu cette erreur qui est une erreur d'attribut assez courante. Super n'a pas d'attribut get. Cela se produit lorsque le fichier Python ne trouve pas cet identifiant, l'identifiant du guillemet dans ce cas. Vous pouvez donc voir que l' erreur s'est produite à la ligne 61. Cette ligne ne fonctionne donc pas bien. Je pense que c'est parce que je n'ai pas enregistré le fichier QV ai saisi lorsque j'ai mis à jour l'ID de l'étiquette ici J'ai donc écrit un identifiant mais je n'ai pas enregistré le fichier QV. Alors laisse-moi réessayer. Je suis heureuse que ces erreurs apparaissent parce que vous apprenez à les corriger. Éclaire-moi. Et oui, donc l'étiquette est affichée ici. Lorsque vous appuyez à nouveau, cette fonction de choix aléatoire va extraire un autre choix aléatoire de la liste. Parfois, je suppose qu'il peut afficher la même citation, ce qui est bien, je pense, mais il existe des moyens de le faire afficher une citation différente de la précédente, mais cela fonctionne plutôt bien, je pense. Attendez-vous à un cas où il y a une longue citation et qu'elle sort des limites de la fenêtre de l'application. C'est donc un problème, mais il n'y a pas lieu de s'inquiéter car nous allons implémenter une vue défilante ultérieurement, ce qui compressera cette étiquette et la rendra flexible. En redimensionnant l'étiquette en fonction du widget et de la taille de l'application Pour l'instant, laissez-moi fermer cela et terminer le bloc Ils, séparé de ce code d'identification, ce texte équivaut à essayer un autre remplissage. Alors laissez-moi essayer encore une fois, et nous en aurons fini avec cette vidéo. Cela fonctionne donc. Cela fonctionne également. Et je me sens jolie. Oh, essayez une autre garniture. Nous ne sommes pas favorables à cela. Et c'est ainsi que nous créons une application. Cela choisit une citation au hasard. La fonctionnalité du programme est donc pratiquement terminée. Il ne nous reste plus qu' à embellir l'interface, les boutons et les espaces entre les boutons et à ajouter de l'animation. Ce sont donc des choses qui vous aideront à créer des applications du monde réel, modernes et agréables à utiliser par les utilisateurs et que vous pourrez réellement vendre. C'est ce que nous ferons dans les prochaines conférences. 189. 188. Stylisation de la page d'ouverture de session: Maintenant que les fonctionnalités de l'application fonctionnent correctement, nous allons commencer par le style. Donc, tous les boutons font ce qu'ils sont censés faire. Eh bien, sauf le bouton « Mot de passe oublié », qui est censé être un exercice à résoudre. Alors maintenant, dans la vidéo suivante nous allons travailler sur le style. Il s'agit donc d'un programme que nous avons construit ensemble, ce f, et voici le produit final stylisé. Donc, dans cette vidéo, dans cette même vidéo, nous allons travailler sur l'écran de connexion. En fait, vous pouvez les redimensionner comme ça pour voir exactement à quoi ils ressembleront dans un vrai téléphone, car c'est plus ou moins la taille d' un téléphone, le ratio de taille Fermons donc ces deux interfaces, et je vais garder cette interface ouverte ici pour l'utiliser comme référence. Nous ne travaillons donc pas dans le fichier Python ici dans le fichier KV C'est une question de design. Bien, donc la première chose que vous souhaitez ajouter est un peu de rembourrage et d' espacement dans cette disposition en grille 15, je vais expliquer ce que cela signifie, bien sûr, l'espacement de 2020. Donc, cette disposition en grille, en fait, c' est que nous avons la disposition de grille principale, qui est l'ensemble du widget, puis cette mise en page de grille contient le nom d'utilisateur, étiquette de ces deux entrées de texte et ce bouton. Et aussi une étiquette invisible ici. Nous voulons donc ajouter un peu de rembourrage, 15 à l'horizontale, ce qui signifie la distance entre la disposition en grille de cette disposition en grille et les bordures extérieures de l'application Vous voyez donc que nous avons une distance d'environ 15 points ici, et il y a aussi une distance que vous ne pouvez pas voir, mais il y a un rembourrage vertical entre cette étiquette et le cadre principal C'est donc le rembourrage, l'espace extérieur de cette disposition en grille Et puis l'espacement est de 2020 est-à-dire l'espacement entre les widgets de ces mises en page en grille L'espacement est donc une affaire interne et le rembourrage est externe Tu peux y penser comme ça. Donc 20 pixels entre ces deux pixels et 20 ici aussi, entre cette zone de texte et ce bouton Eh bien, vous pouvez voir qu'il y a en fait plus de 20 pixels entre le bouton et cette saisie de texte. Mais c'est parce que nous avons également appliqué cette interface à ce produit final. J'ai également appliqué une certaine taille au bouton lui-même. Il y a donc un rembourrage plus la réduction de la taille du bouton. C'est pourquoi vous voyez plus d'espace ici. Alors, gardons-le comme ça en toute sécurité. Ensuite, vous devez exécuter le fichier Python comme toujours. Nous avons donc maintenant un peu de rembourrage et un certain espacement entre ces widgets Que diriez-vous d'augmenter la taille de police de cette étiquette lorsque l'utilisateur se connecte ? Vous devez donc accéder à l'étiquette et définir la taille de police sur 20. Ce doit être une chaîne comme ce SP. Alors maintenant, la taille du téléphone est plus grande. Travaillons maintenant sur la taille du bouton de connexion. Vous voyez que cela semble un peu trop large. Alors pourquoi ne pas le raccourcir un peu ? Eh bien, dans QV, il existe un attribut appelé indice de taille, que vous pouvez attribuer à un widget, par exemple à un bouton ici Indication de taille. Maintenant, la façon dont QV fonctionne est que par défaut, la zone est divisée proportionnellement entre le widget, ce qui signifie que, par exemple, nous avons ici la disposition de la grille principale qui occupe tout l'espace car il s'agit d'une seule disposition de grille C'est comme un enfant célibataire, il aura tout. Ensuite, cette disposition en grille a deux enfants. Il a cette disposition en grille ici et elle a cette disposition en grille ici. Et la zone entre ces deux enfants sera également divisée. Et donc, cette disposition en grille, la seconde comporte deux boutons, le bouton mot de passe oublié et le bouton d'inscription Par conséquent, vous pouvez voir que cette disposition en grille présente ici la moitié de la disposition en grille principale. Et l'autre disposition en grille, qui est la première disposition en grille, contient l'autre moitié. Il en va de même pour les enfants de chacune de ces deux configurations de grille Donc, les enfants de la première mise en page en grille. L'étiquette et les entrées de texte, chacune d'entre elles se verra à nouveau attribuer l' espace qu'elle mérite. Ici, nous avions une étiquette, deux, trois, quatre, et une étiquette invisible, donc cinq widgets, et chaque widget dispose donc de 20 % de cet espace. Cependant, il existe un attribut d'indice de taille que je viens de vous présenter, qui vous permet de modifier le montant qu'un widget reçoit de son parent, donc indice de taille. Donnons donc une valeur de 0,3 et 0,5. Vers le bouton de connexion. Ce qui va se passer, c'est que le bouton de connexion sera pressé verticalement. Vous voyez, parce que nous avons donné une valeur de 0,5. Il a donc la moitié de sa hauteur. Nous avons également donné une valeur de 0,3 pour le presser horizontalement, mais cela ne fonctionne pas car il n' y a aucun autre widget sur le côté. Quoi qu'il en soit, le bouton de connexion obtiendra, à nouveau, la totalité de l'espace. Il ne divise aucun espace avec d'autres widgets dans cette direction horizontale Pour pouvoir changer le bouton, nous devons en fait indenter ce bouton et en faire l'enfant d' un widget de mise en page relatif Si vous l'enregistrez et que vous l'exécutez, vous verrez maintenant que le bouton a changé de position. J'ai en fait 0,3 30 % de cet espace horizontal, comme vous pouvez le voir, c'est un tiers. cet espace horizontal, et également 0,5, 50 % de la hauteur. Mais si vous réduisez ce chiffre de 0,5 à cela, si vous le faites de 0,1, par exemple, vous n'obtiendrez pas de bouton d'une très, très petite hauteur car il y a une étiquette de taille fixe. Le minimum que vous pouvez obtenir est donc la hauteur de l' étiquette du bouton. Maintenant, comment placer ce bouton au centre ? Nous devons utiliser un indice de pause, qui permet d'obtenir un dictionnaire. Centre X 0,5. Et centre Y 0,6. J' ai expérimenté différentes valeurs, et c'est ce que j'ai trouvé être la meilleure Mais pas encore, car ces gars là, ces boutons prennent trop de place. Donc, ce que nous pouvons faire, c'est passer à la disposition en grille qui contient ces boutons. Celui-ci ici, et on dit taille. Indice, 0,20 0,2. Enregistrez cela et voyez ce qui se passe. Hum. C'est donc beaucoup plus beau, donc indication de taille est assez magique car elle vous permet de relativiser les tailles. Il n'est pas préférable de définir une taille fixe, car les appareils mobiles sont de tailles différentes Il est donc préférable de conserver une taille relative pour chaque appareil. Donc, ce que je viens de faire ici, c'est que j'ai donné cette disposition en grille un espace de 20 %. Donc 20 % ici, et cela représente 80 % pour l' autre disposition de la grille. Le bouton se comprimait donc parce qu'il essayait de faire de son mieux en utilisant les valeurs que j'ai données ici pour le bouton, ce bouton de connexion, mais il n'a pas pu le faire parce que cette disposition en grille prenait trop de place Par conséquent, 20 % est une bonne chose. Et si vous le souhaitez maintenant, vous pouvez donner un rembourrage de dix et dix et un espacement de dix et zéro C'était l'ancien. Il s' agit d'un nouveau modèle. Donc pas mal. J'ai juste laissé un peu d'espace entre les boutons et un peu de rembourrage par rapport à l'extérieur Donc l'espace horizontal, celui-ci, et l' espacement vertical vertical Et il n'y a pas d'autres boutons verticaux au-dessus, donc cela n'a pas beaucoup de sens. Donc zéro, c'est très bien. Et laissez-moi terminer. Enfin, faisons en sorte que ces deux boutons ressemblent à des liens. Voici donc le mot de passe oublié et inscrivez-vous. Nous allons changer la couleur d'arrière-plan, qui est actuellement le gris, en un format RGB et opacité Donc Alpha pour l'opacité, et cela prend une valeur de 0 Il s'agit donc de valeurs décimales. Vous pouvez mettre 0,1 et ainsi de suite. Je vais mettre un, un, un et zéro. Zéro signifie que la couleur de fond est complètement transparente. Je vais le sauvegarder et exécuter. Vous pouvez voir maintenant que le mot de passe oublié est comme ça. Cependant, lorsque je clique sur le bouton, il ne semble pas faire quelque chose comme le bouton d' inscription. Nous pouvons donc jouer avec l' opacité du texte Mettons-lui une valeur de un si l'état de soi est normal, voir 0,5. C'est donc une belle magie que je vais vous expliquer comment cela fonctionne. Vous voyez, vous savez, quand je clique sur le bouton, je comprends que je clique sur le bouton. Donc, ce qui se passe, c'est que l'opacité en est une. Si l'état de self self fait référence au widget actuel qui est un bouton. Rappelez-vous donc que root a fait référence à la règle, qui ressemblerait à un écran de connexion ici. Mais je me suis référé à ce bouton. Et si vous souhaitez accéder à une propriété de la mise en page de la grille, vous pouvez le faire comme parent. Ainsi, ce parent pointerait vers le parent du bouton, qui est la disposition en grille. Mais nous n'en avons pas besoin pour le moment, donc sinon, si l' état n'est pas normal, c'est l'état normal du bouton qui n'est pas enfoncé. Il existe d'autres états, comme celui des publications sous presse, mais cet état est normal. Sinon, si l' état n'est pas normal, comme ici, j'ai appuyé sur le bouton. Dans ce cas, nous voulons donner une valeur de 0,5 à l'opacité. Donc, tout ce truc ici est du code Python. Tout se trouve en fait du bon côté de ces attributs ici, ici, là. Tout y est du code Python. Et enfin, changeons la couleur du bas. Vous pouvez utiliser un attribut de couleur pour cela. Faisons 0.1. Cela signifie donc 10 % de rouge, 70 % de vert et 100 % de bleu avec une transparence de un, donc pas transparent. Sauvegardez ça. Et je vais copier ces trois attributs et les donner également à l' autre bouton, au bouton d'inscription, enregistrer le fichier, exécuter Et oui, c'est ce que je voulais faire. Alors, inscrivez-vous pour obtenir un mot de passe. J'appuie dessus. Je passe à l'autre page, à la page d'inscription. Encore une fois, c'est l' interface que nous avons jusqu'à présent pour les connexions. Une dernière chose que j' aimerais ajouter est qu'actuellement, lorsque nous saisissons un nom d'utilisateur, le mot de passe est visible Nous voulons montrer des étoiles au lieu de cela. Accédez donc à la saisie de texte pour le mot de passe, accédez à l'attribut du mot de passe et définissez-le sur true. Ainsi, lorsque vous définissez cet attribut sur true, le texte saisi est traité comme une saisie de mot de passe, sorte qu'il n'affiche pas le mot de passe. Merci d'avoir suivi cette vidéo, et nous allons styliser les autres pages de l'application dans les prochaines vidéos. À bientôt. 190. 189. Stylisation de la page d'inscription: Bonjour. Ce que vous regardez, c'est la page d'inscription. Voici, de ce côté, le programme que nous avons créé jusqu'à présent, et voici à quoi ce programme devrait ressembler après cette vidéo. Allons-y et ajoutons du rembourrage et espacement à notre page d'inscription. Il s'agit d'un code. Nous parlons donc de l'écran d' inscription. Je pense qu'un rembourrage de 2020 et un espacement de 2020 à nouveau devraient convenir Alors laissez-moi exécuter l'inscription. Je pense donc que c'est bien, mais si vous le souhaitez, vous pouvez jouer avec ce rembourrage et cet espacement et peut-être avec autres attributs d'indication de taille que je vous ai montrés Donc, c'est à vous de décider de donner un aperçu de la disposition en grille à celui-ci puis à d'autres si des indices sur les zones de saisie de texte Je pense que cela semble bon de toute façon, pour une taille d'écran mobile. 191. 190. Rendre les buttons interactifs: Bonjour, je suis très heureux de vous montrer maintenant comment styliser la page principale de l'application, qui est la page sur laquelle l'utilisateur passera le plus de Donc, la page où ils arrivent à ces citations. Et voici à gauche ce que nous avons vu jusqu'ici à quoi ressemble notre page principale. Voici donc la page de réussite de l'écran de connexion. C'est ainsi que nous l' avons appelé. Et voici à quoi ressemblera la page après ces deux vidéos. Donc, tout d'abord, nous allons d'abord ajouter du rembourrage et de l'espacement pour séparer ces boutons les uns des autres pour séparer ces boutons les . C'est donc la première chose à faire. Ensuite, nous allons faire en sorte que ce gros bouton ressemble à ce bouton fantaisiste ici, qui change de couleur lorsque nous survolons la souris, lorsque nous plaçons la souris au-dessus du bouton Ensuite, nous allons également ajouter un peu défilement à cette zone d'étiquette afin que le texte entier soit affiché dans une petite zone, et que l'utilisateur puisse faire défiler et voir le texte entier Allons-y et travaillons sur un peu de rembourrage et d'espacement, puis sur le bas Avant de commencer, j'aimerais que vous consultiez les ressources et que vous téléchargiez le fichier hoverbl point py, le fichier Logout, hover point PNG et le fichier PNG Logout not Je vais expliquer dans un instant ce qu'ils sont. Donc le rembourrage maintenant, succès de l'écran de connexion Hmm Ajoutons également le rembourrage de 30, 30 et l'espacement de 30, 30. Voyez ce que nous obtenons. Oh, oui, ça a l'air mieux. Passons maintenant au bouton, la bibliothèque Kiv ne possède pas nativement d'objet permettant d' implémenter des comportements de survol afin que quelque chose change lorsque vous survolez la souris, ou il n'y a pas de moyen facile Mais quelqu'un a développé un très petit sous-module appelé hoverbl et vous pouvez obtenir ce fichier et le placer dans le même répertoire que votre fichier point py principal Ils se trouvent donc dans le même dossier. Ensuite, vous n'avez pas à modifier le fichier HoverBLTPI, donc je vais juste Ensuite, ce que nous pouvons faire, c'est importer depuis hoverbl, nous importons l'objet de comportement du survol Il s'agit donc d'une classe, le comportement de survol de la classe dans le fichier hoverbel point py C'est donc ce que nous allons utiliser. Et la façon dont nous allons l'utiliser est de descendre ici. Et je vais créer une classe et l'appeler image button. Ce sera donc un bouton spécial. Ce ne sera plus un simple bouton, mais un bouton image. Et ce bouton d'image va hériter de la classe de comportement et de quelques autres classes, que je vais importer ici Nous allons donc implémenter ce bouton en ayant deux images différentes. J'ai créé ces images dans Power Points. Vous pouvez facilement les créer. Vous avez ces symboles. Et vous ajoutez du texte , puis vous rendez l' arrière-plan transparent. Vous avez donc un bleu et un rouge. Donc, les deux états différents que vous souhaitez donner au bouton sont une image PNG. L'idée est donc que ce bouton n'aura pas de texte. Je vais avoir une image. Par conséquent, nous devons importer depuis qv point x point image, import, image Et enfin, à partir de l'importation de comportements UX par qv point. Comportement des boutons, et c'est tout. Nous obtenons maintenant le comportement de l'image et du bouton, et nous les plaçons en tant que parents du bouton image. Objet. Et il ne nous reste plus qu'à passer. C'est juste une classe qui réunit ces trois objets. Pour créer une classe, utilisez la classe de boutons d' image dont les attributs se comportent comme ces trois objets Alors, nous allons sur le bouton image, et je le place mal ici. Désolée. Cela devrait donc être ici, en fait, le bouton d'image. Nous parlons du bouton de déconnexion, pas du bouton Enlighten me. Et nous n'avons plus besoin de ce texte de déconnexion. Nous n'avons donc pas besoin de ce texte de déconnexion car nous utilisons notre propre image contenant le texte. Supprimez-le donc en appuyant sur root Lookout. Oui, c'est exact. Et la source de ce bouton d'image, ce sera Logout Hover I self point Hovert Lookout, No, hover Oh, point PNG, bien sûr. C'est donc le chemin de l'image. Donc, Overt, ce survol automatique, est cet attribut de la classe de comportement Hort. C'est donc une propriété de bowling. Cela peut être vrai ou faux. C'est donc du code Python. Je vous ai dit que tout ce qui se trouve à droite de ces attributs est du code Python. Nous allons donc définir une source l'image survolée de déconnexion pour ce bouton d'image Si cela est vrai, si le pointeur est survolé, c'est vrai. Le HoverLPIfile détecte donc si une souris est détecte donc si une souris est Sinon, nous avons mis «   logout » et non « hover ». Donc, ce chemin. Alors laisse-moi voir ce qui se passe. Oui, donc ça marche aussi facilement que ça. Mais le bouton prend évidemment trop de place ici. Il faut donc un, deux, trois, quatre, cinq, 20 %, donc nous avons cinq widgets. Chacun d'entre eux obtient 20 % de l'espace. Faisons donc quelques indications de taille alors. Indication de taille. Je pense qu'un bon montant serait de 0,35 ou 0,35 . Alors voyons voir. Oui, je pense que c'est une bonne chose. Et maintenant c'est au centre. Donc, si vous voulez le mettre sur la droite, vous devez changer de position. Et encore une fois, il y a l'attribut position hint, qui permet d'obtenir un dictionnaire, au centre X. Je pense qu'un bon nombre serait 0,93 et au centre Y. 0,8. qui permet d'obtenir un dictionnaire, au centre X. Je pense qu'un bon nombre serait 0,93 et au centre Y. 0,8. Maintenant, si nous essayons cela, voyons ce que nous avons, rien ne se passera. Comme le bouton, lorsque nous utilisons cette indication de position, le widget doit se trouver dans un autre widget appelé disposition relative Si vous enregistrez le fichier Kiwi maintenant et que vous l'exécutez, cela fera la magie. Si j'appuie sur le bouton, cela ne fonctionnera pas. Et la raison pour laquelle cela ne fonctionne pas est cachée ici dans la façon dont nous ordonnons ces modèles de cette classe de boutons d'image. Le comportement du bas doit être le premier, car cet ordre peut masquer les méthodes de ce comportement du bas. Maintenant, laissez-moi réessayer. Attention. Alors maintenant, ça marche. Connectez-vous à nouveau. Et il s'agit de cette implémentation du bouton image. Et dans la prochaine conférence, nous allons implémenter cette vue défilante de l'étiquette ici. Voyez ici. 192. 191. Créer une zone défilable: Bonjour, continuons donc à travailler sur la page principale de notre application. L'utilisateur saisit donc des codes. Et comme vous le savez, cette étiquette, l'affichage, n'est pas optimisé. Donc, comme vous le voyez, nous devons placer le texte à l'intérieur des bordures de l'application afin que si l'appareil sur lequel l'application s'exécute est comme ça, le texte s'affiche normalement tel qu'il apparaît actuellement. Mais le mobile, si l' appareil est un téléphone portable, il ressemblera à ceci. Vous souhaitez donc enrouler le texte dans cette zone afin que l' utilisateur puisse voir l'intégralité de la citation. Nous sommes donc sur la page de réussite de l'écran de connexion, et nous parlons de l'attribut de taille du texte. Nous allons donc changer la taille du texte en largeur de point automatique et en hauteur de point automatique. Qu'est-ce que la largeur du point automatique et qu'est-ce que la hauteur du point automatique ? Largeur de point automatique, self fait référence au widget actuel. Donc, self est en fait l'étiquette, et la largeur est la largeur de l'étiquette, la hauteur de l'étiquette est la hauteur de l'étiquette. Le texte aura donc la largeur et la hauteur de l'étiquette où il se trouve, ce qui signifie que je vais enregistrer le fichier Kiwi. Chaque widget ici a donc une taille. Label est donc l'un des cinq widgets. Étiquette, vous avez un bouton, vous avez une saisie de texte, une étiquette, et vous avez cette mise en page relative, et l'étiquette prend 20 % ici. Il est invisible, mais s' il avait un arrière-plan comme ce bouton, il ressemblerait à la taille de saisie du texte et à la taille de ce bouton. C'est donc quelque part ici. C'est donc la largeur, et c'est la hauteur, plus ou moins de l'étiquette. Donc, si je dis SD, essayons d'obtenir un long devis. C'est donc ce que nous obtenons maintenant. Donc ça a l'air mieux. Si nous comprimons, vous verrez que le texte s' enroule dans les limites de la hauteur et de la largeur de l'étiquette. Vous pouvez donc voir que maintenant, lorsque je presse la fenêtre, je la redimensionne, l'étiquette est redimensionnée dynamiquement, tout l'étiquette est redimensionnée dynamiquement, comme le bouton et la saisie de texte Ainsi, la taille du texte reflétera également la taille de l'étiquette, comme vous pouvez le voir ici. Mais cela ne suffit pas encore. Alors, pourquoi ne pas donner au texte plus de surface pour l' étirer verticalement ? Pour ce faire, vous devez définir la hauteur de la taille du texte sur aucune. Vous ne voulez donc pas que cela soit lié à l'étiquette. Donc, si vous l'enregistrez, essayez le code. Vous voyez maintenant que la hauteur du texte est supérieure à la hauteur de l'étiquette. L'étiquette est quelque part ici. Permettez-moi donc de le redimensionner à nouveau. La hauteur de l'étiquette est donc aussi élevée, elle se trouve quelque part ici, et la hauteur du texte est supérieure à la hauteur de l'étiquette. C'est mieux. Nous pouvons voir le texte, mais il est évident qu'il se superpose. Il se trouve au-dessus des autres widgets, donc ce n'est pas encore idéal, bien sûr. Alors, que pouvons-nous faire ici ? Eh bien, ce que je pense, c'est nous devons trouver un moyen de modifier la hauteur de l'étiquette pour qu'elle corresponde à la hauteur du texte. Donc, dans ce cas, ce serait comme avoir plus de cette zone noire sur l'étiquette. Donc, avoir l'étiquette jusqu'ici et avoir les autres widgets pressés au-dessus de l'étiquette. Modifions donc la hauteur de l'étiquette pour l'adapter à la hauteur du texte. Comment pouvons-nous le faire ? Eh bien, tout d'abord, nous avons besoin de l'étiquette Y. Donc, la hauteur de l'étiquette, nous en avons besoin pour ignorer les indications de taille, ce qui signifie, laissez-moi vous montrer ce que cela Permettez-moi d'essayer une autre citation. Cela signifie donc que la hauteur de l'étiquette ne correspond plus à 20 % de la disposition de la grille, mais qu'elle a une taille fixe de 100 pixels par défaut. Par défaut, la hauteur de l'étiquette est désormais de 100 pixels. C'est donc la même chose que la hauteur 100. Si je le lance maintenant, nous allons obtenir exactement le même résultat. Mais si vous remplacez ce paramètre par 400, donc la hauteur de l'étiquette, il s'agit de l' attribut de hauteur de l'étiquette, non du texte. Donc, si vous voyez maintenant, l'étiquette est bien plus grande. Disons réglé. Maintenant, cela prend beaucoup de place. Donc, vous le pressez et vous pouvez voir le texte. Mais ce n'est pas ce que nous voulons. Nous avons dit que nous voulions que la hauteur soit dynamique. Nous voulons que la hauteur reflète la hauteur du texte, de sorte que lorsque la fenêtre est étirée de cette façon, nous voulons que ces boutons soient situés ici, et nous voulons que l' étiquette soit plus petite. Donc, au lieu d'avoir une taille fixe pour la hauteur, nous voulons définir cette taille de texture. Et nous obtenons le deuxième élément de ce tuple orcise de texte. Le texte ou la taille est donc un tuple contenant deux éléments. Le premier élément est la largeur du texte. Il s'agit donc d'une valeur dynamique. Cela va changer lorsque vous redimensionnez la fenêtre. Ainsi, la première valeur est la largeur et la seconde est la hauteur. Avec cet indice, nous accédons donc au deuxième élément du basculement. Si nous voulions le premier élément, nous utiliserions zéro ici. Nous voulons le second, qui est la hauteur. Alors sauvegardez ça Donc, vous voyez, maintenant, l' étiquette est dynamique, elle change donc de taille en fonction de la taille du texte. Et nous pouvons voir le texte dans son intégralité. Et lorsque nous étendons la fenêtre de cette façon, nous n'avons pas trop de zone vide ici, qui serait le corps de l'étiquette. Cependant, ce n'est pas l' idéal, bien sûr, et il reste encore une chose que nous pouvons faire ici. Ce que nous devons faire, c'est avoir de l'espace pour le widget de défilement. Et l'étiquette, ainsi que ses attributs, je dois l'indenter avec un onglet pour l' avoir comme un enfant de la vue défilante vue défilante est donc désormais au même niveau que l'autre widget, saisie de texte par bouton, l' autre étiquette, etc. Enregistrez donc ce Kivfile maintenant, exécutez-le. Heureux. Vous pouvez donc y voir un scroller Triste. Éclaire-moi. Il fonctionne donc avec tous les types de texte. Lorsque le texte est court, il n'y a pas de défilement, et lorsqu'il est plus long, il y a un défilement automatique Vous pouvez donc aller à la fin du texte. C'est ainsi que vous créez une vue défilante, qui contient une étiquette et l' étiquette contient du texte. J'espère que cela vous a plu, et je vous verrai dans la prochaine vidéo. 193. 192. Préparer l'environnement pour déployer l'application mobile: Higène. Dans les prochaines vidéos, je suis très heureuse de vous montrer comment créer un fichier APK partir du fichier Python que nous avons déjà créé lors des conférences précédentes. Désormais, un fichier APK est un fichier qui peut être installé téléphone Android afin que l' application soit utilisable sur mobile. Actuellement, nous n' avons qu'un fichier point py. Nous avons donc le fichier point py principal et le fichier point KV de conception Et nous avons également un tas de fichiers supplémentaires tels que ce OverltpyFle et ces fichiers PNG, ainsi que la base de données, qui est stockée dans le fichier la base de données, qui est stockée dans le point Json de l'utilisateur Tous ces fichiers seront donc regroupés dans un seul fichier APK. Pour créer un fichier APK, nous devons utiliser une bibliothèque appelée Bildozer C'est une bibliothèque Python que nous pouvons installer avec. PIP ou Conda Le problème est que créer des fichiers APK sur les systèmes d'exploitation Windows ou Mac est très difficile, pour ne pas dire impossible. La meilleure chose à faire est d'utiliser un système d'exploitation Linux tel qu'Ubuntu. Mais je ne vais pas vous demander de supprimer votre système d'exploitation Windows ou macOS pour installer un système Linux sur votre ordinateur. Nous allons maintenant utiliser une machine virtuelle, un logiciel que vous pouvez installer sur macOS ou Windows. Et dans ce logiciel, ce logiciel se comportera comme un ordinateur. Mais c'est un ordinateur virtuel. C'est un logiciel. Ainsi, dans ce logiciel, vous pouvez installer des systèmes d'exploitation tels que Linux, Windows ou Mac. Dans cette conférence, je vais donc vous montrer comment installer Virtual Box. Cette installation est facile, que vous soyez sous Windows ou macOS Il suffit donc d'aller sur virtualbox.org. Et cliquez sur le bouton Télécharger, puis sur l' un des liens. Donc, si vous êtes sous Windows, cela signifie que le système d'exploitation hôte est Windows. Windows hébergera donc le système Ubuntu Linux. Je suis actuellement sur une machine Windows, je vais donc cliquer sur Windows Hosts. Cela me donnera donc le fichier exécutable de Virtual Box. Une fois le fichier téléchargé. Allez-y et double-cliquez pour installer. Je ne veux pas de raccourci sur le bureau ou sur la barre de lancement rapide, mais n'hésitez pas à laisser ces options cochées. Oui, nous avons besoin d'Internet dans cette boîte virtuelle, dans cette machine virtuelle, cet ordinateur virtuel. Alors installez. J' opterais pour l'installation à nouveau. Terminez et Oracle Virtual Box va être lancé maintenant, attendez-vous à ce que cela prenne un certain temps, et voilà. L'interface est donc assez simple. Nous avons quelques boutons ici. Le nouveau bouton nous intéresse . Mais d'abord, avant de le faire, vous devez vous rendre sur ubuntu.com Et téléchargez un système d'exploitation Ubuntu. Alors, allez sur le bouton Télécharger, allez sur le bureau Ubuntu. Il existe deux versions maintenant, mais il s'agit d'une version stable, celle avec le bouton vert. Je vais donc le télécharger. Attendez-vous à ce que cela prenne un certain temps car cela représente environ 2 gigaoctets Oui, cela représente beaucoup de données. Une fois que vous avez téléchargé ce fichier, accédez à nouveau à Oracle Virtual Box, puis sélectionnez Nouveau. De par son nom, je vais l'appeler Ubuntu et vous verrez que ces listes déroulantes sont automatiquement mises à jour. Vous voulez donc sélectionner Linux ici. Nous installons un système d'exploitation Linux et Ubuntu 64 bits. C'est du moins ce que j'ai téléchargé sur ubunto.com, mais votre système détectera automatiquement l'architecture du programme Je vais donc cliquer sur Suivant maintenant, la taille de la mémoire Ils disent que la taille recommandée est d'un gigaoctet pour la RAM, mais je dirais que vous devriez opter pour une taille supérieure, soit au moins 4 Si vous n'avez pas beaucoup de RAM sur votre ordinateur physique, vous devriez peut-être opter pour moins et voir comment Ubuntu fonctionnera avec autant de mémoire. Mais c'est l'idée. C'est 3 000 mégaoctets, c'est la taille de la RAM de cet ordinateur Windows que j'utilise, et je donne 4 mégaoctets Ce serait donc la taille maximale 4 gigaoctets de RAM pour Linux Cliquez sur Suivant. Créez un disque dur virtuel dès maintenant. Créez. Vous voulez un VDI, alors cliquez sur Suivant. Alloué dynamiquement, c'est bien. Encore une fois, cela dépend de vous. Je recommande 20 gigaoctets si vous en avez. Donc, environ 20 gigaoctets, mais donnez-leur au moins dix, ou si vous n'avez pas beaucoup d'espace disque dur de votre ordinateur, vous devriez opter pour moins de 5 gigaoctets et voir Normalement, si vous manquez d'espace ou de RAM, vous devriez obtenir des fenêtres contextuelles provenant une boîte virtuelle vous indiquant que l'espace n'est pas suffisant, mais que plus il y a d'espace, mieux c'est. Cliquez sur Créer. Nous avons donc créé une couche ici. Vous voulez commencer et cela vous demandera de sélectionner un disque de démarrage. Vous voulez donc accéder à ce dossier ici, puis localiser le fichier ISO que vous avez téléchargé sur ubuntu.com y en a donc une. Cliquez sur Démarrer. Maintenant, cette fenêtre est un peu petite mais vous pouvez accéder à la machine et aux paramètres, aller à l'affichage. Et ici, dans le facteur d'échelle, vous souhaiterez peut-être l'augmenter à 300 %. Cliquez sur OK. Et maintenant, vous voyez que l' écran est un peu plus grand. Voici donc l' écran suivant que nous avons. Vous souhaitez accéder à Installer Ubuntu. C'est pour l'anglais ici et l'anglais là pour la disposition du clavier. Ces paramètres sont corrects. Ensuite, vous devez sélectionner comme disque et installer Ubuntu qui supprimera simplement tous vos programmes, vos photos et votre ordinateur, tout ce que vous avez toujours eu. Je plaisante, c'est tout Cela ne concerne que les programmes que vous avez dans la boîte virtuelle, alors que nous n'en avons aucun. Ce serait donc le cas si vous remplaciez un système d'exploitation existant que vous aviez déjà dans cette boîte virtuelle. Cela n'a donc rien à voir avec vos programmes de votre système d'exploitation principal, qui serait Windows ou macOS. Il suffit donc d'aller sur Installer maintenant. Poursuivre. Sélectionnez votre fuseau horaire. Sélectionnez un nom pour l'ordinateur. Je vais simplement me connecter automatiquement sans fournir de mot de passe, mais vous devez choisir un mot de passe. Cliquez sur Continuer. Cela prendra donc un certain temps avant que les fichiers ne soient installés. Donc, jusqu'à ce qu'Ubuntu soit installé sur cette machine virtuelle dans ce logiciel de boîte virtuelle. Mon installation est terminée et le message me demande de redémarrer Je vais donc cliquer sur Redémarrer maintenant. Cela redémarrera le système d'exploitation Linux, pas le système d'exploitation hôte, qui est Windows dans mon cas. Il suffit donc de redémarrer Ubuntu dans une boîte virtuelle. Il semble y avoir une erreur, j'ai juste appuyé sur Entrée et tout semble fonctionner. Il s'agit donc d'Ubuntu. Si vous souhaitez consulter le guide de démarrage. Il suffit de cliquer sur Suivant. Et c'est fait. Maintenant, vous voudrez peut-être accéder à Oracle Virtual Box, donc à l' interface Virtual Box, puis à machine et aux paramètres , puis à General Advanced. Et vous souhaiterez peut-être activer les options de presse-papiers partagé et de Dragon Drop Je les ai définis comme bidirectionnels, ce qui signifie que vous pouvez copier des fichiers depuis le système d'exploitation de votre hôte, donc de Windows ou Mac vers Linux vers Ubuntu et vice versa. Cependant, j'ai remarqué que cela ne fonctionne pas. Si cette invite s'affiche, cela signifie qu'il existe des mises à jour pour Ubuntu. Mais je vais juste fermer cette fenêtre. Je suppose donc que l'option de copier-coller des fichiers entre les systèmes ne fonctionne pas C'est pourquoi je vais vous montrer ce que vous pouvez faire pour transférer des fichiers de votre système d'exploitation hôte vers votre système d'exploitation Linux vers votre système d'exploitation Ubuntu. C'est donc le dossier où j' ai tous les fichiers dont j'ai besoin pour ce fichier APK pour la version mobile du programme. C'est donc tout ce que nous avons parcouru, plus ce fichier d' installation Kv Build Dozer point SH Il s'agit d'un fichier que vous pouvez télécharger à partir des ressources, et je vais vous montrer à quoi sert ce fichier. Mais pour l'instant, je vais simplement utiliser Dropbox. J'ai donc déjà les fichiers du projet dans ma Dropbox sous Windows. Donc, le dossier est celui-ci ici. L'enseignement possède tous les fichiers. Très bien, je vais donc cliquer avec le bouton droit de la souris et copier le lien Dropbox. C'est donc sous Windows. Ce n'est pas sous Linux. C'est en dehors de la boîte virtuelle. Une autre façon de le faire serait d'utiliser ce service, gofle point IO Cela vous permet de télécharger un fichier, et cela vous donnera un lien. Et pour que vous puissiez utiliser ce lien, vous pouvez le placer dans Linux car il y a un navigateur. Firefox est intégré à Linux. Mais comme nous ne pouvons pas copier-coller, nous allons devoir taper ce lien manuellement. Donc, dans mon cas, je vais utiliser Drawbox et je vais aller sur usebtle.com pour raccourcir l'URL Voilà donc l'URL. Et entrez cette URL dans le navigateur de votre système d'exploitation Linux. Si vous ne souhaitez pas utiliser ce partage de fichiers, vous pouvez simplement utiliser cette URL pour obtenir mes fichiers afin de pouvoir les télécharger directement depuis votre système Linux à l'aide du navigateur. Accédez à un téléchargement plus direct. Enregistrer le fichier. OK. Les fichiers devraient maintenant être téléchargés et vous pouvez les trouver dans les fichiers. Télécharger. Cliquez avec le bouton droit sur le fichier Zip téléchargé. Allez en extraire deux. Vous souhaitez sélectionner le bureau. Mais cliquez sur cette nouvelle icône de dossier pour créer un dossier. Disons Project 1, créez et sélectionnez. Nous voyons maintenant ce projet dans un dossier, et il y a le dossier pédagogique à l'intérieur, et voici les fichiers. Terminons donc cette vidéo ici. Voici comment installer Visual Box et comment configurer Linux dans la boîte virtuelle et comment obtenir les fichiers dans ce système d'exploitation Linux. Nous sommes donc prêts à créer un fichier exécutable mobile qui fonctionnera sur Android. C'est ce que nous allons faire dans la vidéo suivante. 194. 193. Créer un dossier APK pour Android: Bonjour encore une fois. Dans la vidéo précédente, je vous ai montré comment installer Virtual Box, comment installer Ubuntu dans Virtual Box, puis nous avons transféré les fichiers du projet dans ce système d'exploitation Ubuntu. Ils sont maintenant dans le système de fichiers d'Ubuntu. Ce que nous allons faire maintenant, c'est utiliser la bibliothèque Python Bill Dozer pour créer un fichier APK Mais avant cela, nous devons installer certaines dépendances dans le système d'exploitation Ubuntu, car Bulldoser en a besoin pour créer ce fichier mobile APK Pour ce faire, pendant que vous êtes dans le dossier contenant les fichiers du projet, cliquez avec le bouton droit de la souris et ouvrez le terminal. Cela ouvrira donc le terminal Linux. Vous verrez le répertoire actuel. C'est donc là que se trouvent vos fichiers. Si vous utilisez LS, vous verrez que ce sont les fichiers. Le point principal pi est donc là. Assurez-vous que ce fichier s'appelle exactement point principal pi, car Bill Dozer a besoin de voir ce fichier Et ce fichier doit contenir le programme principal. Je n'ai pas besoin de ce fichier de capture d'écran, donc je vais juste le supprimer , comme vous pouvez le voir, le fichier de capture d'écran n' est plus là. Pour localiser les fenêtres ouvertes sur Ubuntu, allez dans Activités, et vous verrez que le terminal est ouvert et l'explorateur de fichiers est également ouvert. Cliquez sur le terminal. Cela ramènera la fenêtre du terminal. Maintenant, parmi ces fichiers, vous voyez le point sH du programme d' installation de Kiv Bulldozer Vous pouvez voir le contenu de ce fichier en utilisant CAT et écrire le nom du fichier. Voici donc ce que contient ce fichier. En gros, il s' agit d'instructions sur l'installation de nombreuses dépendances, notamment Python, Belser et Kiwi, car ce système Linux ne possède pas non plus Kiwi Alors, descends ici. Nous sommes de nouveau ici, cliquez sur Bash, appuyez sur la touche Tab pour compléter automatiquement le nom C'est donc le nom du fichier SH. Cliquez sur Enter. Entrez le mot de passe de votre système Ubuntu. Il s'agit d'un mot de passe que vous avez créé lors de l'installation d'Ubuntu. Ubuntu vous a demandé un nom d'utilisateur et un mot de passe et cela devrait prendre un certain temps. Ubuntu télécharge actuellement ces packages depuis Internet et Internet était automatiquement activé lors de l' installation d'Ubuntu Je n'ai donc pas eu à effectuer de configuration manuelle de la connexion Internet. Parfois, vous recevrez des avertissements, mais vous pouvez les ignorer. Ce processus n'est pas stable car de nombreuses dépendances sont impliquées et vous pouvez parfois obtenir des erreurs lorsque nous créons ce fichier APK, de sorte que ce fichier ne soit pas créé parfois. Ce n'est pas un processus facile, mais vous pouvez lire les erreurs, ce qu'elles disent et peut-être faire une recherche sur Google pour voir ce que les autres disent à propos de cette erreur en particulier. Il n'y a aucune garantie que cela fonctionnera. Cela étant dit, Linux est le meilleur système d'exploitation pour créer ces packages APK. Enfin, l'installation de mon ordinateur sur mon ordinateur virtuel Linux est terminée . L'étape suivante est facultative. Vous voudrez peut-être essayer l'application que vous avez. Pour ce faire, utilisez Python, la commande Python 3, Minda's Pi, qui est le fichier que nous avons utilisé L'application fonctionne bien avec Python. Essayons-le. Oui, ça marche bien. Alors ferme cette fenêtre. Et la prochaine chose que nous voulons faire est de créer un fichier de spécifications Bull Dozer Pour cela, nous utilisons Bull Dozer, donc la commande Bull Dozer OK, cela a créé ce fichier de spécifications Bilozer point. Vous pouvez réduire cette fenêtre et trouver ce fichier dans le système de fichiers. Vous pouvez ignorer ce fichier. Nous n'en avons pas besoin. C'était juste quelques notes que j'utilisais. Donc, Bulloser Dot Spec, vous pouvez double-cliquer dessus et il s'ouvrira avec l'application d'édition de texte Donc, ici, nous pouvons modifier certains paramètres de l'application que nous allons créer. Mettons le titre, comment vous sentez-vous ? Vous pouvez choisir un nom pour le package, mais n'utilisez pas d'espaces dans ce nom. Je vais juste la laisser dans mon application. Et vous voulez vous arrêter là, quelles extensions souhaitez-vous inclure dans le package ? Nous avons donc des fichiers Pi. Nous avons également des fichiers PNG, et nous avons également des fichiers JSON. C'est donc ce que nous voulons inclure. Fichier KV aussi, mais il est déjà là KV est donc déjà là, puis descendez plus bas. Ce sera donc la version 0.1. C'est notre premier déploiement, et ensuite vous voudrez vous arrêter ici. Alors, quelles sont les exigences de votre colis ? Eh bien, voyons quelles bibliothèques. Quelles bibliothèques tierces avons-nous dans notre fichier pi principal ? Nous avons donc le fichier QV. Hoerbl est un fichier local. Ce n'est pas une bibliothèque tierce. Ce fichier local est inclus dans le fichier de projet, vous n'avez donc pas à le déclarer dans les exigences, et c'est tout ce que nous avons. JSON et Globe sont des bibliothèques Python standard, elles sont donc également fournies avec Python random et Path Leap. Ainsi, dans le fichier Builders Dot Spec, nous n'avons rien d'autre à ajouter que Python 3 et KV Descendez ici, vous souhaitez activer toutes les orientations, pas seulement les portraits sur le mobile. C'est très bien. Et cette version devrait être remplacée par huit. Et c'est tout. Assurez-vous d'enregistrer le fichier, cliquez sur Enregistrer ou sur Contrôle S, fermez, puis revenez à la fenêtre du terminal. Et maintenant, il ne nous reste à exécuter la commande qui créera, espérons-le, le fichier APK. C'est-à-dire, compilez Saucer Android, déboguer À un moment donné , nous vous demanderons si vous souhaitez accepter la licence pour accepter la licence, appuyez sur Y puis entrez. Cela a d'abord échoué dans mon système. Donc, si tel est le cas, vous voudrez peut-être revenir en arrière et examiner l'erreur, car ce ne sont que des messages génériques. Vous voulez localiser après ces couleurs, vous voulez localiser ici le haut du message rouge. Cette commande a échoué. Je pense que c'est parce que nous avons spécifié la version huit. Essayons d'accéder au fichier Blows ou au fichier de spécifications et de le modifier cette supprimer cette valeur et de la remplacer par arm 64 V eTA, puis de la coller dedans Et en plus de cela, nous avons également oublié, je pense que nous avons oublié d'ajouter l'extension TXT point parmi les extensions acceptées ici. Point TXT car point TXT est le fichier dans lequel nous avons ces guillemets. Assurez-vous donc de l'enregistrer, le fermer et de revenir au terminal. Cette fois, nous allons réessayer de créer le fichier APK à l'aide de Bulldozer Android Mais cette fois, nous allons ajouter le drapeau propre. Et puis débugez Ainsi, le drapeau propre garantira de ne pas gâcher les efforts précédents pour essayer de créer le package APK. Présentateur, encore une fois, nous allons devoir attendre un moment pour que le processus d' emballage soit terminé. Mais cette fois, il ne vous sera pas demandé d'accepter la licence, et le processus sera peut-être plus rapide qu'auparavant. Attendons donc un peu. Les deuxièmes efforts de construction ont donc été achevés dans mon Linux, allez dans le dossier. Le dossier a été créé pour Ben. Donc, à l'intérieur, vous devriez pouvoir trouver un fichier APK. C'est à propos de cette vidéo. Dans la vidéo suivante, je vais acheter un appareil Android et je vais vous montrer comment installer ce fichier APK sur un appareil Android. À bientôt. 195. 194. Installer le dossier APK sur Android: L'étape suivante consiste donc à obtenir ce fichier APK, le mettre sur un appareil Android et à l'installer afin que nous puissions jouer avec l'application sur l'appareil mobile lui-même. Maintenant, vous pouvez faire preuve de créativité pour transférer ce fichier sur votre appareil mobile. Ce serait plus facile si ce système Linux était installé sur votre ordinateur physique, et non dans un boîtier virtuel. Donc, dans la vraie vie, si vous voulez prendre les choses au sérieux en créant des applications mobiles avec Python, vous voudrez peut-être installer Ubuntu sur votre ordinateur pour avoir un ordinateur Linux. Vous pouvez le faire avec le double démarrage, si vous avez un ordinateur portable ou un PC Windows, et dans ce cas, vous pouvez connecter votre téléphone portable aide d'un câble USB afin pouvoir facilement placer les fichiers sur votre appareil mobile. Dans ce cas, je souhaite avoir une solution générale qui fonctionne pour tout le monde. Je vais donc télécharger ce fichier dans ce service go file point IO. Cliquez donc ici et allez dans Bin. C'est le dossier. Téléverser. Et maintenant, vous pouvez obtenir ce lien ici, le lien de téléchargement, et vous pouvez le mettre dans le navigateur de votre appareil mobile. Bonjour. Alors laissez-moi vous montrer comment installer le fichier APG sur un appareil Android Voici donc la page Web go file point IO où j'ai téléchargé le fichier APK afin pouvoir le partager sur mon appareil mobile. C'est l'un des moyens. Mon navigateur pointe donc vers ce service. Je vais aller télécharger. Appuyez sur le bouton de téléchargement. Il est donc dit téléchargement. Lorsque le fichier APK sera téléchargé, il vous sera demandé si vous souhaitez l'installer. Et donc, appuyez sur Installer. Android vous demande si vous souhaitez installer cette application ou non car normalement, vous ne voulez pas installer d'applications dont vous ne savez pas d'où elles proviennent pour des raisons de sécurité Donc, cette application, nous la créons, nous voulons donc de toute façon passer à Installer. J'ai installé l'application de messagerie. Si vous souhaitez envoyer l'application pour numérisation à Google, je ne veux pas le faire. Donc, n'envoyez pas. Appuyez donc sur Terminé et localisez l'application. Voici donc l'application. Je vais cliquer dessus. Il est en train de charger. Et deux U, un, un, connexion. Heureux. Cliquez sur Enlighten me et vous verrez que les messages s'affichent Donc ça marche. J'espère que cela fonctionne bien pour vous. J'espère que le processus vous plaira. Si le Build n'a pas abouti dans votre cas, veuillez consulter les questions fréquemment posées pour voir si vous y trouvez la réponse à votre question , et vous pouvez essayer de recommencer le processus de compilation avec le Bildoser Android Utilisez toujours l'option de nettoyage, je vous verrai donc dans les prochaines vidéos. 196. 195. Scraping Web avec Python et belle soupe: Bonjour, et bienvenue dans cette section intéressante. vous allez apprendre le web Dans cette section, vous allez apprendre le web scraping avec Python Dans cette conférence, j'ai voulu expliquer ce que signifie le web scraping scraping Web signifie donc supprimer le Web pour obtenir des informations, ou en d'autres termes, extraire des informations de pages Supposons que vous souhaitiez extraire des informations sur l'immobilier. Peut-être souhaitez-vous connaître l'évolution des prix dans le temps et dans le lieu. Et je ne pense pas qu'il existe de bons fichiers Excel contenant des données bien structurées que vous puissiez télécharger et analyser les données immédiatement. En réalité, ces données sont réparties sur pages Web HTML des sites Web immobiliers Dans notre exemple. Vous allez donc devoir les supprimer et les mettre dans un format structuré dans un format bien structuré tel que des fichiers Excel et Excel, CSV, Pandas DataFrames ou d'autres Et le mettre dans un format bien structuré est appelé web scrapping, et Python est excellent dans ce domaine Plus précisément, nous allons utiliser une bibliothèque Python nommée Beautiful Soup. Donc, dans cette section, je vais vous présenter Beautiful Soup, et nous allons extraire quelques informations d' une simple page Web pendant que je vous montre comment fonctionne Beautiful Soup. Ensuite, dans la section suivante, une fois que nous aurons terminé les cours de cette section, nous allons extraire certaines informations immobilières telles que les adresses et le prix des propriétés, la région et d'autres caractéristiques des propriétés. Nous allons extraire ces informations d' un grand site Web immobilier. Donc, oui, c'est à peu près ce qu'est le grattage. Oui, je te parlerai lors de la prochaine conférence. 197. 196. Comment fonctionne la ferraille sur le Web +: Alors, comment fonctionne le web scrapping de toute façon ? Comment Python peut-il récupérer les informations d'une page Web et stocker sous forme de texte afin que vous puissiez les analyser à votre convenance ? Eh bien, ce texte que vous voyez ici. Il s'agit donc d'un exemple de site Web, et en fait, ce domaine est réservé aux exemples. Mais il s'agit d'une page Web normale construite avec HTML et du CSS et d'autres outils de développement Web. Le HTML est donc ce qui rend les éléments, le texte et tout le Sur le navigateur. Heureusement, vous pouvez voir le code de chaque page Web en accédant à la page source comme je l'ai fait ici. Voici donc le code, le code HTML, tel que vous le voyez, il s'ouvre ici avec des balises HTML, et il se ferme ici Cela a donc le titre de la page Web, qui est celui-ci ici, un exemple de domaine, etc. Et surtout, sachez que le script SML est composé d'éléments SDML Cette ligne est donc un élément SML, donc un méta-élément, puis nous avons des éléments de division, c' est-à-dire celui-ci ici Cette année, nous avons des éléments de paragraphe. Et c'est ce qu'on appelle des tags. Donc, le tag Div et le tag de fermeture de division. Donc, ouverture du tag de division, du tag de division. Et puis il y a le body tag. est donc ici que se trouve la partie visible de la page HTML de la page Web. Donc, tout ce que vous placez à l'intérieur des body tags, vous le verrez. Donc, si vous avez un exemple, un domaine ici, ce domaine est établi pour être utilisé , etc., c'est ici que vous voyez ce texte Ce domaine est établi pour être utilisé pour, etc. Les éléments HTML sont donc essentiels pour le scrabbing sur le Web. Donc, en gros, disons que vous voulez extraire le texte des balises de la première page de tous les DIF, de toutes les divisions Donc, ce que vous dites à Python, c'est de consulter toutes les balises Age One et d'extraire le texte de ces balises. Python qui le fera. Mais avant tout, vous devez charger l' intégralité de ce script en Python, et le moyen de le faire est d' utiliser la bibliothèque de requêtes. Les requêtes vous permettent donc de donner une URL à Python, par exemple exemple.com, et Python récupérera tous les textes Ensuite, une fois que vous aurez ce texte, vous utiliserez la magnifique bibliothèque SOAP pour extraire tous les éléments du texte. Par exemple, l'examen, le texte contenu dans les balises HD h one. Vous pouvez ensuite stocker le texte extrait dans des variables dans des dictionnaires Python ou des cadres de données Pandas, et partout où cela vous semble utile pour vos besoins C'est donc le concept et vous pouvez voir le même code source, comme vous le savez peut-être déjà, lors de l'inspection. Cliquez donc avec le bouton droit sur Inspecter et vous voyez ceci. Voici donc ce code source, mais vous le voyez plus organisé. Ainsi, par exemple, si vous passez votre souris sur les balises body, l' élément correspondant de la page Web sera surligné tel que vous le voyez Donc, si vous étendez cela, vous êtes maintenant à la limite en matière de balises, etc. Cela vous permet donc de voir réellement les noms de la taxe pour les éléments que vous souhaitez extraire. Nous allons donc utiliser la fenêtre d' inspection pour comprendre le code source de nos pages Web Il s'agit donc du concept de Web scrapping. Et je vous verrai dans la prochaine conférence, où je chargerai une page Web en Python, puis nous en extrairons quelques données simples. Donc, juste pour commencer avec bibliothèque de requêtes et la magnifique bibliothèque de savons. Passons donc à autre chose. 198. 197. Exemple de scraping Web avec Python: Donc, comme vous le voyez, c'est assez simple. Et intentionnellement, j'ai essayé de vous trouver une page Web simple. Alors, on y va. Je ne voulais pas vous distraire avec beaucoup de contenu pour le moment Plus tard, vous pourrez récupérer des informations sur un gros site Web contenant de nombreuses données. Alors pour l'instant, essayons de saisir. Supposons que nous voulions extraire les noms des villes de cette page. Donc, si vous souhaitez suivre le MIP, veuillez saisir cette adresse dans votre barre d'adresse avec un point HTML à la fin avons donc n'avons donc que trois villes ici que nous allons extraire Mais le code que nous allons écrire fonctionnera avec n'importe quel nombre de lignes ici. J'utiliserai le bloc-notes IPython ou le bloc-notes Jupiter comme on l'appelle maintenant. Il donc été renommé JPeter Alors, déplacez le pointeur droit vers la droite, cliquez et ouvrez votre ligne de commande. Livre de nœuds JPter. Et je vais créer un livre électronique gratuit sur Python. Génial. Donc, la première chose à faire est de charger ce code source en Python. Pour ce faire, utilisez la bibliothèque de requêtes. Donc, si vous ne l'avez pas installé, vous pouvez simplement l'installer avec PIP install ou des requêtes similaires Je l'ai déjà, donc je suis déjà satisfaite. Mais le processus est très simple, vous savez donc déjà comment installer des packages avec PIP. Et vous avez également besoin de la magnifique bibliothèque de soupes. Donc, pour l'installer, vous devez dire PIP install again et non Beautiful Soup, mais Bs pour so, cela signifie Beautiful Soap Four Voici donc la dernière version de Beautiful Soap. Et ensuite. Vous souhaitez donc importer des requêtes, et la première chose à faire est de charger le code source. Ensuite, nous commençons à rechercher des balises HDML et à extraire des éléments de ces Mais permettez-moi également d'importer du beau savon. Donc, à partir de BC BC Four, importez. Belle soupe. Voilà donc la syntaxe. Vous importez la magnifique classe de soupe de BC Four. Si vous utilisez Python 2, cela devrait être légèrement différent. Vous voulez donc importer du beau savon directement comme celui-ci. OK, Alt Enter et passer à la ligne suivante. Donc, pour charger une page Web. Il est conseillé de créer une variable afin de pouvoir charger le code source de la page Web dans cette variable. Donc égal à requests dot Get so the G method. Vous pointez donc sur la bibliothèque, puis sur la méthode Get. Et il vous suffit de transmettre ici l'URL de la page Web que vous souhaitez charger. Donc, dans ce cas, pythonhw.com. Exemple de code HTML à points. N'oubliez donc pas le code HTML. Il s'agit simplement d'une page Web statique, vous devez donc y transmettre l'ICML Maintenant, cela devrait créer un objet de demande. Nous n'en sommes donc toujours pas là. Et ce que vous voulez faire, c'est récupérer le contenu de ce type de données de demande et peut-être le stocker dans une autre variable. Donc, le contenu est stocké dans une variable C comme celle-ci. Et si vous voulez vérifier maintenant ce que cela voit, vous verrez qu'il s'agit d'un type de données octet. Et tu peux l' imprimer si tu veux. Même si cela n'a pas l'air très beau, il s' agit en fait du code source que vous voyez ici. Nous avons donc la balise head les balises HTML et tout le reste. Et maintenant, c'est ici que la belle soupe entre en jeu. La requête ne fait donc charger le code source de la page Web, mais sous une forme très brouillée, comme vous le voyez ici Maintenant, si vous voulez le rendre beau et extraire les éléments , le texte et tout le reste de ce code source, vous devez utiliser du beau savon. Donc, Beautiful Soup ne fait qu'analyser ce code source et vous donner ce que vous voulez Vous donnant ainsi les éléments du texte HTML qui vous intéressent. Vous avez donc déjà chargé ce contenu, et maintenant vous voulez peut-être créer une variable et l'appeler soupe. Et cela équivaudrait à une belle soupe et devinez ce que vous voulez offrir ici. Eh bien, ce serait le contenu. Et peut-être un autre argument. Vous souhaitez donc spécifier l'analyseur que vous souhaitez utiliser pour analyser ces données Il s'agit normalement de l'analyseur HDML. C'est donc ce que vous voulez utiliser presque toujours. Si vous ne le spécifiez pas, vous recevrez un avertissement, mais les choses fonctionneront quand même. Donc, d'habitude, je le passe là-bas. Et une fois que vous l'avez fait, exécutez ce L. Si vous le savez, imprimez soup prettify avec des crochets vides à cet endroit Vous verrez le code source de la page Web sous une forme organisée. So Beautiful Soap est formé pour reconnaître réellement ces étiquettes, puis les restituer visuellement à l'œil nu. Cependant, ce n'est qu'à titre de démonstration. Normalement, vous n'aurez pas à beaucoup utiliser la jolie méthode phi car une meilleure méthode pour voir ce code, comme je l'ai déjà mentionné, est de me laisser supprimer la cellule. Nous n'en avons pas besoin. Donc, une meilleure façon de voir ce code source est d' aller sur votre page Web et d'aller inspecter. Vous verrez ici une meilleure syntaxe du code HTML Vous allez donc le voir ici. Nous avons trois divisions ici. Avec un cours sur les villes. Nous avons d'autres divisions ici, mais c'est ce qui nous intéresse. Le corps est donc tout. Et si vous développez l'une de ces divisions, vous verrez que nous avons une balise H deux, donc une balise de titre, et également une balise de paragraphe. Donc P tag et H deux tags. Et l'autre division, qui est celle-ci ici, possède également qui est celle-ci ici, possède cette balise H two et la balise de paragraphe. Et Tokyo a également la même chose. Notre devoir est donc maintenant d' extraire les noms de ces éléments. Ce serait donc le H deux, le texte des deux balises H à l'intérieur des balises de la ville. Alors naturellement, vous commencez à penser à parcourir ces cases qui sont en fait des divisions Vous voulez donc passer par ici, ici et ici et extraire ce que vous voulez extraire. Nous revenons donc au code, et ce que vous voulez faire, c'est exécuter une méthode appelée find A. Et ce que vous voulez trouver, c'est Divs Devs, mais il peut y en avoir beaucoup sur la page Web Donc, par exemple, nous avons deux autres divs ici. Et nous ne voulons pas qu' on les trouve. Nous ne voulons que ces trois-là. Mais ces trois, comme vous le voyez, ont un attribut de classe commun qui est égal aux villes. Nous voulons donc en faire usage. Et nous passons ici un dictionnaire, dont la classe serait égale à celle des villes. OK, permettez-moi de créer une variable ici, tout appeler et de l'exécuter. Maintenant, si vous imprimez tout, vous verrez que les divisions ont été extraites du code source. Donc, à partir de la soupe, qui était le code source complet. Et j'aimerais que vous y voyiez de près. Vous pouvez voir que la première division est divisée par une virgule ici Ensuite, la deuxième division commence. Donc pour Paris, Paris est le deuxième, ça s'arrête ici , puis Tokyo commence ici. Nous avons donc une liste de trois éléments, un pour chaque division. Maintenant, si vous souhaitez rechercher uniquement le premier élément avec cet attribut de classe, self cities, vous devez utiliser la méthode find. Dans ce cas, vous n'obtenez pas de liste, mais la division de code pour la première division uniquement, qui se trouve être un élément de balise d'une belle soupe. Il ne s'agit donc pas d'une simple ficelle, mais d'une ficelle à savon spéciale, disons, d'une magnifique ficelle à savon. Ainsi, ce beau savon connaît sa structure, il sait quels éléments ou où se trouvent les balises , où se trouve le texte, etc. Cette belle soupe est donc en mesure de vous donner les informations que vous recherchez. Encore une fois, vous extrayez le premier élément. Maintenant, une autre façon extraire le premier élément est de manière logique. Nous avons donc tous les éléments ici, c'est d'utiliser l'indexation par liste Donc cet objet que je viens de vous montrer, l'objet technique de Beautiful Soup, supporte l'indexation. Donc, vous l'exécutez. Et dans ce cas, comme vous le voyez, vous extrayez le premier élément de l'objet tag, ou vous pourriez le faire comme ça, pour les récupérer tous. les avez donc toutes ici, et zéro est le premier. Tu as compris l'idée. D'accord, mais que se passe-t-il si vous ne voulez que les balises H de cette classe D ? Eh bien, dans ce cas, vous devez faire référence à l'objet, puis appliquer à nouveau la méthode fine. Et cette fois, vous voudriez obtenir l'élément H deux. Et dans ce cas, vous n' avez pas d'attribut de classe, vous devrez donc le laisser comme ça. Et vous obtenez une erreur parce que ce que j'ai fait ici, c'est que je n'ai pas indiqué cette division, mais plutôt la liste. Contenant toutes ces divisions. Python essaie d' obtenir le H deux, mais cette méthode de jeu de résultats ne contient pas cet élément H deux. Donc, ce que vous voulez faire, c'est pointer sur le premier élément de la liste, et cela vous donne l'élément H deux avec le texte et le texte, ce qui ressemble à une liste, donc vous voulez y effectuer une indexation zéro Et si vous ne voulez que Londres, vous appliquez un texto et vous obtenez Londres. C'est donc ce que nous voulions, non ? Pour extraire les villes. Nous avons donc extrait Londres. Maintenant, que diriez-vous d'extraire Paris et Tokyo ? Eh bien, comme vous pouvez le deviner, nous devons utiliser quatre boucles. Mais d'abord, permettez-moi de résumer ce que nous avons fait ici. Nous avons donc chargé le contenu ici, c' est-à-dire celui-ci ici, puis nous l'avons chargé la belle méthode de la soupe. Et une belle soupe rend cette soupe belle pour qu'elle reconnaisse les étiquettes. Ce que nous avons fait ensuite, c'est que nous avons trouvé, extrait de ce contenu. Nous avons extrait tous les éléments de division. Donc, avec les balises les attributs et le texte qu'ils contiennent. Tout ce qui se trouve à l'intérieur de ces divisions avec une classe est égal à une ville. Ensuite, pour chacun de ces éléments de cette liste, nous pouvons exécuter, encore une fois, une méthode de recherche complète. Nous pouvons donc trouver les balises de sous-taxe de cette division. Et dans ce cas, nous avons trouvé le tag H. Ensuite, nous récupérons le premier élément de la liste, qui dans ce cas était une liste avec un seul élément. Chacune de ces divisions a donc un H à taxer. Ou bien, vous pouvez simplement utiliser find ici et sans utiliser cette indexation. Mais il s'agit d'une méthode générale. Ensuite, nous y appliquons l'attribut text afin d'extraire le texte de cet élément. Nous avons donc eu Londres. Maintenant, nous devons faire de même, mais dans ce cas, en itérant. Donc, pour, disons, l'élément en O, vous souhaitez l'imprimer. Donc, l'article est celui-ci ici. Ce serait donc le premier élément. Vous souhaitez donc imprimer l'article qui trouve pull. Et vous voulez trouver les deux balises H de ce premier élément, par exemple. Donc, il y a deux balises, puis vous devez appliquer cet indice zéro là-dedans, et vous voulez récupérer le texte à partir de celui-ci, et c'est tout. Voici les données. Sinon, vous pouvez simplement passer P ici et vous obtiendrez les paragraphes. Donc celui-ci est là, le texte. C'est donc l'idée de charger des pages Web en Python, de les analyser avec du beau savon et extraire des textes de la Désolée si j'ai été un peu répétitif en expliquant ces choses, mais je veux vraiment m' assurer que vous comprenez les concepts de base. autre côté, si vous trouvez cela très basique, je dirais que allons passer aux prochaines conférences où nous allons extraire des informations d'un site Web plus avancé, et nous allons extraire des liens et pas seulement Il s'agit donc d'un programme réel et très intéressant. Je te parlerai donc plus tard. 199. 198. App 8 : démo d'une application de scrapping Web ++: Bonjour, bienvenue dans cette nouvelle section. Et, comme d'habitude lors de la première conférence, je vais simplement vous faire une démonstration du programme que vous allez créer. Vous aurez donc ce programme entre vos mains à la fin de cette section. Et oui, au cours de mon travail en tant que freelance, j'ai constaté une augmentation de la demande de données provenant d'Internet auprès de différents clients, et ces données peuvent servir à différentes fins Par exemple, vous pouvez avoir besoin de données immobilières provenant de sites Web immobiliers tels que celui-ci, ou vous pouvez avoir besoin d'entreprises, donc d'une liste d'entreprises, et vous voudrez peut-être les rechercher sur les pages jaunes ou même sur des informations de Wikipédia. Le problème, c'est que ces sites Web ne vous fournissent pas , comme un CSV les données que vous recherchez. Ils ne le font donc pas. Et ce que vous voulez faire dans ce cas, c'est supprimer les données de ces sites Web. Et oui, vous pouvez avoir besoin de données à différentes fins. Et nous pouvons le faire. Nous pouvons faire du web scrapping. Le processus s'appelle donc Webscrapping. Nous pouvons le faire avec Python. Python est donc parfait pour cela. En gros, vous obtenez ces données et vous les stockez dans une table, telle qu'un cadre de données Pampas ici, et vous pouvez également les exporter facilement en sortie Oui, dans cette section, vous allez faire scrapping sur ce site immobilier Ainsi, avec Python, vous allez effectuer une requête de recherche sur un certain emplacement. Python recherchera donc des données, puis il obtiendra ces données, et il les stockera dans ce tableau, puis enfin, je dirais alors dans un fichier CSV out food. Tout est donc automatique. Et vous souhaiterez peut-être obtenir différents attributs sur le site Web. Donc, dans notre cas, nous avons obtenu cet ensemble d'attributs. Et oui, vous pouvez obtenir ces données en un seul cycle de programme. Mais bien sûr, tout d'abord, vous devez créer ce programme, et c'est ce que nous allons faire lors des prochaines conférences. C'est donc très utile. Et en plus d'apprendre le scrapping Web, cela améliorera également vos compétences en Python en général Et oui, commençons, et je vous parlerai lors de la prochaine conférence. 200. 199. Chargement de la page Web dans Python: Voilà, je suis contente que vous regardiez ceci, c'est formidable que vous soyez arrivée aussi loin dans le parcours. Et dans cette conférence, en fait, au cours des prochaines conférences, vous apprendrez à supprimer des données de ce site Web. Il s'agit donc d'un site Web immobilier, et ce qu'il fait, il répertorie les propriétés à vendre ou à louer. Donc, en gros, disons Rock Springs. Il y a en fait quelques sources rocheuses là-bas, disons Wyoming Rock Springs dans le Wyoming Nous recherchons donc des propriétés là-bas. A dans le Wyoming et il dit avoir trouvé 28 annonces C'est donc une petite ville, une petite ville. L'idée est donc d' apprendre à supprimer les données de chacune de ces propriétés. Donc, quel prix peut être fixé, c'est que vous y avez l'adresse, le nombre de paris que l'établissement a, les bains, etc. Et vous obtenez également les pieds carrés des propriétés. Si c'est disponible. Les propriétés n'en ont donc pas, nous devons donc également en tenir compte . De plus, vous supprimez les données de plusieurs pages. Nous avons donc dix propriétés ici sur cette première page. Ensuite, à la page suivante, nous en avons dix autres, puis à l'avant-dernière page, nous avons le reste , soit huit, soit 28 au total. Non, normalement, je suppose que vous connaissez les demandes et les magnifiques bibliothèques de savons. Vous auriez donc dû suivre les conférences précédentes où nous avons extrait des données d' une simple page Web C'était donc un exemple trivial Et je crois qu'après cet exemple, vous vous retrouvez avec ça, et maintenant ? Donc, pour cette raison, je voudrais que vous appreniez à supprimer des données réelles. C'est donc l'un des véritables programmes que nous élaborons dans le cadre de ce cours. Et dans le script que nous sommes sur le point d'écrire, vous serez confronté à de véritables problèmes de programmation, ce qui est très important pour développer vos compétences, vos compétences en Python. Juste un problème. Avant de supprimer des données d'un site Web, il est bon de lire les politiques relatives aux données de ce site Web Ils peuvent donc avoir des politiques interdisant d'utiliser ou d' obtenir leurs données. Je l'utilise à des fins éducatives, donc je pense que vous ferez de même. Cela ne devrait donc pas poser de problème. Alors allons-y et écrivons le programme. Et j'utiliserai le Jupiter Notebook. Je vous suggère de faire de même. Cela créera donc un fichier de bloc-notes Jupiter. J'utilise donc Python 3. Appelez ça Century 21. Génial. Vous savez donc maintenant que la toute première chose que vous voulez faire lorsque vous écrivez un programme peut-être d'importer les bibliothèques que vous allez utiliser. Vous utiliserez donc des demandes et du beau savon. Donc, de By four Import. Génial. Maintenant, passez à la ligne suivante. Et revenons au site Web. Alors maintenant, la première chose à laquelle vous voudrez peut-être réfléchir est savoir comment charger le code source des pages Web ? Et maintenant, en fait, c' est un peu compliqué. Je veux dire, ce n'est pas très compliqué, mais c'est différent de la page Web statique que nous avons supprimée lors des conférences précédentes Voilà, nous allons supprimer trois pages, comme je l'ai dit, et la bonne chose est que chacune de ces pages possède une URL unique Donc, lorsque vous êtes sur la page principale, vous voyez que l'URL est tout simplement simple. Mais ensuite, lorsque vous recherchez un lieu, alors regardez l'URL. Maintenant, lorsque je recherche, l'URL changera. Il est donc allé à l'immobilier de Rock Springs et du Wyoming. Voici donc la chaîne, donc pour le lieu que vous recherchez, Rock Springs et WY et vous avez également quelque chose d'autre dont vous devez être conscient. L'idée est donc que vous obteniez maintenant cette URL. Donc, d'abord, nous allons supprimer uniquement la première page. Et une fois que nous l'avons saisi, nous pensons aux pages suivantes. Donc, comme les pages suivantes sont identiques, la structure est la même, mais nous allons simplement écrire une boucle pour parcourir les pages suivantes Allons-y et déchargeons la première page. Disons que request dot get voici l'URL. Et nous voulons connaître le contenu de cet objet de requête. Donc ce contenu. Et imprimons-le. Donc, un simple test. Mmm, hum. Mmm, hum. Très bien, donc ma connexion Internet fonctionne. C'est tout ce que nous savons de ce code, car nous ne pouvons pas le lire. Ce que nous voulons faire, c'est passer à la prochaine vente et rendre ce code plus lisible. Nous devons donc utiliser le magnifique suplibrar ici. C et l'analyseur, qui est un analyseur HTML Et peut-être de la soupe imprimée. J'ai cinq ans. Eh bien, voyons voir. Voici donc la page. Parfois, vous pouvez être expulsé de la page Web Vous voudrez peut-être vous assurer que la page s'est chargée correctement. Alors peut-être que je pourrais aller ici et chercher quelque chose. Alors Winchester, je vais chercher Winchester. Oui, donc la page semble s'être chargée correctement. Et nous n'avons pas besoin de cette jolie pièce. Alors laisse-moi nettoyer le carnet qui s'y trouve. Nous avons donc pu charger correctement la page avec les demandes. Et maintenant, quelle est la prochaine étape ? Eh bien, nous devons ensuite comprendre la structure de la page Web. Nous devons donc utiliser l' outil d'inspection dans notre navigateur, et nous le ferons lors de la prochaine conférence. Alors, tu verras. 201. 200. Extraire des éléments de Div: Génial. Passons donc à notre page. Nous y avons donc cherché des ressorts de travail. Et ce que nous voulons faire maintenant, c'est comprendre la structure de la page Web. Nous y utilisons donc l'outil Inspect. Et la logique est que vous voulez parcourir toutes ces cases, pour ainsi dire Nous récupérons donc le code HTML de ces boîtes, puis nous entrons dans ces codes HTML Nous parcourons donc ces HTML de manière itérative. Ensuite, nous trouvons les balises pour les données que nous voulons obtenir. Cela nous amène donc au point que nous devrions rechercher les éléments qui identifient ces boîtes. Donc, si je vais inspecter à nouveau ici, je verrai que cette demi-boîte porte ce div avec cet identifiant. Et en fait, je veux un niveau supérieur, donc je veux que toute la boîte s'y trouve. Donc, si je vais ici, maintenant, cela ressemble à la boîte entière ici. Donc, l'intérieur devrait contenir les données. Voici la photo. Et c'est le prix. Voici donc un texte pour le prix, et nous avons ce prix d'accessoire tant que classe pour le tag H four, qui crée ce numéro ici Il s'agit donc de la première division de division. Ensuite, nous devrions avoir la prochaine plongée quelque part là-bas, ici. Donc ligne de propriété, ligne de propriété ici, ligne propriété, ligne de propriété encore une fois. Donc, la ligne de propriétés de classe et encore une fois ici. Et laissez-moi le mettre ici. Il faut donc l'ancrer en bas pour que l'on puisse y voir toute la boîte OK, comme ça. Alors, on y va. Donc, j'aimerais les supprimer et les enregistrer dans un fichier CSV ou un fichier Excel avec des pandas plus tard c'est que je vais obtenir le prix, l'adresse, le nombre de lits, le nombre de baignoires, la superficie de la propriété et aussi la taille du terrain s'il y en a beaucoup Certaines propriétés n' ont donc pas de charge à cet égard. Nous avons donc une astuce, et vous allez apprendre à la déchiffrer. Voici donc les données que je vais récupérer pour chaque propriété. Et permettez-moi de le replacer ici. Et vous pouvez soit cliquer ici et inspecter, directement aux éléments, donc au prix, soit y aller manuellement, ce qui est probablement mieux car cela vous aide à mieux comprendre le site Web, sa structure. Il s'agit donc d'un prix, et puis ici en bas, ici à l'intérieur, il devrait y avoir les éléments d'adresse, les principaux détails. Ce sont les paris. Donc, si nous développons cela, vous verrez que voici le texte de l'adresse. Il a donc une durée de avec ce nom de classe. Voici le nom de la ville, le code de l'État et le code postal. Génial. Mais tout d'abord, comme je l'ai dit, je dois passer par cette classe de ligne de propriétés du Div. Alors faisons-le ici. Et vous savez que vous avez une méthode appelée final, qui s'applique à l'objet soupe. Enfin, cela générera une liste avec tous les éléments dif qui ont une classe de was it Property row ? Oui, c'est Property Row. Une rangée de propriétés avec un R majuscule, c'est tout. Je vais donc entrer, exécuter ça. Alors, que pouvez-vous faire ? Eh bien, imprimez-le tous et vous verrez peut-être ce que vous obtiendrez. Cela commence donc au tout début de la toute première division des rangées de propriétés. Ce serait donc le premier prix, qui était celui-ci ici, ici, ici. Ensuite, il devrait y avoir une virgule après la fin de la première division Quoi qu'il en soit, si vous ne voulez pas les trouver manuellement, vous pouvez faire quelque chose. Vous pouvez trouver la longueur de tout cet objet qui ressemble à une liste, n'est pas exactement une liste. En fait, c'est un élément du jeu de résultats du B four de la magnifique bibliothèque Soup, mais il possède une fonction de longueur, tout comme la liste 2. Donc, la longueur, et tu en as dix. Et nous avons exactement dix résultats pour chaque page. Donc, première page ici, deuxième page, dix résultats et ainsi de suite. Maintenant, c'est comme une liste, donc il n'y a pas de bonne méthode, mais ce sont des éléments. Supposons donc que le premier élément, cet élément ait une méthode finale. Donc, tout comme vous le faites avec une belle soupe, si vous appliquez la méthode, une méthode finale, une belle soupe pour trouver les éléments des tags, vous pouvez faire de même pour les éléments de la liste A. Pour ainsi dire, appelons le résultat une liste. Cela signifie que vous pouvez appliquer une méthode fine à ce code source. Cherchons donc le prix. Eh bien, vous pouvez aller à l'inspection ou simplement regarder ici si c'est le cas, ce n'est pas beaucoup de code. J'ai donc trouvé le prix ici. Nous avons donc les balises H quatre, H quatre. Et il a également un prix immobilier, une classe de prix. Passons donc ça. Vous pouvez choisir de ne pas le faire passer. Mais le problème que vous pourriez rencontrer si vous ne transmettez pas le nom de la classe est que si vous avez d'autres balises H four dans le code, Python les extraira également. Vous devez donc spécifier le H quatre que vous souhaitez. Alors, trouvez le prix de l'accessoire , et voici le prix C'est donc un prix, mais avec les étiquettes aussi. Et il s'agit en fait d'une liste, comme vous le voyez. Maintenant, comme nous n'avons qu' un seul prix pour chaque propriété, dans ce cas, nous sommes autorisés à utiliser la méthode find. Cela ne nous donnerait donc pas des résultats , mais l'élément technologique proprement dit. Cela signifie que nous pouvons maintenant appliquer un objet texte ici, et nous y obtenons cette chaîne géniale Les choses ne sont donc pas si simples dans la vraie vie, comme vous le voyez, mais heureusement, tout cet objet est en fait une chaîne. Il s'agit donc d'une simple chaîne Python. Cela signifie que vous pouvez appliquer des méthodes de chaîne à cet objet. Laissez-moi donc contrôler cela pour supprimer le type. Donc, dans ce cas, ce que nous voulons appliquer, c'est supprimer tous ces caractères. Et une façon de le faire à laquelle je pense est de remplacer. Vous voulez donc remplacer la barre oblique inverse N par rien. Il suffit donc de passer une chaîne vide et de voir ce que vous obtenez. OK, ces gars du site Century 21 ont décidé de nous compliquer la vie. Mais que diriez-vous de postuler ? Nous avons donc de l'espace blanc, comme vous le voyez, donc nous remplaçons l' espace blanc par rien, et nous obtenons la chaîne elle-même. Génial. Nous savons donc en quelque sorte que les choses fonctionnent bien à ce stade. Et pour l'instant, je ne fais qu' imprimer les résultats. Comme je l'ai déjà mentionné, il est conseillé d'utiliser d'abord des instructions d'impression lorsque vous créez vos programmes, puis de remplacer ces instructions d' impression d'autres fonctions que vous souhaitez utiliser pour données que vous obtenez ou les autres objets avec lesquels vous travaillez. Ainsi, dans notre exemple, plus tard, nous ajouterons des méthodes pandas pour récupérer ces valeurs et les envoyer dans un fichier CSE C'est donc l'une des premières choses que je voudrais dire. La deuxième chose est que nous saisissons ici la valeur du premier élément. Et maintenant, nous commençons à réfléchir à l'efficacité. Nous devons donc au lieu d'extraire tous les autres éléments tels que l' adresse de la propriété et l'état de la propriété, etc. Peut-être que c'est bien de commencer à construire notre boucle for. Nous savons donc maintenant que les valeurs individuelles sont correctement extraites. Mais maintenant, nous voulons nous assurer qu'une boucle qui parcourt toutes ces propriétés fonctionne également Et allons-y et commençons à écrire la boucle de l'autre conférence. Mais pour l'instant, organisons réellement ce code. Voici donc une astuce que vous pouvez utiliser dans Jupiter. Je passe donc à la première cellule et je suis en mode commande. Vous appuyez donc sur Escape pour passer en mode commande et Shift et J, vous sélectionnez l'autre case. J, encore une fois, sélectionnez l'autre cellule, ou vous pouvez monter avec K, donc J, J, J. Et ce que je veux faire maintenant, c'est fusionner toutes ces cellules en une seule cellule. Et pour ce faire, en appuyant sur Shift, vous appuyez, donc sur Shift M, et vous fusionnez toutes les cellules en une seule cellule. C'est donc plutôt une question de préférence, mais il est bon d'avoir un carnet propre. C'est donc ce que nous avons fait jusqu'à présent. Allons-y et tournons la boucle dans une autre conférence. On se voit. 202. 201. Scraping les adresses des propriétés: Nous avons donc trouvé tout le contenu de la page Web, qui est en fait le code source. Et nous avons également obtenu le code source des divisions avec classe property row. Et maintenant, nous n'avons pu obtenir le prix de l'immobilier que pour la première division. Donc, uniquement pour la première case ici, maintenant pour obtenir toutes les cases, nous devons itérer. Donc, DD pour le supprimer. Et quatre, disons, un article en alliage. Et en fait, j' aimerais que tout soit imprimé ici afin que vous puissiez voir de quoi il s'agit. Donc, si vous oubliez cela pendant un moment, vous pouvez voir ce que c'est. C'est donc comme une liste. Donc, pour l'article en tout, allez ici. Nous allons donc utiliser la méthode d'impression ici. Mais j'aimerais l' écrire à la fin parce que je ne veux pas y ajouter de crochets maintenant. Il est donc bon d'avoir moins de crochets pour le moment pour que vous voir ce code plus clair, le code réel. Nous allons donc passer en revue le premier élément, qui est cette division ici, et nous voulons appliquer la méthode de recherche à cet élément ou simplement la méthode de recherche car nous n'avons qu' un seul H quatre ici. Donc, trouvez, et nous voulons trouver le H quatre, qui a une classe de prix d'accessoire Et puis ce que nous voulons obtenir de ce produit, c'est le texte. Comme vous avez vu que le texte était un peu embrouillé, nous voulons remplacer les barres obliques inversées par rien, puis les remplacer par un autre Il y avait donc de l'espace, et remplacez-le par rien. C'est donc la même ligne qu'ici. Ensuite, vous voulez l'imprimer. Ajoutez-y donc une déclaration imprimée. Et oui, c'est ça. Voyons comment cela se passe. Hmm. C'était rapide. Donc 725, 452. Miam. C'est une bonne chose. D'accord. Permettez-moi de le supprimer pour économiser de l'espace. Nous l'avons donc tous déjà défini ici. Nous n'avons donc pas besoin de l'ajouter ici. Et allons-y maintenant et extrayons cette passerelle zéro qui ne semble pas un très bon exemple. Ignorons donc cela et extrayons cette adresse ici. Donc Winchester Boulevard, et ce serait inspecter Mmm hmm. Cela a donc une balise span avec une classe de prop address collapse Mais vous pouvez voir que vous avez également une autre classe ici, prop address collapse Donc deux classes, voici l'adresse, et voici le nom de la ville. Et regardez si vous avez une autre adresse accessoire, non. Non, nous ne le savons pas. Donc, l' adresse de l'accessoire s'effondre Ajoutons une autre déclaration ici. Article. Ces adresses sont donc à nouveau incluses dans cette méthode. Donc, trouvez l'objet. Maintenant, si vous utilisez fine cette fois au lieu de Fine Ole, le script va récupérer la première occurrence d'un collapsus d'adresse accessoire Il vous donnera donc l'adresse du boulevard Winchester, et il ignorera la seconde Il ignorera donc Rock Springs. Cela signifie donc que nous devons utiliser le bon O. Et si vous voulez obtenir cette première ligne, vous devez passer l'indice zéro à cette liste de résultats , puis un indice de un pour la ligne suivante. C'est ce que nous allons faire. Il s'agissait d'une balise span avec une classe de again, prop address collapse Permettez-moi donc de l'imprimer pour voir ce que nous avons jusqu'à présent. Voici donc le prix de la première propriété, puis nous récupérons la liste des résultats, qui comporte en fait deux éléments. Donc, l'adresse ici, puis le nom de la ville avec un code d'État ici et un code postal. Cela signifie donc que nous devons appliquer ici un indice zéro, si vous voulez obtenir le premier, d'accord ? Et puis, euh, voyons voir. Voici donc le premier, le premier élément. Si vous voulez le second, vous devez le copier ici et le transmettre ici Exécuter. Et c'est parti. Ah, je suppose que vous voulez le texte, donc vous voulez y appliquer la méthode du texte. Hum. Génial. Et juste pour des raisons de visibilité, ajoutons une autre ligne à la fin de la boucle pour passer une chaîne vide. Maintenant, vous pouvez voir les blocs plus clairement, et nous en avons dix. C'est génial, n'est-ce pas ? Allons-y maintenant et extrayons le nombre de lits et le nombre de baignoires. Il s'agit donc d'une balise span avec un lit d'information sur les classes. Et des bains. Voici l'autre verre rotatif. Si je valorise le bain complet. Maintenant, nous avons un problème. Non, nous devons faire attention car nous devons prendre le nombre de bains ici, qui se trouve à l'intérieur des balises B. Mais le nombre de bains figure également dans les balises B. Vous pouvez donc aller de l'avant et appliquer une méthode fine directement dans ce niveau. Donc, directement sous O. Mais cela poserait probablement des problèmes car vous avez plusieurs B. Vous avez donc également la zone, qui devrait également être un peu taguée. Classe Span. Oui, c'est un peu bizarre. Donc, parfois, vous avez trois balises B, parfois vous en avez plus. Il peut donc y avoir deux solutions. Vous pouvez soit partir du principe que les paris sont toujours les premiers transmettre un indice de zéro à la liste des résultats. Vous obtenez donc des lits, puis bain complètes avec un indice de un ou deux pour ce pied carré ici, et de trois pour celui-ci. Mais je préfèrerais le faire de manière plus constructive. J'aimerais donc d'abord extraire ces étiquettes de dépenses, puis entrer dans chacune d' elles et extraire la valeur contenue dans la balise B. Nous avons donc de la place pour le lit d'information et pour les salles de bain complètes , et c'est celui-ci ici. Oui, en fait, c'est répertorié comme le troisième. Les lits sont donc les premiers et les pieds carrés, la surface est la deuxième, puis les lits complets et ainsi de suite. Nous n'avons donc pas à penser à leur ordre. Il suffit de récupérer les noms des classes. Donc, je parie que cela signifie que vous voulez accéder à l'objet, très bien, dans ce cas. Vous voulez donc trouver l'envergure, et passons d'abord aux lits, qui étaient des lits d'information. Imprimons-le donc d'abord pour voir si vous êtes prêt à partir. Vous n'en obtenez donc aucun pour la première propriété. Il ne contient donc aucune donnée sur les lits et les baignoires, vous ne pouvez donc rien y faire. Il vous suffit parfois de n'accepter aucune donnée. Et puis voici le code, donc le code source du suivant. Maintenant, voici une astuce. Si vous appliquez la méthode du texte à cet objet, il devrait donc être ici, ce texte, vous obtenez une erreur. Et regardez attentivement ce que dit l'erreur. Il indique donc que l'objet non typé n'a pas de texte d'attribut. Cet objet non typé était celui-ci ici, donc none, qui est un objet spécial, et aucune méthode de texte n'est disponible. Vous devez donc compter pour cela. Et la façon dont vous comptez ces exceptions est d'utiliser une instruction try and accept. Vous devez donc joindre cette déclaration imprimée ici avec try Alors essayez ceci si cela fonctionne. Si ce n'est pas le cas, il y a d'autres choses ici. Alors, c'est passer. Donc, ignorez simplement ces non-types ici. Encore une fois, essayez de tirer réellement la méthode du texte de cette plage de texte. Et si cela n'est pas disponible, passez simplement à l' itération suivante de la boucle Essayons donc ça. Et oui, maintenant ça marche. Maintenant, comme vous pouvez le voir, nous avons le texte de la balise B, mais également le texte de la balise span. Voici donc le texte de la balise B, et voici le texte de la balise span. Donc, si ça te convient, tu peux le laisser comme ça. Mais j'aimerais n'avoir que le numéro en clair. Et pour ce faire, vous devez peut-être appliquer les méthodes de recherche. Nous avons donc, encore une fois, ce code source, nous devons donc le trouver à l'intérieur de ce code source. Nous devons trouver la balise Bt, qui n'a pas de nom de classe, nous la laissons ainsi, et nous devons extraire le texte de cette balise binaire. Et cela ne vous donne que le numéro. Donc quatre, quatre, cinq, et ainsi de suite. C'est donc une bonne chose. Maintenant, faisons de même. Je vais donc copier ce bloc en entier et nous ferons de même pour le nombre de bains. Créons un espace ici. Et pour ce nombre, il en allait de même pour la taille de la zone. Et cet autre truc ici. Donc des demi-bains. Nous allons donc aussi compter pour cela. Donc, informations pieds carrés, informations pieds carrés là-bas. On va ici comme ça. Ensuite, nous avons la salle de bain complète Info Value. Et encore une pour les demi-bains. Ce serait donc un demi-bain à valeur informative. Exécuter. Nous avons un problème d' indentation Alors Troy, celui-ci est bon. Celui-ci n'est pas bon non plus ici. Vous devez donc mettre en retrait les déclarations après Troy et l'auteur de la déclaration, sauf Alors, exécutez et voyons voir. Bien. Donc quatre lits, puis quatre salles de bain. Mais ensuite, nous avons obtenu le quartier ou la propriété. La commande n'est donc pas très bonne comme ça. Dans ce cas, nous ne voulons pas écrire pass ici, mais peut-être ne voulons-nous en imprimer aucune. Dans ces cas, donc print, none, print, none. Pareil ici. Exécuter. Et maintenant, ça a l'air mieux. Maintenant, nous connaissons l'ordre dans lequel nous savons que nous avons quatre lits dans cette propriété, et que la taille de la zone n' est pas disponible, puis nous avons quatre salles de bain. Et puis nous n'avons aucune information sur les demi-bains qui s'y trouvent. Donc ça a l'air bien. Et j'aimerais m' arrêter ici pour obtenir plus de données lors de la prochaine conférence. Oui, passons à autre chose. 203. 202. Scraping d'éléments spéciaux: Nous y voilà de nouveau. Et nous avons ce script qui produit cette sortie. Nous avons donc des attributs pour chacune de ces propriétés. Plus précisément, ce sont les attributs de ce bloc ici. Donc, le prix, l'adresse et certains attributs tels que le nombre de paris, etc. J'aimerais maintenant aller plus loin et extraire la taille du lot pour chaque propriété chaque fois que cet attribut est disponible. Ainsi, comme vous le voyez ici, certaines propriétés n' ont pas une grande taille de terrain. Et bien que la taille du lot soit un attribut important à connaître d'une propriété, dans ce cas, il est également assez difficile de l' extraire de cette page Web. La raison en est que si vous regardez le code source, vous verrez qu'il s'agit du nom des attributs, donc de la taille du lot, et la valeur réelle que nous voulons extraire. Et ils font tous les deux partie de cette division. Donc, la première ligne. Cette division possède un nom de classe appelé groupe de colonnes. Nous avons maintenant une autre classe de groupe de colonnes, donc une autre division avec la classe de groupe de colonnes ici comme deuxième ligne. Ensuite, si vous regardez une autre propriété, donc une autre ligne de propriété. Vous verrez que cette division par groupes de colonnes se répète ici. Ainsi, si vous écrivez une boucle pour extraire l'étendue avec la classe de nom d'entité pour toutes les propriétés, pour cette propriété, vous serez en mesure d'obtenir la taille réelle du lot. Mais pour cet autre, vous aurez probablement l' âge de la propriété, mais vous vous attendrez à la taille du terrain. Vous obtiendrez l'âge de la propriété, car l'âge de la propriété est le premier nom de la fonctionnalité. Et la taille du lot est également le premier nom de la fonctionnalité. Donc, avec la classe de nom de fonction dans la deuxième propriété. C'est donc l'un de ces cas où vous devez réfléchir à des solutions alternatives. Donc, si vous pointez sur la méthode du groupe de colonnes, c'est-à-dire que vous dites « trouver tout dans une division » avec un groupe de colonnes de classe, et que vous recherchez le nom de la fonctionnalité avec un indice zéro, vous obtiendrez les premières lignes. Tu le sais. Maintenant, trouvons une solution. Eh bien, pourquoi ne pas parcourir tous ces groupes de colonnes en boucle ? Ensuite, nous vérifions que si le texte du groupe de fonctionnalités est égal à la taille du lot, donnez-moi le texte contenu dans le nom de la fonctionnalité. Donc, dans cette itération spécifique, encore une fois, si le groupe d'entités est égal à taille du lot ou s'il contient une chaîne de taille de lot dans le texte, alors dans cette itération en cours, donnez-moi la valeur textuelle du nom de la fonctionnalité Nous aurons donc besoin d'une boucle ici. À l'intérieur de notre grande boucle. Donc, cette grosse boucle, appelons-la , passe par chacune de ces lignes. Puis à l'intérieur de cela , dans l'itération en cours de cette grande boucle Supposons donc que l'itération en cours passe par cette propriété À l'intérieur de cela, nous passons aux divisions des groupes de colonnes. Disons quatre, appelons cette variable, le groupe de colonnes dans la variable actuelle sera item. Encore une fois, article comme nous l'avons fait là-bas. Je trouve tout, en fait. Vous voulez donc trouver des divisions dont nom de classe est la colonne Group. Groupe. Et permettez-moi d' imprimer rapidement la variable du groupe de colonnes. Juste pour voir ce que nous avons jusqu'à présent. Et c'est parti. Voici donc les données dont nous disposons, et c'est parti. Laisse-moi monter ici. Voici le code source de chacune des divisions du groupe de colonnes. Donc la première division, la deuxième division, et ainsi de suite. Ce sont donc des fonctionnalités qui correspondent à cet en-tête ici. Et puis il y a le style architectural, ce qui n'est pas ce dont nous avons besoin. Nous avons le type de toit, donc à chaque itération, Python imprime ces lignes Maintenant, ce que nous voulons faire avec ces lignes, restons imprimés là pendant un certain temps. Ce que nous voulons faire avec ces lignes c'est les parcourir à nouveau. Nous allons donc itérer sur ce div et sur cet autre div et nous verrons que si le texte ou le groupe de fonctionnalités de cette itération en cours a la taille du lot de chaîne, nous obtiendrons le texte du nom de la fonctionnalité pour cette Encore une fois, nous avons besoin d' une boucle à quatre points ici. Qui passera par chacune de ces divisions de groupes de colonnes. Donc, il accédera également à l'élément du groupe de fonctionnalités et à l' élément du nom de la fonctionnalité. Donc, pour le nom de la fonctionnalité du groupe de fonctionnalités, nous devons y utiliser une fonction zip. Comme vous vous en souvenez peut-être, une fonction zip, qui est une fonction Python intégrée, est utilisée pour parcourir deux listes en même temps est donc ici que vous entrez le Tolist dans la fonction zip Et notre liste de deux serait la première serait un groupe de colonnes qui trouverait toutes les plages, donc une étendue avec un nom de classe ou un groupe de fonctionnalités De même, nous devons accéder au groupe de colonnes qui trouve poll, et nous avons à nouveau besoin de la balise span. Mais cette fois, nous avons besoin d'une classe de nom de fonctionnalité. Ne confondez donc pas ces variables avec ces noms de classes. Et ici se ferme la fonction zip. Donc, ce support est là. Donc, après les quatre déclarations, vous avez besoin de la colonne ici. OK. Maintenant, que souhaitez-vous faire pour chaque groupe de fonctionnalités ? Eh bien, imprimons temporairement le texte du groupe de fonctionnalités, par exemple. Et aussi le texte à points du nom de la fonctionnalité. Et laissez-moi le supprimer. Ce groupe de colonnes correspond donc à tout ce bloc de divisions. Alors exécutez-le. Nous avons une syntaxe non valide ici et nous cherchons la flèche. Oui, voici une petite flèche. Donc, celui-ci nous indique ce caractère, qui est en fait une demi-colonne. Pour une raison quelconque, j'y ai mis un point-virgule, donc ce devrait être une colonne, pas un OK, laisse-moi exécuter ça à nouveau. Voici donc ce que nous obtenons. Pour la première propriété, par exemple, nous avons imprimé les attributs précédents. Donc non, non, non, pour ce premier. Ensuite, voici le texte du groupe de fonctionnalités, et voici le texte du nom de la fonctionnalité. De même, nous avons ici le texte du groupe de fonctionnalités pour le prochain groupe de fonctionnalités et le nom de la fonctionnalité. Nous avons donc la propriété suivante, qui possède en fait de nombreux attributs. Gaz combustible pour le chauffage. Et voici quelque chose que vous devriez savoir maintenant. Vous devez être au courant de. Permettez-moi d'ouvrir à nouveau, le site Web de Century 21. Rock Springs. Comme vous pouvez le constater, la deuxième propriété n'a pas autant d'attributs. Il a donc des appareils électroménagers et un sous-sol vétustes, mais pas de mauvaises caractéristiques et un système de refroidissement, etc. Ces attributs supplémentaires sont donc cachés d'une manière ou d'une autre dans le code source de cette page Web, et vous pouvez y accéder si vous y allez. Donc, si vous cliquez sur le lien de la page Web de la propriété en question. Voici donc tous les attributs que nous voyons ici. Donc, comptez deux cheminées. Voici le nombre de foyers. Et vous pouvez également voir que la taille du lot est indiquée sur page Web de la propriété. Alors voilà. Ce qui est en fait une bonne chose. Nous sommes donc en mesure d' extraire tous les attributs d' une propriété sans avoir à accéder à la page Web de la propriété, le lien de la propriété. C'est donc une bonne chose. Et maintenant, ce que nous devons faire, c'est conserver le relevé imprimé pendant un certain temps, et nous devons vérifier. Donc, ici, sous les quatre boucles, si la taille du lot dans le groupe de caractéristiques correspond à ce texte. Ainsi, par exemple, la chaîne de taille du lot se trouve-t-elle dans le texte de ce groupe de fonctionnalités ? Si c'est le cas, donnez-moi la fonctionnalité nommée « texte ». Cela me donnera donc la valeur ici. Si ce n'est pas le cas, alors ne faites rien. Nous laissons donc la boucle telle qu'elle est. Permettez-moi donc de supprimer cette fonction maintenant, la fonction d'impression que nous avons exécutée plus tôt et de l'exécuter. Alors, on y va. Nous n'avons rien ici. Il s'agit des attributs précédents. Ensuite, nous avons quatre attributs ici, puis nous avons 0,221 acre Ici, nous avons un demi-acre. D'accord, cela semble bien maintenant, et j'aimerais maintenant passer à la prochaine conférence où vous apprendrez à vous débarrasser de ces instructions imprimées et à stocker tous ces attributs dans un tableau. Ainsi, dans le cadre de données de Panda, Ainsi, dans le cadre de données de Panda nous exporterons le bloc de données simplement dans un fichier CSV ou un fichier Excel, comme vous le souhaitez Nous allons donc avoir une colonne de prix et une colonne d'adresse, une colonne d'état avec un code postal, ainsi que des colonnes contenant ces attributs de la taille d'un lot. Passons donc à autre chose. 204. 203. Sauvegarde des données extraites dans des dossiers CSV: Réfléchissons maintenant à la manière dont nous pouvons additionner toutes ces valeurs. Donc, ces valeurs dans une seule trame de données, la trame de données Pandas. J'ai donc pensé à avoir une, deux, trois, quatre, cinq, six, sept, plus huit colonnes de la taille du lot dans le bloc de données. Et puis pour chaque rangée, vous auriez, exemple pour le prix, 725 000 dollars pour celle-ci, puis la suivante pour 152 000, et ainsi de suite jusqu'à ce que toutes les propriétés soient J'espère donc que la structure est claire et que la manière de le faire maintenant est claire. Eh bien, une solution serait peut-être d'itérer dans le bloc de données, mais c'est une solution coûteuse Cela prend beaucoup de temps, de sorte que le processus peut devenir lent lorsque vous itérez trames de données, car les trames de données ne sont pas conçues pour les parcourir Il est donc probablement préférable créer un bloc de données à partir d'un dictionnaire Python ou d'une liste de dictionnaires, peut-être Et en fait, c'est ce que je vais faire. À chaque itération , je vais ajouter ces valeurs à un dictionnaire Par exemple, je vais commencer par le premier dictionnaire. Ainsi, dans la première itération, j'aurai une clé de prix et la valeur du prix comme première paire du dictionnaire, puis la paire suivante de ce même dictionnaire serait la clé d'adresse et la valeur d'adresse Ensuite, nous passons à la paire suivante. Nous ajoutons donc la troisième paire ici, puis une quatrième paire cinquième, sixième, septième et huitième. Associez donc un dictionnaire de huit paires lors de la première itération. Ensuite, lors de l'itération suivante, je dois créer un autre dictionnaire avec les mêmes clés Nous aurions donc, encore une fois, le prix et la valeur de ce prix, qui correspondraient à la valeur d'une deuxième propriété. Je vais donc créer un deuxième dictionnaire puis un troisième dictionnaire, et ainsi de suite jusqu'à ce que les dix propriétés présentes soient consommées. Je vais donc me retrouver avec dix dictionnaires. Maintenant, vous devez également stocker ces dictionnaires quelque part car si vous parcourez simplement les dictionnaires et que vous les perdez à chaque itération, vous n'avez Nous allons donc stocker ces dictionnaires dans une liste. La première chose à faire est donc de commencer chaque itération avec un dictionnaire vide afin de pouvoir ajouter les paires clé-valeur à ce dictionnaire de phrases Ainsi, une fois que vous avez créé un dictionnaire vide, vous pouvez remplacer ces instructions d'impression. Vous voudriez donc que le prix soit la clé du premier dictionnaire, et ce serait égal. Si nous n'avons pas besoin des crochets, celui-ci non plus. Alors c'est tout. De même, vous pouvez le faire en tant qu'adresse. Supprimez-le à nouveau ici. Appelons cette localité. Nous créons donc des clés à la volée, donc le prix, l'adresse et la localité, et nous attribuons à nouveau des valeurs à ces clés à la volée Il serait donc peut-être logique d'avoir le prix ici. Nous commençons donc par l'adresse, localité, puis le prix. Ce seraient les lits. Et s'il n'y a pas de lits, vous ne devez en laisser aucun pour les lits. Et puis, encore une fois, ce serait une surface, qui est à nouveau égale à celles-ci. Même chose pour la zone, non quand il n'y en a pas et une de plus ici. Baignoires complètes. Laissez-moi le copier. Aucune. Et ce seraient des bains chauds. C'est égal à aucun. Nous avons ici un segment imprimé, dont nous n'avons pas besoin. Nous allons donc passer en revue le nom de fonctionnalité de chaque groupe si la taille du lot figure dans le texte du groupe d'entités, alors appelons cette taille de lot. Est égal au texte du nom de la fonctionnalité. Et supprimons cette déclaration imprimée. Ainsi, à la fin de cette boucle, vous aurez votre premier dictionnaire. Ainsi, à la fin de la première itération, vous aurez votre premier dictionnaire Maintenant, vous voulez stocker ce dictionnaire quelque part. Stockons-le donc dans une liste. Donc normalement, vous devez créer une liste en dehors de la boucle, une liste vide à cet endroit. Et puis à la fin de la boucle, qui est exactement là, vous voulez ajouter le dictionnaire Vous obtiendrez donc une liste de plusieurs dictionnaires. Dans ce cas, vous obtiendrez une liste de dix dictionnaires. Exécutons ceci. Nous avons une syntaxe invalide, bads. J'ai oublié d'y avoir l'opérateur d'assignation, et c'est vrai. Aucune erreur cette fois. Imprimons L ici. Et ça a l'air bien. Vous pouvez donc en vérifier la durée. Il est donc dix. Maintenant, si vous voulez ajouter cette liste de dictionnaires à un bloc de données, cette liste à un bloc de données, vous devez utiliser Pandas, puis DF est égal au bloc de données Pandas Et ici, nous devons écrire une très longue déclaration. Je fais du jogging. Il vous suffit d'y transmettre la liste et de créer un bloc de données à partir de cette liste de dictionnaires. Nous allons donc vérifier le bloc de données. Et boum, voici les données. Et comme vous pouvez le constater, nous avons même obtenu valeurs Nan lorsqu'il n' y a pas beaucoup de taille de lot. Pandas comprend donc quand il n'y a aucune donnée dans les dictionnaires Ainsi, par exemple, ici, nous n'avions pas une grande taille de lot, et Pandas attribuera une valeur non by nan à cela, que vous pouvez simplement remplacer si vous le souhaitez par une valeur non value Ensuite, vous devez travailler beaucoup pour l'enregistrer dans un fichier CSV. Une très longue déclaration. OK, donc je vais mettre ce CSV, et il devrait être prêt à être utilisé. Laissez-moi vérifier cela. Voici un dossier. Et voici les données. Donc ça a l'air bien. Génial. Maintenant, quelle est la prochaine étape lorsque, comme vous pouvez le deviner, nous devons récupérer les propriétés de toutes les pages. Donc deuxième page et troisième page. C'est ce que nous ferons lors de la prochaine conférence. À bientôt. 205. 204. Explorer plusieurs pages Web +: Génial. Nous avons donc fait fonctionner le script sur une page. Donc pour la première page, mais il se peut que nous y ayons plusieurs pages. Donc, pour Rock Springs, nous avons trois pages avec 28 annonces. Donc 28 propriétés y sont répertoriées pour la vente ou pour les fins de fin de mois. En fait, ils sont à vendre, donc des maisons à vendre. Il s'agit donc de la deuxième page avec dix propriétés supplémentaires, puis vous avez la dernière page, qui devrait comporter huit propriétés. Nous en avons donc 28 au total. Maintenant, c'est une petite ville, il n'y a donc pas beaucoup d'annonces là-bas, mais dans les grandes villes, vous aurez beaucoup de pages. Et le script que nous allons créer pour extraire les données de propriété de ces pages fonctionnera avec n'importe quel nombre de pages. Comment s'y prendre pour récupérer les données de toutes les pages ? Eh bien, il n'y a pas de magie là-dedans, mais il n'y a qu'un seul truc. Vous savez, si vous recherchez à nouveau Rock Springs, vous y verrez une URL initiale, que nous avons chargée en Python. Je pense que c'était sans cela K égal à un. C'était comme ça uniquement. Je ne suis donc pas sûre de ce que cela signifiait, mais de toute façon, c'est peut-être parce que j'ai de nouveau cherché des sources rocheuses. Voici donc la première page. Maintenant, la logique qui sous-tend l'extraction des données des autres pages est que nous devons également charger les autres pages en Python , en réutilisant request Donc, comme nous l'avons fait ici, nous avons chargé la première page. Nous devons maintenant trouver un moyen de charger les autres pages. Nous pouvons soit parcourir manuellement chacune des 300 pages, trois pages dans ce cas, et copier l'URL, soit essayer de trouver un moyen. Donc, pour déterminer la règle, s'il existe une règle selon laquelle l'URL change lorsque vous passez d'une page à l'autre, il s'agit probablement toujours d'une règle. Nous devons donc le découvrir. Je suis donc passé à la deuxième page, et comme vous le voyez, maintenant l'URL a changé avec une extension. Donc T est égal à zéro et C égal à zéro. Si vous passez à la troisième page, vous voyez que l'URL avant 20 n'a pas changé, mais que C a été changé en 20. Maintenant, si vous revenez à la première page, vous verrez que S est égal à zéro. Ainsi, lorsque vous recherchez directement Rock Springs, vous obtenez l'URL de base sans cette extension. Ensuite, si vous accédez à la première page, manuellement en cliquant sur le numéro un ici, vous serez inclus dans la règle qui modifie l'URL lorsque vous parcourez toutes les pages. Cela signifie que nous pouvons utiliser cette URL pour accéder à la première page, puis nous pouvons parcourir l'URL en boucle. Et changez cette valeur à dix au fur et à mesure que nous itérons. Augmentez de dix. Donc, entre 010 et 20, et si nous avons plus de pages, ce serait 30 et ainsi de suite. J'espère donc que tu as compris l'idée. Allons-y maintenant et voyons voir Nous allons donc y stocker une URL de base. Nous devrions être quelque chose comme ça sans le numéro. Il s'agit donc de l'URL des statistiques. Et maintenant, avant de demander le code source avec les requêtes, essayons d'abord de créer des URL et de les imprimer. Nous utilisons donc une déclaration imprimée comme toujours, pour essayer des choses. Supposons que pour une page comprise dans l'intervalle, eh bien, la plage devrait commencer à zéro, et jusqu'à ce que nous ayons trois pages, et la dernière page en ait un de 20. Alors peut-être y mettre 30 , puis itérer avec un pas de dix Donc, à chaque itération, nous augmenterons de dix Pour l'instant, ne vous inquiétez pas du nombre de pages. Pour l'instant, nous ne faisons que saisir une valeur manuellement, donc nous savons que cela comporte trois pages, donc j'en mets 30. Mais plus tard, nous changerons cela en une variable qui saisit un certain nombre de pages du site Web Donc, au lieu de Rock Springs, vous auriez New York et vous auriez probablement 200 pages. Vous devez donc saisir le numéro de la dernière page 200, puis passer quelque chose comme 200 fois 20 ici, pour obtenir 2000 et obtenir une boucle qui va jusqu'à zéro, dix et jusqu'à 2000. Nous le ferons donc plus tard. Pour l'instant, imprimer ? URL de base plus. Eh bien, cette variable de page obtiendrait un entier. Nous devons donc convertir cet entier en chaîne en utilisant la méthode string. Et puis la page y entre. Essayons donc ça. Ana, voici les trois anneaux. Laisse-moi en ouvrir un. Allons-y. Et il s'agit de la deuxième série de résultats. C'est donc la page deux. Génial. Laisse-moi clore ça. Mais bien entendu, l'impression n' est pas ce qui nous intéresse, nous ne voulons donc pas imprimer l'URL. Nous voulons en obtenir le code source. Donc, ce que vous voulez faire, c'est être à la hauteur des demandes. Vous êtes donc dans la boucle, et plus tard nous allons fusionner cette boucle avec l'autre code. Concentrons-nous donc là-dessus pour le moment. Obtenez l'URL de base plus la chaîne du numéro de page. Et juste à côté de cela, vous voulez récupérer le contenu de la demande et préparer la soupe. Tellement belle soupe, analyseur C et HTML. Et pour le moment, essayons d'imprimer la version embellie de l'objet en forme de soupe. Génial. Et cela a pris du temps, mais voici le résultat. Ainsi, lors de la première itération, nous avons imprimé l'URL par cette fonction, par la fonction d'impression, puis nous avons obtenu la version embellie du code source de la première URL, qui est Bref, tu as compris l'idée. Cela semble donc fonctionner, mais c'est ce dont nous avons besoin dans tout le code source. Nous avons donc le code source des trois pages. Nous n'avons donc pas besoin d'imprimer tout le code source, il suffit d'extraire les divisions des lignes de propriétés. Donc, comme nous l'avons fait ici, nous avons obtenu la soupe pour la première page , puis nous y avons créé une variable all. Nous faisons donc la même chose ici. Mais cette fois, il doit être indenté car il se trouve à l'intérieur d'une boucle Donc, la division des classes de toutes et de propriétés, ça a l'air bien. Donc, si vous l'imprimez, il suffit de tout vérifier, voici le résultat. Donc, la première URL est imprimée, puis vous avez ces divisions. Et puis vous avez également beaucoup de données ici. Alors maintenant, ce que vous voulez faire, c'est récupérer tout le code que vous venez de créer ici et peut-être le supprimer et supprimer la cellule entière, et vous voulez mettre ce code ici. Génial. Maintenant, vous l' avez fait pendant une page, et maintenant vous parcourez toutes les pages en boucle Donc, ce que vous voulez faire, c'est indenter tout ce bloc sur la droite pour qu'il fasse partie des quatre boucles qui s'y trouvent Contrôlez et fermez donc le crochet pour mettre en retrait le texte sélectionné Alors maintenant, cette boucle s' exécutera ici autant de fois qu' il y aura de pages là-bas. Alors, que pouvons-nous faire maintenant ? Eh bien, nous pouvons essayer le code. Laissez-moi donc exécuter cette saisie par changement, et nous devrons attendre un peu. Donc ça a l'air de fonctionner. À ce stade, nous devrions avoir la liste L avec toutes les données. Et ici, nous convertissons cette liste L en trame de données. Alors exécutons-le. Et puis ici, nous exécutons le bloc de données. Alors voyons voir maintenant. Ouaip. Nous avons donc 425 lignes parce que nous partons de zéro. Mais nous avions 28 annonces, en fait. Cela signifie donc que ces trois dernières propriétés n' ont pas été répertoriées ici parce que quelque chose s'y est passé. Nous en sommes donc à la troisième page, et le dernier succès a été Wen Avenue. Nous cherchons donc l'avenue Wende, voici l'avenue Wende. Il a donc une adresse et la localité Sook Springs. Et puis celui d'après, il n'y a que la localité. Donc, dans ce cas, vous pouvez essayer de gérer une exception ici dans le code. Donc, pour celui-ci, nous pourrions dire d' essayer de le faire et d' accepter que DCalit soit égal à aucun Et maintenant je vais l'exécuter à nouveau. Espérons que nous n'y trouverons pas d'erreur. Oui, cela a été exécuté avec succès. Exécutez-le sur le bloc de données. Et voyons voir. Oui, maintenant, semblerait qu'il y ait 28 rangées. Cela semble donc fonctionner. Et la dernière chose que vous voulez faire est, vous savez, au lieu de passer cette plage manuellement ici, nous pourrions ajouter une variable qui détecte un numéro de page. Et tout ce que nous avons à faire, c'est d'aller sur notre site Web. Permettez-moi de le supprimer. Vous voulez donc savoir où ce dernier chiffre est rendu. C'est donc l'indicateur du nombre de pages. Nous avons donc trois pages dans ce cas, inspectez-les et cela nous amène au point suivant. En fait, dans ce cas, il est écrit page, page en cours. Passons donc à la première page. Et laisse-moi clore ça. Nous sommes donc censés être à la première page lorsque nous abordons le script pour la première fois. Et dans cette première page, nous voulons donc saisir le contenu de la première page, puis nous voulons connaître l'élément de ce dernier chiffre. Nous voyons donc que c'est un élément avec une page de classe. Et voici le texte, donc trois. Cela devrait être en fait le dernier élément avec une classe de page. Vous aurez donc un certain nombre d'éléments avec une classe de page, et celui-ci devrait être le dernier. Ouais Ce devrait donc être le dernier. Nous gardons donc cela à l'esprit, et nous allons ici, et ce que nous pouvons faire ici maintenant c'est ou nous devons saisir ce numéro de page ici. Alors page, appelons ce numéro de page. Cela équivaudrait à une soupe. La soupe contiendra donc le code HTML de la première page. Donc celle-ci ici, qui n'est pas une requête Ajax Il s'agit donc simplement de l'une de ces pages. Nous voulons donc trouver tous les éléments A avec une classe. De page. Donc, si je l'imprime juste pour voir ce que nous avons jusqu'à présent, numéro de page indique où vous avez trouvé quelques éléments. Mais le dernier est le dernier numéro de page. Donc trois, c'est ce dont nous avons besoin. Nous devons donc récupérer le dernier élément de la liste, ce qui signifie moins un, un index de moins un et du texte. Et oui, nous en avons trois ici. Nous devons donc transformer ce nombre en 30. Et pour cela, il suffit de multiplier le numéro de page par dix. Cela vous en donnerait 30. Eh bien, presque parce que ce numéro de page est en fait une chaîne ici, vous savez, tapez un autre crochet. C'est donc une chaîne de caractères. Et cela signifie que vous devez ajouter un entier ici. Vous voulez donc convertir cette chaîne en un entier, puis la multiplier par dix pour obtenir 30. Cela devrait donc se faire maintenant, et tout devrait fonctionner, je crois. Alors laisse-moi exécuter ça. L'URL est en cours d'impression et le script est terminé. Ainsi, si vous n' avez pas le texte occupé devant le titre de votre fichier ici, cela signifie que le script est en cours d'exécution. Maintenant, nous n'en avons pas, donc le script est terminé. Exécutez ça. nos résultats et exportez-les dans un fichier CSV. Et vérifions-le. J'ai donc mis ce CSV. Et voici les données. Nous n'avons donc aucune réputation ici. Non, tout semble unique. Cela ferme cette section du scrabbing sur le Web. Donc, si vous voulez trouver d'autres localités, ai essayé pour Rock Springs, mais vous pouvez l'essayer avec n' importe quelle autre localité vous suffit donc de modifier l'URL ou vous pouvez même implémenter une saisie utilisateur pour que l'utilisateur entre un nom, puis vous créez l'URL, puis vous la transmettez ici. Nous n'en avons donc pas besoin, nettoyez-le également. Et si vous le souhaitez, vous pouvez fusionner cette cellule avec celle-ci. Vous pouvez donc exécuter l' intégralité du script dans une seule cellule. Et vous pouvez également l'enregistrer. Téléchargez-le donc sous forme de fichier Python et vous obtiendrez tout le code source. Donc, le script Python. Et plus ces lignes, mais avec un hashtag en virgule. Et vous pouvez l'exécuter sous la forme d'un script complet. J'espère donc que cela vous plaira. Je sais que c'était un peu difficile à digérer. Et si vous avez des questions, n' hésitez pas à les poser. Je serais heureuse de vous aider. J'espère donc que vous en avez beaucoup appris, et nous passerons aux sections suivantes Nous avons donc encore des choses très intéressantes à faire. Et je te verrai plus tard. 206. 205. App 9 : blog et application de traducteur Django et Bootstrap +: Bonjour, bienvenue à une conférence très instructive, en particulier pour ceux qui s'intéressent à la création d' applications Web avec Python. Comme vous le savez peut-être, Python est utilisé à d' autres fins que l'automatisation des tâches de routine de votre travail Supposons que vous souhaitiez générer des rapports PDF automatiquement, envoyer des e-mails automatiques, etc. Vous pouvez ensuite utiliser Python pour analyse et la visualisation des données, la science des données et l'apprentissage automatique, mais également pour le développement Web. Donc, créer des applications Web avec Python. Et c'est ici que je voudrais m'arrêter et vous expliquer comment exactement Python peut être utilisé dans le développement Web et quels frameworks Web Python vous devez utiliser. Je viens donc de mentionner le mot framework Web. Alors, qu'est-ce qu'un framework Web ? Eh bien, avec Python, vous pouvez créer des applications soit en utilisant Python simple, soit en utilisant l'un des frameworks Web Python, qui sont essentiellement des bibliothèques Python que vous installez avec PIP Et ces frameworks Web facilitent l'écriture d' applications Web à l'aide de Python. Maintenant, je peux vous dire que créer une application Web sans utiliser l'un de ces frameworks Web revient à réinventer la roue Parce que si vous n' utilisez pas de framework Web, vous devez essentiellement réécrire tout le code écrit par les auteurs de ces frameworks Web Au lieu de cela, nous installons simplement ces frameworks Web, puis nous utilisons ce code. Cela se trouve dans les frameworks Web. Et ce code consiste généralement à gérer les requêtes HDP et à diffuser des pages Web sur le navigateur Donc des tâches de routine de bas niveau. Mais au lieu de nous occuper de cette tâche, nous voulons nous concentrer sur le développement des fonctionnalités l'aspect pratique de notre application Web Ainsi, créer les zones de saisie , par exemple, pour nos formulaires, envoyer les utilisateurs d'une page Web à l'autre, etc. Vous devez donc utiliser un framework Web. Je suppose donc que nous avons clarifié le point selon lequel vous devez utiliser un seul framework Web. Maintenant, la question suivante est lequel des frameworks Web devriez-vous utiliser ? Eh bien, il existe de nombreux frameworks Web pour Python, mais je ne vais me concentrer que sur trois d'entre eux , à savoir Flask, Jango et Pi Commençons par FLASK. FLASK est un framework Web généralement destiné à la création de petites applications Web. Supposons, par exemple, que vous souhaitiez simplement créer un petit traducteur capable de traduire d'une langue à l'autre. Pensez à Google Translate. Si vous voulez simplement une application Web permettant aux utilisateurs d'accéder à votre domaine, disons, translator.com, et que vous n'avez que ces deux cases, les utilisateurs saisiront le texte dans une langue dans la première zone et obtiendront les résultats Donc, la traduction dans l'autre case. Ce serait donc une petite application. Un autre exemple serait une application dans laquelle vous convertissez, disons, des images JPG en images PNG. Les utilisateurs téléchargent donc une image au format JPG ou vice versa. FLASK gère donc tous les téléchargements et traitements en arrière-plan arrière-plan, bien sûr, vous aurez probablement besoin En arrière-plan, bien sûr, vous aurez probablement besoin d'une bibliothèque de traitement d'image en plus de FLASK Vous devrez donc installer Pip install Flask et peut-être Pip install CV two, alors ouvrez CV pour effectuer Mais le service du site Web vers l'application Web se fera avec FLASK FLASK obtiendra donc l'image d'origine, l'image de sortie d' OpenCV et servira l' image de sortie à télécharger sur votre Ce sont donc de petites applications Web. Maintenant, ne vous méprenez pas avec FAS, vous pouvez également créer plus grandes applications Web et ce que j'entends par des applications Web plus volumineuses Des applications Web plus importantes, je veux dire des choses comme, disons que vous avez un site Web de blog où vous ajoutez des blogs chaque semaine ou tous les deux jours environ. Vous avez donc peut-être plusieurs auteurs qui rédigent du contenu pour votre blog. Pour ce site Web de blocage. Nous allons donc avoir différents blocs, et tous ces blocs doivent être enregistrés dans une base de données. Maintenant, Flask peut le faire, bien sûr, mais Jango le ferait mieux Jango le ferait mieux car il est plus facile de travailler avec des bases de données avec jango car il possède un meilleur niveau d'abstraction Donc, avec le FAS, vous pouvez également le faire avec le FAS, mais cela demande plus de travail Vous devez effectuer des tâches plus routinières pour FAS. Et jango vous permettrait également d'ajouter d' autres applications dans ce projet de site Web Nous avons donc pris l' exemple des blocs. Vous aurez des blocs sur votre site Web, mais vous souhaitez peut-être ajouter une autre fonctionnalité. Supposons que vous souhaitiez y ajouter un traducteur. Jango peut donc également créer un traducteur. En plus de ce site Web existant. Mais si vous voulez simplement créer un traducteur seul, alors jango serait exagéré Qu'est-ce que je veux dire par là ? Je veux dire par là que pour les petites applications Web, jango demande plus de travail pour configurer un projet jango Cela demande plus de travail. Mais une fois que vous avez configuré un projet Jangle, les choses se passent bien. Mais pour les petites applications, il est bon de simplement créer une application Fask Il est très facile d'en créer un. C'est donc la différence entre jango et FASC. Voici maintenant Just Pi. Just Pi est un tout nouveau framework. Et pourquoi ai-je inclus Just Pi dans cet ensemble de trois frameworks Web ? Maintenant, Just Pi est assez spécial. Qu'est-ce que je veux dire par là ? Eh bien, avec FAS et jango, vous devez également connaître le HTML et le CSS pour pouvoir créer des applications Web, car chaque page Web que vous voyez sur Internet est construite Donc, tout le texte, les zones de saisie et les boutons. Tout cela est construit en code HTML, ce qui est très simple. N'ayez donc pas peur du HTML. C'est une langue très facile à apprendre. Mais je dis simplement que vous ne pouvez pas créer le front-end d' une page Web avec Python. Le HTML est donc destiné au front-end. Et puis le CSS consiste à embellir pour embellir l'apparence de ces éléments HTML Ainsi, les zones de texte, le texte, les couleurs, tout cela peut être rendu plus beau avec le CSS Le CSS est donc également un langage très facile à apprendre. Vous devrez donc écrire du code CSS et HTML et enregistrer ce code dans des fichiers HTML et CSS respectivement, et placer ces fichiers dans votre application Web, ce soit dans Jango ou Flask Maintenant, c'est ici que JSpi entre en jeu. JSPI vous permet de créer des applications Web sans écrire aucune ligne de code HTML Mais Juspi est tout nouveau. C'est un nouveau framework, un framework web. Et comme je l'ai dit, l'avantage de Jpi est que vous n'avez pas besoin d' écrire du HML et du CSS car JSpi possède des objets Python spécifiques Disons qu'il possède un DIF pour créer ces divisions où vous pouvez mettre du texte et des choses comme ça, ou qu' il possède un objet bouton, objet bouton Python pour créer un bouton sur la page Web Bien sûr, l'inconvénient est que vous n'êtes pas très flexible comme vous le seriez avec FLASK et Encore une fois, je dirais que Jpi est également destiné aux petites applications Web. Si vous souhaitez créer un site Web de blog avec beaucoup de contenu, Just Pi n'est pas le meilleur choix. Cela ne fonctionne pas aussi bien avec les bases de données que Jango ou FLASK Mais encore une fois, si vous souhaitez simplement créer une petite application Web et que vous ne connaissez pas le CSS ou le HTML, Juspi pourrait être meilleur que FLASK C'était donc un aperçu de trois frameworks Web pour Python. À présent, ces trois frameworks Web sont abordés dans le cours de ce cours. Nous allons donc créer au moins une application Web avec chacun de ces trois frameworks Web, et il peut être tentant de ne regarder que les vidéos du framework Web que vous aimez, mais je vous recommande ne sauter aucun de ces frameworks Web Cela dit, parce que si vous voulez faire du développement Web avec Python, c'est une bonne idée d'être exposé à différents frameworks Web. Chacun des frameworks fait les choses différemment, vous en apprendrez donc beaucoup sur le développement Web. Par exemple, FASC fait les choses un peu plus rudimentaires et brutes, ce qui vous aide à comprendre développement Web d'un point de vue plus approfondi Mais ensuite, vous découvrirez Jango et vous apprécierez le haut niveau d' abstraction de Jango Vous apprécierez la facilité avec laquelle apporter des modifications à vos applications Web. Lorsque vous utilisez jango en raison de ce haut niveau d'utilisabilité. Jango vous cache donc certaines choses, ce qui facilite les choses, mais vous ne comprendrez pas certaines de ces choses C'est pourquoi vous devriez également apprendre Flask. De plus, le Jus Pi est très amusant à apprendre. Et je recommande Juspi, en particulier à quelqu'un qui n'est pas intéressé à devenir un développeur Web de base Vous êtes peut-être un analyste de données, mais vous souhaitez simplement créer une application Web laquelle vous affichez des données, des visualisations sur cette application Web. Dans ce cas, Jus Pi pourrait être le meilleur choix. Mais si vous voulez être un pur développeur Web, vous devez apprendre le jangle et le flask Ensuite, lorsque vous devez créer une application Web, vous pouvez simplement choisir l'un des frameworks Web qui convient le mieux projet ou peut-être le framework Web que vous connaissez le mieux. Pourquoi pas ? J'espère que cela vous aidera. Je te parlerai plus tard. 207. 206. Mise en place d'un environnement virtuel: Bonjour. Dans cette vidéo, vous allez apprendre à créer et utiliser un environnement virtuel Python. Qu'est-ce qu'un environnement virtuel Python ? Eh bien, il ne s'agit que d'une copie de votre installation Python. En d'autres termes, une copie de votre interpréteur Python. Ainsi, lorsque vous téléchargez Python depuis python.org ou depuis Anaconda, vous téléchargez un Maintenant, nous en faisons une copie. Pourquoi en faisons-nous une copie ? Parce qu'avec Python, nous pouvons écrire différents programmes. Et pour chaque programme, il se peut que nous devions installer des packages différents, donc des bibliothèques différentes. Et généralement, nous installons ces bibliothèques dans notre installation principale de Python. Ainsi, dans l'interpréteur que nous avons obtenu sur python.org ou Anaconda, on parle également d'interpréteur global Mais en faisant une copie pour chaque programme que nous avons créé, nous installons des bibliothèques uniquement pour cette copie de l'interpréteur. Cela présente notamment l'avantage pour les applications Web, car lorsque vous créez une application Web, vous la déployez ultérieurement sur certains serveurs en ligne. Et lorsque vous faites une copie de l'interpréteur , puis que vous installez les bibliothèques dont vous avez besoin dans les bibliothèques dont vous avez besoin dans cette copie dans cet environnement virtuel, vous obtenez une liste claire des bibliothèques que vous avez installées. Vous pouvez donc générer une liste, puis transmettre au serveur sur lequel vous allez déployer votre application Web. Ce serveur obtiendra donc la liste des bibliothèques à partir de cette liste et les installera. Maintenant, l'avantage est que si vous aviez votre installation globale de Python, vous auriez de très nombreuses bibliothèques. Ce serveur devrait donc installer toutes ces nombreuses bibliothèques. Ce n'est pas une bonne idée. Alors pourquoi ne pas avoir un interpréteur pour chaque projet Python. Maintenant que nous sommes sur le point de créer notre application Jango, nous allons d' abord créer un environnement virtuel sur du code Visual Studio C'est comme ça que tu le fais. Donc, tout d'abord, je suis ouvert au code Visual Studio. Voici donc la page d'accueil. Je n'ai encore créé aucun projet. Je vais donc créer un projet dans lequel il suffit d'ouvrir un dossier, un répertoire. Dans le code Visual Studio. Allez donc dans Fichier , puis dans Ouvrir le dossier ou Ouvrez selon le système d'exploitation que vous utilisez. Il peut donc s'agir d' un dossier ouvert ou ouvert. Cliquez ici, puis recherchez un dossier vide que vous auriez dû créer auparavant. J'ai créé ce dossier vide jangoblock translator. Tu vois, c'est complètement vide. Je vais donc appuyer sur Ouvrir pour ouvrir ce dossier. Vous le voyez ici dans mon arbre d'explorateur sur le code Visual Studio. Maintenant que nous avons le dossier. Dans ce dossier, nous allons donc mettre tous les fichiers de notre projet jango, y compris la copie de l'interpréteur Python Donc, l'environnement virtuel. Pour créer cette copie, voici comment procéder. Donc, tout d'abord, vous devez ouvrir un terminal et vous devez d'abord effectuer une vérification. Vérifiez donc quel Python vous utilisez. Donc, dans mon cas, j'utilise une commande, Python 3.9, qui ouvre Python. Il s'agit donc d'un Python global installé sur mon ordinateur. Je suis donc sûr que cette commande fonctionne correctement. Dans votre cas, il peut s'agir simplement de Python sans 3.9 ou de Python trois. Cela dépend de ce que vous avez utilisé. Donc, quel que soit l'endroit où vous l'avez utilisé, je vais quitter ce shell interactif. C'était donc juste pour essayer la commande Python. Maintenant, je sais que cela fonctionne, je peux donc utiliser Python 3.9. Il n'y a donc pas de places ici. Puis un espace, le drapeau, puis V puis NV. Alors c'est quoi ça ? Eh bien, VNV est une bibliothèque installée. Par défaut, il s'agit d'une bibliothèque standard pour Python. Il est livré avec Python. J'utilise donc cette bibliothèque. Ainsi, lorsque vous utilisez cette commande, Python 3.9 ou Python, puis que vous utilisez cet indicateur, cela signifie que vous êtes sur le point d' exécuter cette bibliothèque sous forme de scripts Python. Et puis cette extrémité est le dossier où sera placée la copie de l' interpréteur Python. Appuyez donc sur Entrée. Et vous voyez immédiatement que N a créé ce dossier ici. Et si je développe ce dossier, vous verrez qu'il y en a plusieurs autres, et dans cette corbeille, vous verrez que nous avons l'exécutable Python C'est donc une copie de Python. Il peut être utilisé uniquement en Python, Python 3 ou Python 3.9. Mais je vais maintenant vous montrer comment utiliser ce Python au lieu d' un Python global. Ne faites donc rien avec ce dossier. Parce que ce que nous voulons faire maintenant, c'est sélectionner un interpréteur Python par défaut pour ce projet de code Visual Studio particulier. Pour ce faire, vous devez accéder à la palette de commandes. Vous pouvez le faire avec des raccourcis. En fait, sur Mac, ce serait Command Shift, P, appuyez sur les trois en même temps. Sous Windows, ce serait Control, Shift, P, de sorte que cette zone s'affichera, puis vous pourrez y taper Select interpreter. C'est donc ce que nous voulons utiliser Python Select Interpreter. Ça commande. Cliquez dessus. Et vous verrez cette liste. J'ai donc différents pythons dans mon système. L'un d'eux est cet environnement visuel que je viens d'installer, et c'est celui que je souhaite choisir. Alors, appuyez dessus. Et maintenant, vous devriez voir ici ce Python 3.9 0.6 dans mon cas avec ce dossier. N est le dossier. V est la bibliothèque d' environnement virtuel. Il sera désormais utilisé comme Python par défaut. Cela signifie-t-il ? Eh bien, cela signifie que si vous tapez maintenant Python ici, mais que vous fermez d'abord ce terminal et que vous en ouvrez un nouveau, donc pour rafraîchir le terminal, vous verrez qu'avant cette balise qui me dit d' écrire quelque chose ici, je l'ai entre parenthèses Cela signifie que cet environnement virtuel Python est utilisé. Maintenant, si je tape simplement Python, Python 3.9 0.6 de cet environnement virtuel est utilisé. Laisse-moi sortir. Je peux également taper Python 3.9 et le même sera utilisé. N'importe laquelle de ces commandes ici, Python, Python 3 ou Python 3.9. Assurez-vous donc de l' avoir là. Alors, comment cela fonctionne-t-il ? Parce que ça a l'air magique. Eh bien, ça marche comme ça. Permettez-moi de fermer à nouveau ce terminal et d'en ouvrir un nouveau, un nouveau terminal. Vous voyez donc que nous avons ici une commande exécutée par Visual Studio Code lorsque vous ouvrez un nouveau terminal. Il indique donc source, qui est une commande pour activer l'environnement virtuel. Donc source, puis chemin vers le fichier d'activation. Vous voyez que c'est le traducteur jangoblock, qui est ce dossier N B Activez. Activer le NBN. Ce fichier d'activation est en cours d'exécution, et c'est la commande qui définit l'environnement sur cet environnement virtuel. Cela signifie également que vous pouvez utiliser Python à la fois à partir d'ici en tant que shell Python interactif, mais aussi si vous souhaitez écrire un fichier maintenant. Supposons donc de créer un fichier. Soyez donc prudent ici. Je vais écrire Hello PY. Je dis de faire attention car ce qui se passe, c'est que ce fichier a été créé dans mon dossier NV Ce n'est donc pas une bonne chose. Vous ne voulez pas toucher le dossier F. Je vais donc supprimer ce fichier et le recréer. Pour éviter que le fichier ne se trouve dans le fichier Nfle, vous devez d'abord appuyer sur Escape, ce qui détournera le focus de ce dossier NF Ensuite, vous pouvez vous rendre ici et créer le fichier. Vous voyez maintenant que le fichier est créé dans ce répertoire racine, donc jangle block translator hello point PY Et si je dis « Imprimer bonjour », c'est vrai. Et maintenant je peux exécuter ce fichier en utilisant ces oreilles triangulaires vertes au fond arrondi. Appuyez dessus et le fichier sera exécuté à l'aide de l' environnement virtuel Python. Vous voyez donc ici ce qui s'est passé en arrière-plan. Encore une fois, pour terminer, l'environnement virtuel a été utilisé lorsque nous avons ouvert le Python Shell. Il a également été utilisé lorsque nous avons exécuté le fichier Python, et il est également utilisé si nous installons des packages tiers. Supposons donc que PIP installe jango pour installer jango. Ce jango sera installé pour ce Python en particulier, pas pour notre Python global Et je peux vous le prouver en allant sur N puis sur Lip et vous verrez que jango vient d'être ajouté aux packages tiers présents ici JanGot est donc ce que nous venons d'installer. Pour vous débarrasser de cet avertissement, vous pouvez exécuter cette commande comme il est suggéré pour Python 3.9 ou Python directement, PIP install, dash, dash, upgrade, PIP pour mettre à niveau en suggéré pour Python 3.9 ou Python directement, PIP install, dash, dash, upgrade, local le PIP virtuel, pour ainsi dire C'est vrai. Et maintenant, si je ferme ce projet, je l'ouvre à nouveau. Ensuite, je peux revenir à mon projet précédent soit en utilisant cette section récente ici, donc en cliquant dessus, soit en allant dans Fichier, Ouvrir le projet récent et y localiser le projet. Ou une troisième méthode serait d'aller à nouveau dans Fichier, Ouvrir et d'aller à nouveau dans ce dossier, donc dans le répertoire racine. Ce sont donc et hello point PY et appuyez sur Ouvrir. Et le même projet s' ouvrira à nouveau, mais vous devez fermer le terminal actuel et en ouvrir un nouveau. Afin d'activer l'environnement virtuel dans le nouveau terminal, vous voyez maintenant que nous voyons cette fin ici. Et, bien sûr, vous pouvez désormais exécuter à nouveau ce fichier, et l' environnement virtuel sera utilisé pour exécuter et obtenir le résultat. C'est ainsi que vous pouvez utiliser l'environnement virtuel dans le code Visual Studio. Merci. 208. 207. Créer un projet Django: Bonjour, bon retour. Dans cette vidéo, je vais vous montrer comment créer un projet Jango Qu'est-ce qu'un projet Jango ? Eh bien, lorsque vous créez une application Web avec jango, vous devez d' abord créer un projet jango, qui est un ensemble de fichiers générés automatiquement par C'est ce que je vais vous montrer maintenant. Voici donc les fichiers du projet. Mais vous pouvez ensuite ajouter des applications à ce projet. Vous n'avez donc qu'un seul projet, mais vous pouvez avoir plusieurs applications. Par exemple, dans notre cas, nous allons avoir un projet, puis nous aurons également l'application de blocage et l'application de traduction. Donc, deux applications, un projet. Maintenant, je vais vous montrer comment créer le projet. Pour cela, vous devez avoir installé Jango et de préférence disposer d' un environnement virtuel. Je vous ai montré comment créer un environnement virtuel dans la vidéo précédente. J'ai donc ce dossier maintenant, le répertoire racine, le dossier, qui contient un environnement virtuel, le fichier lot PY, je vais supprimer parce que nous n'en avons plus besoin. J'ai donc installé Jango. Cela signifie que je peux maintenant créer un projet à l'aide de la commande jango admin Jango est donc livré avec quelques commandes qui peuvent être utilisées pour effectuer différentes opérations avec jango Donc, l'administrateur de Jango, cette commande, ainsi que la commande start project créeront un projet jangle, puis vous devrez donner un nom au nouveau répertoire que jango Disons mon point de vue. Et puis un espace et un point. Le point signifie que le dossier actuel, qui est un traducteur de blocs, est un dossier de projet Il placera donc les fichiers dans ce Exécutez donc cette commande. Et ce dossier et ce fichier seront créés. Et ce dossier contient d'autres fichiers. Alors, quels sont ces fichiers maintenant ? Eh bien, nous avons ce fichier d'initialisation, qui est un fichier vide, et ici, il est facultatif Peut-être que plus tard, vous pourrez placer les éléments que vous souhaitez exécuter immédiatement lorsque le programme démarre. Je vais donc le laisser tout de suite, nous allons le laisser vide. Et puis nous avons ce fichier Sg, sosg point PY. Il s'agit d'un fichier de configuration que vous souhaiterez peut-être modifier ultérieurement lorsque vous déploierez votre application jangle sur un serveur SG, et il existe également un autre type de Cela dépend donc de l'endroit où vous allez le déployer. L'autre type est le serveur Wiz g ou Wiz G, si vous aimez celui-ci ici C'est donc l'autre configuration qui dépend du type de serveur sur lequel vous allez placer votre projet Jango afin qu'il soit sur un serveur de production en ligne afin que tout le monde puisse le voir Et puis nous avons les paramètres de ce fichier PY. Cela va contenir tous les paramètres, par exemple, le fuseau horaire, l'emplacement des fichiers statiques tels que les images et les fichiers CSS, nous allons les aborder. Alors ne les changez pas. Et puis nous avons l' URL, c'est le fichier PY. Cela aura essentiellement l'URL de votre projet, la façon dont l'URL sera enracinée, etc. C'était donc mon site, puis nous avons géré ce PY. Il s'agit d'un fichier que vous ne modifiez pas normalement, il restera donc comme ça. C'est maintenant utile lorsque vous démarrez votre nouveau site Web Python. Nous venons donc de un site Web Jangle et nous pouvons le voir afin de pouvoir démarrer l'application en gérant Python, c'est PY Nous exécutons donc ce fichier avec Python et en utilisant l'argument Run server. Exécutez que nous ayons cet avertissement. Nous allons régler ce problème dans un instant. Voici donc le site UrlNow. Si vous appuyez sur Ctrl ou Commande, puis que vous cliquez dessus, votre nouveau site Web s'ouvrira. Il n'y a donc pas vraiment d'application ni d'application personnalisée moment, car nous l' ajouterons plus tard Mais en gros, cela signifie que cela fonctionne. Pour arrêter l'exécution de l'application, vous devez appuyer sur la touche Ctrl C du terminal. Et maintenant, ce message ici. Eh bien, ce message indique que nous devons exécuter une commande SQL. Maintenant, c'est une bonne chose avec jango car vous n'avez pas vraiment besoin d'exécuter de langage de requête SQL Vous pouvez simplement faire en sorte que Python gère la migration PY. Appuyez dessus et jangle exécutera ces requêtes pour vous. Donc, en gros, ce sont des requêtes qui créent des tables par défaut, des tables de base de données. Vous pouvez également voir qu'un nouveau fichier dbdt S three a été créé lorsque nous avons exécuté Python manage PY Migrate Cette commande a donc créé un fichier de base de données SQL, et Jango utilise par défaut SQL 3, mais vous pouvez également utiliser du SQL postgrade Mais tu peux le faire. Vous pouvez facilement le faire sur le serveur de production. Localement, il est bon d'utiliser SQLite Three, qui n'est qu'un seul fichier et toutes les données seront là, toutes les tables de votre projet s'y trouveront Cette commande a donc généré ce fichier. Et il a également appliqué toutes les modifications requises pour la phase initiale de création de JangOpject Il a donc créé des tables, et plus tard, vous souhaiterez peut-être apporter d'autres modifications à vos tables. Je vais vous montrer comment créer nouvelles tables via Jango et non via SQL Donc, grâce à Python, c'est très simple. Et une fois que vous avez créé une table dans le code Python, vous devez exécuter cette commande. Cela traduira donc votre code Python en requêtes SQL. Vous n'avez donc pas besoin d'écrire des requêtes SQL avec jango. Il suffit d'écrire du code Python simple. Je vous montrerai comment procéder lors de la création de l'application ultérieurement. Pour l'instant, je peux vous montrer quelles tables ont été créées dans ce fichier. Si vous double-cliquez dessus, il ne sera pas affiché car le code Visual Studio n'affiche pas les bases de données SQLite Vous avez besoin d'un programme approprié pour consulter cette base de données. Tu n'es pas obligée de le voir. Je veux juste vous montrer quelles données il contient à des fins d'apprentissage. J'ai donc ici un programme appelé DB Browser for SQL Light. Vous pouvez le rechercher sur Google et l'installer ou simplement voir ici ce que je vais faire. Vous n'avez pas besoin de ce programme juste pour voir les données par curiosité. Vous souhaitez donc ouvrir la base de données. C'est donc à DB Sculi Three que nous avons le fichier. Vous voyez donc qu'il y a plusieurs tables ici. Ce sont des tableaux concernant l'interface d'administration, en fait. Aucune table n'est donc encore créée pour des éléments tels blocs ou d'autres fonctionnalités que nous allons avoir pour notre projet jango Donc, les choses dans Jango sont enregistrées dans des bases de données, et Jango utilise culi three par défaut, comme je vous l'ai déjà dit Bien entendu, chacune de ces tables contient des données, vous pouvez donc parcourir les données et parcourir ces tables. Pour l'instant, ils sont simplement vides parce que vous voyez, c'est juste vide. Nous n'avons encore ajouté aucun utilisateur à l'interface d'administration. Alors, qu'est-ce que l' interface d'administration ? Bref ? Eh bien, laissez-moi redémarrer le serveur . Accédez au site Web. Et si vous accédez à l'URL, donc après le port, vous faites une barre oblique, puis Admin Entrez, vous verrez cette boîte de connexion ici. Vous avez besoin du nom d' utilisateur et du mot de passe de l'administrateur. À l'heure actuelle, aucun utilisateur administrateur n'a encore été créé. C'est aussi pourquoi vous voyez que toutes ces tables sont vides. Donc pas de données. Il y a donc des tables, mais il n'y a pas de lignes dans ces tables. Plus tard, je vais vous montrer comment créer un utilisateur administrateur. Alors pourquoi avons-nous besoin de l'interface d'administration de toute façon ? Eh bien, nous avons dit que nous allions créer un site Web contenant des blogs. Maintenant, qui va ajouter du contenu dans ces blogs ? Est-ce vous le développeur ou peut-être des auteurs qui rédigent le contenu ? Donc, ces auteurs, il existe deux manières d' écrire ce contenu. Soit ils accèdent à votre projet de code Visual Studio, puis vous leur montrez les fichiers Python contenant le contenu ou les fichiers HML, où le contenu sera écrit, soit une solution plus intelligente consiste à avoir une interface plus conviviale ces zones de contenu et des options pour modifier les polices Donc des boutons, des boîtes à outils et des choses comme ça. agit donc d'une véritable expérience de traitement comme Microsoft Word ou d'autres logiciels de traitement de texte. Il est donc facile pour les auteurs d'ajouter du contenu en continu à ce site Web. Vous donnez donc à ces auteurs et moi un nom d'utilisateur et un mot de passe pour qu'ils puissent accéder à votre site Web et ajouter. Nous allons examiner l'interface d'administration dans la vidéo suivante. C'est donc ce que nous avions pour le moment. Merci de m'avoir suivi. Je te parlerai plus tard. 209. 210. Créer un modèle de base de données pour l'application de blog: Bonjour encore une fois. Dans cette vidéo, nous allons ajouter quelques codes dans nos modèles de fichiers PY. Comme je vous l'ai expliqué, une page, une page Web, possède un modèle, une vue et un modèle CML Le modèle est donc inférieur dans cette structure en trio. Nous allons donc commencer par les modèles. Ce que nous devons créer, c'est une classe pour représenter un bloc de messages. Appelons donc cela un post. Maintenant, la publication n'est pas une simple classe. Post doit être une classe qui hérite du module models. Cela fait donc de cette classe une classe modèle. Le module est donc une classe spécifique conçue par les auteurs de jango, les développeurs de jango et conçue pour contenir des champs de données Qu'est-ce que je veux dire par là ? Eh bien, par exemple, nous avons dit que nous voulions un champ de titre. Une page Web est un titre. Ainsi, lorsque le créateur de contenu crée un titre, ce titre sera stocké dans le champ de titre du tableau des articles. Vous avez donc montré que je vous ai montré ce DB Viewer, qui est un programme permettant de voir les données d'une base de données SQL. La base de données SQL est donc celle-ci, db Q three, et cet article créera une nouvelle table dans la base de données db point Sculi Three Maintenant, ce sont les tableaux actuels, n'y a donc pas de tableau de publication ici, mais vous verrez qu'un tableau sera créé lorsque nous aurons terminé ce tableau. Donc, le titre est maintenant models Qu'est-ce qu'un titre ? S'agit-il d'un domaine de soins ? Oui Je pense que ce type conviendrait à un titre. Il s'agit donc d'un type de champ de base de données, et il obtient un attribut de longueur maximale. Disons 200 caractères. Il y aura donc un manuel qui autorisera jusqu'à 200 caractères pour le titre du blog Alors, qu'est-ce qu'on a d'autre ? Contenu. Donc le corps du bloc. Maintenant, je n'opterais pas pour le champ Care, car il est davantage conçu pour les petits morceaux de texte. Cela ressemblerait davantage à un champ de texte. Et tu peux le laisser vide. Quoi d'autre ? Eh bien, date, création, peut-être devrions-nous être des modules point, date et heure. Vous voyez donc que ce module de modèles de jango a tous ces champs prêts Ainsi, un champ de date et d'heure serait désormais automatiquement ajouté égal à vrai, ce qui signifie que lorsque le créateur de contenu créera un nouveau bloc de publication depuis l'interface d'administration, il rédigera un titre, un contenu. Ensuite, il y aura un bouton de sauvegarde sur lequel ils pourront appuyer sur ce bouton de sauvegarde et le message sera publié en ligne. Lorsqu'ils appuient, lorsque le créateur de contenu appuie sur ce bouton, cette classe est instanciée et génère la date et l'heure actuelles, et ces dates et actuelles sont injectées dans le champ de date de création de la table des publications de la base de données db Suli La base de données comporte plusieurs tables, pos est l'une des tables, post comporte plusieurs champs. L'un des domaines est celui-ci. OK, j'espère que c'est logique. Ensuite, nous avons un champ slunk, qui enregistrera la partie de l'URL située après le domaine Donc, comme nous l'avons dit, si votre domaine est exemple.com et que votre article de blog parle de chiens, alors le slug sera slash L'URL complète serait donc example.com slash DGS. Et ici, l'utilisateur, le créateur de contenu, écrira simplement « dog » ou « n' importe où ». Le créateur de contenu saisira donc le slug dans l'interface d'administration, comme il le fait pour le contenu du titre et les autres zones de saisie qui s' y trouvent Donc, slug serait à nouveau des modèles point sur le champ Slug. Il existe donc une classe spécifique qui représente le champ de limaces dans un jangle, appelée champ de limaces Mettons une longueur maximale de 200, peut-être. Il est logique de ne pas avoir de très longues limaces. Cela ne permettra donc pas au créateur de contenu de saisir des slugs de plus de 200 caractères. Et elle doit être unique, donc unique est synonyme de vérité. Si l'administrateur, le créateur du contenu saisit un slog qui a déjà été saisi, cela ne permettra pas de créer le nouveau slog car vous ne pouvez pas avoir deux pages avec la même URL Je gâcherais les choses. Par conséquent, cet argument ne permet pas de créer des URL dupliquées Ensuite, nous avons l' auteur, donc créez le nom de variable, les modules pointant quatre points en touche cette fois. Pourquoi ? Parce que nous allons obtenir cette valeur à partir d' une autre table de base de données, qui a déjà été créée par Jango, et nous pouvons l'obtenir partir de jangodt D'importation de modèles. Donc, à partir de cette importation, utilisateur, d'accord. C'est aussi une classe, vous pouvez la voir lorsque je passe la souris Et donc, dans les deux arguments présentés ici, nous avons besoin d'un utilisateur. Sans parenthèse Donc, en gros, un type de champ à clé étrangère signifie que la valeur de ce champ de base de données proviendra d'une autre table de base de données. Dans ce cas, il s'agit d'une table de base de données utilisateur. Et ce champ créera sur l'interface d'administration une liste déroulante dans laquelle le créateur de contenu pourra choisir entre différents noms d'utilisateur. Cela se fait donc automatiquement. Mais nous voulons spécifier quelques paramètres lors de la suppression du comportement qui se produira lorsque l'utilisateur sera supprimé. Cet utilisateur est donc supprimé de la table de base de données d'origine. Donc, cascadez, mais vous n'en avez pas besoin, alors supprimez-le et laissez-le comme ça. Maintenant, qu'est-ce que cela signifie ? Cela signifie que si un utilisateur est supprimé de la table de base de données utilisateur, les publications de l'utilisateur seront également supprimées. C'est ce que fait Cascade. Je vais supprimer cette virgule ici, et le dernier champ que nous voulons ajouter est le statut, le statut de la publication, qui serait égal aux modèles de ce champ entier Sur l'interface d'administration, il y aura une liste déroulante d' état qui contiendra deux options Rédigez et publiez. Le créateur de contenu peut donc choisir d' enregistrer cet article en tant que brouillon ou tel que publié. Cela permettrait donc aux créateurs de contenu d' organiser plus facilement les blogs, car ils pourraient enregistrer un article sous forme de brouillon , puis , dans notre jangle, nous pourrions établir une condition pour ne pas publier articles ayant le statut de brouillon, mais uniquement ceux qui ont le statut de publication Ce serait donc un bon moyen de faire distinction entre les deux types d'articles. Nous devons donc avoir des choix, qui sont égaux à une variable, disons, un statut et qu'est-ce que le statut ? Eh bien, le statut doit être une variable que nous devons créer ici. Donc, le statut est égal à un renversement de deux renversements. L'une d'elles serait, disons, zéro truite. L'autre serait une publication. Et celui par défaut serait peut-être Brouillon. Donc, zéro signifie brouillon, et un correspond à publication. Maintenant, l'administrateur, le créateur de contenu, verra soit le brouillon, soit le publier dans cette liste déroulante, et cela complète notre article de classe Maintenant, assurez-vous d' enregistrer ce fichier, sauvegarder le fichier ou de commander S ou de contrôler S, puis vous devez faire quelque chose ici. Nous devons appliquer ce modèle à notre base de données. Nous devons donc exécuter des requêtes SQL. Mais comme je l'ai déjà mentionné, il n'est pas nécessaire d'exécuter des requêtes SQL de manière explicite. Tout ce que vous avez à faire est d'exécuter deux commandes, Python Manage point PI make migrations. Actuellement, si vous regardez le navigateur de base de données où nous voyons les données, nous n'avons aucune table appelée posts pour le moment, même si je rafraîchis cette actualisation, il n'existe pas de telles tables. Mais maintenant, voyez ce qui va se passer si j'exécute cette commande. OK, quelque chose se passe ici, des migrations ont été appliquées, donc la structure de la base de données a été modifiée, puis nous devons ajouter une autre commande, à savoir que Python gère le point PY, migre cette fois. Pour cela et celui-là, nous appliquons des requêtes SQUAR correspondant à ce modèle Maintenant, si je vais ici, actualisez, vous verrez que ce tableau a été ajouté en bloc. Le nom de cette table a donc été construit en utilisant le nom de l'application qui est block et underscore, Sol Jango le fait automatiquement, puis après le trait de soulignement, post, qui est le nom du module Donc, si je sélectionne cette table, vous voyez maintenant que nous avons ces champs de base de données. Nous voyons donc ici tous les champs que nous créons. L'ID est un champ créé automatiquement, mais nous avons le contenu du titre, la date de création, statut du slog et l'identifiant de l'auteur. C'est vrai. Cela complète la création de notre modèle. Nous devons maintenant créer une vue. C'est ce que nous allons faire dans la vidéo suivante. 210. 213. Vues dans Djago: Bonjour. Auparavant, nous avions créé un modèle HTML, qui est essentiellement chargé de rendre le contenu sur le navigateur. Mais ce modèle HTML doit être connecté d'une manière ou d'une autre aux modèles du fichier PY. Ce modèle HTML contient des variables qui attendent d'être remplies de contenu avec des valeurs titre doit donc provenir de la base de données, de la base de données SQL, qui est ce fichier ici. Par conséquent, nous devons trouver un moyen de connecter le modèle à cette base de données. Et comme en Python, cette publication de classe est le représentant de cette table de base , nous devons donc connecter Block that HTML à cette publication de classe. C'est là que le point de vue de l'intermédiaire est utile. Nous introduisons donc des vues et nous créons une vue. Appelons cela une vue en blocs. Tu peux l'appeler où tu veux. Ce n'est qu'un nom pour la classe. Mais je tiens à distinguer ce nom des autres classes afin que vous puissiez mieux comprendre les choses. Donc, classe Block View. C'est un cours très simple, en fait. Il devrait obtenir une variable de modèle. Jango s'attend donc à ce que cette classe ait une variable de modèle, et cette variable de modèle doit pointer vers le nom du module qui doit être connecté au bloc. Donc, en gros, nous avons, encore une fois, une variable de module et également un modèle. Nom de la variable. C' est donc ce que fait ce cours. C'est tout Il connecte le modèle au modèle. Le modèle sera publié, mais post n'est pas un nom importé dans cet espace de noms, nous devons donc l'importer depuis les modèles, importer le post. Vous voyez maintenant que le message est disponible. Par conséquent, cette ligne est maintenant valide. Et le nom du modèle, tout ce que vous avez à faire est simplement donner le nom au modèle, qui est du code HTML à points de blog. Et c'est tout. Très bien, jusqu'ici tout va bien. Donc, si nous exécutons le serveur maintenant avec Python, gérez ce serveur PY Run, mais soyez prudent. Je ne suis pas dans un environnement virtuel ici, alors fermez-le, ouvrez un nouveau terminal et recommencez à ce que Python gère ce serveur PY Run. Et parfois, vous obtenez des erreurs comme celle-ci ici, les modèles chers au système d'exploitation ne sont pas définis dans les paramètres. Donc, allez dans les paramètres, nous sommes juste là, et nous avons évidemment besoin du système d'exploitation, la bibliothèque standard du système d'exploitation, qui effectue des opérations de répertoire avec des dossiers et des fichiers. Nous en avions donc besoin lorsque nous avons déclaré la variable dear des modèles précédemment ici. Enregistrez le fichier et réexécutez. Cette fois, le serveur a démarré. Il s'agit donc de la page d'accueil, mais il n'y a pas d'autre page Web que celle-ci. Par exemple, si vous accédez à Chiens, vous obtenez une erreur « Parce que chiens ou chats ». Bien entendu, nous n'avons rien car nous n'avons aucune entrée dans notre table de blocs de la base de données. Dans la vidéo suivante, je vais saisir des données fictives dans notre table de base de données via un programme appelé navigateur de base de données pour SQL Light Si vous n'avez pas ce programme ou si vous ne voulez pas l'installer, c' est très bien car ce programme est simplement facultatif, mais vous pouvez l'installer gratuitement, ou vous pouvez le rechercher sur Google. Normalement, nous voulons saisir les données par le biais de l'administrateur, mais juste pour tester les choses, je veux disposer rapidement de certaines données afin de vous expliquer ce qui se passe et que vous compreniez comment les choses fonctionnent. Alors rendez-vous dans la prochaine vidéo. 211. 214. Motifs d'URL: Bonjour. Auparavant, nous avons créé une vue qui est une classe qui connecte le modèle à un modèle. Maintenant, dans cette vidéo, je veux entrer des données fictives dans notre table de base de données Notre fichier de base de données est donc DQ 3, et il contient plusieurs tables Je souhaite utiliser le navigateur de base de données pour SQLite, puis ouvrir la base de Et puis il s'agit d'un répertoire racine allez dans db cul three et double-cliquez dessus. Ensuite, vous devez parcourir les données et trouver le tableau des articles de blog. Voici donc les champs de la table de base de données. Vous devez les développer un peu pour les plus visibles et les rendre plus visibles, les dates de création, statut du slug de l'article, qu'il soit brouillon ou publié, et l'identifiant de l'auteur, qui peut être un nombre Le premier auteur qui sera créé en a donc une idée et ainsi de suite. Entrons donc manuellement une nouvelle ligne de tableau. Bien sûr, comme je vous l'ai dit, cela doit être saisi via l'interface d'administration. Mais pour l'instant, juste pour tester, nous voulons aller sur ce bouton, appuyer dessus, et cela insérera une nouvelle ligne de tableau. L'identifiant a donc été généré automatiquement. Donc, pour la première rangée, ce sera une. Pour le second, il incrémentera automatiquement deux. Deux et ainsi de suite. Mettons donc quelque chose pour le titre, comme des chiens et du contenu. Les chiens sont bons. Ça suffit pour le moment. Date de création. Cela devrait être au format 2022, 12 pour le mois, dix pour le jour du mois, slug Comme ça. Dogs and Jungle se chargera de créer l'URL complète. Donc, example.com ajoutera une barre oblique puis il ajoutera le chien après la État, il s'agit d'une ébauche ou d'une publication. Donc, ici, vous voyez que nous en avons zéro ou un. Mettons-en un pour l'identifiant de l'auteur publié, le premier utilisateur de la base de données, nous avons déjà créé un super utilisateur. Cet utilisateur possède donc l'identifiant 1. C'est vrai. Une fois cela fait, vous devez écrire les modifications dans le fichier de base de données. accord, puis vous pouvez simplement fermer la base de données, et la ligne est là. Maintenant, connectons ce slug de cette URL à la vue du bloc de vues. Pour ce faire, vous devez accéder à votre dossier de blocs, cliquer avec le bouton droit de la souris, accéder à Nouveau fichier et créer une URL de fichier L point py. Et ici, vous souhaitez importer des vues d'importation à partir de l'emplacement actuel. Nous importons donc le module de vues. C'est un fichier, mais lorsque vous importez un élément qui est un module, il devient un module. C'est ainsi que nous l'appelons. Views now est disponible ici, et nous devons également importer autre chose depuis l'URL de Jango, un module, l' URL est un autre module du chemin jangoimport Et nous avons maintenant besoin de ce chemin, qui est une fonction permettant de créer une liste de modèles d'URL. Je divise donc cela car cela peut contenir différents modèles d' URL Le premier modèle qui nous intéresse est donc créé par le biais de la fonction path. Quel est donc le schéma ? Eh bien, c'est une limace, une colonne et encore une balle, avec ce support d'ouverture et de fermeture Ainsi, lorsque l'utilisateur visite une certaine URL, disons, laissez-moi écrire quelque chose ici. Par exemple, exemple.com Slug, bien sûr, ils écrivent comme des chiens, mais chiens, nous disons à Jango de chercher des chiens dans le Jango va donc accéder à notre table de base de données, et il recherchera dans chaque ligne chiens dans chaque cellule de slug, Ainsi, dans chaque rangée du champ de limaces, il recherchera des chiens Et s'il trouve une ligne contenant des chiens, il va exécuter la vue en bloc, supprimer les parenthèses, bloquer le point en tant que vue Exécutez donc cette classe en tant que vue. Et il y a aussi autre chose que nous devons donner ici, que nous utiliserons plus tard. C'est un nom. C'est ce qui devrait être une chaîne, et disons une vue en bloc. C'est un nom dont nous aurons peut-être besoin plus tard, c'est donc une bonne idée de l'avoir ici maintenant. J'espère donc que vous me suivez jusqu'ici. Nous devons également faire autre chose en ce qui concerne les URL. Vous voyez qu'il existe une autre URL qui est un fichier PY, mais elle se trouve sur mon site, qui contient les configurations du projet Jungle, pas les applications Jungo Ce fichier ressemble donc déjà à ceci. Il est construit automatiquement par jango, et voici celui-ci . Il y a aussi une variable de modèles d'URL, tout comme celle-ci ici, modèles d' URL, modèles d'URL Mais cela veut maintenant connaître les URL de l'application de blocage. Ainsi, pour chaque application que vous créez, vous souhaitez déclarer le modèle d' URL ici. Donc, après la virgule, nous créons un autre élément de liste, qui est path cette fois, il doit être comme ça Donc, une chaîne vide qui indique le répertoire personnel. Ainsi, lorsque le répertoire personnel est visité, quelque chose d'autre après la barre oblique est écrit par l'utilisateur dans la barre d' adresse du navigateur, et autre chose est défini par les blogs Blog est le nom de l'application. Donc, bloquez ce nom de dossier ici, URL. URL est le nom de l' URL de l'application PyFleo the block. Donc, le point URL du blog. Vous pouvez également écrire autre chose ici. Vous pouvez écrire MyBlocks, par exemple, dans ce cas, Jango attend des utilisateurs Pas de barre oblique « chiens » sur exemple.com, mais « exemple.com » sur «   MyBlocksSlash DOGS mais « exemple.com » sur «   MyBlocksSlash Mais ce n'est pas ce que nous voulons, alors continuons comme ça. Example.com slash DOG. Nous avons maintenant cette erreur. L'inclusion n'est pas définie et nous devons la saisir à partir du chemin d'importation et d'inclusion des URL de Jungle Enregistrer. Assurez-vous également de sauvegarder tous les fichiers. Alors sauvegardez ceci également. Contrôles, enregistrez également les vues. Donc, tout ce que vous voyez avec ce code black.in Visual Studio signifie qu'il n'a pas encore été enregistré Voyons maintenant quelles erreurs nous recevons. Type : object block view has no attribute as view as view, voyons ce qui se passe ici. Cela se produit dans ce fichier, donc l'USPI bloque l'URL PY, qui se trouve ici Cette classe n'a donc pas cet attribut. Jetons un coup d'œil. Cette classe, bien sûr, n'a pas cet attribut. Il possède uniquement des attributs de modèle et de nom de modèle. Aucune méthode appelée vue. C'est parce que j'ai oublié d' hériter d'une classe de vue spécialisée que nous devons importer Depuis jango, donc depuis jangle point Vs Import generic, puis depuis generic, nous pouvons accéder au détail de la vue détaillée, non supprimer la classe de vue détaillée de la vue Supprimez donc les parenthèses. Cela signifie donc que cette classe contient en fait une méthode de vue. Vous pouvez donc cliquer avec le bouton droit de la souris et accéder à Définition. Et bien sûr, cela n'a aucune méthode ici, mais il hérite d' autres méthodes Donc, si nous passons à la vue détaillée de base, à la définition, cela hérite également de ces deux éléments Alors peut-être que view a cela une fonction de vue. Oui, on l'a trouvée. Voilà donc la méthode. Il existe donc une chaîne d'héritage, et nous avons désormais accès à cette méthode depuis notre classe de vue de blog. C'est vrai. Enregistrez ce fichier. Et maintenant, il est temps d'essayer notre application et vous voulez accéder à cette URL, il fallait donc s'y attendre. La page d'accueil n'est donc pas encore configurée. Nous n'avons aucun modèle d' URL qui indique à Jangle ce qu' il doit faire lorsque les gens visitent la page d'accueil Donc, ce que vous devriez plutôt regarder, c'est l'un de vos blocs. Donc, actuellement, nous avons des chiens, des scories. Tu t'en souviens ? Je l'ai inséré dans le tableau, et nous avons cette erreur. Le modèle n'existe pas. Une erreur facile à corriger chez les chiens. Jango a donc reconnu que nous avions une entrée « chien » dans la base de données, car si vous l'essayiez pour les chats, vous obtiendrez une autre erreur Donc, cette fois, vous avez obtenu une page introuvable, et Jango a essayé ces modèles et n'a trouvé aucune limace pour chats Les chiens sont donc une chose différente, mais le modèle est introuvable. Donc blog point HTML. Il s'agit généralement d'un problème de communication avec Jangle Jango n'est donc pas en mesure de trouver le chemin du code HTML à points en bloc. Alors, vérifions-le. Le code HTML par points de bloc est correct ici. Le nom de la vue est donc correct, puis examinons les paramètres. Modèles. Le nom est correct ici. Cela semble donc bien, mais si vous faites défiler la page vers le haut, vous avez la variable templates. Et cela comporte maintenant certains paramètres concernant les modèles. Et l'un de ces paramètres est le DRS. Voici donc les clés de ce dictionnaire. Bend Derski. Le DrSki attend une valeur, et actuellement c'est une liste vide, mais vous devez déclarer ici la liste des répertoires de modèles Donc, dans ce cas, nous n'en avons un parce que vous pourriez en avoir plus, mais nous en avons un . Nous devons donc le déclarer dans la sauvegarde et nous obtenons cet autre modèle d'erreur, le cerf n'est pas défini, bien sûr, parce que nous l'utilisons ici avant de le définir. Supprimez-le donc à partir de là et placez-le au-dessus de son utilisation. Donc, au-dessus de cette variable de modèles, mettez-la juste ici. Sûr. Et notre serveur a été interrompu, nous voulons donc exécuter à nouveau. Python gère ce serveur PY Run. Voyons ce que nous obtiendrons cette fois. Accédez au navigateur. Et hop, on a le blocage. Dogs, Dogs are good et modifiez le nom de l' auteur. Cela fonctionne bien. C'est ainsi que se termine cette vidéo. Permettez-moi donc de conclure afin que vous sachiez où vous en êtes jusqu' présent, nous sommes en mesure de répondre aux préoccupations des utilisateurs en matière d'URL. Ainsi, lorsqu'ils saisissent example.com slash TOC, par exemple, ce point d'URL PY est déclenché et cela déploie les vues et les modules Il connecte donc les deux ensemble pour interroger les données de la base de données. Ces données sont injectées dans ces variables par des crochets dans le modèle HTML Et bien sûr, elles sont ensuite affichées dans le navigateur pour l'utilisateur. Et comme vous l'avez vu pour le moment, je viens de saisir des données manuellement à l'aide d'un programme tiers qui accède aux bases de données SQL Three Mais normalement, comme vous le verrez dans les vidéos suivantes, nous voulons obtenir des données via une interface d'administration. C'est donc ce que nous allons faire ensuite. Nous allons créer l'interface d'administration et y saisir des données. 212. 215. Créer des vues d'interface administrateur: Bon retour. Auparavant, nous avons pu créer cette page Web avec Jango et dans cette vidéo, nous allons travailler sur l'interface d'administration Plus précisément, nous allons ajouter une option pour pouvoir ajouter des articles de blog depuis l'interface d'administration. Pour cela, vous devez disposer d'un nom d'utilisateur et d'un mot de passe. N'oubliez pas que nous l'avons créé précédemment, mais si vous le manquez, vous pouvez créer maintenant avec la commande Python. Gérez le point PY, créez un superutilisateur. Je l'ai déjà fait, donc je ne vais pas le refaire. Par conséquent, je vais exécuter le serveur, accéder à l'interface d'administration et me connecter avec mes informations d'identification. Maintenant, vous voyez que nous ne pouvons créer que de nouveaux utilisateurs et de nouveaux groupes ici, mais pas de publications. Donc, ce que nous devons faire, c'est accéder au code, puis aller sur le blog, puis sur admin PY. Nous voulons maintenant créer un modèle. Ici, nous voulons enregistrer nos modèles, qui sont les modèles postaux des modèles PY. Donc, celui-ci ici, nous voulons l' importer depuis Admin PY afin que les modèles importent le post. Ensuite, nous voulons enregistrer cela en utilisant admin ce site qui s'enregistre en minuscules, puis voici le post. Sans les parenthèses, alors n'appelez pas le post, déclarez-le simplement ici Enregistrez ce fichier et allez vérifier l'interface d'administration. Alors actualisez, et vous devriez voir les articles ici maintenant. Donc, si vous cliquez sur AD, ajoutez le titre. Disons que les chats sont également bons. La limace peut être un CAT ou n'importe où. Modifie l'auteur et le fait publier. Vous voyez maintenant que ce sont tous les champs des modèles intitulés PY, le slog de contenu, l'auteur et le statut Alors rédigez ou publiez. Cliquez sur Enregistrer. Ensuite, allez dans le navigateur et allez dans CATS cette fois, et vous verrez que le nouveau message est là, aussi simple que cela. Maintenant, c'est facultatif, mais si vous le souhaitez, vous pouvez ajouter des colonnes ici pour ajouter des détails sur ces publications. Les créateurs de contenu verront donc cette vue lorsqu' ils créeront des publications. Vous devriez donc leur faciliter la tâche afin qu'ils puissent trouver de nouveaux blocs ici. Tout d'abord, ce que nous voulons faire, c'est voir que le nom de chaque blog est l'objet du post 1, l'objet du post 2. Il est donc très difficile de trouver autre article que vous souhaitez pour le créateur de contenu. Alors, comment pouvons-nous afficher ici le titre au lieu de ce nom peu utile ? Mais d'abord, d'où cela vient-il ? Que pensez-vous du post object ? Il me semble que Post post est le nom de la classe models. C'est donc en fait le nom de cette classe. Donc Python, lorsque vous avez une classe et que vous l' imprimez, imprimez cette classe, Python affiche simplement le nom de cette classe. Je suppose que tu le sais. Laissez-moi vous montrer ce que je veux dire. Alors laissez-moi ouvrir un shell Python, et vous aurez une classe. Appelons également ce post. Il suffit de passer. Ainsi, lorsque vous imprimez un article, vous obtenez ce type de sorties ou vous dites simplement publier, c'est pareil. Jango essaie donc d'obtenir une représentation sous forme de chaîne de ce message de classe Mais nous pouvons changer cela en ajoutant une méthode magique. Appelé STR. En fait, c'est underscore, STR, underscore, underscore. Donc, deux soulignements en tête et en fin de match. Avec des parenthèses, self est le premier argument, colonne, et cela devrait maintenant renvoyer une meilleure représentation de cette classe, qui serait self représentant une classe elle-même, et title est l'attribut de la classe Ce titre sera imprimé lors de l'impression de la pose. Donc, si je sauvegarde ceci, je vais à l'administrateur. Rafraîchir Nous obtenons les titres de chacun des articles de blog, chats et chiens. Maintenant, si vous souhaitez ajouter du contenu sur le côté , vous devez accéder à l'interface d'administration, et ici vous voulez créer une nouvelle classe. Appelons cette classe post admin, qui devrait hériter de admin Model Admin Donc ça n'a pas besoin d'arguments. L'administration de modèles est un type de classe, tout comme nous avons des modèles qui modélisent des modèles de classe normaux. Nous avons des modèles d'administration spéciaux, donc nous en héritons, et cela nous attend maintenant une variable d'affichage de liste si vous voulez la transmettre, qui devrait être un tuple avec des chaînes, et les chaînes devraient être les noms des champs du modèle Alors, qu'est-ce que tu veux montrer sur le côté ? Ici. Nous avons déjà le titre, alors montrons les dates de création et l'auteur. Oui C'est ce que nous allons faire. Donc date de création. C'est le nom. Oui, dates de création et auteur dans Admint PY author. Non OK, nous l'avons fait, mais ce n'est qu'un cours qui circule. Jango ne connaît pas ce cours. Nous voulons donc dire à Jango d'une manière ou d'une autre que le projet doit prendre en compte cette classe, nous devons donc enregistrer cette C'est ce que j'essaie de dire. Donc, publiez l'administrateur ici, juste la classe. Inutile de l'appeler comme ça. Faites-y de l'espace pour visibilité, enregistrez, allez ici et rechargez Et c'est le point de vue que nous avons. Je sais donc que ce n'est pas idéal, mais je vais y remédier. Date de création de la publication et auteur. Le titre a donc disparu car lorsque vous incluez cette variable d'affichage de liste, l' interface d'administration ignore le nom de la classe. Elle n'imprime donc pas la représentation de la classe ici, mais elle imprime ce que vous avez déclaré ici. Par conséquent, ce que vous devez faire est ajouter un titre parmi ceux-ci en tant que premier. L'ordre des chaînes ici est donc respecté par jango. Nous avons donc maintenant le titre, la date de création et l'auteur. Si vous vous demandez pourquoi la date créée pour les chiens est vide, eh bien, c'est parce que si vous vous souvenez, j'ai saisi manuellement un RO pour les chiens. blog, et évidemment je n'ai pas saisi le bon format de date manuellement. C'est pourquoi Jango ne sait pas quoi afficher ici. Mais lorsque vous créez une publication, la bonne manière via l'interface d'administration, Jango est capable de générer automatiquement la date du jour, c'est tout pour cette vidéo Passons maintenant la page d'accueil car elle n'existe pas actuellement. Construisons la page d'accueil dans la vidéo suivante. Voyez ici. 213. 216. Créer la page d'accueil: Bonjour, bon retour. Auparavant, nous avions créé deux articles de blog, chats et chiens. Cependant, notre page d'accueil ne fonctionne pas. Alors, comment ajouter une page d'accueil ? C'est ce que nous allons faire dans cette vidéo. Pour l'instant, nous allons garder les choses simples. Nous allons avoir juste une page d'accueil indiquant qu'il s'agit d'une page d'accueil. Mais plus tard, nous allons générer automatiquement une liste d'articles de blog sur la page d'accueil. Pour l'instant, nous allons avoir une simple page HTML pour vous entraîner à créer de nouvelles pages dans la jungle. Oh, vous savez plus ou moins comment les choses fonctionnent maintenant, mais répétons-le. Alors, par où commencer ? Commençons-nous par créer un module, une vue ou un modèle HTML Vous ne savez peut-être toujours pas par où commencer. Mais je vous suggère de suivre cette approche. Pensez toujours à l'utilisateur. Résolvez donc le problème en commençant par l'utilisateur. Ce que voit l'utilisateur, c'est le code HTML. Ensuite, vous descendez par niveaux jusqu'à ce que vous atteigniez le backend, c' est-à-dire les modèles ou les vues. Commençons donc à créer la page en pensant à l'utilisateur. Par conséquent, vous devez créer un modèle HTML pour le montrer à l'utilisateur. Allez donc dans les modèles, cliquez dessus avec le bouton droit de la souris et accédez à Newfle. La page d'accueil est généralement appelée index point HTML C'est une méthode standard, mais vous pouvez également écrire n'importe quel autre nom que vous voulez. Je vais donc conserver le code HTML à points d' index. Encore une fois, le Tok, vous avez alors des balises HTML et des balises body comme ça. Écrivons un texte statique ici. Voici la page d'accueil. Mais comment l'utilisateur peut-il obtenir ce modèle HML ? Que font-ils ? Eh bien, ils saisissent une URL directement dans leur navigateur. Je veux dire, ils peuvent également trouver cette URL sur Google ou la saisir directement dans leur navigateur. Cela n'a pas d'importance pour nous, mais ils doivent entrer une URL d'une manière ou d'une autre dans leur navigateur , comme exemple.com. Il s'agit d'une page d'accueil. Nous devons donc accéder aux URL de notre application de blog. Donc, cette URL, c'est un fichier PyFle, pas l'URL, c'est un fichier PYFle provenant de mon site Nous en avons fini avec ça. Nous sommes entrés. Nous avons parlé à Jango de l'URL, c'est PyIL de notre application, et c'est tout Nous le fermons maintenant et nous travaillons sur l'URL de l'application. Donc, l'URL du blog, qui contient cette liste d'appels à la fonction Path. Cette fonction est donc appelée avec deux arguments, un ici, un ici, trois, en fait, et un troisième ici. Nous devons donc maintenant ajouter un autre appel. Trajectoire. Cette fois, c'est juste une chaîne vide. Avant, après le nom de domaine, il y avait le slug. Mais maintenant, après le nom de domaine, nous n'avons plus rien. suffit donc de laisser une chaîne vide à cet endroit. Une virgule Oh, maintenant nous avons des points de vue. OK ? Nous passons donc notre feuille de route qui consiste à publier une page. Donc, vues, nous voulons créer une autre vue maintenant dans les vues PY. Alors écrivons-le d'abord ici. Nous allons l' appeler Home View. Donc, HomeView Dots View sera la méthode pour cela. Nous devons donc appeler Aview. Donnons-lui un nom, afin que nous puissions l'utiliser plus tard. La vue du soulignement de la maison, c'est une chaîne, non ? Puis créez une vue. Donc un nouveau cours. La vue d'accueil de la classe provient de la vue détaillée générique. En fait, cela ne devrait pas venir de là, mais laissons les choses comme ça pour le moment. Et le modèle maintenant. Eh bien, cette page n'a pas vraiment de modèle. En fait, il n'a pas besoin d'un modèle, car vous voyez, il s'agit simplement d'une page statique. Il ne s'agit pas d'obtenir des données d' une base de données comme le HTML à points en blocs. Vous voyez, dans le HTML du blog, nous obtenons ces données de la base de Ce n'est pas le cas ici, vous pouvez donc avoir des vues sans modèles. Donc, tout ce que vous voulez faire ici est que le nom du modèle soit égal à home, désolé, point d'index HTML. Cela signifie donc que lorsque les utilisateurs consultent cette URL, cette vue appelle modèle pour qu'il soit affiché dans le navigateur de l'utilisateur. C'est ça. Assurez-vous d'enregistrer, utilisez ce PY, assurez-vous d'enregistrer l'URL PY, assurez-vous de sauvegarder le code HTML du point d' index. Ensuite, essayez la page. Voici donc la page d'accueil, et il semble y avoir un problème. Des problèmes apparaissent donc aujourd'hui. Cela indique qu'il manque un ensemble de requêtes dans la vue d'accueil. Vous devez donc définir le modèle de vue de la maison. Le problème ici est que dans les vues, ce n'est pas le bon type de vue à utiliser avec des vues qui affichent simplement un modèle sans obtenir de données à partir d'un modèle. Par conséquent, dans ce cas, vous souhaitez plutôt utiliser une vue modèle. Enregistrez et actualisez. Et voici la page d'accueil. Cela fonctionne. Vous pouvez le voir lorsque je le zoome. C'est vrai. C'est ainsi que vous pouvez ajouter d'autres pages. Vous pouvez également désormais comprendre la différence entre les différents types de vues. Donc, vue détaillée et vue du modèle. vue modèle signifie que vous devez uniquement afficher un modèle sans obtenir de données de mon modèle. Il s' afficher un modèle sans obtenir de données de mon modèle agit d'une vue plus complexe qui extrait les données des modèles et les transmet aux modèles. Dans la vidéo suivante, je vais vous montrer comment utiliser un autre type de vue, qui sert essentiellement à créer une liste d'objets, une liste d'articles de blog dans notre cas. Discutez avec vous dans la vidéo suivante. 214. 217. Créer la page À propos: Auparavant, nous avions créé une page d'accueil pour notre application. Nous voulons maintenant développer cette page d'accueil et afficher la liste des articles de blog sur la page d'accueil au lieu de certaines informations statiques. Donc, avant d'utiliser la vue détaillée pour les pages de blog, la vue modèle pour la page d'index, nous voulons maintenant utiliser un autre type de vue pour afficher une liste de blogs. L'affichage du modèle n'est pas le meilleur choix pour cela. Par conséquent, nous pouvons supprimer cette page ou la conserver et l'utiliser pour la page à propos de nous. Disons que notre site Web devrait avoir une page à propos de nous où vous pouvez écrire des informations sur l'entreprise ou sur vous-même. Voyons donc comment nous pouvons changer cela. Commençons par l'index, la page HTML et renommons-la en about then in views, nous voulons renommer l'index en about pour refléter le nom du modèle HTML, et aussi la vue d'accueil peut changer en about view, puis passer à l point py et changer la vue view supprimer ces parenthèses et la vue d'accueil à propos supprimer ces parenthèses et la vue Et maintenant, nous voulons donner un autre modèle d'URL à cette page à propos de nous. On devrait parler de slash comme ça. Enregistrez l'URL qui est PY, enregistrez les vues qui sont PY, et c'est tout autour du serveur. Oh, je ne suis pas dans un environnement virtuel, alors fermez le terminal et ouvrez-en un nouveau , puis la flèche supérieure pour exécuter à nouveau ce serveur. La page d'accueil n' est donc plus valide, mais le fait de se terminer par une barre oblique est valide Cela devrait donc se terminer par une barre oblique. Dans le cas contraire, vous obtenez un message d'erreur. Mais cette page est valide pour le moment. Donc, cette page, disons que c'est la page à propos. Bien, sauvegardez cela, actualisez, et nous verrons le changement. Il s'agit donc d'ajouter une autre page. Dans la vidéo suivante, nous allons de nouveau créer la page HTML à points d'index avec du nouveau contenu Je vous montre donc une liste de blogs. 215. 218. Listing de publications sur la page d'accueil: Bonjour. Dans cette vidéo, nous allons ajouter la page d'accueil et afficher une liste des articles de blog sur cette page d'accueil. Repartons donc du point de vue de l'utilisateur. Nous voulons donc avoir pour l' utilisateur un index de ce modèle HTML avec des balises HTML de type doctype et des balises de corps Alors, que mettons-nous ici ? Eh bien, donc des balises avec des crochets et des symboles de pourcentage, et puis cette fois, nous faisons une liste à quatre boucles, quatre articles dans la liste des articles Ensuite, nous faisons quelque chose ici, puis nous mettons fin à cette boucle et quatre à l'intérieur, nous faisons autre chose. Je vais vous expliquer ce qu'est une liste de publications et ce qu'est également une liste de publications. Mais en gros, nous avons les variables ici, qui peuvent être le titre et le contenu de l'article. Et peut-être que non, le contenu de la publication serait trop important pour être affiché, mais on pourrait dire auteur. Ce ne sera donc qu' une liste de blocs. Nous ne voulons pas afficher le contenu de cette liste car ce serait trop important. Donc, titre du message, auteur du message. Maintenant, qu'est-ce qu'une liste de publications ? La liste de publications est une vue, que nous devons définir dans les vues qui PY. Donc encore une autre classe de vue. Liste des publications de classe, le nom doit être dans le même format, pour ainsi dire, que celui-ci ici. Nous avons utilisé la liste de soulignement des messages ici avec des lettres minuscules Nous devons maintenant utiliser post in camel case : les listes de P et L sont en majuscules Cela hérite de la vue générique par liste de points. Il s'agit donc d' un autre type de point de vue. Nous avions une vue détaillée rendu des modèles HTML qui obtiennent des données d'un module. Nous avions une vue modèle pour afficher modèles HTML sans les données d'un modèle, et nous avons cette vue de liste, spécialisée dans le rendu de plusieurs lignes de données, dans ce cas, de plusieurs publications. Maintenant, ce type de classe attend une variable d'ensemble de requêtes, qui doit être égale à Post. Post est le modèle. Soyez donc prudent ici. Ce n'est pas la vue. Ce n'est pas une vue de blog. Ce n'est pas une question de vue, bien sûr, c'est le modèle des blogs, que vous pouvez trouver à l'intérieur des modèles chez PY. Donc, publiez ce modèle, c'est celui auquel nous faisons référence ici. Ce que nous essayons de faire ici c'est d' interroger les objets. Donc, les lignes de ce module de publication. Sans les parenthèses, nous voulons appliquer un filtre et peut-être obtenir tous les objets, peut-être appliquer un filtre tel que status égal à un, qui signifie Laisse-moi te le montrer. Donc, statut, nous parlons de ce champ. Nous voulons donc ces articles, ces articles de blog, qui ont une valeur de un pour le statut. Le statut comporte des zéros ou des uns. Donc, un signifie publier, zéro signifie brouillon. Nous voulons donc n'y afficher que les articles publiés avec une valeur de statut de un. Et peut-être souhaitez-vous les classer par domaine ? Nous avons donc peut-être une date de création . Donc date de création. Telle est donc la relation avec les modules et la relation avec les modèles porte désormais sur les modèles Nom Eagle à deux points d'index HTML, non ? Nous avons donc créé le modèle, qui ressemble à ceci. Nous avons créé la vue, mais nous devons également faire quelque chose avec l'URL. Nous avons donc un article ici, deux articles ici. Nous avons besoin d'une virgule ici et d'ajouter un troisième élément, qui est la page d'accueil Donc une chaîne vide. Et nous voulons obtenir les vues que nous voulons obtenir, à vue de la liste des publications, de la liste des publications. La liste de publications est une classe, nous voulons donc l'obtenir sous forme de vue. Appelez donc la méthode en tant que vue depuis la liste des publications et donnez-lui un nom tel que qui ? Maintenant, je pense que nous sommes prêts à essayer le navigateur et à visiter la page d'accueil. Mais d'abord, assurez-vous de tout enregistrer. Celui-ci, l'URL de ce PyFle, l'index de ce fichier HTML et les vues de ce PyFile Enregistrez-les et voyez si l'application est en cours d'exécution, elle est en cours d'exécution. Alors visitez la page d'accueil et cela fonctionne. Les chiens l'ont fait, les chats l'ont fait. Oui, ce sont les deux articles de blog. n'est pas très attrayant, mais vous pouvez changer cela avec du HTML. Par exemple, vous pouvez placer le titre dans les deux balises H ici. Et l'auteur, peut-être en P tags. Donc ici. Disons des rechargements et ça a l'air un peu mieux Maintenant, dans l'ordre, les anciens articles sont en haut et les plus récents en fin. Donc, si vous voulez changer cela, c'est très facile à faire. Passez simplement aux vues de ce PY et vous souhaitez modifier l'ensemble de requêtes, l'ordre en ajoutant simplement un moins (c'est la syntaxe de jango), puis actualisez, et Kats sera en haut maintenant, le dernier bloc Cela semble donc bien, mais je pense qu'il y a deux choses qui manquent ici. La première est que chacun d'entre eux doit avoir un lien lequel l'utilisateur peut cliquer pour accéder à ce bloc de publication en particulier. Et deuxièmement, ce qui manque ici, c'est un peu de style. Donc ça a l'air plutôt horrible. Nous devons appliquer un peu de style, et nous allons utiliser bootstrap pour cela C'est une bibliothèque CSS, et elle ne fait que créer des choses. Les pages Web ont donc une bien meilleure apparence. Ensuite, nous allons ajouter une URL ici, qui a trait aux balises URL Vous allez donc apprendre à utiliser les balises URL, puis nous ajouterons un style bootstrap. À bientôt. 216. 220. Ajouter Bootstrap à Django: Bonjour, bon retour. Dans cette vidéo, vous allez apprendre comment passer de ceci à cela. Nous allons donc ajouter un style CSS en utilisant la bibliothèque bootstrap, qui est une bibliothèque CSS Bootstrap permet de styliser facilement vos documents HTML, et de nos jours, il est indispensable d'avoir un site Web d'apparence moderne Allons donc là où nous l'avons laissé avec notre code. Il s'agit de l'index du document HTML qui affiche cette page Web, et c'est un document sur lequel nous allons travailler dans cette conférence ce faire, nous allons consulter la documentation du bootstrap. Essayez donc Google bootstrap, et le premier résultat devrait être officielle de bootstrap Donc, quelques mots sur Bootstrap. Vous savez, le CSS est généralement placé quelque part dans un dossier que vous appellerez static. Vous créez donc un dossier dans le répertoire du projet, dans le répertoire racine, et vous le nommez static. Et à l'intérieur de la statique, vous créez généralement un fichier tel que le point principal CSS. Et dans ce fichier, vous écrivez du code CSS. Ce code CSS, en gros, ressemble à ceci. Disons P, puis vous avez des crochets comme ça, puis vous dites couleur bleu, par exemple, puis taille de police 17 pixels Ce serait du CSS. Bien sûr, il serait placé dans un fichier CSS comme je l'ai dit. Bien qu'il existe également un moyen de simplement mettre ce code, intégrez-le dans le document HTML. Quoi qu'il en soit, il fait la même chose. Ce code, par exemple, nous permet d'obtenir toutes les balises P et de les colorier en bleu sur bleu. Le texte sera donc bleu et la taille de police du texte sera de 17 pixels, et ainsi de suite, vous avez d'autres propriétés de ce type. Maintenant, lorsque nous utilisons bootstrap, nous utilisons du code déjà écrit Je parle donc à nouveau de code CSS. La bibliothèque contient donc du code CSS, puis vous utilisez simplement ce code en faisant simplement référence à ce qu'on appelle une classe. Par exemple, si vous vouliez utiliser et nous utiliserons bootstrap, au lieu de cela, vous diriez class égal à P pretty Par exemple, supposons que ce paragraphe, ce code aient également un nom quelque part. Alors disons P pretty. Voici donc ce qu'il y aurait dans les fichiers bootstrap que nous installons Ensuite, dans notre code, il suffit de faire référence à cette classe de bootstrap pour appliquer ces attributs à ce paragraphe, qui dans ce cas, serait le nom de l'auteur Vous le verrez donc en action. Permettez-moi de supprimer cela et cela également. C'est vrai. Et revenons au site Web de Bootstrap. Il existe donc deux manières d' inclure le bootstrap dans votre projet, soit en l'installant, soit en utilisant cette méthode plus rapide avec JS Deliver Et ici vous avez le guide sur la façon d'inclure le bootstrap. Nous devons donc inclure le fichier CSS qui, comme je vous l'ai dit, contient tout ce code CSS. Nous devons donc copier-coller ce code ici. Je peux juste appuyer sur Copier ici pour obtenir ce code. Et placez-le à l'intérieur des étiquettes avant toutes les autres feuilles de style. Donc, nous n'en avons pas ici, mais nous pouvons en créer. Head, comme ça. Donc, entre les deux, on colle ce lien, avec un tag link tags, on ouvre là, on ferme ici. Ensuite, nous devons également placer le fichier JavaScript. Donc point JS, vous pouvez voir. Et pour ce faire, vous devez le copier à nouveau. Donc, sous Bundle, il y a plusieurs options, mais le bundle est la meilleure. Alors, copiez. Et tu dois le placer. Placez donc l'un des scripts suivants à la fin de vos pages, juste avant la balise de corps de fermeture, juste avant la balise de corps de fermeture. Donc juste ici. Et c'est tout. Maintenant, enregistrez cet index dans ce fichier HML, assurez-vous que l'application est en cours d'exécution et visitez-la, et vous verrez déjà une différence sur les téléphones Les liens sont donc d'un bleu un peu plus clair et la police est plus grande. Voilà comment inclure le bootstrap dans votre application. Maintenant, suivons à nouveau le didacticiel. Nous avons donc ici un modèle de démarrage. Tout commence donc par cette balise HTML de type doc ici, déclaration HML Lang et les balises head Je vais donc copier ceci et le remplacer par celui-ci. Donc, la première balise HTML, puis nous avons les balises méta, cela et cela Nous avons déjà inclus ce lien, nous n'avons donc besoin que de ces deux balises méta. Sous l'étiquette principale, sous l'étiquette principale ici. Donc meta meta, le lien vers les fichiers CSS du bootstrap. Et le titre est facultatif. Ce n'est donc pas lié à bootstrap, mais nous pouvons également mettre un titre , appelons ce bloc de posts. Les balises de titre se trouvent également à l'intérieur des balises d'en-tête. Les étiquettes de tête se ferment ici et ici, puis nous avons les étiquettes de corps. Bonjour tout le monde, c'est facultatif. Voici le script que nous avons déjà inclus, celui-ci ici, donc tout va bien. C'est vrai. Donc, ici en bas, il explique à quoi servent toutes ces balises si vous voulez lire cela. Ce que je veux faire maintenant, c'est utiliser bootstrap. Voici donc les exigences, les liens que nous avons placés dans les balises méta, mais maintenant nous voulons utiliser les fonctionnalités réelles de bootstrap. Donc, la bibliothèque elle-même. Ce que je vais faire, c'est généralement avec bootstrap, ce que vous faites, c'est que vous avez une balise DIV principale commence là et se termine là où s'arrête votre contenu. Donc, ici en bas, je vais aligner le div. Donc, ouvrez div, fermez div avec une barre oblique div et les crochets C'est donc tout notre contenu, d'accord, qui se reflète dans fait que le chat est mort pour la dernière fois ici. Et ce div devrait maintenant avoir une classe égale à des guillemets doubles. Et à l'intérieur de ces guillemets, vous écrivez container. C'est l'une des principales classes de bootstrap, et vous voyez que j'enregistre la page, les documents ici et que je rafraîchis la page et nous voyons déjà une différence Ce que bootstrap fait avec ce conteneur, c'est que ce conteneur est un code CSS enregistré quelque part dans ce fichier CSS, et ce conteneur a essentiellement une certaine marge, certain espacement entre le texte et la zone ici La page est donc déjà réactive. Donc, si vous le voyez, il bouge, il ajuste la largeur du navigateur Ensuite, ce que je veux faire maintenant c'est que pour chacun des articles, donc les messages sont des chats dit, donc ceci est un article avec un lien au nom de l'auteur, ceci en est un autre. Donc, pour chacun de ces articles, je souhaite créer une autre division. Donc, de là jusqu' à la fin des quatre, alors voilà, et peut-être que c'est une bonne idée de le mettre en retrait, sélectionnez-les comme ça au toucher pour les mettre en retrait. Donc, en gros, ces deux éléments font partie de cet élément div. C'est donc un élément maintenant. Donc, ce que je vais faire, c'est attribuer une classe de carte. Alors, où est-ce que je trouve ça ? Eh bien, dans bootstrap, par exemple, vous pouvez voir si vous passez à la mise en page, comment vous organisez vos documents HML, vous voyez que vous avez des conteneurs, et vous voyez que vous avez ici la classe de conteneur que nous avons déjà utilisée Ensuite, si vous passez aux composants et aux cartes, vous verrez que vous pouvez organiser votre contenu dans ce type de cartes. Tous ces éléments sont donc une carte. Vous voyez une carte de cours, et c'est ce que je fais également ici. Je mets donc un message à l'intérieur de la carte. Donc, si je l'enregistre maintenant, actualise, vous verrez qu'il y a une sorte de bordure autour de chaque message. Et nous pouvons améliorer cela en attribuant également. Après un espace ici, nous en faisons trois, ce qui signifie imaginer autour de chacune de ces deux cases. Imaginons donc que 33 soit maintenant une unité de CSS ou plus, disons, un niveau d'espacement. Vous pouvez donc en savoir plus sur les marges qui devraient figurer dans la catégorie des services publics. Il s'agit d'espacement, donc d'espacement, vous verrez, par exemple, que M représente la marge, puis vous avez les niveaux Donc un, deux, trois, quatre, cinq, il s'agit donc de gagner de la place. Revenons maintenant à l'exemple de carte présenté ici. Nous avons donc cette image. Nous n'avons pas besoin d'images pour le moment. Donc, cette image ici, nous n'en avons pas besoin. Ensuite, nous avons le corps de la carte. Il y a donc un autre div dans cette classe de cartes div. Donc Div, on l'obtient et on le place ici. Donc comme ça, encore une fois, ces deux-là. Alors maintenant, c'est la classe égale au corps de la carte. Et puis nous avons aussi un autre titre de carte. Il s'agit donc d'un titre de la carte, qui dans notre cas serait chats et chiens, ce qui signifie que nous pourrions ajouter un titre ici. Alors voyez ce que je vais faire Div comme ça. Ce serait donc une classe égale au titre de la carte. Et à l'intérieur, nous mettrions ce titre. Je sais que je suis en train de le reproduire, mais je vais vous dire pourquoi Alors publiez ce titre et actualisez-le. Donc, oui, nous avons des chats ici, des chiens ici. Mais il vaut mieux utiliser peut-être H deux au lieu de DIV. Donc H deux, et n'oubliez pas de le changer également en H deux. Elle s'ouvre ici, elle se ferme ici. Je rafraîchis donc et voici un titre, c'est un titre. Après le titre, nous aurions peut-être le texte. Donc ce texte ici, qui contient le texte de la carte. Une plongée. Et ce serait du contenu post-point, n'est-ce pas ? Voilà donc notre texte. Nous voulons afficher du texte sous le titre. Et comme je l'ai dit, cette classe est égale au texte d'une carte. Enregistrez l'actualisation pour voir les modifications. Oui, donc le contenu est également ici. Maintenant, je veux supprimer ce lien en le remplaçant par un bouton. Vous voyez donc que nous avons ici ce fond. Il s'agit donc d'une balise A et de cette classe. Alors, que pouvons-nous faire ? Attribuons une classe à BTN puis à BTN primary. Maintenant, enregistrons ceci et actualisons pour voir que les chats sont bons aussi et le bouton. Maintenant qu'il s'agit d'un bouton, nous ne voulons plus afficher le titre de l'article ici. Nous voulons afficher quelque chose comme en savoir plus. Sécurisé, rafraîchissez. Oui, ça a l'air mieux. Peut-être voulons-nous ajouter sous la division du contenu. Peut-être voulons-nous avoir une autre division où nous disons que l'auteur est de publier cet auteur, n'est-ce pas ? Celui-là. Et nous supprimons le texte P maintenant car nous ne voulons pas deux champs d'auteur. Alors enlevez-le. Et ce serait également une classe de carte égale au texte de la carte. Sûr. Consultez les modifications. Oui, les chats, les chats sont bons pour écrire des textes et en lire plus. Maintenant, vous voyez que ces divs sont un peu trop proches les uns des autres Donc, le contenu div, le dif de l'auteur, le bouton div également. Si vous souhaitez changer cela, vous pouvez remplacer les divs par des paragraphes Donc P au lieu de DF P, P, P ici aussi. Rafraîchissez en toute sécurité, et ça a l'air un peu mieux maintenant. Les boutons me semblent un peu gros. C'est parce que ce texte est un élément H deux. Donc, si vous voulez que le texte soit plus petit, vous devez supprimer les deux balises H, la balise d'ouverture et la balise de fermeture. Rafraîchissez en toute sécurité, et ça a l'air mieux. La page est également réactive , vous pouvez donc réduire la taille du navigateur. C'est à propos de cette vidéo. Dans la prochaine, je vais vous présenter les tags des modèles Jangle Dans la prochaine vidéo, vous découvrirez de quoi il s'agit. On se voit là-bas. 217. 222. Héritage de modèles: Bonjour. Jusqu'à présent, avec notre site Web, nous avons créé cette page d'accueil. Vous pouvez le voir sur la page d'accueil, et nous avons également la page À propos. Donc slash AboutSlash Il s'agit de la page À propos, qui n'a pas de style bootstrap, bien sûr, car nous appliquons le style uniquement à l' index Et nous avons également les modèles HTML à points de blog, qui sont l'une de ces pages pour chats ou chiens. Donc trois modèles, un, deux, trois. Maintenant, nous devons trouver un moyen de naviguer sur le site Web, c' est-à-dire, par exemple, comment allez-vous, comment le visiteur peut-il passer de cette page à la page à propos ? Eh bien, cela est généralement implémenté via une barre de menu de navigation, qui peut se trouver quelque part en haut ici. Et vous pouvez cliquer sur le lien et accéder à cette page. C'est ce que nous allons faire dans ces vidéos maintenant. Comment pouvons-nous le mettre en œuvre ? Parce que la barre de menu de navigation doit être présente sur chaque page. Une façon de le faire est donc de créer ce menu de navigation, qui est créé en HTML. L'une des méthodes consiste à coder le code HTML de ce menu de navigation dans chacune de ces pages HTML. Mais cela va évidemment à l' encontre du principe « sec », qui signifie « ne vous répétez pas ». Par conséquent, ce que nous allons faire, c'est utiliser l' héritage de modèles. Qu'est-ce que l'héritage de modèles ? Eh bien, ça marche comme ça. Composant qui sera répétitif. Dans notre cas, la barre de menu de navigation restera donc dans un seul fichier. Et puis les autres fichiers, qui concernent le blog et l'index, recevront autre fichier où se trouve le menu de navigation. C'est ce que l'on appelle l'héritage de modèles. Voyons donc comment cela fonctionne en action. Donc, cliquez avec le bouton droit sur les modèles, allez dans Nouveau fichier et écrivez quelque chose comme du code HTML à points de base. Le code HTML de base va contenir la barre de menu de navigation. Maintenant, pour créer un menu de navigation, en HTML, vous utilisez la balise Nav. Alors ouvrez-le et fermez-le, puis à l'intérieur, vous avez un autre div qui l'ouvre et le ferme. Et à l'intérieur de ce div, nous avons l'URL, qui crée une liste d'éléments de menu. Le premier élément du menu serait donc avec L I Right. Et puis nous en avons un autre. Donc, à la maison, nous avons à propos de nous. Oui, c'est tout. Donc, le premier élément de menu, le deuxième élément de menu. Ce serait donc pour qui. Par conséquent, à l'intérieur de la première balise LI, qui envoie une liste, nous plaçons une balise, qui créera un lien. Pareil pour le suivant, un tag, non ? À l'intérieur du premier, une étiquette. Donc ici, nous disons HRF, cette propriété, qui aura comme valeur entre guillemets l'URL de la première page, qui serait cette balise URL. Code unique. Eh bien, nous devons maintenant examiner l'URL du blog et obtenir le nom de l'URL de la page d'accueil, qui est la page d'accueil. Cela entre donc ici, chez nous. Nous faisons de même pour so about view. Encore une fois, copions-le et collons-le dans la première balise H. Fais attention. Il y a un espace ici, Hf, à propos de la vue soulignée Maintenant, nous devons faire autre chose. Nous devons passer à l'index HTML à points et couper de la balise body qui s'ouvre ici jusqu'à la toute première ligne, les découper et les coller en haut ici. Faites de la place, collez-les dedans. Une nouvelle fois pour indexer ce code HTML et le couper à nouveau, commençant par la balise HTML de fermeture, y compris la balise de corps de fermeture, y compris la balise script de bootstrap. Coupez-les, allez à la base de ce HTML, allez jusqu'au bout Faites de l'espace, collez-le. Désormais, le code HTML à points de base sera le parent. Nous avons donc parlé de l'héritage des modèles. Il s'agit maintenant du parent et de l'index dont le HTML est l'enfant, qui va l'obtenir à partir du code HTML à points de base En fait, chaque page, non seulement l'index, mais aussi le HTML, bloque le HTML par points. Ainsi, tous les articles de blog obtiendront tout cela à partir du HTML de base. Cela nous permet également d'appliquer bootstrap sur chaque page Web Et maintenant, vous devez indiquer à chacune de vos pages, exemple indexer ce code HTML, qu' elle doit s'étendre. Ainsi, par le biais d' une balise de modèle comme celle-ci, vous dites, étendre le code HTML entre guillemets simples Alors copiez-le et collez-le également dans About HTML. Et là aussi, nous devons également supprimer ces balises body dessus, simplement le dire et passer au code HTML à points bloqués. Supprimez également la balise body, balises HTML, les balises de type doc, collez-les, supprimez la balise HTML de fermeture et la balise de corps de fermeture supprimez, enregistrez, enregistrez. Ensuite, passez au HTML à points de base et à la fin, après le menu de navigation, nous voulons refaire une balise de modèle et dire « bloc de contenu ». Et aussi la même chose. Donc, un modèle, une balise et un bloc de contenu. Alors c'est quoi ça ? Eh bien, en gros, une page Web H. Pensez donc à ce que le visiteur voit sur le site Web. Ils voient en haut une barre de menu de navigation, laquelle est celle-ci ici, non ? Ensuite, ils voient le contenu qui peut être un article sur les chats, du contenu sur les chats ou, dans le cas d'un article à propos de ça, le contenu de la page A. Donc, sous le menu se trouve le contenu. Voici donc le contenu. Et maintenant, nous devons nous souvenir de ce contenu variable et aller, par exemple, indexer ce code HTML, puis en dessous, nous disons Bloquer le contenu. Et cela se termine encore une fois avec le contenu en blocs. Ainsi , comme vous le voyez, cela étend le HTML à points de base, de sorte qu'il extrait les données du HTML de base, puis ce qui comme vous le voyez, cela étend le HTML à points de base, se trouve entre les blocs, les balises de contenu de là à là, sont combinées d'une manière ou d'une autre à cette page HTML de base pour être affichées dans le navigateur sous forme de page complète Et cela concerne l'héritage des modèles. C'est un peu difficile à comprendre. Voyons donc si nous avons fait des erreurs maintenant. Nous allons voir le résultat Oui, bien sûr. Donc, il est dit d'étendre, avez-vous oublié d'enregistrer ou de charger ce tag ? Eh bien, étendez cela parce que le jangos n'est pas reconnu là-dedans parce que cela s' Ainsi, le point de blog HTML s'étend, le point de base HTML. Faisons de même pour les autres pages , sauvegardons également celle-ci et sauvegardons. Oui. Il s'agit d'un modèle HTML à points de base Cherchons l'erreur suivante. OK, pas mal. Nous voyons donc quelque chose ici, mais nous ne voyons aucun texte. Alors revenons en arrière et réglons ce problème. Je base le HTML par points. Voici donc le lien. Mais nous n'avons aucun texto. Disons donc « à la maison » pour cela et à propos de nous pour cela. Donc, si vous actualisez. Et oui, nous voyons quelque chose maintenant, continuez à propos de nous. Cela nous amène à la page À propos. Rentre chez toi. Cela nous concerne. Génial. Nous ne voyons pas le contenu ici, alors corrigeons cela pour la page At HML Parce que nous ne le voyons pas parce que nous n'avons pas ces balises de contenu de bloc. Bloquez donc le contenu ici et ici, mais celui-ci doit être bloqué, sûr, très frais, et c' est le contenu d'un bateau. Maintenant, bien sûr, si vous voulez que ce soit plus joli, vous devez le mettre dans la balise div et dire class container, safe, refresh, et maintenant il se trouve quelque part au milieu Et vous pouvez également le rendre encore meilleur. Il s'agit donc d'un diff principal qui contient tout. Ce serait quelque chose comme H deux Ensuite, nous pourrions ajouter d'autres différences avec le contenu. Voici le contenu comme celui-ci. Le menu de navigation n' est donc plus très joli car nous n'avons appliqué aucun style de classe bootstrap à cet élément Vous avez donc NAF sans classe, D sans classe, UL, LI et A, également, sans classes, sans style bootstrap. C'est ce que nous allons faire dans la vidéo suivante. On se voit là-bas. 218. 223. Appliquer le style Bootstrap au menu de navigation: Nous reviendrons. Ajoutons maintenant du style au menu de navigation. Nous revenons donc au HTML par points de base. Et le premier article est NOV. Tout d'abord, nous voulons les sélectionner tous et les mettre en retrait un ou deux Il doit donc être indenté sous l'étiquette body. Hein ? Commencez donc par NAV et class equal to I know some classes from Bootstrap, et vous pouvez également trouver des exemples en ligne Donc, la barre de novembre indique qu'il s'agit d'une barre de novembre. Utilisez donc la barre lumineuse Nov de style Navbar pour la couleur et la lumière BG d' arrière-plan également, ayez un peu d'ombre et ensuite vous devez également donner la classe est une propriété de NOV et aussi après le manteau, ici vous devez donner un autre identifiant égal au NOV principal comme ça. Ceci est donc utilisé par JavaScript de bootstrap. Ensuite, le div suivant aura une classe de collapse Nova collapse. Ce sont donc des classes différentes et une idée de Nov Boar responsive Ensuite, nous avons la classe UL. Nvbnuvt. ML représente la marge gauche et sa valeur sera de deux. Enfin, la classe LI est un élément NOV. C'est donc un élément du menu, et c'est tout. Enregistrez cela et voyez ce qui va changer. OK. Pas mal. Maintenant, les balises A, donc les liens ne sont pas très beaux, mais la barre elle-même est belle avec une ombre. Passons donc au style des balises A. Donc, une classe égale à la marque Navbar, sûre. Rechargez. La maison a l'air belle, mais ce n'est pas le cas pour nous. Faisons de même pour l'autre, comme ça. Oui, ça a l'air bien. Il faut le mettre un peu à droite. Et une classe P trois ajoutée à la première balise A devrait fonctionner. Alors sauvegardez, actualisez, et tout va plus vers la droite. Donc P trois signifie qu'il faut lui donner un rembourrage autour de cette classe A, et vous devriez faire de même pour les autres. Donc P trois, enregistrer, rafraîchir. Il s'agit du menu de navigation. Maintenant, ici en bas, nous voulons plus d'espace entre le menu de navigation et ce contenu. Réglons ça. Je pense que cela fonctionnerait en ajoutant l'élément de navigation à la classe de l'élément de navigation. Nous pourrions ajouter un Mo de trois. B représente donc le bas de la marge. Actualiser. Et oui, maintenant c'est mieux. Il y a donc maintenant de l'espace sous le menu, la barre de menu de navigation. Et c'est à peu près tout. J'espère que cela a du sens, et je t'enverrai un texto plus tard. Merci. 219. 224. Démo de l'application de traduction Django: Bonjour, bienvenue dans une autre série de vidéos. Dans cette série, nous allons créer une application Web de traduction avec Jango Cette application Web, l'application Jango, fera donc partie de notre projet de site Web Jango Le site Web dispose déjà d'une application de blocage à laquelle nous pouvons accéder via la page d'accueil. Il ne s'agit donc que d'un croquis du site Web. Et nous avions également cette page à propos de nous, qui fait également partie de cette application de blocage. Non, Translator sera une deuxième application que nous allons ajouter à ce site Web de Jango Et il y a trois raisons pour lesquelles j' inclus cette application de traduction dans notre JangOpject La première raison est de revenir sur ce que vous avez appris jusqu'à présent. Vous apprenez donc à créer cette application de blocage. Mais maintenant, je voudrais revenir sur le processus de création d'une application , car nous en avons déjà créé une, mais lorsque vous créez une autre application, vous voyez les choses sous un angle différent et vous apprenez mieux, j'en suis sûr. C'est donc l'une des raisons de revoir le processus de création de l'application. La deuxième raison est donc d'en apprendre davantage sur formulaires jango, car dans cette application jango, nous allons avoir deux zones de texte Dans l'une d'elles, l'utilisateur va saisir le terme, les phrases qu'il souhaite traduire. Et dans le second, ils vont voir le texte traduit. Nous allons donc utiliser l' anglais comme première langue, puis une autre langue comme langue traduite. Nous parlerons de ce détail plus tard. L'idée ici est donc que vous allez en apprendre davantage sur les formulaires. Dans Jango parce que ce truc ici est en fait un formulaire. donc d'un formulaire qui permet aux utilisateurs de saisir des données, du texte, s'agit donc d'un formulaire qui permet aux utilisateurs de saisir des données, du texte, puis d'exécuter une demande, qui est une demande de publication. Ils publient donc des données sur le serveur. Dans ce cas, ce sera le texte qu'ils écriront ici. Le serveur Jango va donc récupérer ce texte et utiliser une bibliothèque Python pour traduire dans une autre langue Ensuite, Jango va renvoyer les données à l'utilisateur. Ce sera donc la zone de saisie du formulaire, et ce sera la zone de sortie du formulaire. Encore une fois, la révision du processus de création d' applications était une des raisons et l'apprentissage des formulaires en est une autre Et la troisième raison pour laquelle je veux avoir ces vidéos est de vous montrer comment traiter le contenu que l'utilisateur envoie à notre application jangle Dans ce cas, ce sera le texte, et vous allez voir comment organiser la bibliothèque qui traite ce texte dans des fichiers, comment obtenir ce texte et comment envoyer à l'utilisateur, car avec notre application de blocage, nous ne traitons pas vraiment de contenu utilisateur, mais cette fois nous le ferons. Alors préparez-vous, je vous parlerai dans les prochaines vidéos. C'est ici. 220. 225. L'étape de développement d'applications Django: Hé ! Dans cette vidéo, je vais mentionner les étapes à suivre pour créer cette application de traduction en particulier. Et ces étapes s'appliquent également à toutes les autres applications que vous souhaitez créer. Donc, tout d'abord, ce que vous voulez faire lorsque vous avez une idée ou certaines exigences pour créer une application, vous voulez savoir s'il est possible de créer cette application Web en particulier. Par exemple, nous voulons créer cette application qui traduit, disons, de l' anglais vers l'allemand. Donc, tout d'abord, vous voulez répondre à la question de savoir s'il est possible de traduire un texte, donc une chaîne de caractères, qui est en anglais. Peux-tu le traduire en texte allemand ? Je répète donc la chaîne, mais la version allemande de cette chaîne originale. Alors, pouvez-vous traduire du texte avec Python ? Et pour cela, vous devriez faire quelques recherches sur le Web et peut-être sur OscOfms jusqu'à ce que vous trouviez un package Python, peut-être, qui vous faciliterait Vous pouvez également créer votre propre package, ce qui devrait demander beaucoup de travail pour cette tâche particulière, car traduction des langues n' est pas facile J'ai donc fait quelques recherches sur Google et j'ai découvert que Google Trans, et j'ai découvert que une bonne bibliothèque de packages à utiliser pour cela qui repose essentiellement sur l'API Google Translate, est . Ainsi, avec Google Trans, vous pouvez fournir une chaîne et Google Trans obtiendra la traduction de Google Translate, et il renverra une chaîne dans la langue cible. Le problème est donc résolu. Il est possible de traduire via Python. Nous avons donc le feu vert pour continuer à créer notre application. Ensuite, la prochaine chose que vous voulez faire est de créer une application jango vide , ce que nous allons faire dans la vidéo suivante Ensuite, vous devez suivre l'approche du haut vers le bas, qui consiste à penser du point de vue de l'utilisateur. Ainsi, au lieu de parcourir vos modules, créer un modèle ou peut-être de créer une vue, vous voulez créer ce que l'utilisateur veut voir , à savoir le modèle HTML. La première étape serait donc de créer un modèle HTML, puis ce modèle, ce code HTML, doit être rendu vers une URL particulière. Ensuite, vous devez configurer l'URL de votre application, puis connecter les URL et cette URL souhaite déclencher une vue particulière Ensuite, vous souhaitez créer une vue. La vue récupérera essentiellement le code HMLU créé à cette étape et le servira à cette URL Vous souhaitez ensuite créer un modèle contenant les données qui seront injectées dans le modèle HDML Et à ce stade, nous devrions déjà avoir construit la structure de notre application Web avec du HTML et une zone de texte prête à recevoir du texte. Ensuite, nous pouvons obtenir ce texte afin de pouvoir l'obtenir le traduire et renvoyer dans l'une des zones de texte. Telles sont donc les mesures que nous allons prendre. Dans la vidéo suivante, nous allons donc créer l'application Web Jango dans notre JangOpject existant Je vous parlerai dans la prochaine vidéo. 221. 224. Créer une structure d'application vide pour l'application Translator: Hé ! Dans cette vidéo, nous allons créer une nouvelle application dans notre projet de janga existant Voyons d'abord à quoi ressemble le site Web. Donc, dans mon terminal, assurez-vous que votre environnement virtuel est activé. La mienne ne l'est pas parce que je n'ai cette parenthèse devant moi. Mais si je crée un nouveau terminal, en utilisant l'icône plus ou en accédant à EminalNW, mon environnement virtuel est maintenant activé Je peux donc continuer et dire Python, gère ce serveur PY Run Accédez à ce site Web, et voici à quoi ressemble le site Web maintenant, et nous allons avoir un autre élément de menu ici, qui contiendra l'application de traduction. Alors mettons-nous au travail. Créons l'application, arrêtons l'exécution du serveur avec Control C et exécutons Python, gérons le point PY, démarrons l'application, puis donnons un nom à l'application. Tel que translator, execute et un nouveau répertoire de traducteurs est créé. Vous pouvez le voir ici. Il se trouve donc dans le même répertoire que le bloc. Le bloc se trouve dans le répertoire racine. Le traducteur se trouve également dans le répertoire racine, comme vous pouvez le voir ici. Maintenant, une fois que vous avez créé une application avec l'application Start, vous souhaitez enregistrer cette application dans les paramètres de mon site. Accédez au point Paramètres PY JangOpject et vous souhaitez accéder aux applications installées Donc, avant d'ajouter le bloc ici lorsque nous avons créé l'application de blog, maintenant, après la virgule, nous voulons ajouter un autre élément à cette liste d'applications installées C'est donc une chaîne, et le nom de cette est ou Translator, oui. Cela doit donc refléter le nom de votre application et le nom du répertoire ici. Enregistrez les paramètres qui PY. Et voici comment créer une nouvelle application vide dans Jungo. Dans la vidéo suivante, nous allons commencer à créer notre modèle HTML. Alors, on se voit là-bas. 222. 222: Auparavant, nous avions créé une nouvelle application vide dans notre projet Jangle Maintenant, l'étape suivante consiste à. Cette étape est donc terminée. Créez une application Jangle vide. La prochaine étape consiste à créer du code HTML. Donc, comme nous l'avons dit, ce que nous voulons, c'est avoir un nouvel élément de menu ici, que nous créerons plus tard, mais nous voulons d'abord créer la page. Ensuite, nous ajoutons cette page à la barre de menu. La page va donc être simple. Il y aura une zone de texte ici, une autre sur la droite, et un bouton quelque part L'utilisateur est donc censé saisir du texte en anglais, puis lorsqu'il appuie sur le bouton, ce texte sera traduit, disons, en allemand. Nous allons donc prendre l' allemand comme exemple. Bien entendu, vous pouvez améliorer l'application ultérieurement en ajoutant une option permettant de choisir également d'autres langues. Mais pour le moment, nous allons rester simples et nous concentrer sur les formulaires. Ce sera un formulaire que nous allons créer. Commençons par créer un fichier HTML sous les modèles. Cliquez donc avec le bouton droit sur Modèles et accédez au fichier. Donc nouveau dossier. Peut-être que translator point HTML serait un bon nom de fichier. Nous voulons maintenant créer ces deux zones de texte et le bouton. Mais au lieu de taper le code HTML ici pendant que vous regardez la vidéo, je vais simplement copier le code que j'ai déjà créé, le coller ici et vous l'expliquer. Maintenant, pour que ça soit beau, je vais également coller le lien vers le bootstrap. Source pour que les zones de texte soient belles. Et vous pouvez trouver ce code joint à cette conférence. Je vais donc l'enregistrer, puis je vais cliquer ici avec le bouton droit de la souris et accéder à Reveal dans le Finder ou dans l'Explorateur Windows, puis je peux double-cliquer dessus. Et voilà à quoi ça ressemble. Nous avons donc ces deux zones de texte qui peuvent être étendues par l'utilisateur, l'utilisateur peut taper du texte ici, peut également taper du texte ici. Mais celui-ci servira essentiellement à montrer le résultat. Quoi qu'il en soit, l'utilisateur peut également y taper du texte et modifier le résultat s'il le souhaite, etc. Et le bouton d'envoi est ce qui traduit ce texte en celui-ci. Alors maintenant, bien sûr, cela ne fonctionne pas. Ne vous attendez pas à ce que ce bouton fasse quoi que ce soit car il n'est pas connecté à Jango Laissez-moi vous expliquer à quoi sert le code. Ce lien se trouve donc temporairement dans ce fichier car normalement nous n'en avons pas besoin. Je vais donc le supprimer. Nous n'en avons pas besoin car ce lien est déjà en HTML à points de base. Donc celui-ci est là. Et ce style bootstrap sera appliqué à tous les modèles qui étendent le code HTML par points de base Actuellement, cependant, le traducteur HML n'étend pas ce modèle Ajoutons donc la balise qui s'étend, de sorte qu' elle s'étende entre guillemets (point de base HTML). Ensuite, nous voulons également refaire le texte et dire « bloquer le contenu ». Voilà, fermez-le ici et bloquez le contenu. Juste comme ça. Ce fichier va donc obtenir le code de base point ML, et ce code sera combiné avec ce code pour afficher la page complète, y compris la barre de navigation. Donc, les éléments de menu sur la page Web. C'est donc ce que nous avons ici. Nous avons cette classe container, qui est le div principal qui contient tout, donc elle commence ici et se ferme ici. Et à l'intérieur, ce div contient un formulaire. Le formulaire commence donc ici et se termine ici. Le formulaire est donc le suivant, y compris les zones de texte et le bouton. Donc, celui-ci est une rangée. Tout commence ici. Ça s'arrête là. Donc, en gros, cette ligne est une division qui contient toutes ces deux cases et à nouveau le bouton. Et à l'intérieur de cette division avec ligne de classe, nous avons également cette division, qui est la première zone de texte. Cet appel SM six définit donc qu'il s'agit en fait d'une colonne de cette ligne de cette ligne. C'est donc la première colonne qui correspond à cette zone de texte, cette colonne ici Et puis la colonne suivante, qui est celle-ci ici, contient l'autre zone de texte et le bouton. Donc, la zone de texte signifie cette zone de texte ici, et la saisie avec la classe BTN signifie ce bouton ici Donc, zone de texte, première zone de texte, zone de texte, deuxième zone de texte, et entrez le bouton. C'est ça. Encore une fois, le formulaire possède maintenant une propriété d' action, qui possède cette balise de modèle que j'ai écrite ici. Donc, ce qui se passe ici, c'est que lorsque vous appuyez sur le bouton, donc sur ce bouton de soumission, il se passe quelque chose. Et ce qui se passe, c'est que cette URL sera visitée. ne s'agit pas d'une URL. Il s'agit du nom d' un modèle d'URL que nous créerons ultérieurement. Vous allez voir comment cela fonctionne. Et la méthode est une méthode post, ce qui signifie que l'utilisateur envoie des données et qu'il s'attend à récupérer certaines données du serveur. Le reste, nous l'avons déjà expliqué. Donc, les divisions et la zone de texte avec cette classe bootstrap class. Lignes signifie qu'il comporte trois lignes de texte par défaut, soit une, deux et trois lignes de texte. Donc, la hauteur de cette zone de texte. Ce nom sera utilisé ultérieurement pour faire référence à cette zone de texte depuis jango afin d'obtenir le texte de cette zone de texte et de le traiter dans la jungle. Nous avons donc l'autre zone de texte et le bouton de saisie avec cette classe de bootstrap, le type est submit, qui signifie que lorsque ce bouton est enfoncé, ce formulaire sera envoyé Nous allons donc envoyer les données, le texte original de l'utilisateur dans ce cas, et la valeur est le nom du bouton. Alors soumettez, soumettez. Et c'est tout. C'est bon. Nous avons donc du HTML, mais nous devons définir une URL par laquelle l'utilisateur accèdera à cette page Web HTML particulière. Configurons donc également les URL dans la vidéo suivante. 223. Obtenir et traiter les données des utilisateurs par le biais d'un formulaire: Bonjour, bon retour. Auparavant, nous avions créé cette page Web, qui semble bonne, mais elle ne fait pas grand-chose pour le moment. Donc, quel que soit le texte que vous y entrez, vous appuyez sur Soumettre et rien ne se passe. Le texte disparaît donc. Mettons donc cela en œuvre. Mais d'abord, vous devez comprendre les deux requêtes HTTP qui ont lieu ici. La première requête HTP est lorsque l'utilisateur saisit l'URL, disons example.com slash translate Slash ou cette adresse IP de l'hôte local telle qu'elle est dans ce cas, et il s'agit d'une requête get Et cette demande est traitée par ce modèle d'URL, et bien sûr, également par celui-ci. Ces deux éléments sont donc fusionnés en une seule URL, qui est example.com slash translate slash Mais une autre demande est également faite, et c'est lorsque l'utilisateur appuie sur le bouton Soumettre. Une autre URL est en cours d'accès, et c'est celle que vous voyez dans Translator Point HTML sur cette ligne ici. Vous voyez donc que lorsque vous appuyez sur le bouton, cette URL est visitée. Donc, la vue du traducteur, qui, encore une fois, est la même URL que celle de la révision de traduction, qui correspond à la barre oblique translatAS de exemple.com Ainsi, actuellement, le fait de visiter l'URL par le biais d'une requête GT comme celle-ci, lorsque vous actualisez simplement votre navigateur ou que vous entrez l'URL et que vous appuyez sur le bouton submin, et que vous appuyez sur le bouton submin l'utilisateur accède à la même URL Nous devons changer cela. Nous devons séparer les deux requêtes et effectuer des actions différentes selon que l'utilisateur effectue une requête get ou une requête post. Lorsque l'utilisateur fait une demande de publication, nous voulons obtenir le texte d'ici et afficher la version en majuscules dans cette autre zone. Alors faisons-le. Ce que nous devons faire c'est distinguer les points de vue. Nous devons distinguer si méthode request point est une requête post. Si tel est le cas, nous voulons obtenir le texte original ou le texte saisi par l' utilisateur ici. Et pour l'obtenir, nous utilisons le point post de la requête et ici, qu'est-ce qui se trouve ici ? Eh bien, nous devons entrer ici le nom de cette zone de texte, qui est dans mon cas, ma zone de texte. Donc ici, ma zone de texte entre à l'intérieur sous forme de chaîne. Donc, si tel est le cas, faites ceci sinon renvoyez la page telle qu'elle est. Autrement dit, si la requête est une requête get. Donc, s'il s'agit d'une demande de publication via le bouton, nous récupérons le texte original dans la zone de texte, et nous allons l'imprimer juste pour voir à quoi il ressemble au texte original. Sinon, dans le cas d'une demande get, nous renvoyons simplement la page telle qu'elle est. Donc, le traducteur point HTML. Enregistrer. Et voyons d'abord recharger Et nous avons cette erreur. Il n'a pas de méthode attributaire, car ce devrait être une méthode. Désolée. Enregistrez et revenez. Translate est notre traduction UL. Et écrivons quelque chose, soumettons-le. Et voyons ce que nous avons maintenant dans le terminal. Donc je vois que AAAA est imprimé, non ? Cette ligne a été exécutée. Mais après cela, nous avons eu une erreur. Il indique que le traducteur voit le point de vue du traducteur. Donc, cette vue, cette fonction d'affichage n'a pas renvoyé d' objet HTTP, ce qui est vrai. Nous avons donc reçu une demande de publication lorsque nous avons appuyé sur le bouton d'envoi, mais rien n'a été renvoyé ici. Nous devrions donc retourner quelque chose. Et il s'agit également d'un appel de fonction de rendu, qui reçoit une requête en tant qu' argument pour traduire le code HTML. Et maintenant, nous devons également transmettre autre chose ici , à savoir le résultat. Jusqu'à présent, nous avons vu que cela fonctionne. Nous recevons les textes de l'utilisateur avec succès, mais nous voulons faire quelque chose avec ce texte. Par exemple, disons en sortie, vous revenez au texte d'origine. Pour l'instant, comme nous l'avons dit, disons que nous le transformons en majuscules Ensuite, ce que nous transmettons ici dans la fonction de rendu est un dictionnaire, qui ressemble à ceci. Disons sortie, texte. Il s'agit donc d'une clé, d'une chaîne, et elle a comme valeur de sortie. Donc cette variable, le texte en majuscules. Maintenant, nous l'enregistrons, puis nous passons au Translator Dot HTML. Et dans cette deuxième zone de texte, entre la première attaque de zone de texte et l'attaque de zone de texte de fermeture, nous avons placé ici une variable de modèle, qui est le texte de sortie. Donc ce truc là-dedans. Donc, la valeur de ceci sera effectivement injectée dans cette zone de texte. Voyons si cela va fonctionner. Faites donc une demande Get. Nous obtenons la page Web avec succès, écrivons quelque chose, soumettons et nous obtenons la version majuscule de ce texte. Donc ça marche. Cette version majuscule du texte provient donc de ce texte de sortie Voilà comment utiliser les formulaires HTML avec Jango. Maintenant, avant de terminer cette vidéo, je voudrais vous montrer un problème avec notre application. Comme vous pouvez le voir, vous écrivez du texte ici, vous le soumettez, mais le texte original disparaît une fois l'utilisateur a soumis le texte. Alors, réglons ça. C'est très facile à faire. Tout d'abord, nous allons comprendre pourquoi cela se produit. Donc, si vous allez dans Views, encore une fois, nous avons I request equals to post, et dans ce cas, nous renvoyons le résultat à la page, mais nous n'envoyons rien d'autre. Il s'agira donc d'un nouveau rendu. Il affichera les zones de texte, les deux zones de texte du traducteur HML, mais l'une d'entre elles restera vide car il s'agira d'une actualisation de la page, pour ainsi dire Par conséquent, si vous souhaitez également avoir le texte original sur la page Web, vous devez ajouter une nouvelle paire ici dans le dictionnaire. Supposons qu'il s' agisse d'un texte original. Sous forme de chaîne. La clé et la valeur de ce texte seraient donc le texte original, la variable. Donc celui-ci est là. Copiez cette chaîne et accédez au code HTML du point de traduction. Et ici, dans la première zone de texte, nous plaçons une variable de modèle. À l'intérieur se trouve le texte original. Donc, tout comme cette zone de texte, nous avons celle-ci aussi. Et aussi simple que cela, enregistrez au format HTML traduit, enregistrez également les vues H point PY, et le serveur a redémarré. Le serveur a donc redémarré. Nous savons donc que les modifications sont appliquées maintenant, actualisez la page, écrivez quelque chose ici, soumettez, et le texte original et le texte de sortie restent sur la page Web. Cela complète la partie jango. Nous avons donc une application Web fonctionnelle. Et maintenant, au lieu de mettre le texte en majuscule avec une majuscule, nous le traduisons avec un autre package Dans ce cas, nous allons utiliser le package Google Trans. C'est ce que nous allons faire dans la vidéo suivante. Merci de m'avoir suivi jusqu'ici. On se voit là-bas. 224. Compléter l'application Translator: Bon retour, et c'est parti pour la dernière étape de notre application. Actuellement, cette application renvoie la version majuscule d'un texte Traduisons maintenant le texte saisi par l'utilisateur ici. Pour cela, nous allons ouvrir un nouveau terminal pour installer Google Trans. Mais actuellement, il y a un problème avec cette bibliothèque, qui peut être résolu en installant une version Alpha de la bibliothèque, laquelle vous pouvez installer la version Alpha en utilisant ce que je suis en train de taper. Vous pouvez donc essayer de ne pas avoir peur d'essayer l'une ou l'autre de ces solutions. Donc, Google Trans ou autre fonctionne. Donc, si vous en installez une et que vous l'essayez, elle ne fonctionne pas, puis installez la version Alpha, et cette version Alpha remplacera la version précédente que vous avez installée Donc aucun mal n'est fait. Tout ce qui fonctionne, utilisez-le. Pour moi, j'ai découvert que cette version fonctionne. Donc 4.0 0.0 dash R C une exécution. Et oui, il a été installé. Alors je peux essayer de m'en servir. Je l'ai donc installé pour mon environnement virtuel. Fais donc attention à ça. Tu vois NFR. Il a été activé lorsque je l'ai installé avec PIP. Alors maintenant je peux essayer ça. Je peux ouvrir un shell Python. Et la façon dont cela fonctionne est que vous importez depuis Google Import la classe de traducteur. Vous créez ensuite une instance de traduction. En utilisant cette classe de traducteur, puis à partir de cette instance, vous dites traduction qui traduit un texte égal à. Disons, comment avez-vous appris Python entre guillemets ? Il se présente donc sous la forme d'une chaîne et d'un test pour la langue de destination. Disons DE pour l'allemand, vous pouvez trouver ces abréviations sur Google, donc les abréviations linguistiques D signifie allemand. Et si vous accédez à du texte à partir de cela, vous obtenez la version en allemand de ce terme, de cette phrase. La bibliothèque travaille donc pour moi. Maintenant, je veux écrire ce code quelque part dans mon application jangle dans l'application de traduction Donc, dans de tels cas, vous voulez créer un fichier séparé dans l'application de traduction, appelez-le ou traduisez ce PY. Ici, vous souhaitez importer depuis Google Import, traducteur. Ce que nous voulons faire, c'est peut-être créer une fonction, traduire, qui obtient un texte en tant que paramètre. Cette fonction sera utilisée dans les vues PY. Nous allons appeler cette fonction ici, qui ressemblera à ceci. À partir de point Import, traduisez. Ensuite, la sortie sera cette fois translate dot translate. Le texte sera le texte original. Donc, traduire est cette fonction. Translate est donc un nom de module, donc translate point PY et translate est une fonction. Donc, le texte, disons le traducteur, égal au traducteur , l'instance, puis la traduction égale au point du traducteur traduit le texte égal au texte, destination est égale à la chaîne DE, puis renvoie le texte à point de traduction. Il s'agit d'un objet de traduction, et vous devez en extraire la propriété de texte pour obtenir la chaîne réelle. Enregistrez cela et enregistrez-le également. Et essayons l'appli. Et ça marche. Nous avons donc obtenu la traduction en allemand, comme vous pouvez le voir. C'est vrai. Enfin, je voulais également ajouter un élément de menu ici pour notre traducteur afin que nous puissions y accéder facilement. Pour ce faire, vous devez accéder au code HTML de base et simplement copier l'une d'entre elles, une taxe, la copier et la coller ici. Et ce sera donc un traducteur. Et voici le nom de l'URL que vous pouvez obtenir à partir d'ici, le PY de l'URL, copiez-le basez ce code HTML, collez-le dedans, enregistrez et voici l'élément. Voici donc le site Web. C'est ainsi que s'achève ce projet de jangle. J'espère que vous en avez tiré des leçons, et je pense que cela devrait être suffisant pour vous aider à démarrer avec Jango Nous avons donc abordé certaines des fonctionnalités très importantes de jango, à savoir la gestion bases de données, l'obtention des entrées des utilisateurs à partir des formulaires , le traitement de ces entrées , puis le renvoi des résultats à l'utilisateur Merci donc beaucoup de nous suivre et à bientôt. Au revoir. 225. 230. Démo de l'application 10 : application Web géocodeur +: Génial. Comme vous le savez peut-être, nous approchons de la fin du cours, et celui-ci est la dernière section du cours où vous créez votre dixième application. Celui-ci en particulier est spécial. La particularité ne réside pas dans l'application elle-même, car chaque application est en fait spéciale. La particularité de cette application est que vous allez créer celle-ci de manière indépendante. Cela prend donc la forme d'un projet. Vous devez le construire à partir de zéro. Et vous avez acquis toutes les compétences tout au long du cours, donc les compétences nécessaires pour créer cette application en particulier. Et dans cette vidéo, je voulais vous faire une démonstration de ce que fait cette application, puis vous pourrez commencer à la créer immédiatement après cette vidéo. Ensuite, dans la vidéo suivante, je vais vous montrer la solution. Je vais donc vous montrer le code de la vidéo et vous expliquer ce que fait le code ainsi que l'approche que j'ai utilisée pour créer l'application. Mais non, j'aurais pu enregistrer ces vidéos comme je l'ai fait pour les neuf autres applications du cours, mais je voulais vraiment que vous fassiez quelque chose par vous-même, et cela vous sera utile pour deux raisons. La première est que vous allez réellement faire quelque chose de manière indépendante, et vous en apprendrez beaucoup. Et le second, vous pouvez l'utiliser comme portfolio. Il s'agit d'une très belle application Web. Mais c'est difficile. Je veux dire, je serais surpris de voir quelqu'un faire cette œuvre à quelqu'un faire cette œuvre 100 %, sauf si vous êtes un génie. C'est vraiment ce que je pense. Mais vous devriez pouvoir faire en sorte que cela fonctionne, disons, à environ 50 %. Si vous faites en sorte que cela fonctionne à 50 %, vous avez vraiment appris du cours. Alors, qu'est-ce que je veux dire par 50 % ? Eh bien, vous pouvez vous arrêter quelque part et demander de l'aide. Peut-être que vous avez une erreur et que vous n'arrivez pas à comprendre et à la résoudre pour l'avenir, ou vous ne savez tout simplement pas quoi faire ensuite. Dans de tels scénarios, vous pouvez donc intervenir et publier une question dans la zone de questions-réponses. Donc, dans l' espace de discussion du cours. Je dirais de ne pas me demander tout de suite. Je veux dire, j'aime bien poser des questions, mais c'est bien pour toi de résoudre les problèmes toi-même. Tu sais, la programmation est difficile. Je veux dire, souvent, tout ce dont vous avez besoin c'est d'une pause, comme un café ou un thé pour rafraîchir votre cerveau et l'aider à mieux réfléchir. Et puis vous pourriez soudainement vous retrouver à résoudre ce problème. Mais si cela ne fonctionne pas, je suis là pour vous aider. Il suffit de poser une question, et je réponds dans un délai d'un jour. Et ma recommandation est maintenant d'essayer de repartir de zéro. Ne regardez pas tout de suite le code ou les leçons que nous avons suivies pendant le cours. Au lieu de cela, essayez de rassembler vos pensées sur une feuille de papier. Notez certaines étapes, telles que la première étape, la création de l' interface utilisateur, la deuxième étape bit de script contenant données et générant une sortie, puis la création du flacon, structure, etc. Ensuite, vous allez les implémenter étape par étape. Si vous stockez alors, vous pouvez parfaitement examiner les ressources. Je le fais tout le temps. Alors maintenant, qu'est-ce que cette application ? Eh bien, il s'agit d'une application FLASK qui attend de l'utilisateur un fichier CSV, qui doit avoir au moins une colonne nommée adresse Par exemple, voici un fichier CSV. Et vous pouvez voir que nous avons une colonne d'adresse là-bas, donc l'utilisateur devrait avoir une colonne appelée adresse, nommée adresse dedans. Qu'il s'agisse d'un A minuscule ou majuscule, peu importe. Vous devez donc créer votre application de manière à reconnaître à fois l'adresse avec un A minuscule et l'adresse avec une majuscule A. Maintenant, l'utilisateur peut télécharger ce fichier en utilisant le bouton Choisir un fichier Et vous pouvez voir que des supermarchés y ont été téléchargés. Une fois que l'utilisateur aura téléchargé ce fichier, il appuiera sur Soumettre Et ce tableau apparaît. Ainsi, une fois que l'utilisateur télécharge un tel fichier, le backend de votre application, script Python lira ce fichier et ajoutera une colonne de latitude et de longitude, qui sont calculées à partir de la colonne d'adresse Nous parlons donc de géocodage et vous savez comment le faire C'est ce que vous apprendrez dans le cours de la section Pandas. Et comme vous le voyez, le tableau des résultats s'affiche sur la page Web une fois que l'utilisateur appuie sur le bouton d'envoi, et vous pouvez voir les deux colonnes qu'il contient. Enfin, vous souhaitez également autoriser l'utilisateur à télécharger la version CSV. Donc un fichier contenant ces données. Et par conséquent, vous devez afficher un bouton de téléchargement ici comme je l'ai fait. Ainsi, une fois que l'utilisateur appuie sur Télécharger, un fichier est téléchargé. Il s'agit d'un dossier. Nous avons également des cellules vides parce que Python n' était pas en mesure Le service de géocodage n'a donc pas pu géocoder cette adresse en latitude et en longitude Donc oui, vous devez compter pour cela et simplement transmettre des valeurs non valides à ces cellules. Maintenant, vous pourriez bientôt rencontrer des problèmes tels que, vous savez, si l'utilisateur télécharge d'autres fichiers, changeons cela pour ajouter au lieu de l'adresse, et je vais l'enregistrer Je n'ai donc plus de colonne d'adresse dans ce fichier, permettez-moi de le télécharger à nouveau. Comme ça. Soumettre. Et dans ce cas, vous voulez y afficher un message disant que vous devez vous assurer d'avoir une colonne d'adresse dans votre fichier CSV ou quelque chose comme ça. Vous ne voulez donc pas que le programme plante pour y afficher une erreur de flasque Donc oui, vous devez essayer d'accepter certaines erreurs. Et c'est tout. À ce stade, vous avez créé un service de géocodage. J'espère avoir été clair dans mes explications. Mais si vous avez des questions, n' hésitez pas à les poser. Je vous souhaite bonne chance dans ce projet. Ce sera difficile mais amusant, et tout est une question de persévérance. Donc, si vous vous engagez à le faire, vous le ferez. La vidéo suivante est dangereuse car je vais vous montrer la solution. Veuillez donc le consulter en dernier recours ou le regarder pour comparer votre application terminée avec la mienne. De plus, lorsque vous comparez votre solution à la mienne, ne vous attendez pas à ce qu'elles soient identiques. Ils ne le seront jamais. Je veux dire, il existe différentes manières de faire une demande, et la mienne peut être meilleure que la vôtre ou l' inverse. Alors, s'il vous plaît, gardez cela à l'esprit. Et oui, c'est ce que je voulais dire. J'espère que vous avez apprécié mon cours. Je vous remercie également si vous avez laissé la critique. Je regarde toutes les critiques et je les apprécie beaucoup. Alors oui, merci beaucoup, je te parlerai plus tard. 226. 231. Partie 1 de la création de l'application Web de géocodeur: Bonjour, bienvenue dans cette nouvelle conférence, et j'espère que vous avez eu du mal à créer l'application de géocodage Je sais que cela aurait dû être difficile, mais si vous êtes passé par un certain point, c'est génial aussi. Dans cette conférence, vous obtenez deux choses. Tout d'abord, vous trouverez la pièce jointe dans les ressources de cette conférence. Vous y trouverez tous les fichiers contenant le code de cette application Web. Plus précisément, vous trouverez quatre répertoires, modèles statiques, les téléchargements et les visuels, ainsi qu'un fichier app point py Maintenant, il se trouve que j' ai quatre fichiers d'application. Mais en gros, la dernière est la version finale. C'est donc la version 1 très basique, où j'ajoute simplement quelques fonctions dans un script Python, puis j'en ai ajouté d'autres à ces fonctions, puis d'autres, puis j'ai ajouté. Et puis j'ai finalement ajouté du code supplémentaire pour compléter l'application. Voici donc ce que vous obtenez. Et vous le trouverez dans un fichier zip. Veuillez donc le télécharger. Oui, c'est la première chose que vous obtiendrez dans cette conférence, le fichier zip du code de la solution. Et deuxièmement, je vais maintenant vous expliquer comment j'aborde ce problème, et je vais vous montrer le code et ce que je construis au premier et au deuxième tiers et ainsi de suite. Voici donc les quatre versions. J'ai la première version, où j'ai ajouté du code, deux, trois et quatre. Ignorons donc cela pendant un moment, car la première chose que je veux expliquer est l'interface utilisateur. Nous allons donc commencer par le front-end. Mais la première chose que j'ai faite a été de créer une structure de répertoire. J'ai donc créé un dossier statique vide, modèles et des téléchargements et un dossier virtuel statique et les modèles sont donc standard pour l'application FLASK Et le dossier des téléchargements ne sera que le dossier dans lequel je générerai ces fichiers intermédiaires que l'application met à la disposition des utilisateurs en téléchargement Vous le verrez dans un instant. J'ai également créé ce laboratoire de dossiers virtuels, qui est en fait le répertoire de l'environnement visuel. Je l'ai donc fait avec Python avec le drapeau N Virtual Virtual pour le nom du répertoire. Donc, si vous l'exécutez, vous obtiendrez ce répertoire avec une nouvelle installation de Python et PIP et d'autres bibliothèques intégrées Ensuite, j'ai installé Flask et j'ai installé Pandas parce que vous aurez besoin de pandas pour lire les données soumises par l'utilisateur pour y calculer certaines colonnes, et vous avez également besoin de Geopy pour géocoder ces valeurs à partir du Et ce sont les trois bibliothèques tierces que vous devez installer. Une fois que j'ai créé ces répertoires vides , la deuxième étape a consisté à créer l'interface utilisateur. J'ai donc créé un modèle HEML à points d'index dans le dossier des modèles Au début, c' était très simple. Il ne contenait donc pas autant de bonnes choses. Cela contenait simplement un titre et quelques titres, ainsi qu'un formulaire de base Et au départ, je n'ai rien mis dans l'action. Ainsi, lorsque l'utilisateur soumet, j'avais ce bouton d'envoi, et j'avais également ce type de fichier d'entrée dedans. Donc, si vous vous souvenez de ce fichier, il s'agit d'un formulaire. Nous avons cette entrée de fichier et le bouton d'envoi. Ces deux options ont donc également restreint la soumission de fichiers au format CSV uniquement. Et c'est un formulaire. Je ne l'avais pas au début, donc je ne vais pas l' expliquer pour le moment. J'y reviendrai plus tard. Oui, c'était une interface. Plus tard, je suis allé créer ce fichier CSS principal. Vous trouverez donc ici le style CSS de la page Web. Je ne vais pas entrer dans le vif du sujet maintenant. Cela va de soi. Nous avons donc utilisé le CSS plus tôt dans le cours. Et ce fichier est également inclus dans les ressources parmi les autres fichiers, mais je ne m'attends jamais à ce que vous ayez le même style. Vous pouvez donc avoir des choses différentes, des couleurs ou des tailles, etc. Ensuite, vous pouvez faire référence au CSS qui tombe dans les balises head. Oui, en gros, c'est ce que j'ai fait dans cette deuxième étape. Donc, première étape : création d'un répertoire, et deuxième étape, création de l'interface de base et ajout des outils CSS à cela Si vous avez simplement créé le code HTML, puis plus tard, lorsque vous avez terminé votre application, vous avez créé un fichier CSS. C'est parfaitement normal aussi. Ou même si vous avez commencé directement avec le fichier Python, c'est très bien. Certains développeurs commencent par le front-end et d'autres par le back-end. C'est parfaitement normal. Donc, une fois que j'ai eu l'interface, j'ai créé un fichier d'application. Donc, une application dot py fol, ces quatre versions ne sont que des démonstrations pour cette vidéo Je l'ai donc créé pour différents fichiers afin de vous montrer les étapes que j'ai suivies pour créer mon code final. Donc, la première version, c'est ce que j'ai fait en gros. J'ai importé ces bibliothèques. Donc, à partir de FAS, j'ai importé la classe FLASK habituelle et la méthode de rendu des modèles normalement pour renvoyer des modèles HML Et je savais que ma candidature impliquait une soumission par un utilisateur, donc une demande de publication. Par conséquent, j'y ai également inclus la méthode de demande, puis la méthode du fichier envoyé, qui est utilisée pour envoyer un fichier au navigateur pour le téléchargement. Et oui, il s'agit du FAS, puis nous voulons géocoder les données, Je le télécharge donc depuis Geo Pi sur des codeurs, je le saisis en nominant et aussi Une fois que j'ai saisi les dépendances, j'ai créé une instance FAS juste ici, puis trois fonctions qui, pour le moment, ne font rien La première serait donc la page d'accueil, comme vous le voyez ici avec cette barre oblique inversée Et je nomme cet index, la fonction, et je renvoie simplement le modèle de rendu. Et bien sûr, voici le HTML à points d'index. Cela affichera donc la page d'accueil, qui est en HTML à points d'index Ensuite, la prochaine chose à laquelle vous pourriez vous attendre, c'est que l'utilisateur se trouve sur votre page Web. Et une fois que l'utilisateur appuie sur le bouton Choose Fall, qu'il sélectionne un fichier, puis qu'il appuie sur Soumettre. Ce que vous voulez faire lorsqu' ils appuient sur le bouton d'envoi c'est que vous voulez maintenant charger ce fichier en Python, et vous voulez le lire sous forme de trame de données Pandas, et vous voulez calculer une colonne de coordonnées dans laquelle vous calculez la latitude et la longitude à colonne de coordonnées dans laquelle vous partir de la colonne d'adresse à l'aide de Geo Ensuite, hors de la colonne de coordonnées, vous souhaitez calculer la latitude et la longitude. Nous l'avons donc déjà fait dans le cours dans la section du panneau, puis vous souhaitez éventuellement renvoyer un bloc de données et envoyer ce bloc de données via une méthode de modèle de rendu. Vous voulez envoyer ce bloc de données ici bas. Donc, ce que nous parlons ici, c'est de créer une fonction qui fait tout cela. Il lit donc le CZ fall et le traite avec des panneaux, puis il affiche le tableau. La table ASO du bloc de données. Et j'ai créé la fonction Sutter et j'ai appelé la table des succès. Si vous vous souvenez, le paramètre methods doit être égal à post car nous attendons une demande de publication. Et puis nous avons encore une autre fonction. C'est ce que j'appelle l'automne du téléchargement. Voici donc l'URL, le tableau de bord des succès, et voici le nom d'une fonction. Que nous avons encore une autre URL et une autre fonction attachée à cette URL. C'est ce que j'appelle le téléchargement. Comme je l'ai dit, chaque fois que l'utilisateur fait quelque chose, vous souhaitez créer un décorateur et une fonction associée à celui-ci Donc, tout d'abord, l'utilisateur effectuera une soumission, et vous souhaitez la capturer dans cette fonction. Tableau de réussite, puis la prochaine chose que l'utilisateur fera est d'appuyer sur le bouton de téléchargement qui s' affichera ici. Et cela doit déclencher une autre fonction en Python, et cela doit déclencher la méthode d' envoi de fichier en Python, afin que nous envoyions le fichier à l'utilisateur. Cela signifie que nous avons besoin d'une autre fonction appelée téléchargement. C'est du moins comme ça que je l'ai appelé. Quoi qu'il en soit, passons à la version 2 nulle. Voyez donc la différence ici et ici. La fonction d'index reste la même. est donc tout ce que nous faisons pour l'index. C'est très simple. Nous renvoyons simplement l' index initial qui est le modèle ML. Et puis ici, j'ai ajouté pas mal de code. Et en gros, ce que nous avons, c'est que nous vérifions la demande. Si nous avons une demande de publication, je reçois le fichier en utilisant des points de requête, et le fichier est le nom du fichier. Toutes les informations sont là. Donc oui, ce qui se passe, c'est que lorsque l'utilisateur appuie sur le bouton d'envoi qui se trouve ici, une URL est déclenchée, puis cette URL est l'URL la fonction de tableau de soulignement des succès Donc, cette fonction ici. Cela signifie que cette fonction sera exécutée, puis nous y créerons une trame de données, qui lira l'automne de cet automne que nous recevrons de l' utilisateur, à partir du formulaire utilisateur. Ensuite, nous faisons cette nomination et nous y créons une colonne de dataframe Vous le savez grâce à la section pandas avec la méthode d'application , puis à l'application du géocode à la colonne d'adresse Ensuite, à partir de la colonne de coordonnées, je reçois une colonne de latitude, et j'utilise une fonction Lambda pour extraire la latitude de chacune des lignes de coordonnées, et également compter les n valeurs qui s'y trouvent Et puis je n'ai pas besoin de cette colonne de coordonnées. Je le supprime donc en utilisant la méthode drop, puis je le convertit en CSV. Ici, je génère un fichier CSV. Il s'agit du résultat que nous voulons donner à l'utilisateur. Et je vais le trier dans le dossier des téléchargements. Il vous suffit donc de passer le chemin là-bas, le chemin relatif télécharge le géocode C'est ainsi que je l' appelle. Plus tard, je ferai quelque chose de plus avancé. Nommons-le donc géocodé pour le moment, ce CSV. Et puis ce que cela fera, c'est qu'il renverra un modèle, donc il renverra l' index de ce modèle. Mais alors, si vous regardez ici, permettez-moi d'ouvrir la question à un autre point de vue. Oui, nous avons ici une division. Associez le gingembre à la syntaxe que j'utilise ici. J'inclus donc la variable BTN, et j'ignore quand elle est manquante Maintenant, c'est différent d'ici. Ici, je renvoie le HTML sous forme de chaîne. Et ici, je renvoie un modèle HML. La syntaxe est donc différente. Et c'est également différent de lorsque nous utilisons extend. Ainsi, lorsque nous étendons une mise en page, vous étendez une mise en page lorsque vous souhaitez que, dès que l'utilisateur visite, disons l'index de ce modèle HD Melt, l'index de la plaque HM Meltem, affiche d'autres modèles HML Il s'étendra donc dès que l'utilisateur visitera cette page d'index et non les pages HTML de la page d'accueil C'est différent car nous ne voulons pas que cela s' affiche immédiatement. C'est pourquoi vous dites d'ignorer les éléments manquants, alors ignorez-les lorsqu'ils sont absents. Et ne l'incluez que lorsque l'utilisateur visite cette URL du tableau de bord des succès. Et lorsque l'utilisateur le visite, c'est-à-dire lorsqu'il appuie sur Soumettre, après avoir soumis un fichier, vous souhaitez afficher ce modèle HTML de téléchargement. Cela contient donc un bouton ici. Vous voulez y générer un bouton, qui devrait être, vous savez, rue fall, soumettre. Donc oui, vous y trouvez ce fichier de téléchargement et vous obtenez également la table HML Le bloc de données possède donc une table HTML. Donc, la première rangée, la deuxième rangée, la première rangée, la deuxième rangée. Quoi qu'il en soit, ce bas est maintenant attaché à une référence, ce qui suggère que lorsque l'utilisateur appuie sur Télécharger, l'URL de la fonction de téléchargement Python sera visitée Nous allons donc ici, et cette URL de la fonction de téléchargement sera visitée Je sais ce que nous voulons faire lorsque l'utilisateur visite cette URL c'est renvoyer la méthode d' envoi du fichier. En fait, il devrait s'agir de téléchargements au format CSV à points géocodés. Nous voulons donc envoyer à l' utilisateur le fichier que nous avons généré ici plus tôt dans cette fonction. Nous voulons l'envoyer à l'utilisateur sous le nom youfle point CSV Et aussi en pièce jointe, vous connaissez ce code lors des conférences précédentes. Et il s'agit du téléchargement de ce modèle SML. Et, en gros, nous avons terminé. Je veux dire, vous pouvez vous en tirer avec cette version du programme, et ce serait presque excellent si vous alliez aussi loin. Cependant, cela peut nous poser quelques petits problèmes. Le problème serait que si vous choisissiez un fichier, un fichier CZ qui ne contient pas de colonne d'adresse, donc une colonne nommée adresse, ce vous pourriez charger ce fichier sous forme de trame de données, puis lorsque vous essayez créer une nouvelle colonne dans la trame de données appelée coordonnées, puis que vous essayez d'accéder à une colonne existante nommée adresse dans un Python lancera une flèche et arrêtera l'application. Cela signifie que lorsque l'utilisateur accède à l'URL de la table de réussite, une page d'erreur s'affiche. Et ce n'est pas très convivial. Vous pouvez plutôt ajouter ici une fonctionnalité qui vérifie si le bloc de données, s'agit d'un fichier saisi par l'utilisateur, vous souhaitez donc lire le fichier en tant que bloc de données. Ensuite, dans le bloc de données, vérifiez si vous avez une colonne d'adresse. Si vous en avez un, vous pouvez faire les calculs. Mais si vous ne le faites pas, vous renvoyez quelque chose à l'utilisateur. Ainsi, au lieu de renvoyer le DF au format HTML, vous renvoyez un message disant que désolé, vous n'avez pas une telle colonne ou une telle colonne par défaut. Donc oui, je vais vous montrer le code pour cela lors de la prochaine conférence. Alors voyez 227. 232. Partie 2 de la création de l'application Web de géocodeur +: Génial. Nous en sommes à la version deux, et je vais essayer d'être rapide maintenant et de vous montrer la version trois. Il s' agit de la troisième version. J'ai implémenté cette fonctionnalité pour vérifier s'il existe une colonne d'adresse dans le bloc de données en ajoutant une instruction try and expect. Donc, en gros, si vous pouvez voir la différence c'est que je reçois le fichier, puis j'essaie de le lire. Ou cela peut également être en dehors d'un mot clé try. Ce ne serait pas un problème et C en dehors d'un mot clé try également. Cependant, c'est toujours mieux, car vous pouvez également vérifier si les utilisateurs envoient des fichiers qui ne sont pas au format CSV. Nous vérifions donc ici que l'utilisateur soumet un fichier CSV. Cependant, cela signifie uniquement que le fichier possède une extension CSV à points dans la voie du fichier. Cependant, cela ne signifie pas que le fichier est réellement au format CSV. Vous avez peut-être, disons, un fichier MP quatre et vous avez changé l' extension en CSV, mais il s'agit toujours d'un fichier MP quatre. Donc, ce que vous voulez faire , c'est inclure DF dans le bloc try and expect. Si Python ne parvient pas à créer un bloc de données à partir d'un fichier Epi, il générera une erreur C'est donc ce qui se passe réellement si vous transmettez EpiOurFle, vous ne pourrez pas le lire comme une trame Donc oui, vous voulez l' inclure ici, puis vous renvoyez le même, donc je n'ai rien changé ici. Vous renvoyez le même index de modèle au format HML, et vous y envoyez le code HTML ainsi que le bouton Sauf en cas d'erreur, vous ne renvoyez pas l'index au format HML, mais au lieu de la table HML, vous souhaitez renvoyer ce Et bien sûr, vous ne voulez pas y renvoyer de bouton de téléchargement. R, ça devrait suffire. Et il s'agit de la version 3. Telles étaient donc les différences. Maintenant, la version quatre, c'est ce que j'ai là. Eh bien, si vous voyez ici, nous avons obtenu cet automne CSV géocodé Maintenant, c'est une chaîne. Cela signifie qu'un fichier CZ de géocode sera créé pour tous les utilisateurs qui soumettront des données Cela peut poser des problèmes, car si deux utilisateurs soumettent des données en même temps, se peut que des conflits de noms se produisent. Donc, ce que vous pouvez faire ici, c'est utiliser un module datat pour générer des noms uniques pour chaque fichier généré Et c'est ce que j'ai fait. Voici donc la version 4. Je place le module des jours ici, puis je génère le fichier CSV géocodé ici, donc le nom du fichier DF vers CSV Et j'ai rendu ce nom de fichier global ici parce que je souhaite également y accéder à partir de la fonction de téléchargement ici. Encore une fois, je veux générer cela ici, je génère un nom de fichier. Ensuite, dans le nom du fichier, nous avons la chaîne de téléchargement, qui pointera vers le répertoire où se trouvera ce fichier. Et puis il y a la barre oblique. Et en fait, cet avantage ne devrait pas être là. Donc, juste après la barre oblique, nous avons le nom du fichier. Et ce serait, vous savez, nous avons l'année, puis le mois, puis le jour, puis l' heure , les minutes, les secondes et les millisecondes Et puis l' extension CSV à points dans le nom du fichier. Donc oui, c'est assez unique pour chaque utilisateur car nous avons des millisecondes dedans. Mais laissez-moi vous montrer à quoi cela ressemble, en fait. Encore une fois, l'utilisateur choisit un fichier, le soumet, et lorsqu'il appuie sur Soumettre, un Python génère le bloc de données un Python génère le bloc de données et génère également le fichier CC. Donc, dans cette ligne, ici. Et vous pouvez maintenant trouver ce fichier CC dans le dossier des téléchargements. Cela a donc été généré plus tôt, et voici le fichier. C'est le fichier que nous venons de générer. Ensuite, lorsque l'utilisateur appuie sur Télécharger, ce fichier sera téléchargé, mais avec votre nom de fichier, qui est celui-ci ici. Quoi qu'il en soit, la fonction obtiendra le chemin du fichier à télécharger dans le navigateur et obtiendra le nom d'automne à partir de cette variable globale C'est pourquoi je la transmets en tant que variable globale afin que je puisse accéder à sa valeur, qui est générée ici, je peux accéder à cette valeur depuis une autre fonction. Et oui, c'est ma version de l'application. Je sais que ce n'est pas votre version. J'espère que tu étais aussi proche que possible, et ce serait bien que tu le fasses mieux que moi. Dans les deux cas, je suis sûr qu'essayer de résoudre cette application aurait dû améliorer vos compétences en résolution de problèmes en Python, car cela vous permettra au moins de vous positionner Nous définirons donc votre niveau, votre niveau Python afin que vous puissiez combler les lacunes qui, selon vous, ne sont pas vos points forts. C'était à propos de cette conférence, et je te verrai.