Vollständiger Python-Kurs mit 10 realen Projekten (NEU) | Ardit Sulce | Skillshare
Suchen

Playback-Geschwindigkeit


1.0x


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

Vollständiger Python-Kurs mit 10 realen Projekten (NEU)

teacher avatar Ardit Sulce, Python Instructor, Founder of PythonHow

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführungsvideo

      1:53

    • 2.

      Einführung der ersten Schritte

      1:39

    • 3.

      Python und die IDE installieren

      0:57

    • 4.

      Installationsanweisungen für Windows +

      5:56

    • 5.

      Installationsanweisungen für Mac +

      5:12

    • 6.

      Installationsanweisungen für Linux +

      2:11

    • 7.

      Erstellen und Ausführen eines Python-Programms

      9:29

    • 8.

      Was ist Python überraschend?

      3:35

    • 9.

      Beginne mit den Grundlagen von Python

      1:39

    • 10.

      Variablen: Warum und wie man Variablen verwendet +

      6:05

    • 11.

      Verwenden der interaktiven Python-Shell

      7:03

    • 12.

      Verwenden des Terminals

      4:17

    • 13.

      Einfache Arten: ganze Zahlen, Strings und Schweber

      3:21

    • 14.

      Datentypen auflisten

      1:31

    • 15.

      Bereiche verwenden

      5:18

    • 16.

      Was sind die Attribute von Datentypen

      2:54

    • 17.

      So findest du heraus, welchen Code du brauchst

      3:33

    • 18.

      Datentypen aus dem Wörterbuch

      3:43

    • 19.

      Was macht einen Programmierer zu einem Programmierer?

      2:10

    • 20.

      Tuple Datentypen

      2:26

    • 21.

      Verwendung von Datentypen in der realen Welt +

      1:07

    • 22.

      Operationen mit Datentypen

      0:55

    • 23.

      Fehlermeldungen in Python 3.10

      4:00

    • 24.

      Mehr Operationen mit Listen erstellen

      5:56

    • 25.

      So greift man auf Listenelemente zu

      2:04

    • 26.

      So greift man auf Listenschnitte zu

      2:49

    • 27.

      So verwendest du negative Indizes

      2:02

    • 28.

      So greift man auf Zeichen und Slices in Strings zu

      1:30

    • 29.

      So greift man auf Wörterbücher zu +

      1:52

    • 30.

      Weitere Grundlagen von Python: Funktionen und Konditionalen

      1:39

    • 31.

      So erstellst du deine eigenen Funktionen +

      5:25

    • 32.

      Wann solltest du Drucken und Zurückgeben verwenden +

      3:59

    • 33.

      Einführung in Konditionale

      0:58

    • 34.

      Verwenden der bedingten If-Funktion

      3:48

    • 35.

      Eine bedingte Erklärung Zeilenweise

      3:09

    • 36.

      Weitere Informationen zu Konditionalen +

      2:21

    • 37.

      Verwenden der bedingten Elif-Funktion

      1:15

    • 38.

      Weißraum +

      3:30

    • 39.

      Weitere Python-Grundlagen: Benutzereingaben verarbeiten

      0:38

    • 40.

      Mehr über Benutzereingaben erfahren

      7:55

    • 41.

      Strangformatierung +

      4:51

    • 42.

      String-Formatierung mit mehreren Variablen +

      4:17

    • 43.

      Einführung in For Loops +

      0:59

    • 44.

      Wie und warum man Loops verwendet

      5:46

    • 45.

      So machst du eine Schleife durch ein Wörterbuch +

      1:12

    • 46.

      Wie und warum man While-Schleifen verwendet

      2:59

    • 47.

      while-Schleifen mit Benutzereingabe

      3:12

    • 48.

      while-Schleifen, Brechen und Fortsetzen +

      3:22

    • 49.

      Erstellen eines Programms in Python

      0:59

    • 50.

      Problemstellung in Python

      3:48

    • 51.

      Herangehensweise an das Problem

      1:46

    • 52.

      Aufbau der Macher-Funktion

      5:14

    • 53.

      Erstellen des Loops

      4:39

    • 54.

      Benutzerfreundlichkeit der Ausgabe

      3:28

    • 55.

      Einführung in das Listenverständnis

      0:50

    • 56.

      Ein einfaches Listenverständnis

      3:27

    • 57.

      Listenverständnis mit einem bedingten If

      1:22

    • 58.

      Listenverständnis mit einem If-Else-Konditionalverhalten +

      1:37

    • 59.

      Mehr über Funktionen

      0:35

    • 60.

      Funktionen mit mehreren Argumenten

      1:45

    • 61.

      Standard- und Nicht-Standardparameter, Keyword- und Nicht-Keyword-Argumente

      3:00

    • 62.

      Funktionen mit einer beliebigen Anzahl von Nicht-Keyword-Argumenten

      3:32

    • 63.

      Funktionen mit einer beliebigen Anzahl von Keyword-Argumenten +

      1:34

    • 64.

      Einführung in die Dateiverarbeitung

      1:30

    • 65.

      Dateien mit Python verarbeiten

      1:12

    • 66.

      Text aus einer Datei lesen +

      3:07

    • 67.

      Dateisegursor

      1:49

    • 68.

      Schließen einer Datei

      1:34

    • 69.

      Dateien öffnen mit

      1:45

    • 70.

      Verwenden verschiedener Dateipfade

      1:25

    • 71.

      Text in einer Datei schreiben

      3:59

    • 72.

      Text an eine bestehende Datei anhängen +

      3:30

    • 73.

      Eingebaute Module in Python

      5:53

    • 74.

      Standard-Python-Module

      8:34

    • 75.

      Module von Drittanbietern

      6:28

    • 76.

      Ein Beispiel fürModule von Drittanbietern

      2:45

    • 77.

      Einführung in die Verwendung von Python mit CSV-, JSON- und Excel-Dateien

      0:35

    • 78.

      Die Pandas-Bibliothek für + Datenanalyse

      3:07

    • 79.

      Erste Schritte mit Pandas

      8:37

    • 80.

      Das Jupyter-Notizbuch einrichten und

      9:05

    • 81.

      Laden von CSSV-Dateien in Python

      4:20

    • 82.

      Excel-Dateien in Python laden

      0:58

    • 83.

      Textdateien in Python laden

      2:30

    • 84.

      Einführung in Numpy ++

      8:07

    • 85.

      So verwandelst du Bilder in nummerierte Arrays

      5:40

    • 86.

      Indizieren, Schneiden und Iterieren nummerierter Arrays

      4:07

    • 87.

      Stapeln und Aufteilen nummerhafter Arrays

      5:44

    • 88.

      App 1: Webmap mit Python und HTML +

      1:05

    • 89.

      HTML und Python: Erstellen einer HTML-Karte mit Python und

      11:35

    • 90.

      HTML und Python Hinzufügen eines Markers zur Karte

      8:23

    • 91.

      HTML und Python: Verwenden von For-Loops beim Hinzufügen mehrerer Marker

      4:43

    • 92.

      HTML und Python: Dateiverarbeitung durch Hinzufügen von Markern aus Dateien

      13:06

    • 93.

      HTML und Python: String-Manipulation

      5:07

    • 94.

      Verwenden von Funktionen – Erstellen einer Fargenerierungsfunktion für Marker ++

      7:55

    • 95.

      HTML und Python: So fügst du Marker hinzu und stilisierst

      1:53

    • 96.

      HTML und Python: Arbeiten mit JSON Daten

      5:34

    • 97.

      Python und JSON: So fügst du eine Population Map Layer hinzu

      3:20

    • 98.

      Python und JSON: Stilisieren der Bevölkerungsebene

      9:34

    • 99.

      Python und JSON: Hinzufügen eines Ebenenbedienfelds +

      6:23

    • 100.

      App 2: Englischer Thesaurus +

      4:10

    • 101.

      Verstehen deines Datensatzes in Python +

      4:54

    • 102.

      JSON-Daten in Python laden

      3:52

    • 103.

      Die App die Definition eines Wortes zurückgeben lässt

      3:25

    • 104.

      Wie die App mit nicht vorhandenen Wörtern umgeht

      2:51

    • 105.

      So geht die App mit groß- und großschreibempfindlichen Wörtern um

      3:09

    • 106.

      Die Ähnlichkeit zwischen Wörtern berechnen

      4:39

    • 107.

      Die besten Übereinstimmungen aus einer Liste von Wörtern finden

      6:07

    • 108.

      Das ähnlichste Wort aus einer Gruppe von Wörtern finden

      9:42

    • 109.

      Eine Bestätigung vom Nutzer:in erhalten

      10:17

    • 110.

      Optimieren der Endausgabe +

      7:51

    • 111.

      So behebst du Syntaxfehler in Python

      8:22

    • 112.

      So behebst du Runtime-Fehler in Python

      10:58

    • 113.

      So behebst du schwierige Fehler

      5:38

    • 114.

      So stellt man eine gute Programmierfrage

      5:59

    • 115.

      So lässt du den Code selbst mit Fehlern umgehen

      7:59

    • 116.

      Einführung in Computer Vision mit Python +

      2:29

    • 117.

      Laden, Anzeigen, Größenanpassung und Erstellen von Bildern ++s mit OpenCV

      14:00

    • 118.

      Erklärung der vorherigen Übung

      4:29

    • 119.

      Gesichter in Bildern erkennen mit OpenCv und Python

      19:38

    • 120.

      Videoaufnahmen mit OpenCv und Python

      19:45

    • 121.

      App 3: Webcam-Bewegungsmelder-App

      1:58

    • 122.

      Erkennen beweglicher Objekte aus dem Webcamp mit Python

      29:57

    • 123.

      Speichern von Objekterkennungs-Zeitstempeln in einer CSV-Datei ++

      20:38

    • 124.

      Einführung in die Bokeh-Bibliothek +

      2:02

    • 125.

      Dein erstes Bokeh-Bild erstellen

      13:52

    • 126.

      Bokeh mit Pandas verwenden +

      4:51

    • 127.

      Erstellen eines Zeitreihenplots +

      6:36

    • 128.

      Weitere Visualisierungsbeispiele mit Bokeh

      4:21

    • 129.

      Zeitintervalle aus den von der Webcam-App generierten Daten zeichnen

      14:05

    • 130.

      Implementieren einer Hover-Funktion

      9:57

    • 131.

      App 4 Teil 1 – Datenanalyse und Visualisierungen mit Pandas und Matplotlib +++

      2:52

    • 132.

      Erkunden des Datensatzes mit Python und Pandas +

      9:17

    • 133.

      Daten mit Python auswählen

      13:32

    • 134.

      Den Datensatz filtern

      7:58

    • 135.

      Zeitbasierte Filterung

      9:55

    • 136.

      Daten in Informationen verwandeln

      11:00

    • 137.

      Durchschnittsbewertungen pro Tag zusammenfassen und darstellen

      14:43

    • 138.

      Downsampling und Darstellung der durchschnittlichen Bewertungen pro Woche

      9:42

    • 139.

      Downsampling und monatliche Darstellung der durchschnittlichen Bewertungen

      2:16

    • 140.

      Durchschnittsbewertungen pro Kurs pro Monat

      10:44

    • 141.

      Welcher Tag der Woche sind die Menschen am glücklichsten

      9:45

    • 142.

      Andere Arten von Grundlagen +

      6:06

    • 143.

      App 4 (Teil 2): Datenanalyse und Visualisierung mit interaktiven In-Browser Plots

      2:55

    • 144.

      Eine einfache Web-App erstellen

      12:24

    • 145.

      Erstellen einer Datenvisualisierungs-Web-App

      23:26

    • 146.

      Ändern von Diagramm-Labels in der Web-App

      2:59

    • 147.

      Hinzufügen eines Zeitreihendiagramms zur Web-App

      5:20

    • 148.

      Mehrere Zeitreihen-Plottypen

      18:59

    • 149.

      Erstellen mehrerer Zeitreihen-Streamdiagramme

      6:55

    • 150.

      Hinzufügen eines Kreisdiagramms zur Web-App +

      9:29

    • 151.

      Demo von App 5: Webentwicklung mit Flask: Erstellen einer persönlichen Website

      1:41

    • 152.

      Deine erste Flask-Website mit hinzugefügter Serverwarnung

      8:07

    • 153.

      Vorbereitung von HTML-Vorlagen +

      4:09

    • 154.

      So fügst du ein Website-Navigationsmenü hinzu

      8:32

    • 155.

      Verbesserung des Website-Frontend mit CSS++

      5:59

    • 156.

      Erstellen einer virtuellen Python-Umgebung

      6:22

    • 157.

      So nutzt du den PythonAnywhere-Service

      7:47

    • 158.

      Bereitstellung der Flask-App auf PythonAnywhere +

      7:52

    • 159.

      Einführung in die Tkinter-Bibliothek

      2:35

    • 160.

      Erstellen eines GUI-Fensters und Hinzufügen von Widgets

      9:11

    • 161.

      Verbinden von GUI-Widgets mit Funktionen ++

      9:32

    • 162.

      So interagiert Python mit Datenbanken

      3:00

    • 163.

      Verbinden mit einer SQLite-Datenbank mit Python

      13:11

    • 164.

      SQLite: SQL-Datensätze auswählen, einfügen, löschen und aktualisieren

      6:53

    • 165.

      PostgreSQL-Datenbank mit Python

      8:46

    • 166.

      PostGreSQL: SQL-Einträge auswählen, einfügen, löschen und aktualisieren

      12:51

    • 167.

      App 6: Buchvorrat-App

      2:25

    • 168.

      Die Benutzeroberfläche entwerfen

      5:54

    • 169.

      Programmieren der Frontend-Benutzeroberfläche

      13:28

    • 170.

      Programmieren des Backends der App

      24:28

    • 171.

      Verbinden des Frontend mit dem Backend, Teil 1

      17:30

    • 172.

      Verbinden des Frontends mit dem Backend, Teil 2 ++

      21:59

    • 173.

      Erstellen von .exe- und .app-Dateien aus dem Python-Skript

      5:00

    • 174.

      Was ist objektorientierte Programmierung (OOP)?

      4:59

    • 175.

      OOP in einem Programm, Teil 1

      13:01

    • 176.

      Verwenden von OOP in einem Programm

      14:05

    • 177.

      Eine Benutzer-Login-Seite erstellen

      21:55

    • 178.

      Einen Kurs über Bankkonten anlegen

      21:10

    • 179.

      Kurse durch Vererbung erstellen

      12:08

    • 180.

      OOP-Glossar +++

      8:12

    • 181.

      App 7: Mobile Wohlfühl-App Demo +

      1:27

    • 182.

      Eine Benutzeranmeldungsseite erstellen

      9:52

    • 183.

      Benutzereingaben erfassen

      6:25

    • 184.

      Bearbeitung von Benutzeranmeldungen +

      11:22

    • 185.

      Eine Anmelderfolgsseite erstellen

      4:27

    • 186.

      Zwischen Seiten wechseln

      2:55

    • 187.

      Benutzer-Anmeldeinformationen verarbeiten

      16:52

    • 188.

      Anzeige der Ausgabe für den Benutzer +

      15:10

    • 189.

      Stilisieren der Login-Seite

      14:22

    • 190.

      Die Anmeldeseite stilisieren

      1:11

    • 191.

      Die Schaltflächen interaktiv gestalten

      9:01

    • 192.

      Erstellen eines Scrollbereichs

      8:22

    • 193.

      Vorbereiten der Umgebung für die Bereitstellung der mobilen App

      13:10

    • 194.

      Erstellen einer APK-Datei für Android

      10:29

    • 195.

      Installieren der APK-Datei auf Android

      3:52

    • 196.

      Web-Scraping mit Python & Beautiful Soup

      1:57

    • 197.

      Wie Web Scraping funktioniert +

      4:30

    • 198.

      Beispiel für Web-Scraping mit Python

      16:22

    • 199.

      App 8: Web-Scrapping-App-Demo ++

      2:28

    • 200.

      Die Webseite in Python laden

      7:15

    • 201.

      Div-Elemente extrahieren

      11:34

    • 202.

      Scraping der Adressen der Eigenschaften

      14:39

    • 203.

      Besondere Elemente entfernen

      12:06

    • 204.

      Speichern der extrahierten Daten in CSV-Dateien

      8:26

    • 205.

      Crawling durch mehrere Webseiten +

      17:15

    • 206.

      App 9: Django & Bootstrap-Blog und Translator-App +

      10:56

    • 207.

      Einrichtung einer virtuellen Umgebung

      12:42

    • 208.

      Django-Projekt erstellen

      11:12

    • 209.

      Erstellen eines Datenbankmodells für die Blog-App

      12:22

    • 210.

      Ansichten in Djago

      4:41

    • 211.

      URL-Muster

      15:16

    • 212.

      Erstellen von Admin-Ansichten

      8:51

    • 213.

      Erstellen der Homepage

      7:32

    • 214.

      Erstellen der Info-Seite

      2:44

    • 215.

      Auflisten von Blog-Posts auf der Homepage

      8:04

    • 216.

      Bootstrap zu Django hinzufügen

      16:28

    • 217.

      Vorlagenvererbung

      12:37

    • 218.

      Bootstrap-Styling auf das Navigationsmenü anwenden

      4:14

    • 219.

      Demo der Django Translation App

      3:11

    • 220.

      Der Schritt der Django-App-Entwicklung

      3:29

    • 221.

      Erstellen einer leeren App-Struktur für die Translator-App

      2:39

    • 222.

      Erstellen eines Django-Formulars

      7:45

    • 223.

      Benutzereingaben über ein Formular erhalten und verarbeiten

      10:09

    • 224.

      Fertigstellen der Übersetzer-App

      6:12

    • 225.

      Demo von App 10: Geocoder Web-App +

      7:31

    • 226.

      Teil 1 der Erstellung der Geocoder-Web-App

      16:21

    • 227.

      Teil 2 Aufbau der Geocoder-Web-App +

      5:51

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

7

Teilnehmer:innen

--

Projekte

Über diesen Kurs

Über diesen Kurs

Wenn du schon immer Python lernen wolltest, aber keine vorherigen Programmiererfahrungen hast, ist dieser Kurs genau das Richtige für dich!

Ardit hat jahrelang Python an Anfänger:innen gelehrt und einen praxisorientierten Ansatz entwickelt, der das Lernen sowohl unterhaltsam als auch praktisch macht. Du erwirbst grundlegende Programmierfähigkeiten, während du an realen Anwendungen arbeitest, was dir hilft, Selbstvertrauen und Unabhängigkeit beim Programmieren zu stärken.

In diesem Kurs lernst du:

  • Grundlagen von Python, einschließlich Syntax, Variablen, Loops und Funktionen

  • Wie man 10 reale Anwendungen von Anfang bis Ende erstellt

  • Webentwicklung mit Flask und Django

  • Datenanalyse- und Visualisierungstechniken

  • Entwicklung von Desktop-GUI-Anwendungen

  • Web-Scraping-Techniken zur Extrahierung von Daten aus Websites

  • Bereitstellung von Anwendungen auf Live-Servern und Erstellen von eigenständigen Executables

  • Best Practices für das Schreiben von sauberem, effizientem und wartbarem Code

Du wirst Folgendes erstellen: Ein Portfolio mit 10 praktischen Anwendungen, darunter:

  1. Ein Vulkan-Webkartengenerator

  2. Einen Objektdetektor mit Live-Webcam-Feeds

  3. Eine persönliche Website mit Python und Flask

  4. Eine Desktop-App für Buchbestände mit einem SQL-Datenbank-Backend

  5. Ein Datenanalyse- und Visualisierungs-Dashboard

  6. Eine mobile App, die mit Android und iOS kompatibel ist

  7. Ein Immobilien-Webscraper

  8. Eine formularbasierte Web-App, die Benutzerdaten erfasst und per E-Mail versendet

  9. Eine Blog- und Übersetzer-Web-App, die mit Django erstellt wurde

  10. Einen Excel-Dateiprozessor für die Datenverwaltung

Selbst wenn das Programmieren für dich völlig neu ist, wirst du diese Schritt-für-Schritt-Techniken leicht befolgen und auf deine eigenen Projekte übertragen können!

Wie finde ich die Ressourcen zu den Kurseinheiten? 

Wenn du siehst, dass auf den Namen einer Kurseinheit ein „+“-Zeichen folgt, überprüfe bitte die angehängten Dateien, die in diesem Link verfügbar sind, auf eine Ressource mit der gleichen Nummer wie die Lektion mit dem „+“-Zeichen. Dort findest du auch den Quellcode der 10 Anwendungen, die im Kurs gebaut wurden.

Du findest Ardit auch hier:
Website: https://pythonhow.com/

Triff deine:n Kursleiter:in

Teacher Profile Image

Ardit Sulce

Python Instructor, Founder of PythonHow

Kursleiter:in

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!

Vollständiges Profil ansehen

Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Einführungsvideo: Hallo, ich bin Ardit, ein Python-Entwickler und Dozent mit langjähriger Erfahrung im Unterrichten von Programmierung für über 500.000 Studenten weltweit Ich bin auch der Gründer und Autor von pythonhow.com, einem Zentrum Ich habe einige der beliebtesten Python-Kurse online erstellt , und in diesem Skillshare-Kurs werde ich Sie von Anfängern bis hin zu fortgeschrittenen Python-Kenntnissen führen, werde ich Sie von Anfängern bis hin zu fortgeschrittenen Python-Kenntnissen führen indem ich reale Projekte baue Kurs beginnt mit den Grundlagen, sodass keine Vorkenntnisse erforderlich sind Wir werden Python von Grund auf behandeln und im weiteren Verlauf das Gelernte anwenden, indem wir zehn reale Anwendungen erstellen. Sie werden praktische Erfahrung mit der Datenanalyse mit Pandas sammeln , mit wichtigen Datensätzen mit Python wie JSO, SQL, CSV arbeiten mit Python wie JSO, SQL, und sogar Webanwendungen und Desktop-Anwendungen entwickeln und Sie werden sogar eine mobile App mit der Kev-Bibliothek in Python erstellen mit der Kev-Bibliothek in Python Dies sind reale Anwendungen mit echten Daten und vielen Funktionen Sie werden echte praktische Erfahrung sammeln und sind bereit, diese Fähigkeiten anschließend für einen Job als Programmierer anzuwenden für einen Job als Programmierer Also für wen ist der Kurs? Der Kurs ist perfekt für Anfänger, die Python von Grund auf lernen möchten, sowie für Fortgeschrittene praktische Projekte erstellen möchten also keine Vorkenntnisse im Programmieren erforderlich, nur ein Computer und Lernbereitschaft Programmieren lernt man am besten selbst, und genau darauf konzentrieren wir uns in diesem Kurs Jedes Projekt, das du erstellst, stärkt deine Fähigkeiten und gibt dir etwas Greifbares, das du präsentieren kannst. Wenn Sie also bereit sind, Python auf ansprechende und praktische Weise zu lernen , lassen Sie uns anfangen. Wir sehen uns in der ersten Lektion. 2. 2. Die ersten Schritte vorstellen: Hallo, willkommen zu einem neuen Video Dies ist ein Einführungsvideo zum Abschnitt Funktionen und Bedingungen Jetzt betreten Sie also einen fortgeschritteneren Abschnitt von Python. Funktionen und Bedingungen sind einige fortgeschrittene Kernkonzepte von Python, und dies sind sehr grundlegende Blöcke, mit denen Sie Ihre Programme intelligenter und überschaubarer machen können Ihre Programme intelligenter und überschaubarer machen intelligenter und überschaubarer Sie machen Ihre Programme also intelligenter, indem Sie sie dazu bringen, Entscheidungen zu treffen, die Sie mithilfe von Bedingungen implementieren können Wenn Ihr Programm also einige Eingaben erhält und Sie nachdenken möchten, möchten Sie Ihr Programm dazu bringen, darüber nachzudenken, ob diese Eingabe in Ordnung ist oder nicht, und Sie möchten etwas tun, wenn diese Eingabe wahr ist , und etwas anderes, wenn diese Eingabe falsch ist Sie treffen also Entscheidungen in Ihrem Programm anhand eines bedingten Blocks. Und dann gibt es Funktionen auf der anderen Seite, Funktionen werden verwendet , um Codeblöcke einzuschließen, also ähnliche Codeblöcke. Es hilft dir, deinen Code zu organisieren. So könnte eine Funktion beispielsweise USD in Euro umrechnen. Diese Funktion macht also bestimmte Dinge und macht es gut. Es erhält also USD als Eingabe und gibt Ihnen Euro als Ausgabe. In der Funktion haben Sie also die mathematischen Operationen , die die Konvertierung durchführen. Bedingungen und Funktionen sind also zwei Dinge, die Sie in diesem Abschnitt natürlich anhand von Beispielen lernen werden. Wir sehen uns also im nächsten Video. 3. Python und die IDE (kein WASSERZEICHEN) installieren: Hallo. In dieser Vorlesung zeige ich Ihnen, wie Sie Python und die Visual Studio-Code-IDE installieren. Wenn Sie Python installiert haben und bereits eine IDE haben, können Sie dieses Video überspringen. Sie können also auch andere IDEs verwenden. Visual Studio-Code ist nur meine Präferenz, und ich empfehle die Verwendung von Visual Studio-Code. Also, wo sind die Anweisungen? Nun, wenn Sie textbasierte Anweisungen bevorzugen, können Sie die PDFs aus den Vorlesungsressourcen herunterladen Wenn Sie Videoanweisungen wünschen, sind die Videos länger. Wenn Sie also Probleme mit einer Textversion haben , möchten Sie die Videos vielleicht danach herunterladen. Aber die Textversionen sollten ausreichen. Und die Anweisungen richten sich an Windows-, Mac- und Linux-Benutzer. Abhängig von Ihrem Betriebssystem möchten Sie möglicherweise die Dateien herunterladen, die für Ihr eigenes Betriebssystem bestimmt sind. Also danke, und ich werde in der nächsten Vorlesung mit Ihnen sprechen . 4. 4. Installationsanleitung unter Windows +: Hallo, in diesem Teil zeige ich dir, wie du Python unter Windows und auch Visual Tudo Code unter Windows installierst Windows und auch Visual Tudo Code unter Windows installierst Beginnen wir also mit der Installation von Python. Suchen Sie einfach bei Google nach Python, und die erste Seite sollte die offizielle Python-Website python.org Sie auf python.org zu Downloads und gehen Sie zu Downloads und gehen Derzeit ist die aktuelle Version Python 3.10 0.3. In Ihrem Fall könnte es vielleicht Python 3.11 sein. Also, was auch immer Sie dort sehen, laden Sie es einfach herunter. Eine Sache, wenn Sie Windows 7 oder früher verwenden, sollten Sie zu diesem Link gehen , der eine Liste der Downloads anzeigt, und Python 3.8 oder früher herunterladen , da 3.10 nicht für Windows 7 oder eine ältere Version von Windows funktioniert Windows 7 oder eine ältere Version von Also klicke ich jetzt auf Python 3.10 0.3. Diese ausführbare Datei wird heruntergeladen, dann sollten Sie die ausführbare Datei installieren . Dieses Fenster sollte angezeigt werden Wenn Sie bereits eine Python-Installation haben, wird auf dieser Schaltfläche hier Upgrade statt Installieren angezeigt. Wenn das der Fall ist, führen Sie einfach ein Upgrade durch. Wenn du kein Python auf deinem System hast, dann solltest du auf Jetzt installieren klicken, aber du solltest das auch bei Python 3.10 zum Pfad überprüfen Stellen Sie also sicher, dass das angekreuzt ist und gehen Sie zu Jetzt installieren oder aktualisieren Mein Setup war erfolgreich, also schließe ich dieses Fenster und gehe zur Windows-Suchschaltfläche und öffne die Eingabeaufforderung. Suchen Sie also nach Command Prompt oder einfach CMD und öffnen Sie diese App Dies ist nun eine Befehlszeilenschnittstelle, über die Sie mit Ihrem Windows-Betriebssystem interagieren können Sie mit Ihrem Windows-Betriebssystem interagieren wir nun sicher , dass Python erfolgreich installiert wurde. Dafür möchten Sie P Y, Leerzeichen minus drei, eingeben. Drücken Sie die Eingabetaste. Wenn dies mit diesen drei Pfeilen angezeigt wird, bedeutet dies, dass Python installiert wurde. Was Sie jetzt sehen, ist die interaktive Python-Shell, auch bekannt als Python-Konsole. Hier können Sie jetzt Python-Code eingeben. Zum Beispiel 3.4, drücken Sie die Eingabetaste und Sie erhalten die Ergebnisse sieben. Dies wird als interaktive Art der Programmierung bezeichnet. Um dies zu beenden, können Sie auf Beenden in Klammern klicken, die Klammer öffnen und schließen, Eingabetaste drücken und zur Windows-Befehlszeile zurückkehren Wenn wir nun dieses Fenster schließen, verlieren wir den Code, den wir dort geschrieben haben , also haben wir den Code nicht gespeichert Das war einfach eine interaktive Sitzung , in der Sie einfach einige Codes zu Testzwecken eingeben in der Sie einfach einige Codes zu Testzwecken und den Code nicht speichern möchten. Wenn Sie den Code speichern möchten, benötigen Sie eine IDE. Also das werden wir als Nächstes tun. Wir werden eine IDE installieren. Gehen Sie also zur Google-Suche nach Visual Studio-Code. Wenn Sie jedoch eine andere IDE verwenden möchten, beispielsweise Pycharm, können Sie diese gerne verwenden Der Python-Code , den ich in Visual Studio-Code schreiben werde Visual Studio-Code schreiben werde , ist derselbe, den Sie selbst schreiben werden . Lieblings-IDE. Die IDE ist nur eine Frage der Präferenz. Lassen Sie uns also weitermachen und auf die ersten Ergebnisse klicken . Visual Studio-Code. Verwechseln Sie Visual Studio-Code nicht mit Visual Studio. Dies sind zwei verschiedene IDEs. Visual Studio-Code, für Windows herunterladen und warten, bis die ausführbare Datei heruntergeladen ist. Dann möchten Sie auf die ausführbare Datei klicken, um sie zu installieren. Gehen Sie also einfach den Installationsvorgang durch. Als Nächstes, als Nächstes. Als Nächstes bevorzuge ich es, diese Optionen zu überprüfen. Es gibt Ihnen die Möglichkeit , Python-Dateien in Visual Studio-Code zu öffnen , indem Sie mit der rechten Maustaste auf Ihre Python-Dateien in Ihrem Windows Exploder Klicken Sie dann auf Weiter und Installieren. Meine Installation war erfolgreich, also werde ich das beenden und jetzt Visual Studio-Code öffnen. Also suche ich einfach nach Visual Studio-Code, oder wenn Sie nur VSC verwenden, ist das die Abkürzung, die normalerweise für Visual Studio-Code verwendet wird Sie sollten also Visual Studio-Code öffnen. Sie haben dort einige Versionshinweise. Wenn Sie sie lesen möchten, werde ich das schließen . Schließen Sie auch dieses Fenster. Das ist also Visual Studio-Code. Die Einrichtung von Python- und Visual Studio-Code war auf meinem Computer erfolgreich. Sowohl Python- als auch Visual Psudio-Code funktionieren gut. Im nächsten Video zeige ich Ihnen nun, wie Sie die beiden zusammen verwenden, also wie Sie Python in Visual Studio-Code verwenden. Ich werde es dir im nächsten Video sagen. 5. 5. Installationsanleitung auf Mac +: Hallo. In diesem Video zeige ich Ihnen, wie Sie Python und die Visual Studio-Code-IDE auf dem Mac installieren. Wir beginnen mit der Installation von Python. Wenn Sie also bei Google nach Python suchen, sollten Sie die ersten Ergebnisse auf die offizielle Python-Webseite verweisen . Und wenn Sie zum Herunterladen gehen und dann zu dieser Schaltfläche gehen, sollte dies die neueste Version von Python herunterladen. In meinem Fall ist das 3.10 0.3. In Ihrem Fall könnte es noch neuer sein, zum Beispiel 3.11. Was auch immer die Version ist, drücken Sie einfach die Taste und das Installationspaket wird heruntergeladen Klicken Sie dann auf die Datei, um sie zu installieren. Wenn Sie jetzt eine andere Version von Python auf Ihrem Computer installiert haben , können Sie diese neuere Version trotzdem installieren. Die beiden Versionen verhalten sich wie separate unabhängige Software, und Sie können sie beide verwenden. Ich zeige dir, wie das geht. Also drück auf Weiter, Weiter, Weiter. Stimme zu. Installieren. Meine Installation von Python war erfolgreich. Um jetzt zu überprüfen, ob Python wirklich, wirklich erfolgreich installiert wurde , kann ich das Terminal öffnen. Dafür möchten Sie Spotlight verwenden, um nach Terminal oder Alfred zu suchen . Wenn Sie Alfred verwenden, also öffnen Sie das Terminalprogramm, und auf dem Terminal möchten Sie Python 3.10 oder 0.11 eingeben, möchten Sie Python 3.10 oder 0.11 eingeben wenn Sie Python 3.11 installiert haben Je nachdem, was Sie hier hatten, möchten Sie diese Version eingeben Einfach so ohne Leerzeichen. Also 3.10 in meinem Fall, drücke Enter und das sollte erscheinen Sie sehen also diese drei Pfeile hier. Hier können Sie Codes schreiben, zum Beispiel drei plus vier, und Sie erhalten die Ausgabe sieben. Das ist also als interaktive Python-Shell oder Python-Konsole bekannt . Es ist eine schnelle Möglichkeit, Code zu schreiben. Sie können die Shell, die Python-Shell, verlassen , um zum Terminal zurückzukehren. Also los geht's. Und jetzt sind wir im Terminal. Wenn Sie eine andere Version von Python verwenden möchten , die Sie installiert haben, können Sie Python 3.9 verwenden, z. B. wenn Sie Python 3.9 installiert hatten, und das sollte diese andere Version von Python öffnen , wie Sie hier sehen. Auch hier können Sie den Vorgang beenden und zum Terminal zurückkehren. Sie können dieses Fenster schließen, und jetzt ist auch der Code verloren. Also haben wir den Code in keiner Datei gespeichert. Wir können das tun, indem wir eine IDE verwenden, und genau das werden wir als Nächstes tun. Wir werden Visual Studio-Code herunterladen und installieren. Visual Studio-Code ist eine IDE. Jetzt ist die IDE eine Frage der Präferenz. Wenn Sie also eine Lieblings-ID haben, zum Beispiel schon einmal Pycharm verwendet haben, können Sie gerne Pycharm verwenden, da der Code, den ich in die Videos schreibe, derselbe sein wird In meinem Fall werde ich Visual Studio-Code verwenden. Suchen Sie einfach bei Google danach, gehen Sie zu den ersten Ergebnissen, und das sollte Sie zum Visual Studio-Code führen. Verwechseln Sie jetzt Visual Studio-Code nicht mit Visual Studio. Dies sind zwei verschiedene IDEs. Visual Studio-Code ist der, den wir verwenden. Drücken Sie also diese Taste, um den Visual Studio-Code herunterzuladen , und warten Sie , bis die Installation heruntergeladen ist. Das hat also eine Zip-Datei für mich heruntergeladen. Die Zip-Datei wurde extrahiert, und jetzt habe ich diese Datei, wenn ich darauf doppelklicke und auf Öffnen drücke. Dadurch wird Visual Studio-Code geöffnet. Das ist also Visual Studio-Code. Beachten Sie, dass sich die Anwendung derzeit in meinem Download-Ordner befindet. Vielleicht möchten Sie diese Datei also in den Anwendungsordner ziehen . Sie können das Visual Studio-Codefenster schließen, und normalerweise können Sie es mit Spotlight öffnen , oder wenn Sie Alfred verwenden, können Sie nach Visual Studio Code suchen, und Sie sehen es in meinem Anwendungsordner, jetzt in der Visualsudio Code Dot App Öffnen Sie es und schon ist es wieder Visual Studio Code. Im nächsten Video zeige ich Ihnen, wie Sie Python in Visual Studio-Code verwenden , damit wir Programme in Dateien erstellen können , die wir speichern und wiederverwenden können. Also werde ich im nächsten Video mit dir sprechen. 6. 6. Installationsanleitung unter Linux +: So installieren Sie Python und die Visual Studio-Code-IDE auf Linux-Computern. Sie können Python mit dem Terminal unter Linux installieren. Suchen Sie also in Ihren Programmen nach Terminal, öffnen Sie das Terminal und zuerst möchten Sie ein Psudo-App-Update durchführen Geben Sie das Passwort für Ihr Linux für Sudo ein und Sobald das Update abgeschlossen ist, möchten Sie die Sudo-App ausführen, um Python Three zu installieren Und das sollte Python auf deinem Computer installieren. Und die neueste verfügbare Version von Python wurde installiert. Deshalb habe ich hier diese Nachricht bekommen, die besagt, dass Python Three bereits die News-Version ist, also ist alles in Ordnung. Lassen Sie uns jetzt die Visual Studio-Code-IDE installieren. Öffnen Sie also Ihren Browser und rufen Sie die offizielle Website von Visual Studio Code auf, nämlich code.visualstudio.com Andernfalls suchen Sie bei Google nach Visual Studio Code . Aber verwechseln Sie Visual Studio-Code nicht mit Visual Studio. Visual Studio- und Visual Studio-Code sind zwei verschiedene IDEs, und die, die wir im Kurs verwenden , ist Visual Studio-Code Sie dann auf der Website Gehen Sie dann auf der Website zum Deep-Datei-Download. Und warten Sie, bis die Datei heruntergeladen ist, und doppelklicken Sie dann auf die Datei. Visual Studio-Code kann auch als Snap-Paket installiert Dies wäre also eine Alternative zur Installation. Andernfalls können Sie meinen Anweisungen folgen. Geben Sie Ihre Linux-Passwörter und warten Sie, bis die Installation abgeschlossen ist. Sobald die Installation abgeschlossen ist, können Sie nach Visual Studio-Code suchen Daraufhin sollte Visual Studio angezeigt werden, das Sie öffnen können, und es sollte so aussehen. So installiert man Python- und Visual Studio-Code unter Linux. Im nächsten Video zeige ich Ihnen, wie Sie Ihr erstes Python-Programm in Visual Studio-Code erstellen . Danke. 7. Erstellen und Laufen eines Python-Programms (keine Wasserzeichen): Hallo, willkommen zurück. In diesem Video. Ich zeige Ihnen, wie Sie ein Python-Programm erstellen und dieses Python-Programm ausführen , damit Sie die Ausgabe erhalten. Natürlich wird dieses Programm sehr einfach sein, da der Schwerpunkt hier darauf liegt, Ihnen den Prozess der Erstellung und Ausführung eines Programms zu zeigen . Um ein Programm in Python zu erstellen, benötigen Sie zwei Dinge. Einer ist Python und der andere ist eine IDE oder ein Texteditor. Eine IDE ist nur ein fortgeschrittener Texteditor. Also werde ich Visual Cilia Code als IDE verwenden. Welches ist das hier, und dann werde ich hier ein Projekt erstellen Ein Projekt ist nichts anderes als nur ein leeres Verzeichnis zu erstellen. Sie möchten also zunächst zu Ihrem Dateisystem, Windows Explorer oder MacFinder gehen Windows Explorer oder MacFinder und sicherstellen, dass Sie einen leeren Ordner haben Das erste Projekt ist der Name dieses leeren Verzeichnisses. Im Windows Explorer, und dann möchten Sie zum Visual Studio-Code zurückkehren. Wenn Sie sich in einer anderen IDE befinden, ist der Vorgang im Grunde derselbe. Sie gehen zur Datei und dann zu OpenFoldero Make it could be write just open. Also klicken Sie darauf. Und dann möchten Sie zu diesem leeren Ordner suchen, darauf doppelklicken und dann Ordner auswählen. Ein Visual Studio-Code, der diesen Ordner als Stammverzeichnis des Projekts öffnet . Sie haben diese Warnung hier, es ist in Ordnung zu sagen, ja, ich vertraue den Autoren. Sie können jetzt das erste Projekt sehen, der Name eines Ordners ist auch der Name des Projekts. Also, was ich jetzt tun werde, ist ein Programm zu schreiben, ein Python-Programm. Und das besteht darin, eine Textdatei zu erstellen , in die Sie das eigentliche Programm schreiben. Um diese Textdatei zu erstellen, können Sie erneut zu Ihrem Ordner gehen und sie hier erstellen, oder normalerweise erstellen wir diese Datei in der IDE. Wenn Sie also hier klicken, geben Sie einen Namen für die Datei ein, z. B. M underscore program Es wird nicht empfohlen, Leerzeichen in den Namen der Dateien zu verwenden Leerzeichen in den Namen der Dateien Verwenden Sie also bitte immer Unterstriche statt Leerzeichen. Und dann versuchen wir es mit TXT und sehen, ob das funktioniert. Die eigentliche Erweiterung ist Punkt PY, aber das ist keine Voraussetzung. Natürlich werden wir Punkt PY verwenden, immer, immer. Aber lassen Sie uns vorerst bei Punkt TXT bleiben , damit Sie ein sehr wichtiges Konzept von Python verstehen . Also drücke ich die Eingabetaste und hier drucke ich drei plus vier, und das ist unser Programm. Dieses Programm gibt also einfach die Summe von Drei und Vier aus. Wie kann ich dieses Programm jetzt ausführen, um die Ergebnisse zu erhalten? Nun, Sie sehen diesen Terminal-Menüpunkt hier, Sie drücken ihn und gehen zu einem neuen Terminal, und das sollte hier ein neues Terminal öffnen. Das ist also wie die Befehlszeile, über Sie mit Ihrem Computer interagieren. Und hier können wir jetzt Py minus drei schreiben , wenn Sie Windows verwenden. Wenn Sie auf einem Mac sind, sollten Sie Python 3 schreiben. Ich verwende hier also Windows, also verwende ich Pi-Leerzeichen minus drei und dann mein Unterstrich-Programm, ich kann jetzt sogar die Tabulatortaste benutzen Wenn ich die Tabulatortaste drücke, wird der Dateiname automatisch vervollständigt Dieser Teil hier ist nicht notwendig, die Punkte und der Backslash Du kannst es lassen. Es ist in Ordnung. Aber selbst wenn du es so entfernst, funktioniert es trotzdem. Wenn Sie jetzt hier die Eingabetaste drücken, gehen wir zur nächsten Zeile über. Vielleicht haben Sie darauf gewartet, dass die Ausgabe hier angezeigt wird. Es wurde nicht angezeigt, weil die Datei immer noch leer ist. Wir haben die Änderungen nicht gespeichert. Nachdem ich diese Codezeile geschrieben habe, habe ich also nichts gespeichert. Sie möchten also zu Datei, Speichern oder Steuerungen gehen und dann die obere Pfeiltaste drücken, um den zuvor ausgeführten Befehl abzurufen, und die Eingabetaste drücken. Dann bekommen wir die Ausgabe sieben. Wie Sie sehen, ist ein Python-Programm nichts anderes als nur eine Textdatei, die Sie schreiben und dann mit dem Python-Befehl ausführen. Aber es gibt eine bessere Möglichkeit, Python-Programme zumindest auf Visual Studio-Code auszuführen Python-Programme zumindest auf Visual Studio-Code Und das mit einer Run-Schaltfläche. Derzeit gibt es hier keine Schaltfläche „ Ausführen“, da wir eine Python-Erweiterung installieren müssen. Wenn Sie also zu diesem Punkt übergehen, hören Sie auf dem Symbol Erweiterungen. Und hier möchten Sie nach Python suchen, drücken Sie die Eingabetaste. Und dieses erste Ergebnis ist die Erweiterung, die wir installieren wollen. Drücken Sie also auf die Schaltfläche Installieren. Und das wird die Python-Erweiterung installieren. Aber was ist die Python-Erweiterung? Nun, ich habe dir gesagt, dass hier irgendwo die Run-Schaltfläche angezeigt wird. Es wurde nicht angezeigt, weil meine Datei keine PY-Erweiterung hat. Die Python-Erweiterung sucht also nach PY-Dateien. Sie möchten also mit der rechten Maustaste hier klicken Punkt PY umbenennen. Und jetzt sehen wir diesen Button. Wir erhalten auch die Meldung, dass wir einen Python-Interpreter auswählen müssen Um also einen Python-Interpreter auszuwählen , drücken Sie entweder dort diese Taste oder wenn Sie das Fenster nicht erhalten haben, möchten Sie zu diesem Symbol hier gehen, zu dieser geschweiften Klammer, und dann Interpreter auswählen Und dann möchten Sie den Python 3.10 0.3-Interpreter auswählen , den wir im vorherigen Video installiert haben Vielleicht ist es in deinem Fall eine andere Version. Also, welchen Python-Interpreter Sie auch verwenden, wählen Sie ihn aus, und dann sind Sie bereit, dieses Programm mit dieser Schaltfläche auszuführen Drücken Sie also diese Taste. Und das ist der Ausgang sieben hier unten. Wie Sie sehen, gibt es zwei Möglichkeiten, Ihre Python-Programme auszuführen. Entweder verwenden Sie den Python-Befehl wie wir es mit PY minus drei getan haben, und dann haben Sie den Namen der Datei erwähnt. Oder Sie verwenden den einfacheren Weg , nämlich diese Schaltfläche. Aber wenn Sie nähen, müssen Sie Ihre Dateien mit dem Punkt PY am Ende benennen, um diese Schaltfläche verwenden zu können . Und das ist eigentlich die beste Vorgehensweise. Jeder benennt seine Dateien mit Punkt PY. Es ist wie eine Konvention. Es ist keine Anforderung, aber es ist eine Herzkonvention. Und wie Sie sehen, funktionieren Dinge wie Erweiterungen und IDE-Erweiterungen auch besser, funktionieren Dinge wie Erweiterungen und IDE-Erweiterungen auch wenn Sie Ihre Dateien mit dem Punkt PY benennen. Ein weiterer Vorteil dieser Schaltfläche besteht darin, dass Sie den Code nicht speichern müssen, wenn Sie mehr Codes wie vier plus neun haben. Sie führen es einfach aus und Sie gelangen zu den Ergebnissen sieben und 13. Also die Summe dieser Zeile und auch die Summe dieser Zeile. Wenn Sie ein anderes Programm erstellen möchten , gehen Sie einfach erneut zu Datei, öffnen Sie den Ordner und stellen Sie sicher, dass Sie einen leeren Ordner haben , oder erstellen Sie hier einfach spontan einen. Also Ordner, zweites Projekt. Doppelklicken Sie darauf, wählen Sie den Ordner aus Dadurch wird das aktuelle Fenster, das aktuelle Projekt, geschlossen und das zweite Projekt geöffnet. Also dieser hier, du erstellst wieder eine Datei. Mein Programm Punkt Py Punkt PY immer, wähle einen Interpreter mit dieser geschweiften Klammer aus und gehe dorthin Wählen Sie immer denselben Interpreter, den Sie zuvor verwendet haben, es sei denn, Sie möchten Wenn Sie viele Interpreter haben und Code schreiben, führen Sie ihn aus, und Sie sollten die Ausgabe hier in der Befehlszeile sehen die Ausgabe hier in der Befehlszeile Damit danke ich Ihnen, dass Sie sich dieses Video angesehen haben, und ich werde im nächsten mit Ihnen sprechen 8. Was ist Python überraschend (KEIN WASSERZEICHEN): Nehmen wir an, Sie gehen im Amazonaswald spazieren. Im Wald triffst du einen Stamm und der Stamm hat einen Koch. Du willst dem Koch sagen, dass du Hunger hast, also musst du essen. Das Problem ist, dass du die Sprache nicht kennst. Was Sie also wollen, was Sie bekommen, ist ein Dolmetscher. Das ist also der Dolmetscher. Sie sprechen Englisch mit dem Dolmetscher, und der Dolmetscher spricht Amazonis Und der Koch bedient dich. Das Essen. Python funktioniert genauso. Das sind Sie wieder und Sie möchten mit dem Prozessor Ihres Computers kommunizieren. Sie möchten beispielsweise die Summe von drei und vier wissen. Das Problem ist wiederum, dass der Prozessor eine sehr schwierige Sprache spricht, die Maschinensprache genannt wird. Und diese Sprache ist für Menschen sehr schwer zu sprechen oder zu schreiben. Was wir bekommen, ist ein Interpreter namens C Python. Was ist C Python? C Python ist die Software wir in den vorherigen Videos installiert haben. Wenn Sie also Python von python.org herunterladen und installieren, installieren Sie eigentlich C Es ist ein Interpreter. Dieser Interpreter erhält Python-Sprache von Ihnen und übersetzt diese Sprache in Maschinensprache, und er spricht diese Maschinensprache an den Prozessor Im Gegenzug verwendet der Prozessor den Computerbildschirm, also Ihren Laptop-Bildschirm, um die Ergebnisse anzuzeigen, zum Beispiel sieben, und Sie sehen diese Wie Sie sehen können, ist Python genau wie Englisch. Es ist nur eine Sprache. Die Software, die Sie installieren und mit der Sie Python ausführen, ist nur eine Software, und sie ist in Siegelsprache geschrieben. Sie ist zufällig in Siegelsprache geschrieben. Deshalb heißt es C Python, obwohl die meisten Leute es nur Python nennen. Wenn du sagst, hast du Python installiert? Ja. Nun, Sie sprechen von der Installation von C Python. Die Python-Sprache selbst ist nur Wissen. Es ist in der Dokumentation gespeichert. Wenn Sie zu python.org gehen und dann zum Dokumentationsmenü gehen, sollten Sie die Dokumentation von Python sehen Die Dokumentation von Python entspricht also einem Wörterbuch, einem englischen Wörterbuch, wie dem Oxford-Wörterbuch, in dem die englische Sprache dokumentiert ist. Es gibt jedoch einen Unterschied. In dem Fall, in dem wir mit dem Koch gesprochen haben, haben wir gesprochene Sprache verwendet. Um hier mit dem Dolmetscher zu kommunizieren, verwenden wir Textdateien Also schreiben wir die Sprache in eine Textdatei und der Interpreter liest diese Textdatei Natürlich geben wir diesen Textdateien den Erweiterungspunkt PY , aber es sind immer noch Textdateien Die Erweiterung ist anders. Und das ist die Idee. Das ist Python. Python ist also die Sprache. Und danke, dass Sie diesem Beispiel, diesem Vergleich gefolgt sind, und ich werde im nächsten Video mit Ihnen sprechen . 9. 9. Beginnend mit den Grundlagen von Python: Hallo, willkommen zu einem neuen Video Dies ist ein Einführungsvideo zum Abschnitt Funktionen und Bedingungen Jetzt betreten Sie also einen fortgeschritteneren Abschnitt von Python. Funktionen und Bedingungen sind einige fortgeschrittene Kernkonzepte von Python, und dies sind sehr grundlegende Blöcke, mit denen Sie Ihre Programme intelligenter und überschaubarer machen können Ihre Programme intelligenter und überschaubarer machen intelligenter und überschaubarer Sie machen Ihre Programme also intelligenter, indem Sie sie dazu bringen, Entscheidungen zu treffen, die Sie mithilfe von Bedingungen implementieren können Wenn Ihr Programm also einige Eingaben erhält und Sie nachdenken möchten, möchten Sie Ihr Programm dazu bringen, darüber nachzudenken, ob diese Eingabe in Ordnung ist oder nicht, und Sie möchten etwas tun, wenn diese Eingabe wahr ist , und etwas anderes, wenn diese Eingabe falsch ist Sie treffen also Entscheidungen in Ihrem Programm anhand eines bedingten Blocks. Und dann gibt es Funktionen auf der anderen Seite, Funktionen werden verwendet , um Codeblöcke einzuschließen, also ähnliche Codeblöcke. Es hilft dir, deinen Code zu organisieren. So könnte eine Funktion beispielsweise USD in Euro umrechnen. Diese Funktion macht also bestimmte Dinge und macht es gut. Es erhält also USD als Eingabe und gibt Ihnen Euro als Ausgabe. In der Funktion haben Sie also die mathematischen Operationen , die die Konvertierung durchführen. Bedingungen und Funktionen sind also zwei Dinge, die Sie in diesem Abschnitt natürlich anhand von Beispielen lernen werden. Wir sehen uns also im nächsten Video. 10. 10. Variablen: Warum und wie man Variablen verwendet +: Hallo, willkommen zurück. Bitte schauen Sie sich dieses Programm hier an. Sehen Sie ein Problem mit diesem Programm? Nun, das Programm funktioniert gut. Wenn wir es ausführen, erhalten wir sieben als Ausgabe, was der erwarteten Ausgabe entspricht. Also drei plus vier ergibt sieben. Aber es gibt ein Problem mit dem Programm, und das Problem ist, dass wir keine Ahnung haben , was drei bedeutet und was vier bedeutet. Als Programmierer wissen wir also nicht, was hier vor sich geht, und das macht dieses Programm nicht lesbar Lassen Sie mich Ihnen nun zeigen, wie ich dieses Problem mithilfe von Variablen sofort beheben dieses Problem mithilfe von Variablen sofort Also werde ich das komplett löschen und sagen, ausgegeben ist gleich drei. Gespendet entspricht vier. Gesamtbetrag entspricht dem Betrag, den Sie ausgeben, spenden und dann den Gesamtbetrag ausdrucken. Wenn ich dieses Programm jetzt ausführe, erhalte ich dieselbe Ausgabe, also sind es wieder sieben. Aber dieses Mal können wir als Programmierer dieses Programm verstehen Also können wir dieses Programm anderen Personen, einigen anderen Programmierern geben , oder wir können zu diesem Programm zurückkehren Später können wir dieses Programm immer noch verstehen , weil wir jetzt Namen für die Werte haben, und diese werden als Variablen bezeichnet Ausgegebene, gespendete und Gesamtbeträge sind also alles Variablen. Die Syntax ist ziemlich einfach. Alles was Sie tun müssen, ist einfach einen Namen aus Ihrem Kopf für eine Variable auszuwählen. Also habe ich mich dafür entschieden, als erste Variable ausgegeben zu haben. Das ist also der Geldbetrag , den ich zum Beispiel für den Kauf von Dingen ausgegeben habe, und dann ist das der Betrag, den ich gespendet habe. Und dann habe ich den Gesamtbetrag berechnet. Jetzt macht dieses Programm mehr Sinn. Und natürlich gibt es auch andere Beispiele, wie Artikel zehn entsprechen, und einen Preis, der insgesamt zwei entspricht. Der Preis entspricht dem Faktor Artikel mal Preis. Jetzt gibt es hier also dieses Sternchen, was Multiplikationsoperator bedeutet Drucken Sie den Gesamtpreis aus und wir bekommen hier 20 als Ausgabe. Also noch einmal, wir haben hier eine Variable, zwei und drei. Nun gibt es einige Regeln bezüglich der Syntax von Variablen. Die erste Regel lautet , dass Sie vor Ihren Variablen keine Zahlen haben sollten , aber Sie können Zahlen irgendwo in der Mitte oder am Ende haben, aber nicht davor. Sie können Unterstriche verwenden, wie ich es hier getan habe, aber Sie können keine Leerzeichen verwenden Das funktioniert also nicht in Python, was bedeutet, dass Sie einen Unterstrich verwenden sollten, wenn Sie Variablen mit mehr als einem Wort haben Wort Unterstrich verwenden sollten, wenn Sie Variablen mit mehr als einem Es ist die beste Methode , einen Unterstrich zu verwenden. Und zu guter Letzt können Sie den Zuweisungsoperator mit beliebig vielen Leerzeichen umgeben Das wird also funktionieren. wird jedoch empfohlen Laut dem offiziellen Python-Styleguide wird jedoch empfohlen, auf beiden Seiten des Zuweisungsoperators ein Leerzeichen zu haben beiden Seiten des Zuweisungsoperators um die Codes lesbarer zu machen. Leerzeichen dienen hier nur der Lesbarkeit. Das Gleiche gilt für diese Operatoren. Es ist gut, Leerzeichen um den Operator herum zu haben. Nochmals zur besseren Lesbarkeit. Jetzt macht unser Programm also mehr Sinn. Wir wissen, was hier vor sich geht. Wir verstehen den Code, und das ist ein Vorteil von Variablen. Es gibt noch einen zweiten Vorteil. Variablen dienen als Eimer , um Daten oder Objekte zu transportieren. Zehn ist also ein Datenwert, oder Sie können ihn auch als Objekt bezeichnen Zehn ist also ein Objekt, zwei ist ein Objekt und items ist der Name dieses Objekts, oder Sie können sagen, die Variable dieses Objekts. Also diese Namen, diese Variablen sind wie Eimer Sie werden verwendet, um Gegenstände herumzutragen. Nehmen wir zum Beispiel an, wir haben zehn in den Artikelkorb gelegt, und dann nehmen wir diesen Bucket und multiplizieren diesen Bucket mit einem Preissegment, dem sich zwei befinden. Anstatt also zehn hier und zwei reinzuschreiben, arbeiten wir tatsächlich auf Bucket-Basis, auf variabler Basis. Das hat einen Vorteil, denn nehmen wir zum Beispiel an, dass wir den Wert auf drei ändern, und das bedeutet, dass die Artikel, die jetzt hier sind, auch drei sein werden. Also drei mal zwei, wir bekommen sechs. Deshalb wollen wir zum Beispiel keine festen Kodierungen für Objekte haben festen Kodierungen für Objekte Wenn das zehn wären, würden wir das ausführen, wir würden die alte Ausgabe 20 erhalten Ich hoffe also, dass das klar ist. Benutze immer Variablen, und damit ist dieser Vortrag über Variablen abgeschlossen. Ich bin auf viele Details eingegangen, weil Variablen in jedem einzelnen Programm, das Sie schreiben, verwendet werden. Stellen Sie also sicher, dass Sie sie verstehen. Wenn nicht, stellen Sie Fragen in den Fragen und Antworten, und ich werde im nächsten Video mit Ihnen sprechen Danke. 11. 11. Verwendung der Python Interactive Shell: Hallo, willkommen zurück zu einer neuen Vorlesung. Zuvor haben wir dieses Skript geschrieben, und wir können es mit dieser dreieckigen Schaltfläche ausführen, und wir erhalten sechs als Ausgabe. Also drei mal zwei ergibt sechs. Also, was wir hier gemacht haben, ist, dass wir das Skript in eine Punkt-PY-Datei geschrieben , dass wir das Skript in eine Punkt-PY-Datei und dieses Skript dann an den Interpreter geschickt haben Also senden wir die gesamte Punkt-PY-Datei an den Interpreter. Aber es gibt noch eine andere Möglichkeit, Python-Code auszuführen. Das heißt, indem Sie den Interpreter auf Abruf haben. Lassen Sie mich erklären , was ich damit meine. Sie müssen also zum Terminal zur Befehlszeile gehen. Hier führen Sie Betriebssystembefehle aus. Ich verwende also Windows, also kann ich PY Space minus drei ausführen. Wenn Sie Mac oder Linux verwenden, müssen Sie Python 3.10 oder Python 3.9 schreiben 3.10 oder Python 3.9 je nachdem, welche Version von Python Sie verwenden Ich verwende Pi-Leerzeichen minus drei und drücke die Eingabetaste. Dieser Befehl startet also den Python-Interpreter. Jetzt ist der Interpreter, wie gesagt, auf Abruf, was bedeutet, dass der Interpreter jetzt darauf wartet , dass Python-Code ihn interpretiert Stellen Sie sich die bisherigen Methoden also so als würden Sie den Dolmetscher auf Vertragsbasis einstellen Sie senden dem Interpreter also das gesamte Skript und er sendet Ihnen die Ausgabe zurück Aber hier ist der Dolmetscher ein Mitarbeiter, sagen wir, er ist vor Ort und wartet auf Ihre Eingabe Sie hören dir zu. Sie sagen also, dass die Punkte gleich drei sind. Sie schreiben zum Beispiel Code und der Moderator und der Dolmetscher hören Ihnen zu Es registriert also die Variablen items im Speicher. Und du kannst weiterhin Code schreiben. Der Preis entspricht zwei, der Gesamtpreis entspricht dem Faktor Artikel mal Preis. Und wenn Sie den Gesamtpreis drucken, erhalten Sie die Ausgabe sechs, was der gleichen Ausgabe entspricht. Jetzt fragen Sie sich wahrscheinlich, wann Sie die eine und wann die andere verwenden sollen. Sollten Sie also in einer Python-Datei oder in einer interaktiven Python-Shell codieren? Das ist jetzt als interaktive Shell bekannt. Lassen Sie mich Ihnen diese Frage beantworten. Aber bevor ich Ihnen antworte, möchte ich auf die Unterschiede zwischen den beiden Arten der Codierung hinweisen . Der größte Unterschied besteht darin, dass der Code Sie in die interaktive Shell schreiben, nicht gespeichert wird. Wenn ich also diese Shell jetzt verlasse, geht dieser Code verloren und es gibt keine Möglichkeit, ihn zu speichern. Und das bringt uns zum anderen Punkt, nämlich dass diese Art der Codierung nur für Wegwerfcode ist Wenn Sie also einfach Dinge schnell testen möchten, möchten Sie vielleicht einige mathematische Operationen wie Addition, Multiplikation Und Sie sind nicht daran interessiert ein wiederverwendbares Programm zu erstellen, dann ist diese interaktive Shell Es ist schneller, als eine PY-Datei zu erstellen und dann den Code dort zu schreiben. Also ich glaube, ich habe die Frage beantwortet. Sie sollten die Punkt-PY-Datei immer dann verwenden , wenn Sie wiederverwendbare Programme erstellen möchten. Und Sie verwenden die interaktive Python-Shell für schnelle Einzeiler. Also schreib einfach eine Zeile, vielleicht noch eine hier. Also mathematische Operationen. Jetzt möchte ich auf einen Unterschied zwischen den beiden hinweisen. Ein weiterer Unterschied, den Sie beachten sollten , besteht darin, dass Sie in der interaktiven Python-Shell keine Druckfunktion verwenden müssen. Sie können einfach Gesamtpreis sagen. Und du bekommst den Output. Sie müssen den Gesamtpreis nicht ausdrucken. In einer Punkt-PY-Datei müssen Sie jedoch sehr explizit sein. Wenn ich also die Druckfunktion entferne und dieses Programm ausführe, erhalten wir keine Ausgabe. Lassen Sie mich dieses Programm jetzt ausführen, aber ich warne Sie, dass wir einen Fehler bekommen werden. Also starte das Programm, das ist der Fehler. Also, was ist hier passiert? Dieser Code ist in Ordnung, aber was passiert, ist dass Visual Studio-Code diesen Windows-Befehl in der Python-Shell ausführt. Die Python-Shell akzeptiert nur Python-Code, aber keine Windows- oder Mac-Betriebssystembefehle. Das ist also ein Windows-Befehl, weil er startet, versucht, das Python-Programm zu starten, und er versucht , meine Programmpunkt-PY-Datei auszuführen. Sie müssen also die Shell beenden , wann immer Sie eine Punkt-PY-Datei ausführen möchten. Wenn Sie sich also in einer interaktiven Python-Shell befinden und wissen, dass Sie immer dort sind, wenn Sie diese drei Pfeile sehen, dann möchten Sie mit Klammern beenden und die Eingabetaste drücken . Dadurch gelangen Sie zurück zur Betriebssystem-Shell, zum Terminal, zur Befehlszeile Das bedeutet, dass Sie jetzt Ihr Programm ausführen können. Lassen Sie mich also die dreieckige Taste drücken und wir haben keine Fehlermeldung erhalten. Es gibt jedoch auch keine Ausgabe, wie Sie sehen können, denn wie ich bereits erwähnt habe, drucken wir hier nichts aus. Der Interpreter weist also nur 32 Elemente variabel Das Gleiche gilt für den Preis. Es berechnet den Gesamtpreis und dann tut es hier nichts Um also eine Ausgabe zu erhalten, müssen wir sagen, die Variable erneut drucken und Sie erhalten sechs Wenn Sie wieder zur Python-Shell zurückkehren möchten, schreiben Sie den Befehl Py minus drei, und Sie gehen zurück zur Shell, und Sie können den Code hier erneut ausführen. Also gehe ich zurück zur Shell und da geht es um die interaktive Python-Shell. Danke fürs Folgen. 12. 12. Das Terminal verwenden: Bevor wir mit dem Programmieren beginnen, möchte ich Ihnen einen Produktivitätstipp zur IDE geben. Nun, dieser Tipp bezieht sich auf die visuelle Sudo-Code-IDE, aber er wird wahrscheinlich auch für andere IDEs gelten Es geht um das Terminal, darum, wie man das Terminal effizienter benutzt, und das wird dir beim Programmieren und auch beim Lernen helfen . Also das möchte ich dir zeigen. Ich habe mein Terminal hier geöffnet. Zuallererst möchte ich alle Terminals löschen , die dieses Symbol verwenden , oder das Symbol könnte sich irgendwo hier drin befinden. Also lösche einfach alles. Ja, das Symbol zeigt uns jetzt hier, drücken Sie das oder das andere bis das Terminal verschwindet. Und dann willst du das Terminal wieder anzeigen, und das kannst du tun, indem du diese Taste drückst. Damit wird der Code ausgeführt. Es wird ein neues Terminalfenster erstellt. Und dann ist es gut, auch eine Python-Shell an der Seite zu haben . Sie haben also sowohl die Befehlszeile, in der Sie den Code ausführen, auch die interaktive Python-Shell in der Sie schnelle Einzeiler schreiben können Um das zu tun, möchten Sie auf dieses Symbol klicken. Und das wird das Terminal teilen. Jetzt haben wir ein Terminal hier auf der linken Seite und ein Terminal hier auf der rechten Seite. Hier auf der rechten Seite möchten wir den Python-Befehl ausführen , der die interaktive Python-Shell öffnet. Unter Windows ist das PY-Leerzeichen minus drei, oder Macan Linux wäre das Python 3.10 oder Python 3.11 und Das öffnet also die interaktive Python-Shell. Jetzt haben wir sowohl die Befehlszeile, in der wir Punkt-PI-Dateien ausführen, als auch die Python-Shell, in der Sie Code interaktiv ausführen Das wird dir beim Lernen helfen. Lassen Sie mich Ihnen schnell zeigen, ob das gut funktioniert oder nicht, damit ich mich darauf konzentrieren kann. Es spielt keine Rolle, und ich drücke diese Taste, aber der Code wird an das Terminal gesendet. Und dieses Terminal hier ist davon unabhängig. Also nochmal, wenn das nicht funktioniert, stellen Sie sicher, dass Sie erneut alles löschen. Also keine Terminals. Dann öffne hier kein Terminal. Anstatt das zu tun, lassen Sie das Terminal mit dieser Taste öffnen. Weise stellen Sie sicher , dass dieses Terminal mit dem laufenden Prozess dieser Datei verbunden ist , und dann teilen Sie das Terminal auf, und dann haben Sie die Befehle, um Python zu öffnen. Noch ein Tipp, bevor wir dieses Video in der Befehlszeile schließen , wo die Windows- Mac- oder Linux-Befehle gesendet werden. Wenn wir also hier die Punkt-PY-Datei ausführen, können Sie das Terminal mit CLC löschen und dort CLC schreiben Wenn Sie Windows verwenden, wäre es auf einem Mac auch für Linux klar CLC drücken Sie die Eingabetaste und das Terminal wird gelöscht. Das funktioniert also in der Befehlszeile, nicht in der Python-Shell. In Bezug auf das geteilte Fenster hier an der Seite können Sie sehen, wie viele Terminal-Pans Sie haben Wir haben also das, das auf der linken Seite darauf zeigt, linken Seite darauf zeigt, und dann das andere auf der rechten Versuchen Sie auch, hier nicht mehr als zwei Terminals zu haben da die Dinge verwirrend werden können , denn wenn Sie das Plus-Symbol drücken, haben Sie ein drittes Terminal, das sich hinter diesen beiden versteckt und die Dinge werden verwirrend. Achte darauf, dass du immer zwei hast. Wenn Sie mehr haben, löschen Sie alles und starten Sie den Vorgang erneut um sie herum, etwa um PY, minus drei , und so weiter. Damit bist du bereit, in den nächsten Videos zu programmieren, und das wird dir wirklich, wirklich beim Lernen helfen. Also werde ich im nächsten Video mit dir sprechen. 13. 13. Einfache Typen: Integers, Strings und Floats: Lass mich dir etwas zeigen. Ich erstelle die X-Variable. Speichern Sie zehn in dieser X, Y-Variablen, speichern Sie den Text zehn in dieser Variablen und erstellen Sie dann zwei neue Variablen. Eins entspricht also zwei. X plus X, und etwas zwei ergibt zwei, Y plus Y. Und dann drucke etwas eins und einige Speichern Sie das Skript, vergessen Sie es nicht und führen Sie es aus. Das ist die Ausgabe. Also haben wir 20 von X plus X und 1010 von Y plus Y. Was ist mein Punkt hier Mein Punkt ist, dass Computer Müll sind. Damit sie dich verstehen, musst du in deiner Sprache, in diesem Fall mit Python, sehr klar und deutlich sein , was du sagen wirst , was du sagen . Es reicht nicht, einfach zehn zu sagen , man muss erklären, was diese Zehn ist. Ist es eine Zahl oder ist es Text? Aus diesem Grund haben wir in einigen Sprachen, in den meisten Sprachen, in den meisten Sprachen, Typdeklarationen. In anderen Sprachen würde man also etwas wie int sagen, was für Integer steht. Sie sagen also, dass dies eine Ganzzahl ist. Zehn ist eine Ganzzahl, und das wäre wie STR Y ohne Anführungszeichen. Das sagt Python also, dass dies tatsächlich ein Text ist und auch so behandelt werden sollte. Wenn Sie also in Python einen Plus-Operator anwenden, verkettet Python diesen Text, fügt also zehn nach zehn hinzu und erstellt diese verkettete Zeichenfolge Nun, so funktioniert es in Python nicht. In Python haben wir statt dieser expliziten Deklarationen stattdessen eine implizite Deklaration , und zwar diese hier. Wenn die Zahl also ohne Anführungszeichen ist, handelt es sich um eine Ganzzahl. Nun, es kann auch ein Float sein, aber lassen Sie mich in ein paar Sekunden darüber sprechen. Und wenn es mit doppelten Anführungszeichen steht, bedeutet das, dass es sich um einen Text handelt. Wenn es beispielsweise 10,1 entspricht, bedeutet das, dass es sich um einen Float handelt Und wenn Sie mir nicht glauben, können Sie die Typfunktion wie X verwenden, Y eingeben und eingeben Die Typfunktion druckt den Typ jedes Werts aus. Es ist also eine Klasse int, eine Klasse STR, die für Strings steht. Alles in Anführungszeichen ist eine Zeichenfolge und Floats, was für Float steht Bei Zeichenketten können Sie auch einfache Anführungszeichen wie diese verwenden. Wenn Sie es speichern, erhalten Sie dieselbe Ausgabe. Wenn Sie also Text verarbeiten möchten, müssen Sie Anführungszeichen verwenden. Wenn Sie Zahlen verarbeiten möchten, um mathematische Berechnungen mit ihnen durchführen zu können , müssen Sie sie ohne solche oder ähnliche Zeichen verwenden 14. 14. Datentypen auflisten: Jetzt kennst du drei Datentypen in Python, du kennst Ganzzahlen, du kennst Zeichenketten und du kennst Floats und du Das sind einfache Datentypen. Wir haben auch sogenannte zusammengesetzte Datentypen, Typen, die aus verschiedenen Objekten bestehen Und die Liste ist die beliebteste. In einer Liste können Sie also tatsächlich mehrere Objekte speichern. Nehmen wir an, Sie sind Lehrer und möchten die Durchschnittsnote Ihrer Schüler berechnen. Sie verwenden dafür Python und benötigen eine Datenstruktur, und benötigen eine Datenstruktur um diese Werte in Python zu speichern. Sie benötigen den richtigen Typ in Python, um die Noten Ihrer Schüler darzustellen, und eine Liste wäre eine gute Wahl. Lassen Sie uns eine Liste erstellen. Speichern Sie es wie gewohnt in einer Variablen. Noten der Schüler. Entspricht offenen eckigen Klammern, geschlossenen eckigen Klammern. Die Objekte werden jetzt also dieser Syntax entsprechen. Sie haben also gesehen, dass Sie bei Ganzzahlen eine Zahl ohne Anführungszeichen für Zeichenketten verwenden würden, Sie bei Ganzzahlen eine Zahl ohne Anführungszeichen für Zeichenketten verwenden würden um Python mitzuteilen , dass es sich um eine Zeichenfolge handelt, Sie verwenden doppelte oder einfache Anführungszeichen Und bei Listen verwendet man diese eckigen Klammern, sodass jeder Typ seine eigene Syntax hat Sagen wir also 9.1 und 8.8 und 7.5. Das sind die Noten Ihres Schülers. 15. 15. Bereiche verwenden: In diesem Video werden Sie sich mit Listen besser vertraut machen. Bisher haben wir also drei Float-Datentypen in einer Liste gespeichert , aber Sie können jeden beliebigen Objekttyp speichern, nicht nur Floats, sodass wir eine Ganzzahl wie neun speichern können Sie können eine Zeichenfolge speichern, z. B. hallo. Sie können Listen sogar in einer Liste speichern. Sie schreiben einfach eckige Klammern und geben dann die Elemente dieser Liste ein. Diese Liste enthält also immer noch drei Elemente: diese Ganzzahl, diese Zeichenfolge und diese Liste. Und natürlich können Sie diese Liste drucken, indem Sie auf die Variable zeigen, die der Liste zugeordnet ist. Und das ist die Ausgabe, die wir erhalten. Nein, mathematische Operationen mit Listen, was unterstützt List? Nun, nicht viel, wirklich. Sie können Multiplikationen mit einer Ganzzahl durchführen, z. B. zwei oder drei, und lassen Sie uns sehen, was passieren wird Ich werde diesen Ausdruck direkt hier ausdrucken, anstatt ihn in eine Variable einzufügen Was auch immer Sie bevorzugen, Sie können eine neue Variable erstellen, diese in der Variablen speichern und dann die Variable in der Druckfunktion platzieren oder diesen Ausdruck direkt in der Druckfunktion platzieren. Beides wird funktionieren. Wenn Sie das also ausführen, erhalten Sie diese Ausgabe. Das ist also dieselbe Liste, die dreimal wiederholt wird. Wenn das Plus wäre, wird dies nicht unterstützt, da Python nicht weiß, was mit einer Liste und einer Ganzzahl zu tun ist. Es gibt Ihnen also einen Fehler vom Typ Fehler kann nur Listen zu Listen verketten Es kann also Listen zu Listen verketten . Wenn Sie also Noten für Schüler und Schüler machen, wird das auch funktionieren Also führe das aus und du bekommst diese Ergebnisse. Die Liste wurde zweimal wiederholt, was dasselbe ist wie das mal zwei. Also nochmal, wir werden hier und da dieselben Ergebnisse erzielen. Schließlich gibt es auch eine Möglichkeit, automatisch Listen mit ganzen Zahlen zu generieren , die eine bestimmte Reihenfolge haben Nehmen wir an, Sie möchten eine Liste von 1—10, eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun, zehn haben. Wie können wir das machen? Nun, eine Möglichkeit besteht natürlich darin, das aufzuschreiben, aber es gibt einen besseren Weg, und das ist, einen Bereich zu verwenden. Range ist eine andere Art von Objekt, genau wie wir Listen und ganze Zahlen haben Wir haben auch Bereiche. Also die Bereiche Null und 11, und lassen Sie uns die Noten der Schüler überprüfen, um zu sehen, was diese Variable jetzt als Wert hat. Führen Sie das aus, und das ist ein Bereichsobjekt. Also noch nicht viel zu sehen. Aber wenn du das in eine Liste umwandelst und erneut ausführst. Schließlich werden wir diese Ausgabe erhalten. Also Null, eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun, zehn. Also ist Student Grades jetzt ein Listenobjekt. Und dieses Listenschlüsselwort hier ist eine Klasse. Es stellt also den letzten Datentyp dar und wird hier verwendet, um einen Bereichsdatentyp in einen Ist-Datentyp umzuwandeln in einen Ist-Datentyp , weil ein Bereich einfach so angezeigt wird. Es ist also nicht sehr vorteilhaft, wenn man sieht, dass die Ausgabe nicht so klar ist, also konvertieren wir sie in einen Datentyp der kleinsten Größe. Und wie funktioniert es? Nun, es beginnt bei Null bis zu der Zahl vor dieser Zahl, die zehn ist, also Null bis Zehn. Deshalb haben wir Null bis Zehn. Natürlich kannst du hier alles haben. Also eins bis acht, ich müsste neun schreiben, um eins auf acht zu bekommen. Also mindestens eins bis acht. Sie können hier auch ein anderes Argument haben, zwei, und lassen Sie uns sehen, was sich dadurch in der Ausgabe ändert. Wir erhalten also diese Ergebnisse. Diese beiden sind der Schritt. Also eins, drei, fünf, sieben, das bedeutet, dass du bei eins anfängst und dann um einen Schritt von zwei weitergehst. Also eins plus zwei, Sie haben drei, drei plus zwei, Sie haben fünf, fünf plus zwei, Sie haben sieben, sieben plus zwei, Sie haben neun, aber neun ist nicht im Bereich enthalten. Der Bereich reicht bis zu acht, sodass die Liste bei sieben enden wird. Natürlich können Sie hier beliebige Schritte ausführen, z. B. drei, und Sie erhalten unterschiedliche Ergebnisse. Das waren also einige weiterführende Informationen über Listen und auch Bereiche. Damit danke ich dir und werde im nächsten Video mit dir sprechen. Wir sehen uns. 16. 16. Was sind die Attribute von Datentypen: Okay, Sie kennen also Zeichenketten, Sie wissen schon, Gleitkommazahlen, Sie wissen schon, ganze Zahlen, Sie wissen schon, Listen Okay, du weißt schon, Datentypen. Aber wie kann man eigentlich etwas in Python machen? Was kann man mit diesen Datentypen machen? Nun, um Ihre Frage zu beantworten, sollten Sie den Befehl Hirsch ansehen. Nun, lassen Sie mich jetzt anfangen, die Python-Shell etwas häufiger zu verwenden , um die Dinge schneller zu erledigen. Also werde ich das in zwei Teile aufteilen. Dies ist für die Ausführung der Python-Datei, dies ist für die interaktive Python-Shell. Was können wir also mit der Liste machen? Das kannst du herausfinden, indem du Deer machst. Dear ist eine Funktion in Python, die dir all die Dinge gibt, die du mit einem bestimmten Typ machen kannst. Bei einer Liste handelt es sich in diesem Fall also um Attribute einer Liste. Sie können dasselbe für das Einchecken von int tun. Sie können dasselbe tun, um beispielsweise float, dear float, dear STR zu überprüfen . Lassen Sie uns bei SDR anhalten, bevor wir zur Liste gehen Bei Zeichenketten können Sie sie beispielsweise sie beispielsweise diesen Methoden in Großbuchstaben umwandeln Um herauszufinden, was Upper macht, möchten Sie help STR verwenden, das ist der Typ, der das Attribut upper hat Nun, Attribute sind all das, und sie können entweder Methoden oder Eigenschaften sein. Das wissen Sie erst, wenn Sie mit Hilfe nachfragen. Das ist also eine Hilfedokumentation für die obere Methode. Es ist eine Methode, wie Sie hier sehen können, Q, um zu beenden und zur Shell zurückzukehren. Dann lass uns weitermachen und das benutzen. Hallo, das Oberteil. Sie verwenden eine Methode mit runden Klammern und Klammern. Und das gibt die großgeschriebene Version von Hello zurück . Wenn wir stattdessen Title verwenden, wird nur der erste Buchstabe groß geschrieben Natürlich können Sie Variablen verwenden. Und Sie erhalten die gleiche Ausgabe. Nun, was haben wir für Listen? Wie wäre es mit der Berechnung des Notendurchschnitts der Schüler? Lass uns das im nächsten Video machen. 17. 17. So findest du heraus, welchen Code du brauchst: Um den Durchschnitt dieser Noten zu berechnen, wollen wir herausfinden, ob es für einen Listentyp eine Art Mittelwert- oder Durchschnittsmethode gibt, mit der wir den Durchschnitt seiner Werte ermitteln können . Dafür schauen wir bei der Hirschliste nach. List ist der Name, der alle Listen repräsentiert. Das ist also ein Typ, und dies ist eine Instanz dieses Listentyps. Liebe Liste. Und lassen Sie uns hier einen kurzen Blick darauf werfen. Haben Sie eine durchschnittliche oder durchschnittliche Methode? Ich glaube nicht. Es gibt also keine Methode vom Typ Liste, mit der wir den Durchschnitt der Listenwerte berechnen könnten. bedeutet jedoch nicht, dass es in Python keine Methode gibt , um das zu tun. Mensch oder Durchschnitt ist keine Methode, aber es kann eine Funktion sein. Erinnerst du dich an die Druckfunktion? also so drucken, sehen Sie, dass beim Drucken die Punktnotation nicht verwendet werden muss. Zum Beispiel benötigte die Upper-Methode eine Punktnotation, weil Upper eine Methode ist, die dem Halo-Typ zugeordnet Und Drucken ist eine Funktion. Es ist eine unabhängige Funktion , die mit vielen Typen funktioniert, nicht nur mit Zeichenketten, nicht nur mit Ganzzahlen und Gleitkommazahlen Mit print können Sie alles drucken. Deshalb ist es nicht an einen bestimmten Typ gebunden. Wo sehen wir also eine vollständige Liste der Funktionen, die wir verwenden können? Sie können das tun, indem Sie die integrierten Befehle wieder, Unterstrich, Unterstrich, Unterstrich, Unterstrich und schließende Klammer Und das ist eine vollständige Liste der Funktionen, die Sie verwenden können Lassen Sie mich also nach einer Mittelwertfunktion oder einer Durchschnittsfunktion suchen. Nein, es ist nicht da, aber es gibt eine Summenfunktion. Was wir also tun können, ist, sagen wir, meine Summe nicht als Variablennamen zu verwenden, weil Sie sehen können, dass sum ein reserviertes Schlüsselwort ist. also die Noten der Schüler zusammenzählen, erhalten wir die Summe dieser drei Zahlen. Dann möchte ich zählen, wie viele Artikel in dieser Liste enthalten sind. Haben wir da also etwas gezählt? Vielleicht nicht. Nun, ich weiß, dass es keine Zählmethode gibt. Aber wir haben diesen Stift, was bedeutet, dass Sie überprüfen können, was er bedeutet. Also gib die Anzahl der Artikel in einem Container zurück. Eine Liste wird also auch als Container bezeichnet . Nehmen wir an, die Länge entspricht der Länge und den Noten der Schüler. Dann können wir endlich den Mittelwert ermitteln, meine Summe geteilt durch die Länge ist, und den Mittelwert ausdrucken, außer dass das der Mittelwert all dieser drei Zahlen ist. 18. 18. Wörterbuch-Datentypen: Sie sind also Lehrer und wollten die Durchschnittsnoten Ihrer Schüler berechnen, und das haben wir mit diesem Algorithmus hier und dieser Datenstruktur gemacht Algorithmus hier und dieser , um die Noten zu speichern. Das Problem dabei ist, dass Sie nicht wissen, welche Klasse von wem ist. Eine Liste ist zwar eine gute Datenstruktur, um eine Reihe von Elementen zu speichern, sie ist nicht gut genug, wenn diesen Elementen eine Art Identität zugeordnet ist. In diesem Fall möchten Sie ein Wörterbuch verwenden. Sagen wir Schülernote, geschweifte Klammern. Das ist eine Syntax für ein Wörterbuch. Und dann benutzt du die Namen deiner Schüler. Nehmen wir an, Mary eine Spalte, machen Sie ein Leerzeichen oder kein Leerzeichen, wo immer Sie möchten, aber es ist gut, dort ein Leerzeichen zu haben , um es lesbarer zu machen Und dann schreibst du die Note von Mary. Sagen wir S 8,8 und Johannes-Kolumne 7,5. Der Unterschied zwischen dem Wörterbuch und der Liste sind die Klammern, verschiedene Klammern. Und dann wird dies als ein Element in einem Wörterbuch betrachtet. Dies wird als ein Element in einer Liste betrachtet. Elemente in einem Wörterbuch bestehen also aus Schlüsseln. Das ist ein Schlüssel und Werte, das ist ein Wert. Eine Liste wäre besser geeignet, wenn wir beispielsweise eine Reihe von Temperaturwerten speichern müssten. Nehmen wir an, am Montag herrschten diese Temperaturen am Montag. Und schließlich, wie berechnen wir den Durchschnitt, wenn wir ein Wörterbuch haben? Da es sich um Schlüssel - und Wertepaare handelt, können Sie die Summe nicht einfach so zusammensetzen. Sie müssen die Summe dessen angeben, was Sie erhalten möchten. Also Noten der Schüler. Und wenn Sie in ihrem Diktat nach einem Wörterbuch suchen, werden Sie feststellen, dass Wörterbücher diese Werte haben, was eine Methode ist Diktieren Sie die Werte, es ist eine Methode, und sie bietet eine Ansicht In einfachen Worten, es gibt Ihnen die Werte eines Wörterbuches. Wenn Sie also dieses Wörterbuch bekommen, stellen Sie die Warteschlange für „Beenden“ hier in die Warteschlange, fügen Sie es hier ein und sehen Sie, wie die Schüler diese Werte bewerten. Dadurch erhalten Sie diesen Datentyp. Es ist immer noch ein Datentyp. Es sieht aus wie eine Liste. Es ist nicht gerade eine Liste, aber sie verhält sich wie eine Liste mit diesen drei Werten Es ist ein Typ mit diktierten Werten. Diese Methode erzeugt diesen Typ. Deshalb können Sie das dort hinzufügen, nicht die Klammern, vergessen nicht zu speichern und vergessen Sie nicht, auszuführen, um die Ausgabe zu erhalten , und das ist Durchschnittswert der Wörterbuchwerte Um die Schlüssel des Wörterbuchs zu erhalten, geben Sie einfach Schlüssel ein. Und Sie erhalten diesen Typ mit den gestorbenen Schlüsseln mit den Schlüsseln des Wörterbuches als Elementen des Arrays mit den gestorbenen Schlüsseln. 19. 19. Was einen Programmierer zum Programmierer macht: Was macht einen Programmierer zu einem Programmierer ? Mit anderen Worten, was müssen Sie wissen , um eine Computeranwendung programmieren zu können Das werde ich dir in diesem Video sagen. Es gibt drei Dinge, die Sie wissen müssen, um zu programmieren, um ein Programm zu programmieren. Und das erste ist, dass Sie die Syntax kennen müssen. Sie müssen zum Beispiel wissen, dass Sie, um einige Ausgaben ausdrucken zu können, Ausdrucke gefolgt von Klammern verwenden müssen und dann die Eingabe in diese Klammern setzen Das ist also Teil einer Syntax, wenn Sie wissen, ob Sie Klammern oder Kommas usw. verwenden möchten . Das ist das Erste. Das nächste ist, nehmen wir an , wir bauen ein Programm, das den Durchschnitt aus einer Reihe von Werten berechnet den Durchschnitt aus einer Reihe von Werten Dann möchten Sie wissen, welchen Datentyp Sie verwenden müssen, um diese Daten darzustellen Wenn Sie also beispielsweise Daten als Namen von Schülern haben, gefolgt von der Note jedes einzelnen Schülers, dann wissen Sie, dass Sie ein Wörterbuch verwenden müssen, da ein Wörterbuch aus Schlüsseln und Werten besteht. Die richtige Datenstruktur wäre hier also ein Wörterbuch. Aber wenn Sie nur Werte ohne Schülernamen hätten, dann würden Sie über eine Liste nachdenken, weil eine Liste nur aus einer Reihe von Elementen besteht , Werten ohne Schlüssel. Also Datenstrukturen, Sie müssen Datenstrukturen kennen und Sie müssen die Syntax kennen. Das sind zwei Dinge. Die dritte Sache ist, dass Sie den Algorithmus kennen müssen , den Sie verwenden müssen, um die erwartete Ausgabe zu erzeugen. In diesem Fall sollten Sie also wissen, welche Methoden Sie verwenden können, oder Sie sollten wissen, wie Sie diese Methoden erstellen , falls sie nicht existieren. In unserem Beispiel müssen Sie also wissen, wie Sie diese Durchschnittsmethode erstellen. Das sind also die drei Dinge, die Sie wissen müssen, um ein Programm zu erstellen. Das sind die Grundlagen. Ich hoffe, das macht mir den Weg zum Programmieren klarer , und ich werde in den nächsten Videos mit Ihnen sprechen. Wir sehen uns. 20. 20. Tuple-Datentypen: Dieser hier ist eine Liste. Und jetzt ist es ein Sturz. Ein Tupel ist also wie eine Liste, aber mit Klammern, nicht mit eckigen Klammern Wenn Sie es ausdrucken würden, würden Sie natürlich dieselbe Darstellung wie hier erhalten Also 14, fünf, 145. Die Klammern und die Klammern sind jedoch nicht der einzige Unterschied zwischen Listen und Tatsächlich ist dies nur ein Unterschied in der Syntax. Der wirkliche Unterschied besteht darin, dass Tupel, wie dieser hier, unveränderlich sind und Listen wie diese veränderbar sind Das bedeutet, dass Sie bei den Temperaturen vom letzten Montag zwei weitere Elemente zur Liste hinzufügen können, indem Sie beispielsweise die Append-Methoden verwenden beispielsweise Wenn Sie also die Temperaturen vom Montag bis heute überprüfen, erhalten Sie eine mutierte Liste Diese Veränderlichkeit macht sie sehr dynamisch. Sie werden später sehen, wie wir bei diesen Batch-Operationen und jeder Operation Elemente zur Liste hinzufügen, Elemente zur Liste hinzufügen während wir diese Elemente generieren, diese Werte mit einigen Funktionen Dies ist jedoch bei Tupeln nicht der Fall. Wenn Sie versuchen, ein Tupel anzuhängen, erhalten Sie eine Fehlermeldung, da ein Tupel eigentlich überhaupt keine Anfügemethode Ebenso gibt es keine Methode zum Entfernen, wie es Methode zum Entfernen, wie Vier ist also nicht mehr da. Tupel haben allerdings den Vorteil, dass sie etwas schneller sind als Listen, aber man sollte sich überlegen, was man verwenden soll Ob Sie nun List oder Topples verwenden, Sie sollten sich überlegen, ob das Array , das Sie erstellen, im Laufe des Programms geändert wird oder Im Moment werde ich mich also nicht eingehender mit Stürzen und Is befassen. Aber wenn wir diese zehn Anwendungen während des Kurses erstellen , werden Sie die Hauptunterschiede zwischen den beiden verstehen , indem Sie sehen, wie sie in echten Programmen funktionieren 21. 21. Datentypen in der realen Welt verwenden +: Okay, Sie kennen jetzt einige der wichtigsten Python-Datentypen, aber ich wette, Sie sind immer noch verwirrt, wie diese Datentypen in der realen Welt verwendet werden Normalerweise würden Sie diese Daten beispielsweise in einer Excel-Datei oder einer Textdatei speichern. Macht es also Sinn, sie so oder so in ein Python-Wörterbuch zu schreiben ? Liste? Nein, tut es nicht. Es gibt tatsächlich Möglichkeiten, die Daten automatisch aus Ihrer Excel-Tabelle nach Python zu laden , um dieses Wörterbuch zu erstellen Sie müssen das Wörterbuch immer noch erstellen, aber Sie müssen die Daten nicht in die Python-Punkt-Py-Datei eingeben , wie ich es hier getan habe Sie werden einige spezielle Python-Erweiterungen verwenden , um die Daten hier zu laden. Dann verarbeiten Sie das Wörterbuch wie wir es hier gemacht haben. Aber mach dir keine Sorgen. Ich werde das behandeln und wir werden später im Kurs im Bewerbungsteil einige nette Bewerbungen haben später im Kurs im Bewerbungsteil einige nette . Bleib dran. 22. 22. Operationen mit Datentypen: Nehmen wir an, Sie haben eine Liste Lebensmittelartikeln und Sie haben ein Programm erstellt, und Sie haben diese Artikel in einer Python-Liste mit eckigen Klammern gespeichert . In Ihrem Programm können die Benutzer nun Artikel aus dieser Liste entfernen und hinzufügen. Entfernen und Hinzufügen sind also zwei Beispiele für Operationen , die Sie mit Listen ausführen können. Liste ist also ein Datentyp und kann verschiedene Operationen haben, die Sie auf einen Listendatentyp anwenden können Und dann haben Sie vielleicht an einer anderen Stelle in Ihrem Programm Text , und Sie können diesen Text großschreiben, sodass Großschreibung eine weitere Operation ist , die Sie auf einen Stream-Datentyp anwenden können Jeder Datentyp hat also seine eigenen Operationen. Das werden Sie also in diesem Abschnitt lernen. Das war also ein Einführungsvideo. Wir sehen uns im nächsten Video. 23. Fehlermeldungen in Python 3: In dieser Vorlesung werden wir uns ansehen, was in Python 3.10 in Bezug auf Fehlermeldungen neu ist in Python 3.10 in Bezug auf Fehlermeldungen neu Python 3.10 wurde im Oktober 2021 veröffentlicht und enthält einige Verbesserungen in Bezug auf Fehlermeldungen und auch andere Verbesserungen, die ich in den nächsten Videos in den nächsten Abschnitten eingehen werde nächsten Videos in den nächsten Abschnitten also an, Nehmen wir also an, Sie haben einen Ausdruck mit viel Nachdruck Sie möchten beispielsweise eine Zeichenfolge haben und das I-Zeichen in dieser Zeichenfolge durch ein Y-Zeichen ersetzen . Aber wenn Sie eine Klammer vermissen und das Programm mit Python 3.9 ausführen, haben wir natürlich den Syntaxfehler, weil die Syntax nicht korrekt ist, aber der Fehler ist nicht so Wir erhalten also beim Parsen den Syntaxfehler unerwartetes EOF. Sie wissen also immer noch nicht, was Sie in Ihrem Code falsch gemacht haben. Also musst du zurückgehen und es noch einmal lesen. Vergleichen Sie das jetzt mit Python 3.10. Wenn ich also zu Python 3.10 als Interpreter wechsle und den Code mit 3.10 ausführe, ist der Syntaxfehler diesmal Also Syntaxfehler, diese Klammer hier drin wurde nie geschlossen. Also dieser Jetzt wissen wir, dass, wenn wir hier eine Klammer beginnen, wir sie am Ende schließen sollten Das ist die erste Klammer, die offene Klammer. Ich sollte eine schließende Klammer haben. Also lass uns das hinzufügen Ein anderes Beispiel wäre, wenn Sie eine Liste haben, zum Beispiel eins, zwei, und dann fehlt Ihnen ein Komma, und wenn Sie mit Python 3.10 laufen, werden Sie wieder diesen Syntaxfehler haben : ungültige Syntax Vielleicht hast du das Komma vergessen und es zeigt uns mit diesen Pfeilen auf die Stelle, und es zeigt uns mit an der das Komma Wenn du das mit 3.9 vergleichst, ist das nicht die beste Erklärung Es heißt zwar ungültige Syntax, aber es heißt nicht ausdrücklich , dass hier ein Komma fehlt. Dennoch ist Python 3.10 besser darin, fehlende Kommas zu erkennen. Die Idee ist, dass Sie in Python 3.10 den Syntaxfehler und auch einige zusätzliche Informationen erhalten Lassen Sie uns dieses Video mit einem dritten Beispiel schließen. Wenn Sie einen Tippfehler machen, wir an, Sie haben Real Pace statt Replace geschrieben, und nehmen wir das Komma hier Also ist alles in Ordnung, außer diesem Tippfehler hier Wenn Sie das also zuerst mit 3.9 ausführen, erhalten Sie diesen Attributfehler Es besagt, dass das String-Objekt kein Attribut replace hat. Also heute hat das Attribut eigentlich kein richtiges Tempo. Und du fragst dich, ob replace gar kein Attribut von Zeichenketten ist . Also vergleiche das mit 3.10, 3.10 run, und das ist der Attributfehler Also meinten Sie ersetzen, das ist ein sehr expliziter Fehler und es hilft uns, diesen Fehler schnell zu beheben Deshalb wollte ich Python drei mit Python 3.10 vergleichen , um die Unterschiede in Bezug auf Fehler hervorzuheben Nun, im Kurs werden wir einen speziellen Abschnitt über Fehler haben, also wie man mit ihnen umgeht , wie man sie liest, wie man sich nicht über Programmierfehler frustriert, weil jeder Programmierer Fehler macht, also muss man wissen, wie man sie sich nicht über Programmierfehler frustriert wie man sie liest, wie man sich nicht über Programmierfehler frustriert, weil jeder Programmierer Fehler macht, also muss man wissen, wie man Im Moment bist du noch ein Anfänger, also schau dir weiterhin Videos an und du wirst immer besser in Python werden. Wir sehen uns im nächsten Video. 24. 24. Mehr Operationen mit Listen durchführen: Lassen Sie mich Sie nun mit Listendatentypen etwas vertrauter machen , indem ich Ihnen zeige, was Sie mit ihnen machen können Sie wissen bereits, dass Sie bei DR List nachfragen können, was Sie mit ihnen machen können Sie können die Attribute ignorieren, die mit einem doppelten Unterstrich beginnen und mit einem doppelten Unterstrich enden Sie sind im Grunde Attribute, die von Python intern verwendet werden, und selten werden Sie sie verwenden müssen. Im Moment können Sie sie einfach ignorieren und sich auf das konzentrieren, was Sie tatsächlich verwenden werden, nämlich dieses Set hier. Lassen Sie mich eine weitere Python-Shell öffnen und einige Operationen auf diese Liste in dieser Python-Shell anwenden . So können wir sehen, welche Methoden wir in diesem Fenster anwenden können , und wir können die Methoden in diesem anderen hier anwenden . Und ich möchte nicht, dass du dir nur im Dunkeln zeigst, was das macht. Ich möchte dir zeigen, wie du selbst herausfinden kannst , was diese Dinge bewirken. Verwenden Sie also immer die Hilfefunktion. List, lass uns die Append-Methode ausprobieren. Jetzt werde ich die Variable eingeben, aber Sie müssen nicht alles eingeben Sobald Sie mit der Eingabe dieses Variablennamens begonnen haben, können Sie die Tabulatortaste verwenden. Dadurch wird der Variablenname automatisch vervollständigt. Verwenden Sie dann eine Punktnotation und fügen Sie sie an, und dann zwei Klammern In der Klammer werden Sie also sehen, dass dafür Eigentlich ist es nur ein Argument. Es ist nur das Objekt selbst. Self bezieht sich auf die Liste selbst, und Objekt ist eigentlich was Sie an diese Liste anhängen möchten Nehmen wir an, Sie möchten 8.1 auf diese Weise anhängen. Wenn Sie die Temperaturen am Montag überprüfen, werden Sie feststellen, dass es jetzt einen weiteren Das ist also die Syntax von append. Sie ignorieren immer self, weil self automatisch als Argument an diese Methode übergeben wird und self im Grunde die eigentliche Liste selbst ist Versuchen wir es mit einer anderen Methode. Hier warten, um zu beenden, Hilfliste zu löschen. Wie funktioniert es? Nun, in diesem Fall sehen Sie, dass es keine Argumente gibt. Also, Montagstemperaturen , die einfach so klar sind. Und was es tut, es löscht einfach die Liste, es löscht alle Einträge Lassen Sie mich auch den Index ausprobieren und die Liste für Sie zum Ausprobieren übrig lassen. Index erhält tatsächlich einen Wert, einen Start und einen Stopp und gibt den Index des Werts zurück. Was ist also ein Index? Lassen Sie uns den Punktindex ausprobieren, der Wert mit Wert, den Python bedeutet , ist einer der Werte der Liste. Jetzt, da wir eine Liste ohne Werte haben, werde ich die Liste noch einmal so neu erstellen Das ist jetzt unsere Liste. Lassen Sie mich einen Index mit Klammern und dem Wert versuchen , sagen wir 8,8 Das wird eins zurückgeben. Warum? Das liegt daran, dass Listen eine Indexsynchronisierung im Hintergrund haben. Auch wenn wir es nicht sehen, ist jedes dieser Elemente einem Index zugeordnet. Der erste hat einen Index von Null. Der zweite hat einen Index von eins und der letzte hat einen Index von zwei. In diesem Fall und so weiter. In diesem speziellen Fall sehen wir nun auch dieses Argument und dieses andere für die Indexmethode. Wenn Sie diese Werte jedoch nicht übergeben möchten, können Sie einfach einen Wert übergeben. Also, wie ich es hier getan habe, 8,88 bedeutet das, dass 8,88 der Wert Standardmäßig ist Start gleich Null und Stopp entspricht diesem Wert Was sind also Start und Stopp? Nun, wenn es Null ist, wie es standardmäßig ist, bedeutet das, dass Sie nach 8,8 suchen, beginnend mit dem ersten Element der Liste. Der Interpreter startet die Suche also mit dem ersten Element, also dem Element mit dem Index Null, und wir werden nach 8,8 suchen, und er wird es finden und Ihnen sagen, dass es einen Index von eins hat Wenn Sie Python jedoch anweisen möchten, mit dem Element mit Index zwei zu beginnen, sagen wir, also eine Suche von hier aus zu starten und nach rechts von 7.5 vorzugehen, was zufällig keine weiteren Elemente enthält. Aber wie dem auch sei, also überspringst du diesen Teil der Liste. In diesem Fall Der Interpreter wird Ihnen sagen, dass 8.8 Zeitpunkt nicht in der Liste enthalten ist. Sie haben auch den Stopp , der standardmäßig diese große Zahl ist Wenn Sie also die Suche auf den Index auf der rechten Seite einschränken möchten , können Sie das auch tun. Aber standardmäßig werden Sie diesen Wert bei Null belassen. Und das wird dir sagen, dass die Zahl diesen Index hat. Mehr zur Indexierung finden Sie im nächsten Video. 25. 25. So greifst du auf Listenelemente zu: Zuvor habe ich Ihnen gezeigt, dass Sie die Indexmethode verwenden können, um den Index eines Elements abzurufen. Wie können wir nun das Gegenteil tun? Wie können wir einen Artikel anhand seines Indexes ermitteln? Nun, dafür müssen wir uns noch einmal die Liste der Attribute ansehen , die wir auf die Liste anwenden können. Und ich weiß, dass wir die Methode underscore get item underscore verwenden können die Methode underscore get item underscore Okay, ich weiß, ich habe Ihnen bereits gesagt, dass Sie diese Methoden selten verwenden werden, und tatsächlich benötigen wir diese Methode nicht für das, was ich jetzt tun werde, aber lassen Sie mich gleich erklären, warum, Sie werden es Das ist ein sehr geheimes Geheimnis von Python. Lassen Sie mich also weitermachen und get item mit doppelten Unterstrichen verwenden, und natürlich ist es eine Methode, also braucht sie diese runde Klammer Versuchen wir also, das Element mit Index eins zu bekommen . Welches wäre das? Nun, 8.8. Nun, das Geheimnis ist, dass Sie verwenden müssen dort nicht diese hässliche Methode mit diesen doppelten Unterstrichen Alles, was Sie tun müssen, ist diese Syntax zu verwenden, den Variablennamen so aufzurufen und dann offene und schließende eckige Klammern hinzuzufügen und dann innerhalb dieser Klammern einfach den Index einzugeben Dadurch erhalten Sie wieder den Wert, das Element für diesen Index. Obwohl Sie das tun, ruft Python im Hintergrund tatsächlich diese Methode auf und übergibt dieses Element, diesen Wert, als Eingabe für diese Methode. Das ist also eigentlich das, was im Hintergrund vor sich geht, aber mit Python können Sie es hier besser machen . 26. 26. So greifst du auf Listen-Slices zu: Ich habe hier eine Liste mit fünf Artikeln. Lassen Sie mich Ihnen zeigen, warum Sie eine n-Funktion verwenden , und Sie sehen, dass sie wirklich fünf Elemente hat. Jetzt können Sie nicht nur auf einzelne Elemente aus Ihrer Liste zugreifen , wie das Element mit dem Index drei, Null, eins, zwei, drei, 6.6, sondern auch auf Teile der Liste zugreifen. Nehmen wir an, 1-4, dann erhalten Sie eine weitere Liste. Die Ausgabe dieser Datei ist also ebenfalls eine Liste, und sie wird die Elemente mit Index eins, Index zwei und Index drei enthalten . Die Obergrenze ist nicht enthalten. Es ist nie in einem Python-Slice enthalten. Das ist also ein Slice, und das ist die Ausgabe des Slice. Versuchen wir, die ersten beiden Elemente der Liste zu finden. Die ersten beiden Elemente haben einen Index von Null und Eins. Also fangen wir mit Null an. Da wir auch das Element mit Index eins haben wollen, werden wir dort zwei schreiben, sodass wir eins bekommen. Das ist die Ausgabe. Der Index zwei ist also nicht enthalten, 7.5 ist nicht enthalten. Sie können dafür auch eine Abkürzung verwenden. Sie müssen nicht Null eingeben, wenn Sie alles mit dem ersten Element beginnen möchten. Dadurch erhalten Sie dieselbe Ausgabe. Ebenso können Sie, wenn Sie, sagen wir, die letzten beiden Elemente abrufen möchten , damit beginnen, Null, Eins, Zwei, Drei zu zählen. Drei, fange bei drei an, das hat einen Index von vier, also schreiben wir dort fünf. Obwohl wir die erwartete Ausgabe erhalten haben, sollten Sie dafür besser die Abkürzung verwenden. Das ist also intuitiver weil es Ihnen sagt, dass Sie vom Element mit Index drei bis zum letzten Element der Liste extrahieren Index drei bis zum letzten Element der Liste Also ohne zu wissen, wie viele Elemente die Liste enthält. In ähnlicher Weise extrahieren Sie hier vom allerersten Element bis zum Element mit Index eins nun bei großen Listen Wenn Sie nun bei großen Listen die letzten Elemente extrahieren möchten, macht es möglicherweise wenig Sinn, von Anfang an zu zählen, also eins, zwei, drei, vier, fünf, sechs usw. Aber Python hat ein anderes Indizierungssystem, und das werde ich Ihnen im nächsten Video zeigen. Und 27. 27. So verwendest du negative Indizes: Wie kommen wir also an den letzten Punkt dieser Liste? Nun, Sie können das tun, indem Sie auf die Liste und dann auf eckige Klammern und dann auf den Index des gewünschten Elements verweisen. 9,9 hat also einen Index von Null, Eins, Zwei, Drei, Vier, Vier Okay. Aber eine intelligentere Methode ist es, eine negative Indizierung zu verwenden, was bedeutet, dass Sie, anstatt zu zählen, einfach minus eins schreiben können und Sie 9,9 erhalten Jedes Element einer Python-Liste hat also zwei Indizes, einen negativen und einen positiven Index Also minus eins dafür, minus zwei dafür, minus drei, minus vier, minus fünf Also minus fünf ist eigentlich der erste Punkt, 9.1. Und natürlich können Sie das Aufteilen von Listen mit negativer Indexierung durchführen Aufteilen von Listen mit negativer Indexierung Versuchen wir, die letzten beiden Elemente zu finden. Um das Schneiden durchzuführen, müssen Sie also den Index des ersten Elements des Segments eingeben Das erste Element der Scheibe ist also 6,6 und 6,6 hat einen negativen Index von zwei Verwenden Sie eine Spalte, und dann möchten Sie hier nichts zuweisen, weil Sie alles wollen , was nach 6.6 kommt. Also einfach so, und du bist am Ende der Liste. In ähnlicher Weise können Sie zum Beispiel minus vier minus zwei machen , das ergibt 8,8 minus vier minus drei, und minus zwei ist nicht in der Schicht enthalten, weil ich Ihnen gesagt habe, dass die Obergrenze niemals in der Schicht enthalten ist. Du bekommst also nur dies und das. Sie können auch am Anfang der Liste beginnen , um 9.1 zu erhalten, den ersten Eintrag wie diesen. 28. 28. So greifst du auf Zeichen und Slices in Strings zu: Zu Ihrer Überraschung oder nicht, Zeichenketten haben auch ein Indexierungssystem Die gute Nachricht ist, dass sie genau das gleiche System wie Listen haben genau das gleiche System wie Listen Sie haben also positive und negative Indizierungen, und Sie können sie aufteilen und von ihnen aus auf Elemente zugreifen Lassen Sie mich eine kurze Demonstration machen. Zeichenfolge Hello gibt Ihnen die Zeichenfolge E, die immer noch eine Zeichenfolge ist. Hello ist eine Zeichenfolge, E ist auch eine Zeichenfolge, eine negative Indizierung und auch Slicing Eine coole Sache, die du tun kannst, ist, mich diese Liste holen zu lassen. Es ist also eine Liste, die verschiedene Arten von Objekten enthält. Und was Sie tun können, ist, darauf zuzugreifen, erraten Sie es? Nun, das ist die gelbe Schnur, also der erste Punkt auf der Liste. Dann können Sie eine Kettenindizierung verwenden, z. B. wenn Sie dort zwei eingeben , raten Sie mal, was Sie erhalten werden Nun, Sie erhalten das erste L weil es einen Index von zwei hat, also Null für H eins, für E, zwei für L. Weil dieser Teil hier ein eigenständiger Wert ist und dieser andere Teil das Element mit Index zwei dieses Werts erhält , der zufällig eine Zeichenfolge So einfach ist das. 29. 29. So greifst du auf Elemente in Wörterbüchern +: Haben Wörterbücher dasselbe Indexsystem wie Lass uns das herausfinden. Ich habe dieses Wörterbuch hier auf meiner Python-Shell, Studentenklasse. Versuchen wir also, vielleicht den zweiten Artikel zu bekommen. Nein, da steht Schlüsselfehler eins, was bedeutet, dass das Wörterbuch keinen Schlüssel mit dem Namen One Also, welche Schlüssel hat das Wörterbuch? Vielleicht derselbe Schlüssel. Ja. Wörterbücher haben also statt Ganzzahlen Schlüssel Eine Liste wäre also Zugriff. die Elemente der Liste würde über Ganzzahlen zugegriffen werden, die bei Null beginnen und bis zum letzten Element der Liste enden, dem Index des letzten Elements der Liste Bei Wörterbüchern ist das anders, wie Sie sehen können, und genau das macht Wörterbücher zu Wörterbüchern Sehen wir uns ein weiteres Beispiel dafür an, wie nützlich das ist. Nehmen wir an, Sie haben dieses Wörterbuch, vom Englischen ins Portugiesische. Es ist ein echtes menschliches Wörterbuch. Du hast da ein paar Wörter. Sagen wir in Suva auf Portugiesisch und die Sonne wird es sein. Entschuldigung, ich habe da einen Tippfehler. Codes. Also, wenn du die portugiesische Version von Sun willst, schreibst du das, und das gibt dir diese Version. In diesem Fall wäre es also sehr nutzlos, ganze Zahlen als Indizes zu Jeder Anwendungsfall hat also seine eigene Datenstruktur , die in Python verwendet werden kann. 30. 30. Weitere Grundlagen von Python: Funktionen und Konditionen: Hallo, willkommen zu einem neuen Video Dies ist ein Einführungsvideo zum Abschnitt Funktionen und Bedingungen. Jetzt betreten Sie also einen fortgeschritteneren Abschnitt von Python. Funktionen und Bedingungen sind einige fortgeschrittene Kernkonzepte von Python, und dies sind sehr grundlegende Blöcke, mit denen Sie Ihre Programme intelligenter und überschaubarer machen können Ihre Programme intelligenter und überschaubarer machen intelligenter und überschaubarer Sie machen Ihre Programme also intelligenter, indem Sie sie dazu bringen, Entscheidungen zu treffen, die Sie mithilfe von Bedingungen implementieren können Wenn Ihr Programm also einige Eingaben erhält und Sie nachdenken möchten, möchten Sie Ihr Programm dazu bringen, darüber nachzudenken, ob diese Eingabe in Ordnung ist oder nicht, und Sie möchten etwas tun, wenn diese Eingabe wahr ist , und etwas anderes, wenn diese Eingabe falsch ist Sie treffen also Entscheidungen in Ihrem Programm anhand eines bedingten Blocks. Und dann gibt es Funktionen auf der anderen Seite, Funktionen werden verwendet , um Codeblöcke einzuschließen, also ähnliche Codeblöcke. Es hilft dir, deinen Code zu organisieren. So könnte eine Funktion beispielsweise USD in Euro umrechnen. Diese Funktion macht also bestimmte Dinge und macht es gut. Es erhält also USD als Eingabe und gibt Ihnen Euro als Ausgabe. In der Funktion haben Sie also die mathematischen Operationen , die die Konvertierung durchführen. Bedingungen und Funktionen sind also zwei Dinge, die Sie in diesem Abschnitt natürlich anhand von Beispielen lernen werden. Wir sehen uns also im nächsten Video. 31. 31. So erstelle du deine eigenen Funktionen +: Zu Beginn des Kurses haben wir nach einer Mittelwert- oder Durchschnittsfunktion gesucht , die Python möglicherweise benötigt, um den Durchschnitt der Elemente der Zahlen einer Liste zu ermitteln. Und wir haben herausgefunden, dass Python einige grundlegendere Funktionen hat , wie Länge, um eine Reihe von Elementen einer Liste zu erhalten und Summe, um die Summe der Zahlen einer Liste zu bilden, aber es hat keine Mittelwertfunktion. Am Ende haben wir das gemacht. Wir hatten diese Liste. Wir haben die Summe mit der Summenfunktion berechnet, die Länge berechnet, also die Anzahl der Elemente mit der Längenfunktion, und dann die Division zwischen Summe und Länge durchgeführt, um den Mittelwert zu erhalten. Die Tatsache, dass Python keine Mittelwertfunktion hat , bedeutet jedoch nicht, dass wir keine eigene Mittelwertfunktion erstellen können. Was wir jetzt tun werden, ist, unsere eigene Mittelwertfunktion zu erstellen. Um Funktionen in Python zu erstellen, verwenden Sie das Schlüsselwort def und wählen dann einen Namen für Ihre Funktion Der Name muss den gleichen Benennungsregeln folgen wie bei Variablen Er kann also nicht mit einer Zahl beginnen, er kann nicht mit einem mathematischen Operator beginnen. Sagen wir, dann benutzt du runde Klammern und innerhalb dieser Klammern endet die erste Zeile mit einer Spalte In der Klammer können Sie optional einige Parameter Ihrer Funktion eingeben Mit anderen Worten, Parameter sind Eingaben, die Ihre Funktion erhält und die diese Eingabe verarbeitet und eine Ausgabe erzeugt Die Eingabe wäre in unserem Fall eine Liste. Hier müssen Sie jedoch einen Namen angeben, wiederum die gleichen Regeln wie bei Variablen gelten. Sagen wir meine Liste. Okay, dann willst du dort die Eingabetaste drücken und du siehst automatisch den Visual Studio-Code. Also hat der Editor die nächste Zeile mit vier Leerzeichen eingerückt, eins, zwei, drei, vier Das verlangt die Syntax also nach der ersten Zeile. Nachdem Sie also definiert haben, welchen Namen Sie für Ihre Funktion haben wollen und welche Parameter Sie wollen, müssen Sie die nächsten Zeilen einrücken Entweder macht es Ihr Editor automatisch, aber wenn er es nicht tut, ziehen Sie eins, zwei, drei, vier, vier, vier, ziehen Sie dort vier Leerzeichen Sie können es auch mit einem Leerzeichen oder nur einem Leerzeichen erstellen. Würde auch funktionieren, aber es wird empfohlen, vier Leerzeichen zu verwenden. Jeder verwendet vier Leerzeichen, weil der eingerückte Code besser sichtbar ist und Ihr Code dadurch schrecklicher wird Dann können Sie mit der Berechnung des Mittelwerts beginnen. Sagen wir den Mittelwert. Ich werde es so nennen, damit ich es nicht mit dem Funktionsnamen verwechsle Das wäre die Summe meiner Liste, geteilt durch die Länge meiner Liste Und als Nächstes wollen wir das Schlüsselwort return verwenden. Und darauf folgt das , was Sie zurückgeben möchten. Nun, wir wollen den Mittelwert zurückgeben. Nun, spar dir das. Und lass mich ein Terminal öffnen. Ich möchte dieses Skript jetzt ausführen. Lassen Sie mich Ihnen zeigen , was passieren wird. Eigentlich wird nichts passieren. Nichts passiert , denn Python liest nur diese Definition. Das ist wie eine Blaupause. Sie haben deklariert, was Ihre Funktion tun soll, aber Sie haben Python nicht angewiesen , Ihre Funktion auszuführen. Um Ihre Funktion auszuführen, möchten Sie die Funktion aufrufen einen Eingabewert für den von Ihnen definierten Parameter übergeben. Wenn Sie drucken möchten, müssen Sie die Klammer dort öffnen, dort Klammer schließen, speichern, nicht vergessen Und das ist der Mittelwert dieser drei Zahlen. Weise kann ich das einfach Auf diese Weise kann ich das einfach mit vielen Eingabewerten ausprobieren. Einfach so, ich muss hier nichts umschreiben. Das ist das Schöne an einer Funktion. Sie können die Ähnlichkeit hier also sehen. So wie wir die Summenfunktion verwenden, verwenden wir die Mint-Funktion auf die gleiche Weise. Summe erhält also diesen Eingabewert Man erhält diesen Eingabewert. Das ist zufällig eine Variable. Das ist zufällig ein direkter Wert, aber das spielt keine Rolle. Wenn Sie die Art des Mittelwerts, den Mittelwert und die Art der Summe überprüfen , werden Sie feststellen , dass Mean eine Funktion ist. Das wurde also ausgedruckt. Das wurde dadurch ausgedruckt. Also Mittelwert ist eine Funktion und nochmal Summe, es ist eine Funktion, aber es ist eine eingebaute Funktion. Es ist also im Python-Interpreter eingebaut. Es wurde vom Python-Kernentwicklungsteam entworfen, und diese Funktion wurde von mir, dem Programmierer, entworfen So erstellen und rufen Sie eine Funktion in Python auf. 32. 32. Wann solltest du Print und Return verwenden +: Es sei darauf hingewiesen, dass Ihre Funktion, wenn sie keine Rückgabeanweisung ( save, execute ) hat, implizit ein Objekt zurückgibt, das kein Objekt ist Keines ist ein bestimmtes Objekt in Python, was nichts bedeutet. Es ist keine Ganzzahl, es ist kein Float, es ist kein String, es ist einfach keiner. Es bedeutet nichts. Python, was es tut ist, wenn es die Rückgabeanweisung nicht im Hintergrund findet, gibt es keine zurück. Wenn Sie das also ausführen, Ups, ein Einrückungsfehler. Das ist eine gute Sache Sie sehen, dass dieser ganze Block hier dieselbe Einrückungsebene haben muss Wenn Sie hier vier Zeilen eingerückt haben, müssen Sie auch hier vier Zeilen einrücken Der Einzug muss also konsistent sein. Das sieht richtig aus. Also haben wir die gleichen Ausgänge, keine hier und keine da. Manche Leute machen diesen Fehler. Anstatt zurückzukehren, verwenden sie Printmedien. Anstatt Return zu verwenden, verwenden sie eine Druckfunktion. Der Mittelwert, der halbwegs funktioniert. Es gibt also immer noch den Wert zurück und es gibt auch keinen zurück. Was hier vor sich geht, ist, dass , wenn Sie die Funktion hier aufrufen, Python, wenn Sie die Funktion hier aufrufen, all diese Zeilen ausführt, also berechnet es den Mittelwert geht dann zur nächsten Zeile Also Zeile für Zeile wird es den Mittelwert drucken, also wird es den Mittelwert hier ausdrucken und dann wird es nach einer Rückmeldung suchen. Es findet es nicht, also gibt es auch nichts zurück. Das Problem dabei ist, dass, wenn Sie versuchen , andere Operationen mit Ihrem Mittelwert durchzuführen, sagen wir, mein Mittelwert gleich der Mittelwertfunktion Null, Drei und Vier ist . Okay. Und ich möchte meinen Mittelwert plus zehn ausdrucken. Ich würde also erwarten, dass mir das den Wert Sieben gibt, das ist die Summe geteilt durch drei, zwei Punkt etwas plus zehn, 12 Punkt etwas. Aber mal sehen, was mir das geben wird. Also das wird mir stattdessen einen Typfehler geben. Ich habe versucht, den Nicht-Typ hinzuzufügen, der keiner ist. Das ist also ein Nichttyp. Das ist der Typ dieses Werts. Es versucht, das auf zehn zu addieren. Mein Mittelwert ist also keiner , weil er keinen zurückgibt. Ein Dolmetscher wird versuchen, das zu zehn zu addieren . Das ist nicht möglich. Deshalb sollten Sie Print nicht verwenden. Wenn ich das stattdessen durch return ersetze, die Klammern entferne, save, execute, erhalte ich 12,3 Das ist der Durchschnitt plus zehn. Dies bedeutet jedoch nicht, dass Sie das Drucken nicht in Ihren Funktionen verwenden können. Das können Sie tatsächlich tun. Nehmen wir an, Sie möchten nur einige Informationen ausdrucken . Stell es dir Funktioniere, studiere und führe das aus. Sie erhalten hier die Ausgabe von print, und dann gibt Python den Mittelwert zurück. Sie erhalten den Mittelwert, speichern ihn hier, die Ausgabe Ihrer Funktion, aber der Wert der Funktion ist immer das, was Sie hier zurückgeben. Wenn du das siehst, verwende also immer Return in deinen Funktionen, es sei denn, du hast einen ganz besonderen Grund dafür. 33. 33. Einführung in Conditionals: In den vorangegangenen Vorlesungen haben wir diese Funktion definiert, die in der Lage ist, den Mittelwert einer Liste zu berechnen Was passiert jedoch, wenn statt einer Liste als Eingabe wir statt einer Liste als Eingabe ein Wörterbuch übergeben Schülernoten finden Sie in diesem Wörterbuch hier. Mal sehen, was passieren wird. Nun, da steht ein Operandentyp, der nicht unterstützt wird. Bei der Summenfunktion wird also ein Fehler auftreten weil sie versucht, Zeichenketten und ganze Zahlen zu addieren, und diese Funktion ist nicht für die Verarbeitung von Wörterbüchern konzipiert Sie ist für die Verarbeitung von Listen konzipiert. Wie können wir diese Funktion also so einrichten, dass sowohl Listen als auch Wörterbücher verarbeitet Wir können das mit Bedingungen tun. Schauen wir uns in den nächsten Videos an, wie das geht. 34. 34. Benutze die If-Bedingung: Diese Funktion gibt den Mittelwert einer Liste zurück, aber wir wollen sie intelligenter machen. Wir möchten, dass die Funktion den Mittelwert zurückgibt auch wenn der Eingabewert ein Wörterbuch ist. Wenn der Eingabewert also eine Liste ist, wendet er einen bestimmten Algorithmus an und gibt den spezifischen Wert zurück, was ein Mittelwert ist, wenn es sich um ein Wörterbuch handelt, wird es prüfen, ob es sich um ein Wörterbuch handelt, und den entsprechenden Algorithmus anwenden , der den Mittelwert eines Wörterbuchs berechnet Wir wissen also, dass einige Montagstemperaturen geteilt durch die Länge der Montagstemperaturen den Mittelwert der Liste ergeben Ähnlich verhält es sich mit Schülernoten, einem Wörterbuch, dessen Werte, die Summe seiner Werte geteilt durch die Länge des Notenwörterbuches, den Mittelwert ergeben. Deshalb möchten wir, dass unsere Funktion das überprüft und eine Entscheidung trifft. Das ist ein Parameter. Lassen Sie mich ihn in einen Wert ändern. Value ist ein aussagekräftigerer Name da das, was wir verarbeiten, nicht nur eine Liste sein wird, sondern es kann sich auch um ein Wörterbuch handeln. Und dann muss unter der Funktion alles eingerückt werden Sie können sehen, dass der gesamte Funktionstext eingerückt ist. Der Bedingungsblock , den ich hier schreiben werde , wird ebenfalls eingerückt sein Es beginnt damit, dass wir, wenn Sie sich erinnern, zu Beginn des Kurses eine Typfunktion verwendet haben, die den Typ eines Objekts zurückgibt Das ist zum Beispiel ein Wörterbuch, ein leeres, aber es ist immer noch ein Wörterbuch. Was Sie hier also tun können, ist zu sagen: Ich gebe Wert, doppelten Zuweisungsoperator ein, was gleich bedeutet. Es ist ein Vergleichsoperator, ich überprüfe die Gleichheit. Wenn das ein Diktat ist, eine Spalte, geben Sie ein, und es muss mit vier Leerzeichen eingerückt werden Sie sehen also, dass es sich um eine weitere Einrückungsebene handelt. Es ist eins hier für mich, und das ist für die Funktion Also hier ist der Mittelwert gleich der Summe der Werte, die Werte durch die Länge des Werts dividieren. Das ist also ein Wörterbuch, diktiert Punktwerte und Länge des Wörterbuches Ich muss den Summenfunktionsaufruf dort so schließen und eingeben, wenn Sie mit I-Block fertig sind Also, wenn das alles ist, was du überprüfen willst, dann sagst du etwas anderes, und wir haben diesen Code , der auch unter s eingerückt werden muss, und das war's Lass mich das versuchen. Mit den Noten der Schüler und dem Wörterbuch als Eingabe haben wir diesen Wert hier. Wenn ich die Temperaturen vom letzten Montag verwendet habe , erhalte ich den anderen Wert , der der Mittelwert der Montagstemperaturen ist. Das ist also eine Wenn- und Sonst-Bedingung. Aber lassen Sie es mich im nächsten Video Zeile für Zeile erklären. 35. 35. Ein Konditional, das Zeile für Zeile erklärt wird: Also, was ist in diesem Drehbuch los? Lassen Sie es mich Zeile für Zeile erklären. Python führt die Funktionsdefinition aus, tut aber nichts weil es nur eine Funktionsdefinition Python macht Dinge, wenn es einen Funktionsaufruf findet, wie diesen hier. Hier rufen wir also die Funktion auf und der Eingabewert für diese Funktion ist die Montagstemperatur, was dieser Liste entspricht. Diese Liste wird in dieser Variablen gespeichert. Ein Wert entspricht also dieser Liste. Was also passiert, ist, dass der Interpreter prüft, ob der Typ dieser Liste tot ist Wenn das stimmt, wird er diese Zeile hier ausführen. Ich werde die Ausgabe dieses Ausdrucks der Variablen Mittelwert zuweisen . Dies ist in diesem Fall jedoch nicht der Fall , da der Typ der Liste nicht abhängig ist. Python wird diese Zeile also nicht ausführen. Es wird zur nächsten Zeile gehen. Also, wenn das nicht wahr wäre, dann wird es diese Sache hier machen. Der Mittelwert entspricht also der Summe der Liste geteilt durch die Länge der Liste, was etwa 9,26 entspricht Das ist also der aktuelle Wert des Mittelwerts, also endet hier der Einzug Return befindet sich also außerhalb des I- und Else-Blocks. Das kannst du hier sehen. Es muss draußen sein. Der bedingte Block endet also hier und der aktuelle Wert des Mittelwerts wird von der Return-Anweisung zurückgegeben. Sie erhalten also den Mittelwert für diese Liste. Wenn das stattdessen die Note eines Schülers wäre, würde das Wörterbuch als Wert gespeichert , und wenn der Typ des Werts dict ist, ja, es ist dict Der Mittelwert wird dem entsprechen. Also zum Mittelwert des Wörterbuchs. Und wenn diese Bedingung wahr ist, wird sie ausgeführt und Python ignoriert alles, was unter anderem steht. Ich habe alles gesagt , was unter ls steht, was alles bedeutet, was unter else steht Die Kinder von Else sind also sozusagen Return of the Mean kein Kind von ls Es steht nicht unter ls, es ist unabhängig. Es hat seine eigene Einrückungsebene. Der aktuelle Wert des Mittelwerts ist also dieser hier drin. Also gib den Mittelwert zurück, wir geben tatsächlich den Mittelwert für das Wörterbuch zurück. Der da drin. 36. 36. Weitere Informationen zu Conditionals +: Nun, dieser bedingte Block befindet sich zufällig innerhalb einer Funktion, kann sich aber auch außerhalb einer solchen Funktion Und sagen wir, drei größer als eins, mehr drucken, mehr drucken sonst Drucken, nicht größer. Und du wirst größer werden. Was ein bedingter Block überprüft prüft tatsächlich, ob dies wahr ist. Also wahr ist eigentlich ein anderer Typ in Python, genau wie Ganzzahlen, Leads und Strings True ist ein anderer Typ. Das ist also das Äquivalent zu if true, print greater, else, print, not greater. Also wahr ist immer wahr. In ähnlicher Weise gibt der Typ Drei, z. B. ist gleich t, wahr zurück Das ist es also, was wir hier auch tun. Es gibt jedoch eine andere Methode, die in Python als besser angesehen wird, ist die Verwendung von Instanz als Instanzwert, und Sie möchten hier so nach Wörterbüchern suchen Führen Sie es aus und Sie erhalten dieselbe Ausgabe. Zum Beispiel erhalten Sie mit drei Ints dieselbe Ausgabe. Sie können beide verwenden, aber aus einigen fortgeschrittenen Gründen, die ich jetzt nicht näher eingehen werde , weil sie aus dem Zusammenhang gerissen sind. An dieser Stelle ist es natürlich besser, diese Instanz zu verwenden. Nun, Sie haben dieses Beispiel gesehen, bei dem ich verwendet habe , wenn drei größer ist als eins, und ich habe größer und nicht größer ausgedruckt. Wir könnten auch diese drei Fälle haben Drei ist größer als eins, drei ist gleich eins und drei ist kleiner als eins. In diesem Fall brauchen wir etwas anderes, wenn ein anderes nicht ausreicht. Ich werde dir im nächsten Video zeigen, wie wir das machen können. 37. 37. Den Elif-Konditional-Modus verwenden: Ich habe diese beiden Variablen hier, jede von ihnen hat einen Wert und lass mich eine Bedingung schreiben, die etwas anderes macht, je nachdem, ob X größer, gleich oder kleiner als Y ist . Wenn X größer als Y ist, X ist größer als Y. Wenn X gleich Y ist, ist print A S gleich Y. Was bleibt also, was ist Wenn X nicht größer und nicht gleich ist, nun ja, s. Wenn Sie also mehr Bedingungen zu überprüfen hätten, können Sie mit ob das und L dies und das und so weiter fortfahren und L dies und das und Aber wenn Sie fertig sind, können Sie Ls verwenden. Drucken, also muss es sein, dass X kleiner als Y ist. Und so bekommen wir, dass X größer als Y ist 38. 38. Weißraum +: In dieser Vorlesung möchte ich die Verwendung von Leerraum erläutern. Also, wann man einen Leerraum benutzt, wann man mehr als einen benutzt und wann nicht. Um dir das zu erklären, habe ich hier ein Drehbuch mit drei Teilen. Jeder der Teile wird das Gleiche tun. Der erste druckt also A, aA und drei als aus , und dann B, hier und dann C. Also beim ersten, hier habe ich ein, zwei, drei, vier, fünf, sechs, sechs, sechs Leerzeichen eingegeben drei, vier, fünf, sechs, sechs, sechs Leerzeichen Das wird also funktionieren. Wie Sie hier sehen können, erhalten Sie die Ausgabe korrekt, aber das ist keine gute Praxis. Auch wenn das funktionieren wird, ist es keine gute Vorgehensweise, da der Code nicht gut lesbar ist. Das ist also ein Problem mit diesem ersten Block. Und hier im zweiten Block repariere ich das. Der Platz hier ist genau richtig. Im Grunde willst du Dinge mit Leerzeichen trennen. Wenn es um Operatoren wie die Vergleichsoperatoren oder Plus oder Minus oder Multiplikation geht die Vergleichsoperatoren oder Plus oder , funktioniert der Code auch dann, wenn Sie keine solchen Leerzeichen haben Um den Code lesbarer zu machen, ist es jedoch besser, auch einige Leerzeichen zwischen den Operatoren zu haben auch einige Leerzeichen zwischen den Operatoren Das Leerzeichen zwischen I und einer Zahl ist ein Muss. Wenn Sie das haben, funktioniert der Code nicht. Sie erhalten eine ungültige Syntax. Es ist jedoch kein Leerzeichen zwischen Operatoren in Ordnung. Das ist also ein Problem in diesem Block hier , dass Sie diesen Ausdruck ohne Leerzeichen haben. In bestimmten Fällen verwende ich manchmal keine Leerzeichen in den Videos, weil ich Ihnen den Text in größeren Schriftarten zeigen möchte Ihnen den Text in größeren Schriftarten zeigen Deshalb muss ich bei weniger Leerzeichen Abstriche machen, damit ich mehr Texte auf dem Bildschirm unterbringen kann. Wenn Sie also keinen guten Grund dafür haben, verwenden Sie bitte Leerzeichen ein Leerzeichen. Dann ist das hier in Ordnung. Ein Leerzeichen hier, eins hier und eins da, und dann nach der Kolumne, das solltest du wissen. Ich habe dir schon von Indentation erzählt. Nach einer Spalte steht immer Einrückung. Einzug bedeutet mindestens ein Leerzeichen. Das würde auch so funktionieren, aber es hat sich bewährt, vier Leerzeichen zu haben, vier Das ist richtig. Und wenn Sie mehr Code in Ihrem Skript haben, ist es gut, die Dinge durch Umbruchlinien zu trennen , um Logiken zu trennen Wenn Sie dort also einen bedingten Block haben, müssen Sie ihn Zeile für Zeile schreiben Hier gibt es keine solchen Bruchlinien. Das würde auch funktionieren, aber bitte verwende keine Umbruchlinien, um deinen Code lesbarer zu machen. Sobald der bedingte Block endet, haben Sie jedoch einen weiteren logischen Block Hier gibt es keine klaren Regeln, sondern verwenden Sie einfach die Logik. Deshalb fand ich es gut, diese Druckfunktionen ohne Ziegelsteine dazwischen zu haben . Also, wenn ich hier eine weitere Funktion hinzufügen würde, mache ich eine Ziegellinie und dann erstelle ich hier eine Funktion und so weiter. Und natürlich verwende Indentation auch für Funktionen. Nach der Spalte kommt also immer der Einzug. Das ist es mehr oder weniger um Space Wide Space in Python. 39. 39. Weitere Grundlagen von Python: Verarbeitung von Benutzereingaben: Willkommen zu einem Abschnitt des Kurses. Hier lernst du, wie du mit dem Benutzer über dein Python-Programm interagierst . So kann Ihr Python-Programm Eingaben vom Benutzer erhalten. Es kann den Benutzer zu einigen Eingaben auffordern, und der Benutzer gibt einige Eingaben ein, und das Programm, so dass Ihr Python-Skript diese Eingabe erhält , verarbeitet und dann einige Ergebnisse liefert. Lassen Sie uns also in diesem Abschnitt sehen , wie Sie Eingaben vom Benutzer erhalten, sie verarbeiten und einige Ausgaben erzeugen können. Ich werde im nächsten Video mit dir sprechen. Danke. 40. 40. Mehr zur Benutzereingabe lernen: Wie Sie aus den vorangegangenen Vorlesungen wissen, haben wir diese Funktion definiert, und hier rufen wir sie auf, sodass sie prüft, ob die angegebene Temperatur höher als sieben ist , und sie gibt warm zurück, wenn das wahr ist, und kalt, wenn die Temperatur gleich sieben oder weniger als sieben ist . Das ist in Ordnung. Aber was nützt diese Funktion in einer realen Umgebung? Also, wer gibt diesen Input? Sie als Programmierer schreiben diese Funktion für jemand anderen, damit dieser sie verwenden kann Sie erwarten jedoch nicht, dass sie die Python-Datei bearbeiten , wie ein Editor wie Visual Studio-Code oder andere Editoren. Und dann können Sie ihnen nicht einfach sagen, zu Zeile 7 gehen und den Wert ändern dass sie zu Zeile 7 gehen und den Wert ändern und dann diesen Code ausführen sollen, um je nach Wert unterschiedliche Ausgaben zu erhalten. Wie wäre es also, den Benutzer aufzufordern, einen Wert einzugeben? Und dann gibt der Benutzer den Wert ein, und dann erhalten wir diesen Wert und verarbeiten ihn in unserer Funktion In diesem Fall erhalten wir diesen Wert und fügen ihn hier in den Funktionsaufruf ein. Lass uns das machen. Also haben wir da eine Funktion. Wir wollen einen Wert vom Benutzer erhalten. Um einen Wert vom Benutzer zu erhalten, verwenden Sie die Eingabefunktion. Die Eingabefunktion erhält ein Argument, und das ist die Nachricht, die Sie dem Benutzer in der Befehlszeile anzeigen möchten . Geben Sie beispielsweise Temperatur eingeben ein. Fügen Sie dort vielleicht eine Spalte ein, wenn Sie möchten, Sie können schreiben, was Sie möchten. Lassen Sie mich das Skript speichern und ausführen. Sie sehen jetzt, dass ich es ausgeführt habe, und diese Eingabefunktion friert die Ausführung eines Programms ein und wartet auf Benutzereingaben in der Befehlszeile Wenn ich hier also etwas wie Sieben eingebe, wird das in diesem Fall passieren, dass dieser Ausdruck hier gleich Sieben sein wird Da wir hier jedoch nichts gemacht haben, passiert nichts, wenn wir diesen Wert ausdrucken , zum Beispiel Sieben. Sie erhalten den Wert davon ausgedruckt , der sieben ist. Da kannst du also alles hineinlegen, was du willst. Hallo, und du wirst dort high, ausgedruckt. Was herauskommt, ist, dass Sie es, anstatt es auszudrucken , es zuerst in eine Variable einfügen möchten. Das würde es lesbarer machen. Verwenden Sie also Ihre Eingabe, und dann können Sie mit dieser Variablen machen, was Sie wollen , z. B. sie verringern. Drucken Sie also die Version in Kleinbuchstaben aus. Hallo ihn. Hi Hi bekommst du also mit Kleinbuchstaben. Okay, zurück zu unserer Funktion. Lassen Sie mich jetzt versuchen, die Ausgabe der Wetterbedingungsfunktion mit einem Wert von, naja, Benutzereingabe auszudrucken Ausgabe der Wetterbedingungsfunktion mit einem Wert von, naja, , unabhängig davon, was der Benutzer als Eingabe eingibt. Also führe ich das Programm jetzt aus. Das Programm fragt mich nach der eingegebenen Temperatur. Das Programm fordert mich auf, eine Temperatur einzugeben, sodass die Ausführung zu diesem Zeitpunkt eingefroren ist. Diese Zeile wurde noch nicht ausgeführt. Sie wird ausgeführt, nachdem wir hier einen Wert eingegeben und die Eingabetaste gedrückt haben. Lassen Sie mich also sechs aufschreiben. Lass uns sehen, was wir dieses Mal bekommen werden. Wir bekommen einen Fehler. Lesen wir den Fehler sorgfältig durch. Es geht um die Datei Basics Punkt PY, was unsere Datei ist, okay? Der Fehler ist zuerst in dieser Zeile hier aufgetreten. Also hier, Wetterbedingungen und Benutzereingaben ausdrucken. Als Python versuchte, diese Zeile auszuführen, konnte es dies nicht tun. Und warum? Nun, du musst dem Fehler folgen. Also immer noch Line Basics, das ist Zeile zwei. Diese Linie. Als Python also versuchte, diese Zeile auszuführen , rief diese Zeile einige andere Dinge im Skript auf. Und der Fehler war in dieser zweiten Zeile. Als der Funktionsaufruf also versuchte, die Funktion aufzurufen, versuchte er, diese Zeile auszuführen. Bei der Temperatur versuchte es also, fünf mit sieben zu vergleichen. Und dann bekam es diesen Fehler, als es versuchte, fünf mit sieben zu vergleichen. Also, als es versuchte, diese Zeile auszuführen, anderen Worten, schau, was darin steht. Geben Sie einen Fehler ein. Dieser Operator wird zwischen den Instanzen von string und integer nicht unterstützt. Also string und int, was bedeutet, dass dies eine Zeichenfolge war, und das war eine Ganzzahl. Unsere Benutzereingabe war also sieben, wurde hier übergeben, und das wurde mit sieben verglichen. Es scheint, dass unsere Eingabe, die Benutzereingabe, eine Zeichenfolge war, und das ist der Punkt, den ich hier ansprechen wollte , denn welche Eingabe auch immer der Benutzer hier eingibt, auch wenn es eine Zahl ist, Python konvertiert sie tatsächlich in auch wenn es eine Zahl ist, eine Zeichenfolge. Sieben werden also tatsächlich in eine Zeichenfolge umgewandelt, z. B. mit Anführungszeichen oder doppelten Anführungszeichen in Python. Aber das lässt sich leicht beheben. Was Sie tun können, ist, diesen Wert, eine Zeichenfolge 7 ist , zu konvertieren, Sie können ihn in einen Float konvertieren. Seien Sie vorsichtig mit Klammern. Float ist also eine Funktion. Es hat hier eine offene Klammer und hier eine schließende Klammer Die Eingabe ist auch eine Funktion mit eigenen öffnenden Wenn ich das jetzt mache, Temperatur von fünf, werde ich die richtige Antwort bekommen Und lassen Sie mich Ihnen gegenüber transparent sein. Lassen Sie uns noch einmal Benutzereingaben abrufen, Eingaben eingeben. Lassen Sie mich jetzt die Art der Benutzereingabe ausdrucken. Führen Sie aus und sechs, Sie werden sehen, dass sechs tatsächlich eine Zeichenfolge ist. Deshalb wandle ich es in einen Float um, sodass sechs dieses Mal tatsächlich ein Float ist, was so aussieht. Sie können die tatsächliche Zahl hier ausdrucken , die tatsächliche umgerechnete Zahl, die Float-Version der Zahl, erneut ausführen, 6.0. Sie können hier auch int verwenden, wenn Sie möchten , sechs, sodass Sie sechs erhalten, was natürlich 6,0 entspricht. Aber Floats wären bessere Wahl, weil ich dir zeigen kann, warum Wenn Sie beispielsweise 6.3 eingeben, kann es nicht konvertiert werden, weil das so ist, als würde man Int, 6.3 in doppeltem Code ausführen 6.3 in doppeltem Code Int wird also verwirrt sein und nicht wissen, wie man das in eine Ganzzahl umwandelt. Es konvertiert jedoch sechs, wenn es eine einfache Sechs ohne Dezimaltrennzeichen wäre. Float konvertiert leider sowohl sechs als auch 6,3. So verwendet man Benutzereingaben in Python. 41. 41. String-Formatierung +: Wie würden Sie ein Programm erstellen, das sich verhält? Auf diese Weise werden Sie nach Ihrem Namen gefragt und Sie geben Ihren Namen als Benutzer ein. Das Programm begrüßt Sie, gibt eine Nachricht mit Hallo und Ihrem Namen sowie ein Ausrufezeichen am Ende der Zeichenfolge aus und Sie geben Ihren Namen als Benutzer ein. Das Programm begrüßt Sie, Das Programm begrüßt Sie gibt eine Nachricht mit Hallo und Ihrem Namen sowie ein Ausrufezeichen am Ende der Zeichenfolge Nun, das machst du mit zwei Dingen. Zuerst benötigen Sie die Eingabefunktion, um den Benutzer um eine Eingabe zu bitten , um den Benutzer zur Eingabe aufzufordern, und dann benötigen Sie eine Zeichenkettenformatierung. So sieht die Zeichenkettenformatierung in Python aus. In der ersten Zeile erhalten wir also die Benutzereingabe, speichern diese Eingabe als Zeichenfolge in der Benutzereingabe und erstellen dann eine Variable. In dieser Variablen speichern wir die Nachricht, die wir erstellen. Und das hier ist ein Ausdruck zur Formatierung von Zeichenketten. Also wollen wir Hallo ausdrucken und dann ein Leerzeichen haben, und dann wollen wir den Namen des Benutzers ausdrucken, also den Wert, den der Benutzer eingibt. Und das hier, Prozentsätze, ist eine spezielle Zeichenfolge in Python. Dann haben wir ein Ausrufezeichen, das eine normale Zeichenfolge ist Und ein doppeltes Anführungszeichen. Also das ist etwas Besonderes hier. Und nach der Zeichenfolge möchten Sie kein Komma setzen Sie möchten nur diesen Prozentoperator verwenden und dann eine Variable verwenden Jetzt wird der Wert dieser Variablen den Prozentsatz S ersetzen . Stattdessen erhalten Sie also Hallo und Ihren Namen Nun, diese Methode der Zeichenkettenformatierung, bei dieser Prozentsatz S hier und der Prozentoperator hier verwendet werden, gilt auch für Python zwei und Python drei. Jetzt gibt es eine weitere Methode, die in Python 3.6 eingeführt wurde. Die Methode, die ich jetzt vorstellen werde, funktioniert also nicht, wenn Sie sie mit einer Python-Version vor 3.6 ausführen . Die Methode sieht so aus. Lassen Sie uns die gesamte Zeichenfolge erneut in einer Variablen speichern, sodass es sich um eine Zeichenfolge mit doppelten oder einfachen Anführungszeichen handelt, was auch immer Sie bevorzugen. Ich verwende doppelte Anführungszeichen. Also hallo, und du benutzt diese geschweiften Klammern. Und darin gibst du den Namen der Variablen ein, welchen Wert du an dieser Stelle haben möchtest Nun, das ist noch nicht alles. Also, wenn ich das speichere und den Code ausführe und sage: Füge ihn hinzu, wird es diese Zeichenfolge zurückgeben. Also müssen wir hier etwas anderes tun. Was wir tun müssen, ist, ein Präfix F direkt außerhalb des Codes hinzuzufügen . Das ist also die Zeichenfolge. Dieses F geht außerhalb des Codes. Wenn ich das Skript jetzt speichere, führe es erneut aus, schreibe meinen Namen, und jetzt bekommen wir die erwartete Ausgabe. Beachten Sie, dass wir hier zwei Variablen mit demselben Namen haben , und was passieren wird, ist, dass Python zuerst ein Skript von oben nach unten ausführt, also die erste Zeile ausführt, es führt die zweite Zeile aus, sodass es hello audit in der Nachrichtenvariablen speichert Aber dann überschreiben wir diese Variable. In diesem Fall wird die Zeichenfolge also in diese Nachrichtenvariable geschrieben Also egal, wo Sie hier erstellen, welches Objekt Sie hier in der Variablen speichern, dieses Objekt ist das aktuelle Objekt , auf das sich diese Variable bezieht. In diesem Fall drucken wir das Objekt aus, das Sie hier erstellt haben, was zufällig Hello Audit heißt. Welches solltest du verwenden? Nun, wenn Sie glauben , dass Ihr Projekt mit Python 3.6 oder höher ausgeführt wird , dann verwenden Sie diese bessere Version Es ist besser lesbar. Wenn Sie glauben, dass Ihre Python-Dateien mit Python zwei oder 3.1 oder zwei oder drei ausgeführt werden , sollten Sie sich für diese Methode entscheiden. Denn manchmal, wenn Sie Ihr Skript auf einem Server bereitstellen , wir an, Sie möchten ein Skript jeden Tag zu einer bestimmten Stunde ausführen , Sie möchten es auf einem Webserver bereitstellen, und dieser Webserver wird über eine bestimmte Version von Python verfügen . Manchmal ist diese Version Python zwei. In diesem Fall möchten Sie also Ihre Skripte so anpassen, dass sie mit Python zwei funktionieren und der Webserver, der Server, der Computer Ihr Skript mit einer bestimmten Python-Version ausführt. Wir werden uns das später ansehen wenn wir die Web-Apps bereitstellen. Im Moment sind dies also die beiden Methoden der Zeichenkettenformatierung. 42. 42. String-Formatierung mit mehreren Variablen +: Zuvor habe ich Ihnen vorgestellt, wie Sie den Wert einer Variablen dynamisch in eine Zeichenfolge einfügen. Hier haben wir also Hallo und den Wert , den der Benutzer in die Eingabefunktion eingegeben hat, konstruiert . Das hat also mit Python zwei und drei funktioniert. Dies funktioniert mit Python 3.6 und späteren Versionen. Was ist nun, wenn wir mehr als einen Wert in die Zeichenfolge einfügen wollen , wie geht das? Nehmen wir zum Beispiel an, die erste Eingabefunktion fragt uns nach dem Namen und die zweite nach dem Nachnamen. Nennen wir diese Variable Name und diesen einen Nachnamen. Um diese Version der Zeichenkettenformatierung mit zwei Variablen zu verwenden , müssen Sie dies tun. Anstelle von nur einer Variablen müssen Sie runde Klammern verwenden und dann alle Variablen eingeben, die Sie in diesem Fall in die Zeichenfolge Vor- und Nachname einfügen möchten . Wenn Sie das jetzt ausführen, erhalten Sie eine Fehlermeldung. Also musst du dort etwas mehr tun. Sagen wir Audit. Ulce und du haben einen Tippfehler Nicht alle Argumente wurden bei der Zeichenkettenformatierung konvertiert, was bedeutet, dass es sich bei den Argumenten um Vor- und Nachname handelt Nicht alle wurden konvertiert, da nur der Name konvertiert wurde , weil Sie hier nur einen Platzhalter hatten , nämlich Prozentsätze Sie möchten zwei Platzhalter haben, einen für den Nachnamen, einen für den Nachnamen Wenn Sie das ausführen, bekommen wir einen weiteren Fehler, aber das hat nichts mit dieser Zeile hier zu tun Diese Zeile ist völlig in Ordnung. Es funktioniert. Warum funktioniert es? Nun, weil Sie sehen können , dass der Fehler aufgetreten ist. Hier beginnt also die Rückverfolgung. Sie sehen, dass der Fehler in Filebsics Punkt i auftritt, der Datei , in der wir den Code in Zeile fünf haben, was bedeutet, dass über Zeile fünf alles in Ordnung ist was bedeutet, dass über Zeile fünf alles Diese Zeile hat jetzt also die Fehlerprüfung bestanden. Sie ist fehlerfrei. Das ist also die Zeile , die den Fehler hat, und es ist ein Namensfehler, Eingabe des Namens durch den Benutzer ist nicht definiert. Diese Benutzereingabe hier wurde also in unserem Code nicht definiert. Wir haben keine Variable mit diesem Namen. Wir verwenden es nur hier, aber wir haben es nicht definiert. Und hier ist ein Trick. Wenn Sie diese Zeile nicht ausführen möchten, können Sie sie mit einem Befehl ausführen. Wenn Sie dieses Symbol hier hinzufügen, ignoriert Python diese Zeile. Es wird es als Kommentar behandeln. Nicht als Code. Also speichere das Skript, führe es aus. Geben Sie Ihre Eingabe als Benutzer ein, und das ist die Ausgabe, die wir diesmal erhalten. Das war also eine gute Übung , um Fehler zu beheben. Nun zurück zu unseren Operationen zur Formatierung von Zeichenketten. Mal sehen, wie das jetzt mit zwei Variablen funktioniert. Benutzereingaben sind also keine Variable mehr. Wir wollen den Namen verwenden. Also hallo Name, und dann wollen wir hier ein Leerzeichen haben. Also das ist ein Leerraum. Also Name, Leerraum, Nachname. Und so einfach ist das. Hinrichten. Und du bekommst die Ausgabe Hello oder die Suche. Das ist also die Nachrichtenvariable, die Zeichenfolge der Nachrichtenvariablen. Auf diese Weise können Sie also so viele Variablen eingeben, wie Sie möchten. Was ist zum Beispiel los? Wann könnte es eine Variable sein. Heute ist die Zeichenfolge today Teil der Wind-Variablen, die Win-Variable wird hier durch den Wert ersetzt , den sie aktuell hat, also heute, führe das aus. Und so funktioniert es. Und das müssen Sie über die Zeichenkettenformatierung in Python wissen . 43. 43. Einführung in For Loops +: Hallo, willkommen zurück in diesem neuen Bereich. Falls Ihr bisheriges Python-Wissen in Bezug auf die Python-Grundlagen , die Sie in diesen Abschnitten gelernt haben, Lücken Bezug auf die Python-Grundlagen , die Sie in diesen Abschnitten gelernt haben, aufweist, versuche ich in diesem Abschnitt, diese Lücken zu schließen, damit Sie wissen, was vor sich geht. Wir werden das tun, indem wir alle Teile zusammenfügen, indem wir mit den Codeblöcken, die Sie gelernt haben, eine größere App erstellen den Codeblöcken, die Sie , sodass alles mehr Sinn ergibt und Sie wissen, wie man Programme aus der realen Welt erstellt. Das ist also der erste Schritt zur Entwicklung von Programmen für die reale Welt. Und das ist nicht wirklich ein Programm aus der realen Welt, weil wir in den nächsten Abschnitten noch einige Beispiele aus der realen Welt anführen werden . Dies dient also nur dazu, sicherzustellen, dass Sie die wichtigsten Python-Konzepte gut gelernt haben. Fangen wir also mit dem nächsten Video an. Wir sehen uns dort. 44. 44. Wie und warum man For Loops verwendet: In dieser Vorlesung werde ich eines der wichtigsten Konzepte der Python-Programmierung erklären , und das sind vier Schleifen. Ich verwende ein Beispiel, damit du nicht nur die Syntax verstehst, wie man eine Viererschleife schreibt, sondern auch, warum du vier Schleifen verwenden solltest. Nehmen wir an, wir haben diese Temperaturen für Montag. Vielleicht wurde das morgens mittags aufgenommen und das abends Wie können wir ein Programm erstellen, das die gerundeten Werte jedes dieser Werte ausdruckt die gerundeten Werte jedes dieser Werte ausdruckt So wie das. Das wäre also die erwartete Leistung. Sie können hier unten sehen, wie Sie Neun bekommen, weil 9,1 auf eine ganze Zahl aufgerundet wäre, und dann wieder 8,89 und 7,68 Wie können wir das machen? Wir müssen also einen Weg finden, auf die Elemente der Liste zuzugreifen. Und Sie kennen bereits eine Methode, um auf Listenelemente zuzugreifen, die Indizes verwendet Wenn Sie also die erste wollen, verwenden Sie Null. Sie möchten also das erste Element ausdrucken, das würde jedoch 9.1 ausdrucken. Sie möchten die runde Version von 9.1 Vielleicht möchten Sie einen Blick darauf werfen , welche Funktionen Ihnen zur Verfügung stehen. So wie das. schau mal hier nach und du wirst einen runden Surround finden können , was bedeutet, dass du eine Zahl runden willst, Surround 9,1, du bekommst neun. Und in unserem Fall ist die Zahl, die wir aufrunden möchten , dieser Ausdruck. Also wollen wir das ungefähr hier anwenden und diesen Ausdruck in Klammern setzen, so dass das die Nummer 9.1 ist. Probieren Sie es aus, bevor Sie den gesamten Code schreiben, und das ist in Ordnung. Mach das nochmal. Aber mit einem und mit zwei. Führen Sie es aus und Sie erhalten die erwartete Ausgabe. Okay, das ist in Ordnung. Es funktioniert. Aber was wäre, wenn Sie eine große Liste mit 100 Elementen hätten, würden Sie am Ende 100 Codezeilen haben. Nun, ich kann Ihnen zeigen, wie man das stattdessen mit nur zwei Codezeilen macht. So machst du es. Sie verwenden eine Vierschleife für die Temperatur und wählen einen Namen für eine Variable. die Temperatur sehen Sie, wie diese Schlüsselwörter hervorgehoben werden. Das sind also eigentlich reservierte Python-Wörter. Die Temperatur ist nur eine Variable. Deshalb ist es schwarz. Verwenden Sie bei Montagstemperaturen eine Säule, und was passiert nach einer Kolumne, von der ich Ihnen im vorherigen Video erzählt habe ? Nun, Einrückungen, was in Visual Studio-Code für Leerzeichen automatisch passiert in Visual Studio-Code für Leerzeichen Was wollen wir für jede der Temperaturen tun? Nun, wir wollen die runde Form der Temperatur ausdrucken. Einfach so speichern, ausführen und das ist die Ausgabe. In nur zwei Codezeilen können wir also einige Befehle für alle Elemente eines Arrays ausführen , was in diesem Fall eine Liste ist, aber es kann auch eine Zeichenfolge sein. Zum Beispiel für einen Brief in Hallo einen Brief drucken. Und Hallo ist dort ausgedruckt. Und natürlich kannst du dort machen, was du willst. Titel, hol dir den ersten Gegenstand, der ein Buchstabe ist. Also wird der Buchstabe so groß geschrieben. Lassen Sie mich diese beiden Zeilen noch einmal durchgehen , um ihnen zu erklären, was sie bedeuten Die Schleife berechnet also die Temperatur in Monte-Temperaturen Sie erstellen also eine Variable, und die Schleife durchläuft all diese Elemente nacheinander mit Schleifen. In der ersten Iteration wird die Temperatur also gleich sein, also wird die Variable gleich 9,1 sein Daher rundet die Rundungsfunktion 9.1 auf und druckt es hier aus. Und wenn hier zum Beispiel mehr Zeilen drin sind , drucken, fertig. Wenn du das tust, siehst du, wenn es noch eine weitere Zeile gibt, nach neun, wird diese Zeile ausgeführt, sodass du die Zeichenfolge fertig ausgedruckt bekommst. Wenn es mehr Zeilen gibt, werden diese Zeilen ausgeführt. Wenn es keine Zeilen mehr gibt, wird die Ausführung wieder an der Spitze der vier Schleifen ausgeführt, und die Schleife erhält dieses Mal das zweite Element. Diesmal wird die Temperatur also 8,8 betragen. Und das Gleiche passiert wieder Runden Sie es zusammen, drucken Sie es aus. D wird ebenfalls ausgedruckt, geht zur nächsten Zeile, 7.6, und so weiter. Und dann, nach 7.6, versucht die Schleife zu sehen, ob es mehr Elemente in diesem Array gibt . Wenn es keine Elemente mehr gibt, passiert, dass dieser eingerückte Block die Ausführung dieses Blocks beendet und Python zu den nächsten Zeilen übergeht, um auszuführen, was im Skript noch übrig ist 45. 45. So durchmachst du ein Wörterbuch +: Sie haben gesehen, dass das Durchblättern einer Liste einfach ist. Du machst es einfach so. Wenn Sie jedoch ein Wörterbuch haben, ist es etwas komplexer. Auch hier machen Sie vier, wählen einen Variablennamen im Wörterbuch, Sie möchten iterieren, aber hier möchten Sie angeben, was Sie iterieren möchten Möchten Sie über Elemente, Schlüssel oder Werte iterieren? Wenn Sie also über Elemente iterieren möchten, würden Sie diese Elemente dort anwenden Vergiss die Spalte nicht und drucke. Großartig. Mal sehen, was passiert. Sie bekommen diese Elemente also als Tupel ausgedruckt. Das sind Tupel. Also der Schlüssel und der Wert für jede Iteration. Wenn du stattdessen die Schlüssel haben willst, schreibst du einfach die Schlüssel dorthin und wenn du die Werte haben willst, schreibst du einfach diese Werte und du bekommst die Werte So iteriert man Wörterbücher. 46. 46. Wie und warum du While Loops verwendest: Sie lernen also, dass eine Vierer-Schleife durch einen Container iteriert , der eine Liste, eine Zeichenfolge oder ein Tupel sein kann, und dass die Schleife beendet wird wenn der Container erschöpft ist Es druckt also zum Beispiel eins, zwei und drei aus. Und wenn es keine Artikel mehr gibt, endet die Schleife. Also eine Viererschleife läuft, bis ein Container erschöpft ist, und eine Whileloop eine Drahtschleife , solange diese Bedingung erfüllt ist Lassen Sie mich das ausführen und sehen, was passieren wird Sie werden also sehen, dass 11 ständig ausgedruckt wird ständig ausgedruckt Wenn ich also hier nach oben scrolle, kann ich nicht finden, wo der Startpunkt war, weil dort jetzt alle Sekundenbruchteile 1 Million gedruckt werden . Was hier also vor sich geht , ist, dass eine Y-Schleife Y ein Schlüsselwort ist, und darauf folgt eine Bedingung. In diesem Fall ist die Bedingung, dass A größer als Null ist, was wahr ist. A ist also tatsächlich drei, das bedeutet, dass diese Bedingung wahr ist. Und solange diese Bedingung wahr ist, wird sie ausgedruckt. In der Wile-Schleife können Sie also so viele Aktionen ausführen, wie Sie möchten Lassen Sie mich das zum Beispiel mit Control C auf Ihrem Terminal unterbrechen und dann hier eine weitere Zeile hinzufügen, zwei drucken, speichern, ausführen Also eins, zwei, eins, zwei, eins, 21, zwei wird ausgedruckt Okay, ich unterbreche das. Nun, die Geschwindigkeit, mit der diese Zahlen ausgedruckt werden, hängt von der Geschwindigkeit Ihres Computerprozessors Je schneller Ihr Prozessor ist, desto schneller werden die Aktionen hier ausgeführt, diese Operationen werden ausgeführt. Nun, das wird natürlich immer so sein, weil es hier nur eine statische Deklaration einer Variablen ist, also ändert sie hier niemand. Daher wird die Bedingung immer wahr sein. Du kannst in der Site Python sehen, wenn du überprüfst, dass etwas Drei größer als Null ist, du „wahr“ bekommst. Das ist also im Grunde absolut wahr und du wirst es manchmal so sehen. Also lösche einfach die erste Zeile. Beenden Sie hier, führen Sie den Code erneut aus. Also nochmal, das Gleiche passiert weil wahr immer wahr ist. Auf diese Weise werden Wild Loops in der realen Welt jedoch nicht verwendet. Es ist sinnlos zu überprüfen, ob wahr wahr ist , und ständig etwas auszudrucken Lassen Sie mich also weitermachen und Wil Loops im nächsten Video an einem besseren Beispiel erklären Wil Loops im nächsten Video an einem besseren Beispiel 47. 47. While Loops mit Benutzereingabe: Wir hatten also ein Skript, das prüft, ob a größer als drei ist , und diese Operationen ausgibt, wenn das wahr ist. Lassen Sie mich nun ein Beispiel aus der realen Welt verwenden. Lassen Sie uns hier eine Variable namens username erstellen und ihr den Wert einer leeren Zeichenfolge geben. Und hier wollen wir überprüfen, ob sich der Benutzername vom echten Benutzernamen unterscheidet. Nehmen wir an , es ist Pi Pi. Das ist zwar wahr, wir möchten den Benutzer bitten , einen Benutzernamen einzugeben. Schauen wir uns also an, was passieren wird. Geben Sie den Benutzernamen ein, wir haben hier die Aufforderung von der Eingabefunktion erhalten. Pi. Nein, wir bekommen wieder Enter user name. Pi Pi vielleicht. Nein. Pi Pi. Also bekommen wir dieses Mal keine Aufforderung mehr. Die Ausführung des Programms, also lassen Sie mich erklären, was hier passiert ist. Wir haben die leere Zeichenfolge zur Variablen username deklariert. Und dann prüfen wir hier, ob sich der Wert der Benutzername-Variablen von Pi Pi unterscheidet. In diesem Fall ist es anders, weil dies eine Eingabezeichenfolge ist und das ist Pi Pi. Daher wird die erste Iteration stattfinden , und zwar diese hier. In der ersten Iteration bitten wir den Benutzer also, einige Eingaben einzugeben Das ist hier in der ersten Iteration passiert. Also wurde zur Eingabe des Benutzernamens aufgefordert, und wir haben Pi eingegeben. Pi ist jetzt eine Zeichenfolge, die dem Benutzernamen zugewiesen wird. Und die Schleife durchläuft die zweite Iteration. Der Benutzername unterscheidet sich zwar von Pi Pi, was in diesem Fall der Fall ist, denn der Benutzername ist vorerst Pi, die Zeichenfolge Pi Pi ist also anders als Pipi. Fahren Sie daher fort und führen Sie den Körper der Drahtschleife erneut Welches ist das hier. Fragen Sie den Benutzer also noch einmal nach dem Benutzernamen. Also Benutzername, der Benutzer gibt diesmal Pi P ein. Die Schleife geht erneut durch den Kopf bis zum Anfang und prüft, ob Pi P anders ist als Pipi Das stimmt, hol dir den Benutzernamen erneut. In diesem Fall haben wir Pi Pi. Der Benutzername ist jetzt also Pipi. Die Schleife wird erneut wiederholt, obwohl der Benutzername anders ist als Pi Pi. In diesem Fall ist das nicht der Fall, da der Benutzername in diesem Fall Pi Pi entspricht Also Pi Pi. Ist es anders als Pi Pi? Nein, das ist falsch. In der dritten Iteration wird dies also gleich False sein, und dann endet die Schleife Vier Schleifen enden also, wenn der Container erschöpft ist, und eine Schleife endet, wenn die Bedingung falsch ist 48. 48. While-Loops, Break und Continue +: Im vorherigen Video haben wir diesen Code erstellt. Der Code sieht so aus. Wir weisen die leere Zeichenfolge der Variablen username zu. Dann bauen wir eine Drahtschleife, die prüft, ob diese Bedingung zutrifft. Wenn die Bedingung, dass sich der Benutzername von Pi Pi unterscheidet, wenn der Benutzername sich von Pi Pi unterscheidet, wird dies ausgeführt. In der ersten Iteration unterscheidet sich der Benutzername tatsächlich von Pipi, da der Benutzername eine leere Zeichenfolge ist Daher wird dies ausgeführt. Das Programm fragt nach dem Benutzernamen. Wenn die Eingabe beispielsweise A ist, wird A dem Benutzernamen zugewiesen und dann beginnt die zweite Iteration, also während A sich von Pi Pi unterscheidet, was wahr ist Dies wird erneut ausgeführt. Deshalb bekommen wir hier wieder diese Aufforderung. Wenn Sie Pi Pi eingeben, endet die Schleife, da sich Pipi in der dritten Iteration nicht von Pipi unterscheidet, Pipi in der dritten Iteration nicht von Pipi unterscheidet sodass dies nicht mehr vorkommt Jetzt gibt es einen anderen Weg, dies mit einer Break-Anweisung zu tun , anstatt wie oben beschrieben. Lassen Sie mich das noch einmal anders machen, indem ich die Wile-Schleife verwende Aber dieses Mal möchten Sie überprüfen, ob es wahr ist, obwohl es wahr ist, was immer wahr ist, sodass die Schleife immer ausgeführt wird, bis wir sie unterbrechen Das ist zwar wahr, aber du möchtest nach dem Nutzernamen fragen. Eingabe, geben Sie den Benutzernamen ein. Jetzt wollen wir hier eine Bedingung erstellen, um innerhalb der Wile-Schleife nachzuschauen Wenn der Benutzername Pip Pi ist, Break the Loop, sonst, Continue Mal sehen, was uns das geben wird. Python drei, B dieser Pi. Das ist das Skript auf der rechten Seite. Geben Sie den Benutzernamen ein. Hm, nein, nein. Pippi? Ja. Lass es mich nochmal versuchen. Wenn Sie sofort wieder Pi Pi eingeben, wird die Schleife beendet Ich bevorzuge das sogar, weil Sie dadurch mehr Kontrolle über den Arbeitsablauf Das ist es also, was hier passiert. Das ist zwar wahr, was immer wahr ist. Die erste Iteration findet also statt, weil true wahr ist, und wir fragen in der ersten Iteration nach dem Benutzernamen In der ersten Iteration hier lautete der Benutzername also ASFD der Benutzername Also, wenn ASFD gleich Pipe Pi ist, unterbrich die Schleife. Das ist nicht der Fall, weil ASFD anders ist als Pipi. Daher wird dies nicht , da diese Bedingung falsch ist Sonst wird ausgeführt. Fahren Sie fort. Continue verschiebt nun das Steuerelement wieder an die Spitze der Schleife. So benutzt man Break and Continue in einer While-Schleife. Beide Möglichkeiten sind richtig, aber ich finde das lesbarer. 49. 49. Ein Programm in Python erstellen: Hallo, willkommen zurück in diesem neuen Bereich. Falls Ihr bisheriges Python-Wissen in Bezug auf die Python-Grundlagen , die Sie in diesen Abschnitten gelernt haben, Lücken Bezug auf die Python-Grundlagen , die Sie in diesen Abschnitten gelernt haben, aufweist, versuche ich in diesem Abschnitt, diese Lücken zu schließen, damit Sie wissen, was vor sich geht. Wir werden das tun, indem wir alle Teile zusammenfügen, indem wir mit den Codeblöcken, die Sie gelernt haben, eine größere App erstellen den Codeblöcken, die Sie , sodass alles mehr Sinn ergibt und Sie wissen, wie man Programme aus der realen Welt erstellt. Das ist also der erste Schritt zur Entwicklung von Programmen für die reale Welt. Und das ist nicht wirklich ein Programm aus der realen Welt, weil wir in den nächsten Abschnitten noch einige Beispiele aus der realen Welt anführen werden . Dies dient also nur dazu, sicherzustellen, dass Sie die wichtigsten Python-Konzepte gut gelernt haben. Fangen wir also mit dem nächsten Video an. Wir sehen uns dort. 50. 50. Problem-Statement in Python: Hi, hier ist Arditi, dein Lehrer. Wenn Sie den vorherigen Videos des Kurses folgen, bedeutet das, dass Sie die Grundlagen von Python lernen, und zwar Variablen, Datentypen, Funktionen, Bedingungen, Schleifen und Benutzereingaben Das ist der Kern von Python. Welche Anwendung Sie auch erstellen werden, sei es ein datenwissenschaftliches Skript oder eine Web-App oder etwas, das Ihre täglichen Aufgaben automatisiert, Sie werden fast immer all diese Grundlagen benötigen Bevor wir in diesem Abschnitt weiter zu den fortgeschritteneren Funktionen von Python gehen, wollen wir uns etwas Zeit nehmen und über das Gelernte meditieren Mit Meditation meine ich, dass Sie ein wenig über diese Grundlagen nachdenken sollten , die Sie Und der beste Weg, das zu tun, besteht darin, ein Programm zu erstellen , das all diese Kernfunktionen von Python verwendet. verschwenden Lassen Sie mich das Programm demonstrieren, das wir erstellen werden , ohne Ihre Zeit zu Ich habe den Code in einem Skript gespeichert. Ich werde dir den Code nicht sofort zeigen. Ich werde dir die Ausgabe zeigen. Also, wenn ich den Code ausführe, bekomme ich eine Nachricht ausgedruckt, sag etwas. Es ist also eine Aufforderung, die nach Benutzereingaben fragt. Nehmen wir an, es ist heute gutes Wetter. Rufen Sie das Programm auf und fragen Sie erneut nach Eingabe. Wie ist das Wetter? Hier gibt es nur ein paar Wolken. Geben Sie ein und wenn Sie das Programm beenden möchten, drücken Sie den umgekehrten Schrägstrich, drücken Sie die Eingabetaste, und das ist die Ausgabe Dieses Programm ist, dass es Sie nach Eingaben fragt. Sie geben die Eingabe immer wieder und sobald Sie die Eingabe mit einem Backslash ( Backslash End) beenden, wird das Programm beendet und die eingegebenen Backslash End) beenden, wird das Programm beendet und die Phrasen werden in Großbuchstaben ausgegeben Also wird der erste Buchstabe groß geschrieben und zu solchen Sätzen wird ein Punkt hinzugefügt, und ein Fragezeichen, falls es sich um eine Frage wie diese und ein Fragezeichen, falls es sich um eine Frage wie diese hier handelt Und das Gleiche gilt für einen Punkt. Und das ist unsere geheime Zeichenfolge. Es ist also ein umgekehrter Schrägstrich d. Wenn das Programm diese Zeichenfolge erhält, bedeutet das, dass es an der Zeit ist, das Programm zu beenden und das Ergebnis zu erhalten Das ist also keine der zehn realen Anwendungen , die ich in diesem Kurs zu entwickeln verspreche Die erste Anwendung kommt später im Kurs, aber das dient nur dazu, das zu üben, was Sie bisher gelernt haben. Auch wenn es ein nutzloses Programm , wer wird das natürlich brauchen, aber es wird dir sehr helfen, zu wissen, wie man die Bedingungen, Funktionen und Schleifen benutzt. Also mach das bitte nach dem Ende dieses Videos. Ich möchte, dass du dir etwas Zeit nimmst und darüber nachdenkst, wie du dieses Programm lösen, programmieren kannst. Jetzt kennst du die Ausgabe. Versuche nachzudenken und versuche vielleicht, Code zu schreiben. Warum nicht? Ich erwarte nicht, dass du das wirklich löst. Aber trotzdem, wenn Sie sich in den Problemlösungsmodus versetzen und dann, wenn Sie meine Lösung in den folgenden Videos sehen, weil ich Sie Schritt für Schritt durch den Code führen werde , wie man ihn und dann, wenn Sie meine Lösung in den folgenden Videos sehen , weil ich Sie Schritt für Schritt durch den Code führen werde erstellt. Dann wirst du einen Aha-Moment haben. Und dann kannst du dir Dinge besser merken, denn in deinem Kopf war das etwas, das du wissen musstest, wenn du versuchst zu verstehen, wie du das machen kannst Und dann siehst du, wie es gemacht wird, und dann lernst du es besser Also ja, ich werde in den nächsten Videos mit dir sprechen. 51. 51. Annäherung an das Problem: Großartig. Lassen Sie uns weitermachen und dieses Programm jetzt erstellen. Schauen wir uns die Ausgabe noch einmal an , denn wenn Sie ein Programm erstellen, möchten Sie eine klare Vorstellung davon haben , wie die Ausgabe aussehen wird, und dann versuchen, die große Aufgabe in kleinere Aufgaben aufzuteilen. Nehmen wir zum Beispiel an, dieses Programm fragt immer wieder nach Benutzereingaben. Und es erhält einige Zeichenketten in diesem Zeilenformat, keinen Punkt mit einem kleinen Buchstaben am Anfang. Und wenn der Benutzer dann den umgekehrten Schrägstrich d eingibt, kennt das Programm diese Zeichenfolge und gibt die Ausgaben zurück Das Programm schreibt also diese Zeichenketten groß. Der erste Buchstabe wird also groß geschrieben und es wird ein Punkt oder ein Fragezeichen hinzugefügt Nun, Sie sehen, das ist eine Liste von Phrasen hier mit Sätzen. Aber wie gesagt, versuchen Sie, die Aufgabe in kleinere Aufgaben aufzuteilen. Versuchen Sie also, die Ausgabe in kleinere Teile aufzuteilen. in diesem Fall nicht darüber nach, Denken Sie in diesem Fall nicht darüber nach, wie Sie diese Liste erstellen, sondern überlegen Sie, wie Sie die geringstmögliche Leistung erzielen können. In diesem Fall erhalten Sie auf diese Weise eine Zeilenzeichenfolge wie diese hier und wie Sie sie in diese Zeichenfolge konvertieren. Und der beste Weg, dies zu tun, besteht darin eine Funktion zu verwenden, um Ihre eigene Funktion zu definieren , die diese Zeichenfolge abruft und diese hier erzeugt. Als Erstes müssen Sie also eine Funktion erstellen. Lass uns das im nächsten Video machen. 52. 52. Baue die Maker-Funktion: Beginnen wir also damit, eine Funktion zu erstellen, die diese Art von Zeichenketten in diese Form umwandelt . Definiere, nennen wir diesen Satzmacher. Es macht also Sätze aus Zeilenfolgen. Nennen wir die Zeichenketten Phrasen. Phrase. Also bekommt es eine Phrase und zuerst willst du diese Phrase groß schreiben, richtig? Erstellen Sie also vielleicht eine Variable innerhalb dieser Funktion, nennen Sie sie großgeschrieben oder wo auch immer Sie wollen, und sagen Sie Phrase und verwenden Sie die Methode mit Großbuchstaben In der Zwischenzeit können Sie Ihre interaktive Python-Shell verwenden , um Methoden auszuprobieren , um zu sehen, wie sie funktionieren, während Sie gleichzeitig eine Funktion in Ihrem Editor erstellen. Nehmen wir zum Beispiel an, ich möchte diese Zeichenfolge groß schreiben Zunächst möchte ich ausprobieren, wie die Methode mit Großbuchstaben funktioniert Jetzt bin ich mir sicher, dass der erste Buchstabe groß geschrieben wird, also ist das Nein, wir wollen diesen Ausdrücken einen Punkt oder ein Fragezeichen hinzufügen , um sie zu verketten , oder Aber das hängt davon ab. Deshalb sprechen wir hier von einer Erkrankung. Das Programm muss entscheiden, ob am Ende des Satzes ein Punkt oder ein Fragezeichen stehen soll . Lassen Sie uns also weitermachen und die Bedingung aufbauen. Wenn Satz. Wie können wir also zwischen Fragen und einfachen Sätzen unterscheiden , die mit einem Punkt enden? Nun, es kann verschiedene Möglichkeiten geben, das hängt also vom Programmierer ab und wie anspruchsvoll Sie das machen möchten Aber lassen Sie es uns einfach halten. Nehmen wir an, Fragen sind all jene, die mit fragenden Worten wie wie, warum und was beginnen wie wie, warum und Und das können Sie überprüfen, sagen wir, Sie haben einen Satz, zum Beispiel, wie geht es Ihnen nochmal Sie können die Methode start with verwenden, die ein Tupel als Eingabe erhält Also ein Tupel und innerhalb des Tools können Sie einige Zeichenketten haben, können Sie einige Zeichenketten haben denen Sie überprüfen, ob der Satz mit einer dieser Zeichenketten in diesem Tupel beginnt dieser Zeichenketten in Also lass uns sagen wie, was? Und warum. Das wird also wahr zurückgeben, denn wie fängt man mit einer dieser Zeichenketten an? In einem anderen Szenario , zum Beispiel bei schönem Wetter, wirst du falsch liegen. Also können wir uns das zunutze machen und sagen, ob Satz mit Wie beginnt? Was? Und warum? Das können Sie tun, oder noch besser wäre es, dieses Tupel zu holen und es in einem sehr Brunnen zu speichern Sagen wir Befragungen und legen es dort hin. Dann fügen Sie hier einfach die Variable ein, und das macht den Code lesbarer Wenn der Satz also mit Fragebögen beginnt, wollen wir in diesem Fall eine Zeichenfolge konstruieren Nehmen wir an, die Funktion return gibt diese Zeichenfolge zurück. Das ist also groß geschrieben. Großgeschrieben wird also die großgeschriebene Version der Phrase, die der Benutzer eingibt, und dann wollen wir einfach so ein Fragezeichen hinzufügen einfach so ein Fragezeichen Das wird also durch diese Zeichenfolge in Großbuchstaben ersetzt, und dem wird ein Fragezeichen hinzugefügt Das passiert also, wenn der Satz mit einem der Fragebögen beginnt sonst kommt er zurück. In diesem Fall geben wir einen Satz mit einem Punkt und einem Punkt zurück Auch hier setzen wir Großbuchstaben ein. Lassen Sie mich bis jetzt zeigen, was wir haben. Satzmacher. Also wollen wir die Funktion ausführen, oder? Mit einem Wort, mit einer Phrase. Wie geht's dir? Speichern, ausführen. Und so verstehen wir den Satz richtig. Und wie geht's dir? Das ist es. Jetzt haben wir eine Funktion , die etwas tut und es gut tut. Lassen Sie uns nun im nächsten Video über die anderen Aspekte eines Programms nachdenken . 53. 53. Den Loop konstruieren: Im vorherigen Video haben wir hier diese Funktion erstellt, die eine Phrase als Eingabe erhält, also eine Zeichenfolge, und wenn Sie die Funktion ausführen, wird sie diese Version der Zeichenfolge zurückgeben Nun wird die Ausgabe des Programms, das Sie in diesem Abschnitt erstellen , immer wieder nach diesen Phrasen in Form von Benutzereingaben fragen . Wir sprechen also davon, Benutzereingaben vom Benutzer zu erhalten. Und da das immer wieder passiert, haben wir hier einen Hinweis darauf , dass es sich um eine Schleife handelt. Und da diese Schleife, also wenn der Benutzer einen Backslash eingibt, endet die Schleife mit dieser Zeichenfolge Das heißt, wir sprechen von einer bedingten Schleife, und das bringt uns dazu, über Wile-Schleifen nachzudenken, weil Wile-Schleifen auf Bedingungsbasis funktionieren Nehmen wir an, die Wile-Schleife wird ständig ausgeführt, sodass sie nach Benutzereingaben fragt Geben Sie ein, sagen Sie etwas, eine Spalte und machen Sie dort etwas Platz, nur zur Dekoration Was passiert also, wenn der Benutzer eine Eingabe eingibt? Hm. Nun, zuerst wollen wir diese Eingabe überprüfen, ob diese Benutzereingabe tatsächlich die spezielle Zeichenfolge ist. Wenn das der Fall ist, wollen wir die Schleife durchbrechen. Sonst. Was wir machen wollen? Sonst? Hm. Also hast du diese Sätze dort gesehen. Sie sahen aus wie eine Liste. Es waren also mehrere von ihnen. Das heißt, wir sprechen davon , eine Menge Gegenstände zu haben. Und wenn Sie an viele Artikel denken, denken Sie an eine Liste. Vielleicht möchten wir also die Phrasen , die der Benutzer eingibt, in einer Liste speichern . Wie können wir das machen? Nun, das können wir tun, indem wir mit einer leeren Liste außerhalb der Schleife beginnen . Python wird also die Funktionsdefinition ausführen. Das brauchen wir nicht mehr, weil wir es gerade benutzt haben, als wir die Funktion getestet haben. Sobald die Funktionsdefinition von Python gelesen wurde, rufen wir die Funktion hier nicht auf. Wir werden eine leere Liste erstellen und dann die Schleife starten. Der Benutzer wird mit einer Nachricht aufgefordert. Wenn eine Zeichenfolge, die der Benutzer eingibt, diese ist werden wir alles kaputt machen. Die Schleife wird also enden, andernfalls, wenn diese Zeichenfolge nicht dem entspricht, was der Benutzer eingegeben hat, andernfalls wollen wir die Benutzerzeichenfolge anhängen, also Benutzereingaben in die Ergebnisliste Also am Ende der Schleife, was hier so unbeabsichtigt ist, ist das, nachdem die Schleife beendet ist, was nur passiert, wenn die Also, wenn der Benutzer das eingibt, nachdem die Schleife beendet ist, werden wir eine Liste mit vielen Daten haben Also Ergebnisse ausdrucken. Wie geht's dir? Ob es gut ist und und und das haben wir. Okay, ich weiß. Dies sind die Zeichenketten, die der Benutzer eingegeben hat. Wie können wir also die tatsächlichen Zeichenketten bekommen? Nun, das ist sehr einfach. Hier fügen wir die Zeilenzeichenfolgen, die der Benutzer eingegeben hat, an die Liste Aber wir haben eine Funktion, die diese Zeichenketten in Sätze umwandeln kann diese Zeichenketten in Sätze umwandeln Lass uns diese Funktion benutzen. Wir werden die Ausgabe der Funktion anhängen Um die Ausgabe zu erhalten, müssen Sie die Funktion aufrufen. Um die Funktion aufzurufen, benötigen Sie eine Eingabe für die Funktion. Die Eingabe hier ist die Benutzereingabe. Einfach so, führe es erneut aus. Und wir haben diese Ausgabe wie erwartet erhalten. Wir machen also gute Fortschritte. Wir wollen hier jedoch nicht den geringsten Output. Wir wollen nur eine Zeichenkettenausgabe ohne diese eckigen Klammern. Wie können wir also all diese Zeichenketten zusammenführen oder verketten , um einen einzigen Text als Lass uns das im nächsten Video machen. 54. 54. Die Ausgabe benutzerfreundlich gestalten: Um also alle Zeichenketten zu einer einzigen Zeichenfolge zu verketten, können Sie die Join-Methode von Strings verwenden Das ist also eine Methode von Zeichenketten. Das ist eine Zeichenfolge hier. Lassen Sie mich zum Beispiel diese Zeichenfolge eingeben. Es ist nur ein Gedankenstrich, aber es ist immer noch eine Zeichenfolge. Diese gemeinsame Methode erhält eine Liste als Eingabe. Wie geht's dir? Gut, gut. Das ist also eine Liste von Zeichenketten. Wenn Sie das ausführen, werden diese Elemente der Liste durch diese Zeichenfolge hier verknüpft , die Sie hier deklarieren. Wenn Sie also mehr hinzufügen, um es klarer zu machen, erhalten Sie einen Bindestrich, der all diese Zeichenketten verbindet, diese Elemente der Liste, das erste Element, das zweite Element, das dritte Element. Wir können das hier nutzen, indem wir sagen, treten Sie der Ergebnisliste bei. Speichern Sie das, führen Sie es aus. Das Wetter ist gut und wie geht's dir? Das Wetter ist gut? Wir haben hier ein kleines Problem. Wir brauchen wahrscheinlich ein Leerzeichen zwischen diesen Zeichenketten. Das können wir also sehr einfach machen. Sie können einfach ein Leerzeichen in die Zeichenfolge einfügen und dann erneut ausführen. Und das sind die Ergebnisse , die wir für unser Programm erwartet hatten. So erstellen Sie dieses Programm in diesem Abschnitt. Sie definieren zusätzlich zu Ihrem Skript eine Funktion , die etwas tut und das sehr gut macht. Dann iterierst du, du machst eine Schleife. Sie bitten den Benutzer bei jeder Iteration um Eingabe. Überprüfen Sie sofort, ob die Eingabe die Zeichenfolge war. Sie möchten nicht zuerst anhängen und dann überprüfen, ob die Benutzereingabe dieser entspricht Sie möchten dies also nicht als erste Bedingung verwenden, denn wenn Sie das hinzufügen, bedeutet das, wenn der Benutzer hier einen umgekehrten Schrägstrich eingibt und danach die Ergebnisse angehängt wurden erste Bedingung verwenden, denn wenn Sie das hinzufügen, bedeutet das, wenn der Benutzer hier einen umgekehrten Schrägstrich eingibt , wird diese Endzeichenfolge mit umgekehrtem Schrägstrich an die Ergebnisliste angehängt Endzeichenfolge mit umgekehrtem Schrägstrich an die wird Das willst du nicht. Daher müssen Sie sofort überprüfen, ob die Zeichenfolge ein umgekehrter Schrägstrich D ist , und das Programm unterbrechen, falls dies der Fall ist . Andernfalls müssen Sie dies tun Speichern Sie also die Ausgabe des Satzmachers in der Ergebnisliste ab Dann verketten Sie zum Schluss einfach die Elemente dieser Liste und drucken Sie die Ergebnisse aus , und zwar dieses hier Ich hoffe, dieses Programm war nützlich für Sie und Sie haben etwas gelernt, wie man Teile zusammensetzt In den nächsten Videos werden wir einige fortgeschrittenere Dinge über Python lernen , und danach werden wir uns mit der ersten realen Anwendung befassen. A Die nächste Anwendung danach und die nächste, also werden Sie zehn Anwendungen haben. Und ich weiß, dass Sie ein guter Programmierer sein werden, wenn Sie diese Anwendungen ernst nehmen ein guter Programmierer sein werden, wenn Sie Ich wünsche Ihnen weiterhin viel Spaß mit meinen Unterweisungen in den nächsten Videos 55. 55. Einführung in das Listenverständnis: Hallo, willkommen zurück. In diesem Abschnitt erfahren Sie mehr über das Verständnis von Listen. Listenverständnisse ähneln nun vier Schleifen. Der Hauptunterschied besteht darin, dass Sie bei einem Listenverständnis den Code in einer einzigen Zeile schreiben Und mit vier Schleifen haben Sie mehrere Zeilen Außerdem sind Listenverständnisse ein Spezialfall von vier Schleifen Sie werden verwendet, wenn Sie eine Liste erstellen möchten. Ein Listenverständnis ist also eine Schleife, die eine Liste erstellt. Sie können eine Liste auch mit vier Schleifen erstellen, aber wie gesagt, die Listenverständnisse bestehen aus nur einer aber wie gesagt, die Listenverständnisse bestehen aus nur Das macht den Code eleganter und pythonischer. Lassen Sie uns also in diesem Abschnitt anhand von Beispielen mehr über das Verständnis von Listen lernen in diesem Abschnitt anhand von Beispielen 56. 56. Ein einfaches Listenverständnis: Im Laufe meiner Erfahrung mit Arbeit mit großen Datensätzen sind mir einige Techniken aufgefallen, mir einige Techniken aufgefallen die Datenerfassungsinstitute verwenden, um Speicherplatz zu sparen und dafür zu sorgen, dass ihre Daten weniger Speicherplatz auf Computerfestplatten haben Eine gängige Technik besteht darin, keine Dezimalzahlen zu verwenden. Wenn Sie beispielsweise nach Temperaturdaten suchen, werden Sie nicht die tatsächlichen Temperaturen sehen, die , sagen wir, Celsius sind, Sie werden sie nicht so sehen, aber Sie werden sie ohne die Punkte sehen, weil das Speicherplatz auf den Servern spart Also ein Zeichen weniger, das bedeutet ein paar Byte weniger. Ihre Pflicht als Programmierer ist es also, all diese Werte durch zehn zu teilen , sodass Sie die tatsächlichen Daten erhalten Nehmen wir an, diese Daten waren in einigen Textdateien enthalten, und wir öffnen diese Daten mit Python, und der Kurs behandelt tatsächlich , wie man Textdateien in Python öffnet. Aber lassen Sie uns diesen Teil vorerst überspringen. Nehmen wir an, wir haben sie hier als Liste geladen. Jetzt wollen wir tatsächlich jeden von ihnen durch zehn teilen . Also, wie machst du das? Nun, eine Technik besteht darin, über TAMs zu iterieren. Für Temp in Temps und in jeder Iteration sollten Sie also und in jeder Iteration Temp dividieren durch zehn Aber wo speichern wir diese Temperatur geteilt durch zehn? Nun, wir können es in einer neuen Liste speichern. Sagen wir, neue Mitarbeiter. Das ist vorerst eine leere Liste. Die Schleife wird also durch diese Liste iterieren und bei jeder Iteration werden wir diesen Wert an neue TEMs anhängen Hängen Sie also diesen Wert an. Das sieht okay aus. Und dann neue TEMs ausdrucken. Lassen Sie mich weitermachen und das ausführen. Das ist also die gewünschte Ausgabe. Nun, das ist sehr richtig, aber es gibt eine bessere Möglichkeit, dies in nur einer Zeile Python-Code zu tun dies in nur einer Zeile Python-Code Und zwar mithilfe von Listenverständnissen. Es geht so Sie müssen keine leere Liste erstellen , weil eine Liste dynamisch generiert wird, Sie würden sagen, Temp geteilt durch zehn, vier Temp in Temps Drucken Sie neue Temps aus, um zu sehen, was wir bekommen, führen Sie aus und Sie erhalten exakt dieselbe Ausgabe Das ist also ein Listenverständnis. Es ist eine Möglichkeit, eine Liste zu erstellen ohne eine Viererschleife erstellen zu müssen, eine Standardschleife mit vier Schleifen, weil wir hier tatsächlich eine Inline-Viererschleife haben Was hier vor sich geht, ist, dass wir hier eine Iteration haben und in jeder Iteration werden wir diesen Wert in der Liste in der neuen TEMS-Liste speichern der Liste in der neuen TEMS-Liste Das ist also so, als würde man Speichertemperatur geteilt durch zehn sagen, aber Python wird sagen: Okay, aber was ist TEM? Es ist eine neue Variable Wir haben es nicht, wir haben es nirgends definiert. Und dann sagen wir: Nun, für Temp in ist Temp eine Variable von So erstellen Sie also eine Liste mit diesen Werten für jeden Wert von TAMS Das ist ein Listenverständnis. 57. 57. Listenverständnis mit einem If-Conditional: Wenn Sie nun mit Beobachtungen wie Wetterbeobachtungen, z. B. Temperaturen, gearbeitet haben Beobachtungen wie Wetterbeobachtungen, z. B. Temperaturen, , ist Ihnen vielleicht aufgefallen, dass diese Art von Werten manchmal in diesen Daten vorkommen, was bedeutet, dass für diese Beobachtung kein Wert oder kein gültiger Wert gefunden wurde und Organisationen diesen speziellen Wert verwenden, um zu bedeuten, dass keine Daten vorliegen Wenn wir also ein Listenverständnis verwenden wollen , bei dem wir all diese Werte durch zehn teilen, all diese Werte durch zehn teilen, sollten wir darauf achten, diesen Wert nicht durch zehn zu teilen wollen wir ignorieren . benötigen wir eine I-Bedingung innerhalb des Listenverständnisses. So können wir es machen Erstellen Sie also eine neue Variable, in Sie die neue Liste speichern werden. Und noch einmal, sagen wir Temperatur geteilt durch zehn für Temperatur in Temperaturen Wenn die Temperatur unterschiedlich ist, zum Beispiel minus 9999 Drucken Sie neue TEMs, führen Sie sie auf dem Terminal und wir erhalten das erwartete Ergebnis Das ist also genau wie der einfache Loop, den wir im vorherigen Video gesehen haben , mit dem Zusatz der I-Bedingung. Das ist also bedingt. Wir prüfen, ob die Temperatur anders ist als minus 9999. 58. 58. Listenverständnis mit einem If-Else Conditional +: Zuvor haben wir dieses Listenverständnis entwickelt, das diese Liste durchläuft und jedes Element dieser Liste durch zehn teilt. Es ignoriert nur, wenn die Temperatur anders Was passiert also, wenn temp gleich dieser Zahl ist? Nun, die Schleife, das Listenverständnis wird diesen Wert ignorieren, wie Sie in der Ausgabe gesehen haben Das war also die Ausgabe. Was ist, wenn Sie stattdessen einen anderen Wert angeben möchten? Nehmen wir an, Sie möchten Null anstelle dieser negativen Zahl eingeben . In diesem Fall, wenn Sie denken, Sie könnten hier einfach se, Null, machen , Sie würden das ausprobieren, Sie würden sich irren, weil das zu einem Syntaxfehler führen würde. Wenn Sie ein Is in der Liste haben, ist die Reihenfolge der Komponenten etwas anders Man muss die vier Temp in Temps haben, also muss die Schleife hinter der Bedingung sein , einfach Wenn Sie das ausführen, werden Sie die erwarteten Ergebnisse erzielen Sie sehen dort also die Null statt minus 9999. Das Listenverständnis sieht dieses Mal also so aus. Geben Sie mir Temperatur geteilt durch zehn, nur wenn sich die Temperatur von dieser Zahl unterscheidet, andernfalls geben Sie mir Null für Temperatur in Temperaturen Denken Sie also immer daran , dass, wenn Sie ein Verständnis von Is in der Liste machen müssen , die For-Schleife ganz am Ende so endet 59. 59. Mehr über Funktionen: Willkommen zurück in einem neuen Bereich. In diesen Videos erfahren Sie mehr über Funktionen . Sie haben bereits im Kurs gelernt, wie man eine Funktion definiert und wie man sie aufruft. Aber hier lernen Sie einige fortgeschrittenere Konzepte über Funktionen kennen, und Sie müssen wirklich, wirklich über Funktionen lernen, weil es sich dabei um einige sehr grundlegende Codeblöcke handelt. Sie schreiben also Ihre Programme indem Sie Funktionen verwenden, die bestimmte Dinge tun. Lasst uns also mehr über Funktionen lernen . Wir sehen uns im nächsten Video. 60. 60. Funktionen mit mehreren Argumenten: Vielleicht erinnern Sie sich an die Funktion len und die Instanzfunktion is. Die Len-Funktion benötigt nur ein Argument und die Stance-Funktion Sie, also benötigt sie zwei Argumente. Das können Sie auch in der Hilfedokumentation nachlesen. Obj, das ist das einzige Argument, das eine Länge benötigt. Und wenn du dir die Haltung ansiehst, wird es Obj und Klasse oder Manche Funktionen benötigen also ein Argument, manche zwei. Diese beiden Funktionen wurden nun in Python-Funktionen eingebaut. Also hat das Python-Entwicklerteam diese Funktionen entworfen. Wie können wir also unsere eigenen Funktionen mit mehreren Argumenten erstellen ? Ziemlich einfach. Nehmen wir an, wir möchten, dass eine Flächenfunktion, die die Fläche eines Rechtecks berechnet , mehr als ein Argument hat Sie müssen nur die Parameter durch ein Komma trennen Also Parameter und Argument. Ein Parameter ist das, was wir auf diese Variablen beziehen , wenn wir die Funktion definieren, und wenn wir die Funktion wie hier aufrufen, bezeichnen wir sie sozusagen als Argumente auf der Funktionsaufrufseite. also A mal B zurück , um die Fläche eines Rechtecks zurückzugeben. Und wenn Sie die Funktion aufrufen, übergeben Sie natürlich einfach Werte für diese Argumente. Und Sie erhalten den Wert korrekt ausgegeben. 61. 61. Standard- und Nicht-Standardparameter, Schlüsselwort- und Nicht-Schlüsselwort-Argumente: In Python kann es sich hauptsächlich um zwei Arten von Argumenten handeln. Wir haben Argumente, die keine Schlüsselwortargumente und wir haben Schlüsselwortargumente. Bei diesen beiden Argumenten handelt es sich nicht um Schlüsselwortargumente. Ihnen ist das Schlüsselwort nicht angehängt. Wenn dies jedoch der Fall wäre, würden die Dinge immer noch genauso funktionieren. Aber diese beiden würden jetzt als Schlüsselwortargumente bezeichnet. Argumente, die kein Schlüsselwort sind, also dieses eine , zwei, werden auch als Positionsargumente bezeichnet Sie werden als Positionsargumente bezeichnet , weil die Art und Weise, wie Sie diese beiden Argumente der Funktionsdefinition mitteilen , auf der Position basiert Die erste Position, vier, steht also für A und die zweiten fünf für B. Positions- und Nicht-Schlüsselwortargumente sind also dasselbe, wenn es Schlüsselwortargumente Die Position spielt eigentlich keine Rolle. Sie können also den Wert von B als erstes Argument übergeben , wenn Sie möchten, und vier gehen an B und fünf an A. Solange Sie sie also so übergeben, Schlüsselwortargumente, die Position keine Rolle, Sie würden immer noch dieselbe Ausgabe erhalten. Jetzt haben wir auch Standardparameter, keine Argumentparameter. Das bedeutet, dass ein Parameter einen solchen Standardwert haben kann, was bedeutet, dass Sie den Wert dieses Arguments nicht angeben müssen den Wert dieses Arguments nicht angeben müssen , wenn Sie die Funktion aufrufen. Also weisen wir A fünf zu und B ist standardmäßig sechs. Daher erhalten wir 30. A muss nicht unbedingt ein Kord-Argument sein. Es kann hier im Funktionsaufruf auch ein nicht kurdisches Argument sein , Sie erhalten immer noch dieselbe Ausgabe Natürlich kannst du B auch einen anderen Wert zuweisen. Einfach so. Und schließlich können Sie es auch so belassen, wenn es sich nicht um Schlüsselwortargumente handelt, und Sie erhalten die Ausgabe trotzdem korrekt. Sie sollten wissen, dass ein Standardparameter nicht vor Nicht-Standardparametern stehen kann. Wenn Sie das ausführen, erhalten Sie eine Fehlermeldung. Es heißt, dass ein nicht standardmäßiges Argument dem Standardargument folgt. Also folgt ein nicht standardmäßiges Argument auf das Standardargument, das A ist. Und das ist meiner Meinung nach eine sehr gute Information über Funktionsargumente und Parameter. 62. 62. Funktionen mit einer beliebigen Anzahl von Nicht-Schlüsselwort-Argumenten: Einige Funktionen in Python, wie die Funktion len, erhalten nur ein Argument. Wenn Sie versuchen, mehr als ein Argument zu übergeben, wird ein Fehler zurückgegeben besagt, dass genau ein Argument benötigt wird. Einige andere Funktionen, wie z. B. instance , benötigen genau zwei Argumente. Zweitens, wenn Sie versuchen, drei Argumente oder nur eines zu übergeben , erhalten Sie eine Fehlermeldung. Einige andere Funktionen wie print benötigen eine unbestimmte Anzahl von Argumenten, und Sie haben gesehen, wie wir solche Funktionen mit nur einem oder mehreren Argumenten definieren können , aber ich habe immer noch nicht erklärt, wie man diese Art von Funktionen erstellt Lass uns eine erstellen. Definieren Sie, nennen wir diesen Mittelwert, um den Mittelwert einer Reihe von Zahlen zu berechnen. Stellen Sie sich vor, das wäre unsere Funktion. Wir wollen so viele Artikel weitergeben, wie wir wollen. Wir haben tatsächlich früher eine Mean-Funktion erstellt, die wir so aufrufen konnten, aber sie hatte immer noch nur ein Argument, also war es eine solche Liste. Es ist immer noch ein Objekt, ein Argument. In diesem Fall wollen wir keine Liste weitergeben. Wir möchten so viele Artikel weitergeben, wie wir möchten. Also Min und dann, was du tust, du verwendest Sternchen und dann Bögen Das kann eigentlich alles sein, was hinter dem Sternchen steht. Jeder Variablenname würde funktionieren, aber es ist eine gute Praxis, da jeder Programmierer Arcs verwendet Es ist also gut, dass Sie Arcs verwenden , damit andere Ihren Code lesen können Und Sie gewöhnen sich auch daran, den Code anderer zu lesen , indem Sie ständig Bögen Sie wissen, wovon die anderen sprechen. Lassen Sie mich Ihnen nun etwas zeigen, bevor ich den Algorithmus anwende, der den Mittelwert berechnet Bögen zurückgeben. Mal sehen, was wir hier bekommen. Lassen Sie mich jetzt die Funktion aufrufen. Also eins, drei, du kannst auch Zeichenketten übergeben, was auch immer du willst, so. Und was Sie erhalten, ist tatsächlich eine obere Stange, die alle Gegenstände enthält, all die Objekte, die Sie in der Funktion Kohle übergeben haben. Das ist also tatsächlich ein oberer Pol. Was können wir also mit einem Tupel machen, mit dem wir die Summe der Bögen berechnen können Arcs ist also eine Variable, keine Sternbögen, geteilt durch die Länge der Bögen In diesem Fall würde es einen Fehler geben, weil wir Also entferne A von dort und versuche es erneut. A ist eine Zeichenfolge, daher macht es keinen Sinn , den Durchschnitt einer Zeichenfolge zu haben. Also haben wir gerade eine Funktion mit einer beliebigen Anzahl von nur bekannten Schlüsselwortargumenten erstellt . Ich sage nur, weil Sie hier keine Schlüsselwortargumente haben können. Sie sehen, dass X gleich drei ist, hier nicht funktionieren würde. Wenn Sie Schlüsselwortargumente benötigen, schauen Sie sich das nächste Video an. 63. 63. Funktionen mit einer beliebigen Anzahl von Schlüsselwort-Argumenten +: Diese Funktion hier , die wir in der vorherigen Vorlesung erstellt haben, akzeptierte also , die wir in der vorherigen Vorlesung erstellt haben, eine beliebige Anzahl von Argumenten, die kein Schlüsselwort sind. Bei Schlüsselwortargumenten müssen Sie ein weiteres Sternchen zum Sternchen hinzufügen ein weiteres Sternchen zum Sternchen und dann einen Variablennamen übergeben, aber Kew arcs Verwenden Sie das also bitte, obwohl Sie es nicht müssen, und schauen Sie dann, was KeyWRC ist, was für Keyword Args steht . Wenn Sie versuchen, die Funktion dort aufzurufen, erhalten wir eine Fehlermeldung, da es sich hier nur um eine Funktion mit einer beliebigen Anzahl von Schlüsselwortargumenten handelt eine Funktion mit einer beliebigen Anzahl von Schlüsselwortargumenten Daher müssen all diese Argumente als Argumente, Schlüsselwortargumente benannt werden , wobei das Schlüsselwort der Argumentname ist. B und C mögen das und führen Sie es aus und Sie erhalten ein Wörterbuch. Das Wörterbuch wird Elemente enthalten, bei denen jeder Schlüssel der Name der Argumente ist, die Sie beim Aufrufen der Funktion verwendet haben der Name der Argumente ist, die Sie , und der Wert ist der Wert dieses Arguments. Funktionen mit einer beliebigen Anzahl von Schlüsselwortargumenten werden leichter verwendet als Funktionen mit einer beliebigen Anzahl von Argumenten, die kein Schlüsselwort sind, wie z. B. die Print-Funktion , von der ich Ihnen zuvor erzählt habe, bei der Sie einfach beliebig viele Argumente ohne ein Schlüsselwort übergeben können . Da hast du es also. 64. 64. Einführung in die Dateiverarbeitung: Sie haben verschiedene Datentypen kennengelernt , die Sie in Python verwenden können Sie haben zum Beispiel gelernt , dass Sie Zeichenketten und Listen und Zahlen usw. haben können Und wir haben diese Datentypen in Variablen gespeichert. So wurde beispielsweise eine Variable mit einer Zeichenfolge verknüpft . Das Problem dabei ist, dass Sie Daten in Ihrem Python-Programm speichern . Wenn Sie die Punktzeit wirklich, wirklich speichern möchten, z. B. wenn Sie Wettervorhersagen speichern möchten, sollten Sie diese Prognosewerte nicht in Zeichenketten oder Zahlen in Ihrem Punkt-PY-Skript schreiben diese Prognosewerte nicht in . Stattdessen möchten Sie diese Daten in externen Dateien speichern, zum Beispiel in Textdateien oder CRC-Dateien, oder später lernen Sie etwas über Datenbanken, wie man Daten in Datenbanken speichert und diese Daten über Python abruft und sie in Python verarbeitet In diesem Abschnitt erfahren Sie jedoch, wie Sie Daten in Textdateien speichern und wie Sie Daten aus Textdateien abrufen, wie Sie Textdateien mit Python erstellen, wie Sie die Daten aus Textdateien lesen und mit Python verarbeiten. Das ist also ein sehr, sehr wichtiges Konzept der Programmierung. Das ist also ein fortgeschrittenes Konzept, und das lernst du in diesem Abschnitt. Also viel Spaß und wir sehen uns im nächsten Video. 65. 65. Dateien mit Python verarbeiten: Hier auf meinem Desktop habe ich eine Textdatei, Flout Dot TXT Wenn ich darauf doppelklicke, wird es mit einem der Texteditoren geöffnet , die ich auf meinem Computer installiert habe Der Texteditor ist ein Programm, und in diesem Programm kann ich diese Datei lesen, sodass ich diese Zeilen lesen kann. Ich kann hier mehr Zeilen schreiben, ich kann das kopieren und einfügen, sie multiplizieren, um viele dieser Zeilen hier in dieser Textdatei zu haben , und ich kann all das mit diesem Texteditor-Programm machen diesem Texteditor-Programm , das ich zufällig hier auf meinem Computer habe. Jetzt können wir dasselbe mit Python tun, was bedeutet, dass wir die Datei mit Python lesen mehr Inhalt in diese Datei schreiben können. Wir können das multiplizieren und das können wir tatsächlich sehr effizient machen. Wenn ich das multiplizieren müsste, müsste ich sie vielleicht 1.000 Mal kopieren und einfügen. Aber mit Python können Sie das sehr einfach machen. Machen wir weiter und machen dasselbe mit Python und beginnen wir mit dem Lesen der Datei. Also, wie liest man eine Datei mit Python. Das zeige ich dir im nächsten Video. 66. 66. Text aus einer Datei lesen +: So öffnen Sie eine Textdatei mit Ihrem bevorzugten Texteditor-Programm, und lassen Sie mich Ihnen zeigen, wie Sie dasselbe mit Python tun können. Natürlich ist die Erfahrung ein bisschen anders. Es geht nicht darum, auf die Datei zu doppelklicken, es geht darum, Code zu schreiben. Wenn Sie diese Datei also mit Ihrem Texteditor öffnen, passiert, dass ein Objekt in Ihrem temporären Speicher Ihres Computers im RAM erstellt wird . Die Datei war also auf der Festplatte. Wenn Sie sie öffnen, wird sie als eine Art Objekt im RAM erstellt . Das Gleiche passiert mit Python. In diesem Fall möchten Sie vielleicht das Objekt, das Dateiobjekt, das Sie in Python erstellen werden, speichern . Vielleicht möchten Sie es in einer Variablen speichern. Nennen wir es meine Datei. Die Öffnungsfunktion erzeugt Dateiobjekte. Und da es sich um eine Funktion handelt, erhält sie ein Argument. Diese grundlegende Punkt-Py-Datei befindet sich nun im selben Verzeichnis wie die Fruit Dot-TXT-Datei. Bitte laden Sie die Fruits Dot TXT-Datei herunter, die so aussieht. Lass es mich hier aufteilen. Sie können eine Datei an die Seite ziehen sodass Sie im Visual Studio-Code-Editor zwei Fenster haben, aber ich bin mir sicher, dass Sie das auch in anderen Editoren tun können , wenn Sie andere Editoren verwenden. diese Datei vorerst Lassen Sie diese Datei vorerst im selben Ordner wie Basics dot py liegen. Sobald Sie das getan haben, ist die Eingabe für diese Funktion der Pfad zur Datei. In diesem Fall wäre das Fruit Dot TXT, da sich die Fruit-DTX-Datei im selben Verzeichnis wie Basics Dot Pi befindet im selben Verzeichnis wie Basics Dot Pi Nein, um den Inhalt von Fruits DL TXT in Ihrem Texteditor zu lesen , wie wir es grafisch gemacht haben, müssen Sie nur auf die Datei doppelklicken und dann sehen Sie den Inhalt auf der Texteditor-Oberfläche In Python sind die Dinge ein bisschen mehr, sie müssen ein bisschen expliziter sein. Sie müssen angeben, was Sie tun möchten, weil wir mit dieser Datei gerade ein Dateiobjekt erstellt haben. Wenn wir das ausführen, wird nichts passieren. Ein Objekt wird im temporären Speicher erstellt und wenn die Ausführung des Programms beendet ist, wird das Objekt aus dem Speicher gelöscht. Genau wie wenn Sie die Textdatei mit dem Texteditor öffnen und dann schließen, wird Objekt, das Dateiobjekt aus dem temporären Speicher gelöscht. Wenn Sie lesen möchten, möchten Sie vielleicht meine Datei ausdrucken. Jetzt hat meine Datei eine Lesemethode. Dies ist das Dateiobjekt, das eine Lesemethode hat. Es benötigt keine Argumente, also belassen Sie es einfach so, speichern, ausführen, und hier erhalten Sie die Ausgabe der Datei. So liest du eine Datei in Python. 67. 67. Datei-Cursor: Nun, etwas, das Sie wissen sollten, ist das Cursor-Konzept. Was hier passiert, ist, dass Sie eine Datei erstellen, ein Dateiobjekt wird erstellt, und wenn Sie dann die Lesemethoden anwenden, bevor Sie die Lesemethode anwenden, steht der Cursor am allerersten Zeichen der Textdatei. Wenn Sie die Lesemethode anwenden, bewegt sich der Cursor an das Ende der Textdatei. Jetzt, nachdem die Lesemethode angewendet wurde, steht der Cursor hier. Wenn Sie einen weiteren Lesevorgang wie diesen anwenden , speichern Sie, führen Sie ihn aus. Was passieren wird, ist, dass Sie vielleicht erwartet haben , dass diese Zeilen zweimal ausgedruckt werden. Stattdessen werden sie einmal gedruckt, und dann ist das nur eine leere Zeichenfolge, weil der Cursor nach der ersten Ausführung des Lesevorgangs an diesem Punkt war und unterhalb dieses Punktes, da ist nichts, also erhalten Sie dort diese leere Zeichenfolge. Was Sie tun können, ist, wenn Sie den Inhalt viele Male drucken möchten, Sie können den Inhalt in einer Variablen speichern und dann den Inhalt so oft drucken , wie Sie möchten, und Sie erhalten die Ausgabe zweimal, wie Sie hier sehen können. liegt daran, dass die Lesemethode hier nur einmal ausgeführt wurde. Das solltest du wissen. 68. 68. Eine Datei schließen: Wenn Sie ein Dateiobjekt erstellen, wird ein Dateiobjekt im RAM erstellt und es bleibt dort, bis Ihr Programm ausgeführt wird . Daher ist es möglicherweise eine gute Idee die Datei tatsächlich zu schließen , sodass sie aus dem Speicher gelöscht wird , sobald Sie mit der Verarbeitung der Datei fertig sind. In diesem Skript erstellen Sie beispielsweise das Dateiobjekt, und hier lesen Sie den Inhalt dieses Dateiobjekts und speichern ihn als Zeichenfolge. Meine Datei Read gibt also eine Zeichenfolge aus, die den Text der Datei darstellt. Diese Zeichenfolge wird in dieser Inhaltsvariablen gespeichert. Also hier bin ich mit der Verarbeitung der Datei fertig, danach kann ich nur die Zeichenfolge verarbeiten, die ich in dieser Variablen gespeichert habe. Daher ist es sinnvoll , meine Datei „Punkt schließen“ anzuwenden. Dies ist zwar nicht unbedingt vorgeschrieben, aber es ist eine gute Idee, es zu verwenden. Wenn Sie das also tun, erhalten Sie immer noch die richtige Ausgabe. Etwas, das Sie jetzt wissen sollten, ist, dass Sie eine Fehlermeldung erhalten, wenn Sie meine Datei anwenden, die erneut gelesen wurde, nachdem Sie die Datei geschlossen haben . Es besagt, dass dieser Vorgang an einer geschlossenen Datei ausgeführt wird , also können Sie das nicht tun. So erstellt man eine Datei und schließt sie, aber es gibt einen besseren Weg, all das zu tun. Das zeige ich dir im nächsten Video. 69. 68. Dateien mit öffnen: Eine bessere Methode, um die Datei zu erstellen, den Inhalt zu lesen und die Datei zu schließen, ist die Verwendung des Managers Mit Kontakten. Auch hier verwenden Sie die Öffnen-Funktion, die genauso funktioniert wie TXT. Jetzt sagst du myfile. Meine Datei ist nur eine Variable, und dann müssen Sie einrücken Was Sie hier getan haben, ist, dass Sie dieses Myfile erstellt haben , das Open Fruits Dot TXT entspricht , genau das Der Unterschied besteht darin, dass Sie alles schreiben , was mit der Verarbeitung dieses Dateiobjekts zu tun hat Sie müssen alles unter diese Zeile schreiben , die als Block unter dieser Zeile eingerückt ist Das wird die Dinge besser organisieren. In diesem Fall wollen wir also mit der Datei machen , sie so zu lesen. Sobald Sie fertig sind, schließen Sie einfach den Einzug Die nächsten Zeilen werden also wie die Druckzeile ohne Einrückung angezeigt. Mal sehen, was hier passieren wird. Das ist die erwartete Ausgabe des Druckinhalts. Auch wenn Sie das löschen, um Sie nicht zu verwirren , erhalten Sie wieder dieselbe Ausgabe Diese Ausgabe ist also tatsächlich von dieser Zeile. Und das Schließen der Datei ist hier nicht erforderlich, da der With Context-Manager die Methode close implizit anwendet Ihre Datei wird also geschlossen, sobald dieser Block endet. Verwenden Sie also bitte den With Contact Manager, und so machen Sie es. 70. 69. Verschiedene Dateipfade verwenden: Bisher befanden sich unser Basis-PY und unsere Fruits Dot TXT-Datei im selben Verzeichnis, in demselben Ordner, sodass wir nur den Namen der Datei in die Basis-PY-Datei schreiben konnten nur den Namen der Datei in die Basis-PY-Datei schreiben Befanden sich die Früchte dieser TXT-Datei jedoch zum Beispiel in diesem anderen Verzeichnis, so habe ich Fruits TXT einfach in Dateien verschoben. Fils ist ein Ordner, der sich im selben Verzeichnis wie Basics Dot PY Basics, das ist PY im selben Ordner mit Skripten mit Dateien und Früchten in Dateien Wenn Sie in diesem Fall die grundlegende PY-Datei ausführen, erhalten Sie die Fehlermeldung „ Datei nicht gefunden“. Keine solche Datei oder kein solches Verzeichnis, Fruits Dot TXT. Und das ist wahr. In dem Ordner, in dem Basics Dt PY so ist, gibt es keine Früchte DTXT Ordner, in dem Basics Dt PY so ist, gibt es keine Früchte DTXT Sie müssen lediglich den vollständigen Pfad zur Datei im Verhältnis zum Basis-Punkt PY angeben , also Dateien, Schrägstrich, Obst, Punkt Führen Sie das aus und die Dinge werden funktionieren. 71. 70. Text in eine Datei schreiben: Schauen wir uns die Hilfedokumentation von Open an. Und Sie werden sehen, dass die Funktion open eine Reihe von Argumenten erhält. Die ersten beiden sind die wichtigsten. Wir haben bereits file verwendet , das ist der Pfad zum Dateiobjekt. Und für diese anderen verwenden wir ihre Standardwerte, was bedeutet, dass wir für Modi R verwendet haben, R bedeutet Lesen. Daher ist dieser Code hier derselbe wie dieser. Sie erhalten also die gleiche Ausgabe. Welche solltest du verwenden? Nun, um den Code einfacher und kürzer zu machen, ist das in Ordnung. Um den Code in Bezug auf die Lesbarkeit expliziter zu machen , sodass andere sehen können, dass es darum geht , den Code zu lesen, dann würdest du das verwenden So oder so ist es in Ordnung. Nun, was kannst du zum Schreiben verwenden? Zum Schreiben würdest du W zum Schreiben verwenden. Und lassen Sie mich eine neue Datei im Dateiordner erstellen. Nenn es Gemüse. Eine Gemüse-Datei existiert derzeit also nicht in meinem Dateiordner. Sie wird mit der Open-Funktion erstellt. Und dann werden wir in diese leere Datei etwas schreiben, das wir Tomato machen. Natürlich macht die Inhaltsvariable hier keinen Sinn weil wir einige Daten nicht aus der Datei abrufen Wir schreiben nur dort. Also lassen wir es so, speichern wir es. Execute und ein Gemüse, die TXT-Datei wurde auf meinem Computer mit einer Tomatenzeichenfolge dort erstellt . Lass es mich hier hinstellen. Die Lesemethode sucht also nach einer vorhandenen Datei. Die richtige Methode erstellt eine neue Datei, und ich sollte Sie warnen , wenn die Datei existiert, wie in diesem Fall, Obst, dass Tix da ist. Wenn das der Fall ist, überschreibt Python die bestehende Datei. Wenn Sie also Fruits Dtixti jetzt öffnen, werden Sie sehen, dass Sie diesen neuen Inhalt der Datei haben Der bestehende Inhalt wird also verworfen. Wie können wir mehr Zeilen schreiben? Nun, Sie müssen den speziellen Backslash N verwenden, der Bruchlinien erzeugt Zwiebel, führe aus. Also das ist Fruits TXT. Und du bekommst diese drei Zeilen, wie wir es erwartet haben. Sie sollten wissen , dass Sie mehr als eine Methode auf die geöffnete Datei anwenden können. Lass uns hier Knoblauch schreiben. Ich habe bewusst nicht getan, was ich tun sollte , um dir zu zeigen, was passiert. Gälisch wurde also sofort hinter Onion gesetzt, weil es dort kein Leerzeichen oder einen umgekehrten Schrägstrich N gab kein Leerzeichen oder einen umgekehrten Schrägstrich N Wenn ich hier ein Leerzeichen setzen würde, würden Sie natürlich ein Leerzeichen zwischen Zwiebel und Gälisch bekommen Aber was Sie stattdessen wollen, ist , dass Sie nach jeder Zeile, die Sie schreiben, einen umgekehrten Schrägstrich N haben wollen. Und in diesem Fall würden Sie die korrekte Ausgabe erhalten Jetzt fragst du dich wahrscheinlich, nun, ich habe diese Frucht, das Ich möchte es nicht überschreiben. Wie kann ich tatsächlich eine weitere Zeile unter diesen vorhandenen Zeilen hinzufügen eine weitere Zeile unter diesen vorhandenen Zeilen Wie das geht, zeige ich dir im nächsten Video. 72. 71. Tex an eine bestehende Datei anhängen +: Okay, also ich habe diese Früchte dieser CX-Datei hier, die diese vier Zeilen hat, die sowieso keine Früchte sind, aber Sie verstehen schon, was ich meine. Es ist Text. Wir möchten diesen vorhandenen Früchten in der CX-Datei zwei weitere Zeilen hinzufügen. Wir wissen im Moment nicht, was da ist. Wenn Sie sich die geöffnete Dokumentation ansehen und nach unten scrollen, werden Sie hier sehen, dass Sie in diesem Argument hier verschiedene Modi übergeben können. Also, was wir bereits verwenden, verwenden wir W, und dann haben Sie X. Wenn Sie X verwenden und versuchen zu schreiben, sagen wir Okra Wenn Sie das ausführen, heißt es , dass die Datei existiert. Im Gegensatz zum W-Modus , der eine Datei überschreibt, überschreibt X die Datei also , der eine Datei überschreibt, nicht, wenn die Datei existiert Es kann jedoch keinen Inhalt an eine bestehende Datei anhängen , da es besagt, dass die Datei existiert Deshalb springen wir zum nächsten Modus, nämlich A. Sie sehen, dass Okra dort hinzugefügt wurde, natürlich mit einem kleinen Problem, weil es hier in der vorhandenen Textdatei keine Ziegellinie gab hier in der vorhandenen Textdatei keine Ziegellinie Das sind einige Informationen, die Sie kennen sollten, und wenn Sie wissen, dass es keine Ziegelinie gibt, dann müssten Sie mich diese Textdatei sagen lassen, dann müssten Sie dort eine Umbruchlinie hinzufügen , um die korrekte Ausgabe zu erhalten Jedes Mal, wenn Sie eine neue Zeile hinzufügen, müssten Sie davor eine Ziegelsteinlinie hinzufügen. Wie wäre es nun, diesen Inhalt zu lesen? Vielleicht speichern Sie es in einer Variablen und drucken Sie den Inhalt aus. Wird es funktionieren? Ich glaube nicht. Es heißt, dass die Operation nicht unterstützt wird. Die Datei ist nicht lesbar. Es ist A, was für das Anhängen steht. Wenn Sie gleichzeitig schreiben und lesen möchten, möchten Sie ein Plus hinzufügen Einfach so. Hinrichten. Sie erhalten eine leere Ausgabe. Warum? Wegen des Cursors. Also, was passiert ist, als wir dort die Oca-Zeile hinzugefügt haben, also zuerst haben Sie die Datei hier an dieser Stelle erstellt, der Cursor ist hier, okay? Dann schreibst du die Datei. In dieser Zeile geht der Cursor an das Ende der Datei. Wenn Sie also jetzt lesen, lesen Sie, was unter der letzten Zeile noch übrig ist , was nichts ist. Was Sie tun können, ist, in meiner Datei Sk eine Sk-Methode anzuwenden, um den Cursor wieder an die Nullposition zu bringen. In diesem Fall geht der Cursor bis zum Ende. Mit dieser Zeile geht er wieder auf die Nullposition, und dann liest du alles von dort und unten, sodass du die richtige Ausgabe erhältst. 73. 72. Integrierte Module in Python: Wenn Sie den vorherigen Abschnitten des Kurses folgen, haben Sie einen langen Weg zurückgelegt Sie kennen jetzt also die Grundlagen von Python. Sie wissen, wie man grundlegende Probleme löst. Nehmen wir zum Beispiel an, Sie möchten die Anzahl der Zeichen der Zeichenfolge angeben. Sie haben also Methoden und Funktionen, die Sie verwenden können. Methoden können Sie also mit Deer SDR suchen, Sie würden hier die Menge an Methoden sehen , die auf Zeichenketten angewendet werden könnten, und dann können Sie Funktionen sehen, die in Funktionen eingebaut Zum Beispiel wären die n-Methoden hier praktisch. Es würde die Anzahl der Zeichen für die Pi-Pi-Pi-Zeichenfolge zurückgeben , die sechs ist. Nun, all diese hier. Also diese Funktionen und die String-Methoden, sie sind alle eingebaut. Das sind also Methoden und Funktionen, die in der Python-Software geschrieben sind , die Sie von python.org herunterladen und installieren Diese Software ist in der Sprache C geschrieben. Daher sind diese Methoden und Funktionen auch in C-Sprache geschrieben. Und wie Sie sehen, sind diese Namen hier sofort in Ihrem Python-Interpreter verfügbar Das heißt, sie sind eingebaut. Sie befinden sich in diesem Interpreter, und Sie können sie einfach aufrufen, ohne sie zu importieren. Was wäre, wenn wir andere Probleme hätten, wie zum Beispiel, sagen wir, Sie sehen das Skript hier. Was dieses Skript macht, ist eine Schleife. Es ist eine lange Schleife. Es ist zwar wahr, was bedeutet, dass es ewig laufen wird. Es liest also diese Datei, Vegetable Dot TXT, im Dateiverzeichnis, das sich zufällig im selben Verzeichnis Basics Dot Pi. Das ist also der Pfad der Datei. Und diese Textdatei enthält eine Zeichenfolge. Also lese ich es unter dieser Variablen und drucke den Inhalt hier aus. Wenn ich also diese Datei ausführe, wird der Inhalt Sekundenbruchteilen ausgedruckt , und das hängt von Ihrer Prozessorgeschwindigkeit und der Prozessorgeschwindigkeit Ihres Computers ab. Was ist, wenn wir nicht wollen, dass das jeden Bruchteil einer Sekunde passiert? Was ist, wenn Sie den Inhalt alle 10 Sekunden lesen möchten? Lassen Sie mich das mit Control C unterbrechen . Sie würden bald feststellen , dass Sie keine eingebaute Funktion haben , die das tut, die irgendeine Art von Schlafmethoden in Ihrem Skript implementiert Es gibt also keine Funktion, die Sie sofort verwenden können. In diesem Fall möchten Sie vielleicht nach integrierten Modulen suchen. Verwenden Sie dazu bitte diese Syntax. Importieren Sie CS, was für System- und dann für CS-Built-in-Modulnamen steht . Und hier erhalten Sie eine Liste von Modulen, eingebauten Modulen, also Modulen, die wieder in die Python-Software eingebaut sind . Also lass uns eines davon mal benutzen. Sie verwenden es, indem Sie den Modulnamen importieren. Andererseits können Sie DR verwenden, um zu sehen, was Sie für dieses Modul haben. Hier werden Sie zum Beispiel sehen, dass wir eine Schlafmethode haben. Verwenden Sie die Hilfe, um zu erfahren, wie Sie diese bestimmte Methode verwenden können. Es heißt also, dass es die zweite als Argument erhält. Also lass es uns versuchen. T, das ist Schlaf. Nehmen wir an, drei, eins, zwei, drei, und zu welcher Uhrzeit dieser Ruhezustand die Ausführung des Skripts um eine bestimmte Anzahl von Sekunden, in diesem Fall drei, verzögert Das heißt, wir können das im Skript implementieren. Es empfiehlt sich, Module in der ersten Zeile des Skripts zu importieren. Und dann verwenden Sie dieses Modul in Ihrem Skript, wo immer Sie es benötigen. In diesem Fall wollen wir annehmen, dass das Gemüse, dessen TX-Datei ist, alle 10 Sekunden auf unserem Server generiert wird . Nehmen wir an, eine Software auf dem Server bezieht diese Daten von irgendwoher und schreibt alle 10 Sekunden einen neuen Inhalt. Zum Beispiel ist es jetzt Tomate, später wird es 10 Sekunden Knoblauch sein. Danach wären es Zwiebeln und so weiter. Wir bekommen also alle 10 Sekunden neue Inhalte. Also wollen wir den Inhalt der Datei ausdrucken und dann den Ausführungsschein für 10 Sekunden haben. Jetzt werde ich das Skript speichern, zur Befehlszeile gehen und es ausführen. Also bekommst du sofort Tomaten. Wenn ich das nun in Onion ändere, sagen wir, die Software hat es geändert und speichern, klicken Sie auf Speichern. Onion wurde dort nach 10 Sekunden ausgedruckt. Wenn ich es auf Knoblauch ändere, speichere. Warte, warte ein paar Sekunden. Knoblauch ist da draußen gedruckt. Also ruft das Skript alle 10 Sekunden die Daten von Gemüse ab, das CXC verarbeitet, und druckt sie in einer Befehlszeile aus Also kontrolliere C, um es zu unterbrechen. So benutzt man ein Modul. Jetzt ist nicht alles in Ihrer Python-Interpreter-Software integriert in Ihrer Python-Interpreter-Software Manche Dinge, viele davon, kommen in einer anderen Form vor, die ich in der nächsten Vorlesung erläutern werde in der nächsten Vorlesung erläutern 74. 73. Python-Standardmodule: Zuvor haben Sie gelernt, dass Sie der in C integrierten Modulnamen eine Liste der in Python integrierten Module abrufen können mithilfe der in C integrierten Modulnamen eine Liste der in Python integrierten Module abrufen können. Als Beispiel verwenden wir das Zeitmodul, das die Skriptausführung für eine bestimmte Anzahl von Sekunden einfrieren würde . Lass mich dir jetzt etwas zeigen. Ich führe ein Skript aus. Zwiebel wird ausgedruckt , weil sie in der CXT-Datei im Gemüse ist Wenn ich diese Datei jetzt lösche, werden Sie feststellen, dass das Skript beim nächsten Mal nach den Dateien sucht, den TXT-Pfad mit Gemüsepunkten markiert Das ist also ein Dateipfad. Es wird ein Fehler generiert, der Fehler „Datei nicht gefunden“, keine solche Datei oder kein solches Verzeichnis. Stellen Sie sich vor, Sie hätten dieses Programm rund um die Uhr auf einem Server ausgeführt und aus irgendeinem Grund die Software generiert die Software, die diese Dateien generiert hat, irgendwann die Datei nicht, sodass Ihre Skriptausführung beendet wird und Ihre Software vielleicht in einer Minute erneut mit der Generierung der Dateien beginnt, aber Ihr Python-Skript wird sodass Ihre Skriptausführung beendet wird und Ihre Software vielleicht in einer Minute erneut mit der Generierung der Dateien beginnt, aber Ihr Python-Skript wird nicht fortgesetzt, weil hier ein Fehler aufgetreten ist. Was wir also tun wollen, ist, das Python-Skript weiter auszuführen , auch wenn die Datei dort nicht im Verzeichnis befindet. Dazu wollen wir das OS-Modul verwenden. Importieren Sie OS, und Sie werden feststellen, dass OS nicht zu den integrierten Python-Modulen gehört. In der Tat ist OS ein in Python geschriebenes Modul. Alle diese Module sind integriert, was bedeutet, dass sie in der Python-Softwareimplementierung in C-Sprache geschrieben sind . OS gehört nicht dazu. Um herauszufinden, wo sich OS befindet, können Sie das OS-Präfix verwenden. Dort erhalten Sie einen Verzeichnispfad , der je nach verwendetem Betriebssystem unterschiedlich sein kann . Navigieren Sie also bitte zu diesem Verzeichnis. Ich ziehe es vor, in dieses Verzeichnis zu gehen indem ich es ohne die Codes kopiere. Also kopiere alles ohne den Des, so. Gehen Sie zu Ihrem Befehlszeilenterminal, und wenn Sie Windows verwenden, verwenden Sie Start, fügen Sie das Verzeichnis dort ein und drücken Sie dann die Eingabetaste. Wenn Sie einen Mac oder Linux verwenden, verwenden Sie Öffnen statt Start und fügen Sie das Verzeichnis erneut ein. Drücken Sie die Eingabetaste, um Ihren Windows Explorer oder Finder zu öffnen , unabhängig davon, was Sie zum Öffnen von Ordnern benötigen. also auf den 3.7-Ordner , den Sie hier sehen Doppelklicken Sie also auf den 3.7-Ordner , den Sie hier sehen und dann zu Lib gehen. Suchen Sie dann den Ordner Python 3.7 oder eine andere Version, die Sie haben. Also Python Three Point irgendwas. Doppelklicken Sie darauf. Und hier sehen Sie eine Reihe von Python-Dateien Punkt Pi. Dies sind alles Python-Dateien. Dies sind alles Standard-Python-Module, und OS gehört dazu. Gehen Sie zu Oh hier, doppelklicken Sie darauf oder öffnen Sie es mit einem beliebigen Texteditor, und Sie werden sehen, dass dies tatsächlich Python-Code ist. Stellen Sie sicher, dass Sie es schließen, bevor Sie es ändern. Ändern Sie also nicht, ändern Sie keine Python-Standardmodule. Also werde ich es schließen und Sie können DR tatsächlich verwenden , um zu sehen, was Sie für dieses Modul zur Verfügung haben. Unter ihnen werde ich zum Beispiel das Pfadobjekt verwenden. Also mit diesem Pfad, und Path hat eine Methode namens exists. Die Methode exist erhält ein Argument, das eine Zeichenfolge sein sollte, und es soll der Pfad der Datei sein, von der Sie überprüfen möchten, ob sie im aktuellen Verzeichnis existiert. Schreiben wir also den Verzeichnispfad zur Datei und ich erhalte False, weil die Datei nicht im aktuellen Verzeichnis befand. Wenn ich dorthin gehe und diese Datei im Dateiordner erstelle, habe ich jetzt einen TXT-Dateipfad mit einem Schrägstrich, Gemüse und einem Punkt Wenn ich das noch einmal ausführe, werde ich wahr Und diese Tatsache können wir in unserem Python-Programm nutzen. Bevor wir die Datei im Real-Modus öffnen, wollen wir also überprüfen, ob die Datei existiert, denn wenn wir das nicht tun und die Datei nicht da ist, diese Zeile hier generiert diese Zeile hier den Fehler, dass die Datei nicht gefunden wurde. Bevor wir das tun, wollen wir überprüfen , ob dieser Pfad existiert. Dateien mit Schrägstrich, Gemüse, Punkt TXT. Und da das eine Bedingung ist, wollen wir dort eine Spalte verwenden Und danach muss alles, was Sie tun wollen , eingerückt werden Also, es wird unter stehen, wenn das auch Teil des W-Blocks ist, also rückt auch diesen Und dann geht s wieder in die Drahtschleife. Was du unter ls machen willst, naja, vielleicht wollen wir die Datei ausdrucken Die Datei existiert nicht. Und dann sei vorsichtig hier. Der Zeitunterschied muss sich außerhalb des IL-Blocks befinden, da Sie ihn unabhängig vom bedingten Block ausführen möchten , da Sie ihn unabhängig vom bedingten Block ausführen Das heißt, wenn die Datei existiert, wird sie ausgeführt. Wenn die Datei nicht existiert, wird sie ausgeführt. Und nachdem eine von beiden ausgeführt wurde, werden wir immer die Zeit ausführen, die verrutscht. Lassen Sie mich das Skript speichern und ausführen. Und wir haben einen Fehler, OS ist nicht definiert. Ich bin froh, dass das aufgetaucht , weil Module importiert werden müssen. Andernfalls erhalten Sie diesen Namensfehler, weil das Betriebssystem, bevor es hier verwendet wurde, nicht importiert wurde und es sich nicht um eine integrierte Funktion oder Methode wie print handelt, die Sie nicht importieren müssen. Der Name ist also nicht sofort im Namensraum verfügbar. Speichern Sie das Skript erneut, führen Sie es aus und wir erhalten eine leere Zeichenfolge, da Gemüse derzeit leer ist. Wenn ich jetzt so ein Gemüse lösche , warte eine Weile. Und wir lassen das ausdrucken. Wenn du die Datei erneut erstellst, schreibst du dort etwas, speichere die Datei. Vergessen Sie nicht, so zu tun, die Software diese Datei generieren Also bringst du Gallic dahin. Jetzt kann ich die Skriptausführung mit Control C unterbrechen, und das sind beide Standard-Python-Module, und sie sind genau gleich, sodass Sie JR mit ihnen verwenden können Für diese Module gelten also alle Python-Regeln. Der einzige Unterschied besteht darin , dass Time in der Sprache C geschrieben und in die Python-Software integriert ist und das Betriebssystem als Punkt-Pi-Skript geliefert wird, und es kam hierher, als Sie Python installiert haben. Es wurde also im Grunde in eines Ihrer Computerverzeichnisse kopiert, und Sie können all diese Module importieren, Standardmodule in Python. Natürlich ist nicht alles Ihrer Python-Installation enthalten. Also Dinge, die du installieren musst. Also werde ich dir das im nächsten Video zeigen. 75. 74. Module von Drittanbietern: In den vorherigen Vorlesungen haben wir ein Programm entwickelt , das alle 10 Sekunden die Gemüse durchsucht , die TXI-Datei enthält, und den Inhalt ausdruckt Also die Programme, die hier laufen. Nun, Vegetables Dot TXT ist nur eine einfache Textdatei mit nutzlosen Daten wie Knoblauch und Zwiebel. Was passiert, wenn wir mehr Daten aus der realen Welt hätten , wie zum Beispiel die Temps, die CSV-Datei unterstrichen haben die Temps, die CSV-Datei unterstrichen Das ist also eine CSV-Datei, die im Grunde eine Textdatei ist Und es hat eine Struktur aus mehreren Spalten. Jede Spalte hat also einige Daten. Sie sehen hier, dass dies ein Header ist. Es hat zwei Spalten, SD eins für Station eins und SD zwei für Station zwei. Wir haben also zwei Wetterbeobachtungsstationen, und sie haben diese Daten, diese Temperaturen, aufgezeichnet. Nehmen wir an, das sind Beobachtungen an einem Tag. Das ist am Morgen und das ist später am Nachmittag und in der Nacht. Wir haben also zwei Spalten. Unsere Pflicht ist es jetzt, diese Datei alle 10 Sekunden zu lesen, genau wie wir es mit Gemüse tun, diese TXT-Datei. Aber anstatt ihren Inhalt auszudrucken, müssen wir den Durchschnittswert all dieser Werte ausdrucken . Also sollten wir das alle 10 Sekunden machen. Also, normalerweise müsstest du das alle 24 Stunden machen , weil es sinnvoller ist. Da es sich bei diesen Daten tägliche Daten und tägliche Temperaturdaten handelt, werden sie täglich geändert. Es ist sinnvoll, den Wert, den Durchschnittswert, alle 24 Stunden auszudrucken . Und natürlich können Sie das ganz einfach tun, indem Sie einfach den Wert von 10 Sekunden auf eine Sekunde ändern , die 24 Stunden entspricht. Das können Sie leicht berechnen. Aber lassen Sie uns der Einfachheit halber einfach 10 Sekunden verwenden. Wir können dies zwar tun, indem wir die Open-Methode verwenden , um die Daten in Python zu laden, aber das würde die Daten als Zeichenfolge laden. Dieser gesamte Text würde also als Zeichenfolge in Python geladen werden. Dann müssten wir einige Zeichenkettenverarbeitungsoperationen anwenden einige Zeichenkettenverarbeitungsoperationen um all diese Werte aufzuteilen und sie in Float umzuwandeln. Aber das wäre, als würde man das Rad neu erfinden. Ich versuche zu sagen , dass jemand anderes Python-Code geschrieben hat, der dies sehr einfach in nur einer oder zwei Codezeilen erledigt. Und die Leute, die das geschrieben haben, haben es als Bibliothek eines Drittanbieters gebaut. So wie wir Time und OS verwendet haben , indem wir sie in Python importiert haben, können wir für diesen Fall auch eine andere Bibliothek verwenden, um diese Daten in einem schönen Format in Python zu laden . Lass mich dir zeigen, wie. Der Bibliotheksname, den ich kenne, ist Pandas, und Pandas wird standardmäßig nicht mit Python geliefert Wenn Sie also Python installieren, ist Pandas nicht da, aber Sie können es mit PIP installieren PIP ist eine weitere Bibliothek, die standardmäßig in Python installiert ist und zur Installation anderer Bibliotheken von Drittanbietern verwendet wird Ein sehr wichtiger Punkt, den ich ansprechen möchte , ist , dass der PIP-Befehl zwischen verschiedenen Betriebssystemen und verschiedenen Python-Installationen variieren kann und verschiedenen Python-Installationen Wenn Sie beispielsweise Python Version 3.8 verwenden, müssen Sie möglicherweise PIP 3.8 statt nur PIP eingeben Wenn Sie Python 3.9 verwenden, müssen Sie PIP 3.9 eingeben Wenn Sie Python 3.10 verwenden, das neuer als 3.9 ist, müssen Sie PIP 3.10 eingeben Um es zusammenzufassen, müssen Sie also Ihre eigenen Befehle verwenden. Immer wenn ich PIP drei eintippe, müssen Sie Ihr eigenes PIP 3.8 oder PIP 3.9 usw. auf Ihrem Computer verwenden Computer verwenden Also werde ich Pip Three verwenden und dann Pandas installieren. Beachten Sie, dass Sie den Teil „Pandas installieren“ des Befehls nicht ändern sollten den Teil „Pandas installieren“ des Sie sollten nur den PIP-Teil ändern , wie ich es Ihnen erklärt habe Okay, Pandas ist also der Name der Bibliothek, die wir installieren wollen Also füllen sich die Balken. Das bedeutet, dass die Pandas-Bibliothek erfolgreich installiert wurde Großartig. Lassen Sie uns jetzt weitermachen und Pandas in unserem Skript hier verwenden Importieren Sie Pandas, genau wie wir es mit anderen Bibliotheken getan haben. Also diese beiden, das war eine Standardbibliothek. Es ist in den Python-Interpreter integriert. Und das ist wiederum eine Standardbibliothek, aber sie ist nicht eingebaut, sie ist in Python geschrieben. Dieser Pandas, das ist auch in Python geschrieben, und jetzt wurde es einfach in unseren Python-Installationsdateien installiert in unseren Python-Installationsdateien Lass mich dir zeigen , wo der Pandas ist. Lassen Sie uns eine Python-Sitzung öffnen. Wenn Sie also SIS und dann das Punktpräfix sys importieren , erhalten Sie dieses Verzeichnis. Welches Verzeichnis Sie auch haben, kopieren Sie es ohne die Codes, und dann starten Sie unter Windows und zahlen das Verzeichnis auf Mac und Linux öffnen und bezahlen, drücken die Eingabetaste, das öffnet das Verzeichnis, gehen Sie zu Lib to Python. Und dann war zum Beispiel OS da, Os dot pi. Das waren Standardbibliotheken. Nun, was auch immer Sie mit PIP installieren, es wird sich im Verzeichnis der Site-Pakete befinden, das sich irgendwo hier unten befindet, ja Also Pandas, das sind Pandas. Wir haben gerade Pandas installiert. In diesem Fall handelt es sich nicht um ein Modul, sondern um eine Reihe von Modulen Und das nennt man ein Paket. Wenn Sie mehrere Module haben, wird das als Paket bezeichnet. Aber Sie können es immer noch als Bibliothek bezeichnen . Eine Bibliothek ist also ein Name, der normalerweise sowohl für Module als auch für Bibliotheken verwendet wird . Programmieren Sie also, wenn Sie Pandas verwenden, es macht keinen Unterschied Wenn es ein Modul ist oder es ein Haufen von Modulen ist, also ein Paket Der Code von Pandas ist also vollständig da, und wir können diesen Code jetzt in unserem Skript verwenden Lassen Sie mich Ihnen in der nächsten Vorlesung zeigen, wie wir diese Pandas-Bibliothek eines Drittanbieters verwenden 76. 75. Beispiel eines Drittanbieter-Moduls ++: Lassen Sie uns also weitermachen und den Inhalt dieser Datei mit Pandas lesen den Inhalt dieser Datei mit Pandas Eine sehr leistungsstarke Datenanalyse-Bibliothek. Wir werden später tief in Pandas eintauchen. Wir haben einen Bereich, der Pandas gewidmet ist, und wir haben Anwendungen, in denen wir Pandas häufig verwenden Aber lassen Sie mich Ihnen vorerst nur eine kurze Demo geben , wie Pandas funktionieren Stellen Sie sicher, dass Sie es importieren. Ich habe hier importiert, und während wir fertig sind, behalten wir diese Bedingung um zu überprüfen, ob die Datei da ist In diesem Fall wäre das Temps Today Punkt C SV. Und wenn die Datei dann existiert, wollen wir die Daten in diese Datenvariable laden Dazu verwenden wir die CSV-Lesemethode von Pandas Und da ist, du hast es erraten, der Pfad der Datei . So wie das Wenn die Datei also existiert, lesen Sie die Daten und drucken Sie dann die Punktwerte aus. Dieses Objekt hat also eine Mittelwertmethode. Lass mich dir später zeigen , was dieses Objekt ist. Aber lassen Sie uns vorerst dieses Skript ausführen. Wir erhalten also den Mittelwert der einzelnen Spalten. Das ist ein Mittelwert für Station eins, und das ist ein Mittelwert für Station zwei. Es funktioniert also. Also, wenn du nur den Mittelwert aus einer Spalte ST haben wolltest, würdest du das einfach tun. Das gibt Ihnen also den Mittelwert der ST-Eins-Spalte aus Station eins. Und so weiter. Die Idee hier ist also , Pandas zu importieren, und wenn Sie das ausführen, passiert dort, dass ein Objekt namens Datenrahmen erstellt wird Sie können sehen, dass Sie eine strukturierte Ansicht dieser Daten haben eine strukturierte Ansicht dieser Daten Das ist also ein bestimmter Objekttyp. So wie wir Ganzzahlen und Gleitkommazahlen haben, haben wir auch diese anderen Typen, die Sie in Bibliotheken dieser Drittanbieterbibliotheken finden können, sodass jeder seine eigenen Typen erstellen kann Und hier geht es um Bibliotheken, also eingebaute Bibliotheken, Standardbibliotheken, in Python geschrieben wurden, und Bibliotheken von Drittanbietern, die fast immer in Python geschrieben sind . Es geht um Bibliotheken. 77. 76. Einführung in die Verwendung von Python mit CSV-, JSON- und Excel-Dateien: Hallo, willkommen in einem neuen Bereich, und es wird für mich sehr spannend sein, diesen zu vermitteln, und es wird auch sehr, sehr nützliche Informationen für Sie sein, um sie zu lernen Wir werden also mit externen CSV-Dateien, Excel-Dateien und JSON-Dateien arbeiten . Das sind also externe Dateien, in denen Sie Daten speichern und auf diese Dateien zugreifen können. Sie können sie von Ihrem Python-Programm aus manipulieren. Ihr Programm kann also mit diesen Dateien interagieren, und das werden Sie in diesem Abschnitt lernen. Machen Sie sich also bereit und ich werde im nächsten Video mit Ihnen sprechen . 78. 77. Die Pandas-Bibliothek für + Datenanalyse: Hallo, willkommen in diesem neuen Bereich. Und in diesem Abschnitt erfahren Sie, wie Sie Pandas verwenden , eine sehr wichtige Python-Bibliothek, und das sollten Sie wirklich nicht verpassen Also, was ist Pandas? Nun, Pandas ist eine Bibliothek die Datenstrukturen und Datenanalysetools in Python bereitstellt Datenanalysetools in Python Oder wenn Sie das Wort Tools verwirrt, können Sie sagen, dass Pandas eine Bibliothek ist die Datenstrukturen und Datenanalysecode bereitstellt Mit Pandas können Sie also Daten aus verschiedenen Quellen in Python laden und dann Python-Code verwenden, um diese Daten zu analysieren und Ergebnisse zu erzielen, die in Form von Tabellen, Text und auch Visualisierungen mit Hilfe von Visualisierungsbibliotheken wie Book, Book vorliegen können, die später im Kurs behandelt werden und auch Visualisierungen mit Hilfe von Visualisierungsbibliotheken wie Book, Book vorliegen können, die später im Kurs behandelt Moment konzentrieren wir uns also auf Daten, ohne sie zu visualisieren, und Panas eignet sich hervorragend dafür und Panas eignet sich hervorragend Also praktisch, wie verwenden wir Pandas? Nun, Sie haben zu Beginn des Kurses gelernt, wie Sie Textdateien mit den in Python integrierten Dateiverarbeitungsmethoden öffnen mit den in Python integrierten . Was wir nun von TextFils aus geöffnet haben, war nur einfacher Text. Was aber, wenn Sie Textdateien mit Daten laden möchten , die aus Zeilen und Spalten bestehen Oder die Dinge werden etwas kompliziert. Aber hier kommt Pandas ins Spiel. Sie können das also wahrscheinlich mit integrierten Python-Methoden tun , die Sie im Kurs gelernt haben. Aber um effizienter und viel effizienter zu sein, benötigen Sie eine übergeordnete Bibliothek wie Pandas, die in der Lage ist, solche Datenstrukturen automatisch zu erkennen solche Datenstrukturen automatisch Ich verwende Pandas zum Laden von Daten aus Data-Mining-Aktivitäten wie Web-Scrapping Sie löschen also Daten von einer Website mit Python und speichern diese Daten dann in diesen Datenrahmen Sie verwenden also Pandas, um Datenstrukturen für Sie in Python bereitzustellen Datenstrukturen für Sie in Python Und ich verwende Pandas zum Laden von Daten aus Excel-Dateien und verwende auch Panels zum Analysieren dieser Daten, und verwende auch Panels zum anstatt Excel zu verwenden Excel eignet sich gut für die Analyse einer kleinen Datentabelle , die auf Ihren Computerbildschirm passt. Aber für größere Daten möchten Sie unbedingt Code verwenden. Sie schreiben Python-Code einmal und verwenden ihn dann auch mit anderen Daten. Und Sie möchten keine Auswahlen und Ziehungen und viele andere umständliche Operationen ausführen, die Sie normalerweise in einem grafisch basierten Programm wie Excel ausführen Code ist also der richtige Weg, wenn Sie effizient mit Daten umgehen wollen, und Python eignet sich hervorragend dafür mit Pandas Sie möchten wirklich einen guten Überblick über Panels haben, und das werden Sie in diesem Abschnitt lernen und es auch mit realen Anwendungen üben , die wir im Laufe des Kurses erstellen werden Lassen Sie uns jetzt in den nächsten Vorlesungen etwas Code näher beleuchten. Wir sehen uns. 79. 78. Erste Schritte mit Pandas: Großartig. Auch hier ist Pandas eine Bibliothek, die Datenstrukturen und Datenanalysetools in Python bereitstellt Datenanalysetools in Python In dieser Vorlesung werden Sie also sehen, was ich mit Datenstrukturen und Datenanalyse meine Datenstrukturen und Datenanalyse Sie werden also das Hauptobjekt von Pandas sehen , eine Struktur , die die Daten enthält Und Sie werden sehen, dass wir Daten aus der Struktur abrufen und analysieren. Also öffne ich eine einfache Befehlszeile und vorerst werden wir IPython verwenden, und vorerst werden wir IPython verwenden einfach großartig für Datenanalyse und die Arbeit mit Aber noch besser ist das Jupiter Notebook. Jupiter Notebook ist wie eine Python-Shell. Es ist eigentlich eine Kombination aus einer Python-Shell und einem Python-Editor. Und es ist ein browserbasiertes Tool dem Sie Python-Code schreiben können, und es ist sehr effizient, sodass es Ihre Produktivität wirklich steigert Aber für diesen Vortrag möchte ich mit einfachen Dingen beginnen, also Schritt für Schritt, und ich werde Ihnen Pandas vorstellen, die nur IPython verwenden In der nächsten Vorlesung zeige ich Ihnen dann, wie Sie ein Jupiter-Notizbuch einrichten, das früher als iPython-Notizbuch bekannt war als iPython-Notizbuch bekannt Sie richten also Jupiter ein und ich zeige Ihnen, wie man mit Jupiter arbeitet Lassen Sie uns also vorerst einfache IPython-Konsole verwenden Pandas importieren. Und normalerweise möchten Sie als Erstes einige Daten importieren, sagen wir, aus einer CSV-Datei oder aus TextFile oder sogar einer Excel-Datei oder JSON oder anderen Formaten, die wir später eingehen werden Es gibt aber auch andere Möglichkeiten, eine Pandas-Datenstruktur zu erstellen Das Erste, was Sie wissen sollten, ist dass diese Datenstruktur, von der ich spreche , Datenrahmen genannt wird Das ist also ein spezielles Objekt , das die Daten enthält. Und du kannst eins erstellen. Sie können einen Datenrahmen in einer Variablen speichern , sagen wir in DF. Mm Pandas Datenrahmen. Also erstelle ich manuell einen Datenrahmen und übergebe Werte manuell über Python. Normalerweise möchten Sie andere Dateien verwenden, wie ich bereits erwähnt habe. Stellen Sie sich den Datenrahmen jetzt als Tabelle vor. Vielleicht möchten Sie also eine Liste von Listen übergeben , wobei jede Liste eine Zeile dieser Tabelle sein wird. Lassen Sie uns also einige Daten zwei, vier, sechs und zehn, 20, 30 übergeben . Sie führen das aus, das war erfolgreich, weil Sie keinen Fehler erhalten haben. Haben Sie einen, und hier ist der Datenrahmen. Also 246 ist die erste Reihe, zehn, 20, 30 ist die zweite Reihe. Diese Null, Eins, Zwei sind die Namen der Spalten, und diese werden als Indizes bezeichnet Also 01 hier sind Indizes für die Zeilen, und das hier sind die Spaltennamen Das Schöne an Panels ist, dass Sie auch Ihre eigenen Spaltennamen haben können , wenn Sie möchten Also rufe ich diesen Ausdruck erneut auf und möchte hier einen Parameter namens columns übergeben , der eine Liste von Namen erwartet. Dieser muss die gleiche Anzahl von Elementen mit der Anzahl der Spalten haben, die Ihr Datenrahmen hat. Wenn Sie also eine Liste mit drei Elementen übergeben, möchten Sie auch hier drei Spalten übergeben. Nehmen wir an, der Preis ist zufällig, Alter und Wert. Sie führen das aus und lassen mich dieses DF erweitern Diesmal sehen Sie, dass Sie dort Ihre eigenen Spaltennamen haben. In ähnlicher Weise können Sie nun auch benutzerdefinierte Namen für die Indizes übergeben, indem Sie den Index als Parameter übergeben, und dann möchten Sie eine Liste mit zwei Elementen übergeben weil wir nur zwei Zeilen haben, sagen wir, erste, zweite, DF, und Sie haben benutzerdefinierte Indizes Normalerweise müssen Sie jedoch keine benutzerdefinierten Indizes übergeben. Daten haben normalerweise eine definierte Anzahl von Spalten, aber in den Zeilen können Sie Hunderte und Tausende von Zeilen oder Millionen von Zeilen haben Hunderte und Tausende von Zeilen oder Millionen von Zeilen Sie möchten also wirklich nicht mit Indexnamen herumspielen. In besonderen Fällen ist das Feature jedoch genau das. Es gibt also eine Möglichkeit, einen Panel-Datenrahmen zu erstellen, und Sie haben auch andere Möglichkeiten. Die werden nicht sehr häufig verwendet, aber ich wollte nur wissen , ob sie da sind. Also nochmal, du übergibst hier eine Liste und dann könntest du zwei Wörterbücher innerhalb dieser Liste übergeben So können Sie die Ähnlichkeit erkennen. Hier haben wir eine Liste von Listen verwendet. Hier übergeben wir auch ein Listenobjekt, aber es ist eine Liste von Wörterbüchern Und was Sie hier tun könnten, ist, Werte, Schlüssel und Werte für ein Wörterbuch zu übergeben , und hier auch. Sagen wir also, nennen wir John Jack und führen das DF zwei aus. Und ja, das ist ein weiterer Datenrahmen. Wenn Sie dort mehr Spalten haben möchten, z. B. den Nachnamen, möchten Sie hier einen weiteren Schlüssel und Wert für das Wörterbuch hinzufügen . Also so etwas wie Nachname und jetzt, wenn Sie das und DF zwei ausführen, wird die Spalte mit dem Nachnamen dort hinzugefügt. Aber für Jack bekommst du keinen, weil du im zweiten Wörterbuch keinen Nachnamen eingegeben hast . Wenn Sie also dasselbe für Jack tun, wenn Sie einen Nachnamen angeben, erhalten Sie den Wert hier. Das sind also zwei grundlegende Methoden , um Datenrahmen im Handumdrehen zu erstellen. Wie gesagt, normalerweise stammen diese Werte aus Dateien von CSV-Dateien, Excel-Dateien usw. Das werde ich in den nächsten Vorlesungen tun. Und noch etwas möchte ich, dass Sie wissen, dass es sich um eine Datenstruktur handelt, und was Datenanalyse bedeutet, ist außerhalb dieser Datenstruktur, Sie möchten Informationen herausholen. Vielleicht möchten Sie also zum Beispiel den Durchschnitt all dieser Werte extrahieren . Also zwei, vier, sechs, zehn, 20, 30. Hier treten wir also in die Phase der Datenanalyse ein. Und der Ansatz dafür ist, Sie wissen schon, dieses Datenrahmenobjekt, das Sie vom Typ DF sehen können. Es ist also ein Datenrahmen von Pandas. An dieses Datenrahmenobjekt sind nun Methoden angehängt. Wenn Sie DR verwenden und ja, Sie sehen, dass es eine ganze Reihe von Methoden gibt, die Sie darauf anwenden können. Lassen Sie uns dort die durchschnittliche Methode finden. Hier ist gemein. Sie könnten also auf DF eins zeigen und dann auf Mittelwert und Klammern zeigen, und Sie erhalten den Mittelwert aller Spalten. Und wenn Sie den Mittelwert des gesamten Datenrahmens ermitteln möchten, können Sie danach erneut die Mittelwertmethode anwenden. Das bedeutet also, dass hier die Mittelwertmethode auf diese Reihe angewendet wird. Bei diesem Typ handelt es sich also um ein Objekt der Panda-Serie. Serien haben mehr oder weniger dieselben Methoden , die Sie auf einen Datenrahmen anwenden werden. Also DF eins und DF ein Punkt Preis, und Sie erhalten die Spalte mit den Preisreihen. Das ist also auch der Fall, wenn Sie den Typ überprüfen, das ist auch die Panel-Serie. Der Datenrahmen besteht also aus Serien. Und natürlich können Sie die Durchschnittsmethode auch auf den Preis anwenden . In ähnlicher Weise können Sie auch andere Methoden anwenden , die dort verfügbar sind. Also Max und du bekommen den Maximalwert. Und ja, das ist ungefähr die Einführung in Pandas. In der nächsten Vorlesung wirst du etwas über Jupiter erfahren. Es ist sehr angenehm, mit Jupiter zu arbeiten . Also lass dir das nicht entgehen. Und dann werden wir weitermachen und Datenrahmen öffnen, Datenrahmen aus Dateien erstellen. Dann sehe ich dich später. 80. 79. Das Jupyter-Notebook einrichten +: Nun, in dieser Vorlesung zeige ich Ihnen, wie Sie das Jupiter-Notizbuch oder kurz Jupiter einrichten das Jupiter-Notizbuch oder kurz Jupiter und auch wie Sie es Bisher haben Sie sowohl mit Python als auch mit einer interaktiven E-Python-Shell gearbeitet, aber Sie haben auch mit einem Editor wie Atom gearbeitet. Manchmal benötigen Sie vielleicht eine Mischung aus einer interaktiven Shell und einem Editor, wenn Sie Dinge testen möchten, aber Sie möchten auch Ihre Codeblöcke, die Sie schreiben, speichern , weil eine interaktive Shell ideal ist, um Dinge schnell zu testen, aber Sie können den Code speichern, und der Editor ist gut zum Speichern des Codes, aber nicht ideal zum Testen von Dingen. Aber ich kann Ihnen sagen, dass es ein solches Hybrid-Tool gibt, und das heißt Jupiter-Notizbuch. Und das ist ein fantastisches Tool , das Ihre Produktivität steigern wird. Jupiter ist besonders gut , wenn Sie mit Daten arbeiten. Es ist eine großartige Umgebung, um Daten zu untersuchen, und Sie werden gleich sehen, wie nützlich sie sind. Natürlich möchten Sie immer noch Editoren wie Atom verwenden , wenn Sie mit mehreren Python-Skripten arbeiten , die miteinander interagieren. Dies ist beispielsweise bei Webanwendungen der Fall . Wenn Sie Webanwendungen entwickeln, müssen Sie sich mit mehreren Python-Skripten sowie mit HTML-Dateien, CSS und anderen Dateien befassen HTML-Dateien, . Erstellen Sie später im Kurs eine Webanwendung und Sie werden sehen, wie gut Atom dafür geeignet ist. Aber für Daten verwenden Sie Jupiter. Also Jupiter, lass uns sehen, wie man es installiert. Nun, Sie können zur Installation gehen, also installieren Sie und Sie können diese Anweisungen durchgehen. Aber anstatt das durchzugehen, würde ich Ihnen raten Ihre Befehlszeile zu installieren Jupiter über Ihre Befehlszeile zu installieren und PIP install Jupiter einzugeben Also laden wir Jupiter herunter und es wird es in Ihrem System installieren Um dann eine Jupiter-Sitzung zu starten, empfiehlt es sich , in einen Ordner zu wechseln. Sagen wir, Test drei. Und hier können Sie eine Befehlszeile öffnen und dann Jupiter No book eingeben. Und das öffnet die Jupiter-Sitzung im Browser. Das Jupiter-Notizbuch ist also eigentlich ein Browser-Notizbuch. Der Grund, warum ich das Jupiter-Notizbuch in der Befehlszeile geöffnet habe , war, dass zumindest unter Windows, wenn Sie Shift drücken und dann mit der rechten Maustaste auf den Ordner klicken, Ihre Eingabeaufforderung im aktuellen Ordner geöffnet wird , also in diesem hier. Und wenn Sie jetzt eine Notebook-Datei erstellen, wird jede Datei hier in diesem Verzeichnis gespeichert. Alternativ können Sie Ihre Eingabeaufforderung überall öffnen , wo Sie möchten, und dann eine CD zu und dann eine CD zu dem Ordner hinzufügen, in dem Sie Ihre Jupiter-Notizbücher speichern möchten. In Ordnung, jetzt haben wir hier nichts. Also was Sie tun können, ist ein Notizbuch zu erstellen. Und wir haben Jupiter Earth als Python-Bibliothek installiert. Unter Notebooks haben wir also Python drei verfügbar. Der Kernel wird also Python drei sein. Wenn Sie hier andere Sprachen zugeordnet haben, werden Sie sie hier unter Notebooks sehen. Das ist also ein leeres Notizbuch. Und das ist der Name eines Notizbuches und Sie können das ändern , sagen wir, Testen. Drücken Sie OK. Und wenn Sie zu dem Ordner gehen, werden Sie sehen, dass die Datei mit dem Testnamen und der IPython-Notebook-Erweiterung erstellt wurde Das wird also jedes Mal automatisch erstellt , wenn Sie hier etwas eingeben, Änderungen vornehmen oder Lassen Sie mich Ihnen nun zeigen, wie Sie mit dem iPython-Notizbuch arbeiten können mit dem iPython-Notizbuch arbeiten Sie können also jede Zelle berücksichtigen. Dies ist eine Zelle, und Sie können jede Zelle als Linie in einer normalen Python-Shell betrachten . Aber hier in dieser Shell können Sie tatsächlich mehrere Codezeilen schreiben. Nehmen wir an, drucken Sie einen, und wenn Sie ihn nicht sofort ausführen möchten , können Sie die Eingabetaste drücken. Mit Enter geben Sie also eine neue Zeile in die Zelle ein und drucken dann zwei und so weiter. Und wenn Sie die Zelle jetzt ausführen möchten, können Sie Control Enter drücken und schon erhalten Sie die Ausgabe. Wenn Sie nun eine neue Zelle erstellen möchten, würde Alt Enter das tun. Und hier kannst du einen weiteren Codeblock schreiben. Mit Enter gehst du zur nächsten Zeile und so weiter. Und wenn Sie sofort zur nächsten Zelle gehen möchten. Bevor wir also Control Enter gedrückt haben, können Sie jetzt Shift Enter drücken und Sie gehen automatisch zur nächsten Zelle. Und mit Shift Enter führen Sie auch die Zelle aus, an der Sie gearbeitet haben. Sie können mit Alta Enter neue Zellen erstellen und sie löschen, indem Sie zuerst drücken , Escape drücken und dann zweimal DD erneut DD drücken. Es ist also ziemlich flexibel. Sie sollten beachten, dass wir grundsätzlich zwei Modi haben. Wir haben den Befehlsmodus. Wenn Sie sich also im Befehlsmodus befinden, sehen Sie ein graues Rechteck um die Zelle herum. Und wenn Sie in den Bearbeitungsmodus wechseln möchten, drücken Sie die Eingabetaste. Während Sie sich also auf die aktuelle Zelle konzentrieren, drücken Sie die Eingabetaste und bearbeiten dann die Zelle. also im Bearbeitungsmodus Wenn Sie also im Bearbeitungsmodus etwas eingeben, fügen Sie Text in die Zelle ein, Sie fügen Code in die Zelle ein, Escape- und Befehlsmodus, DD und Sie löschen die Zelle, geben ein und Sie geben eine neue Zelle ein Das sind also die am häufigsten verwendeten Tastenkombinationen, Tastenkombinationen. Wenn Sie jedoch weitere Tastenkombinationen benötigen, können Sie zur Hilfe und dann zu den Tastenkombinationen wechseln. Und dann siehst du hier eine Liste. Aber diese sind gut für den Anfang. Wenn Sie damit fertig sind, können Sie einfach einen Tab schließen und Sie können hier auch den Verzeichnisbaum schließen. Beachten Sie also, dass Jupiter tatsächlich in einer lokalen Hostsitzung geöffnet wird. Und wenn Sie Ihr Notizbuch erneut öffnen möchten, können Sie wieder hierher gehen und das Befehlsfenster hier und das Jupiter-Notizbuch öffnen . Und hier ist die Datei, und sie ist so, wie wir sie hinterlassen haben. Heute eignet sich ein Jupiter-Notizbuch am besten für Erkundungen und insbesondere für Datenerkundungen Wenn Sie also beispielsweise mit Datenanalysen oder Datenvisualisierungen arbeiten, ist mit Datenanalysen oder Datenvisualisierungen Jupiter-Notizbuch perfekt Sie können das Jupiter-Notebook beispielsweise verwenden, um eine Datentabelle in die Sitzung zu laden Dafür würdest du Pandas verwenden. Sie importieren also die Bibliothek, drücken die Eingabetaste oder die UMSCHALTTASTE, um zur nächsten Zelle zu gelangen, und drücken erneut die EINGABETASTE, um etwas zu schreiben Nehmen wir an, DF entspricht Pandas , Dal Fred CSV. Und ich habe irgendwo in meinem System eine CSV-Datei. Pressezentrum und Whoa. Sie erhalten also eine nette HTML-Tabelle, die aus der CZ-Datei geladen wurde, und Sie können auch Grafiken im Jupiter-Notizbuch zeichnen Das ist also auch etwas, das du im Kurs lernst. Und damit Datenanalysen und Visualisierungen möglich sind, können Sie das Jupiter-Notizbuch auch für Web-Scrapping verwenden Das ist sehr praktisch, weil Sie diese Codeblöcke haben und dann den Code kontinuierlich optimieren müssen kontinuierlich optimieren müssen, sodass Sie hier vielleicht etwas ändern möchten, und dann erhalten Sie Nicht gerade dieser, weil das eine verworrene Zeichenfolge ist, sondern bei diesem, zum Beispiel, Sie haben hier einen Schieberegler, sodass Sie in einem separaten Fenster nach oben und unten scrollen können , ohne dass Ihr allgemeines Hauptfenster beeinträchtigt Ich hoffe also, Sie haben eine gute Vorstellung vom Jupiter-Regelwerk bekommen eine gute Vorstellung vom Jupiter-Regelwerk Notieren Sie sich einfach die Tastenkombinationen oder Tastenkombinationen zum Ausführen von Code, den Bearbeitungs- und den Befehlsmodus, Sie wissen schon, geben Sie Escape ein und erneut Enter und so weiter und so fort Und wenn du sie nur ein bisschen übst, wirst du dich sehr schnell an Jupiter gewöhnen . Wir sehen uns in der nächsten Vorlesung. 81. Laden von CSSV-Dateien in Python: Nun, da Sie ein grundlegendes Verständnis von Pandas haben und wissen, wie man Jupiter-Notizbücher verwendet, können wir weitermachen und lernen, wie man verschiedene Arten von Dateien in Python mit Pandas und Jupiter können wir weitermachen und lernen, wie man lädt mit Pandas und Ich habe hier also fünf Dateien. Sie enthalten genau die gleichen Datenseiten. Und dies ist eine Textversion, oder lassen Sie mich die Excel-Version öffnen, die, wie Sie sehen können, einen schönen Überblick über die Daten zeigt. Wir haben also sieben Codezeilen, einschließlich der Kopfzeile, und wir haben auch sieben Spalten. Es sind also nur einige Basisdaten von Supermärkten, die Adresse, die Stadt, der Staat, das Land und der Name des Supermarktes und die Anzahl der Mitarbeiter. Und in ähnlicher Weise haben wir genau dieselben Daten, aber in unterschiedlichen Formaten. Wir haben also CSV und CSV bedeutet kommagetrennte Werte. Es ist also im Grunde eine Textdatei, in der die Werte, die Spalten, durch Kommas getrennt sind, wie Sie hier sehen können Jede Spalte ist also durch ein Komma getrennt. Es hat jedoch eine CSV-Erweiterung und kann mit Excel geöffnet werden. Wenn ich das jetzt öffne, sehen Sie denselben Datensatz, den Sie in der ELS-Datei gesehen haben. Wir haben auch dieselben Daten, getrennt durch halbe Spalten, wie Sie hier sehen können. Und ja, wenn Sie mit Daten arbeiten, sind Sie wahrscheinlich mit dieser Art von Dateien vertraut. So speichert man also Daten. Sie müssen einige Konventionen haben, und wenn Sie diese Konventionen verwenden, verwenden Sie andere Programme wie Python, um diese Daten zu laden. Wenn Sie also eine CS-Datei laden, weiß Python, dass die Werte durch Kommas getrennt werden , und es weiß, wie man sie trennt Es weiß, wie man Werte extrahiert. Also werden wir sie alle nacheinander öffnen. Wir haben auch eine JSON-Datei. Das ist ein weiteres Format zum Speichern von Daten, und es sieht tatsächlich aus wie ein Python-Wörterbuch. Wir werden also auch lernen , wie man sie in den Datenrahmen von Panda konvertiert man sie in den Datenrahmen von Panda All diese werden also in Pandas Datenrahmen konvertiert. Ja, ich werde weitermachen und das Jupiter Jupiter Notebook starten . Hier sind meine Dateien. Ich werde weitermachen und ein neues Jupiter-Notizbuch für Python drei erstellen . Bevor ich weitermache und diese Dateien in Python lade. Es gibt einen Trick, den ich normalerweise mache. Importiere das Betriebssystem und dann die Punktliste dort, und ich gebe die Eingabetaste ein und führe das aus. Du gehst zur nächsten Zeile. Und Sie erhalten eine Liste von Dateien und Ordnern sowie von Dateinamen , die Sie im aktuellen Verzeichnis haben. Jetzt muss ich nicht mehr in meinen Ordner wechseln , um mir die Namen anzusehen. Ich habe alles hier drin. Ich kann jetzt weitermachen und Pandas importieren. Und fangen wir an, diese Dateien nacheinander zu laden. Sagen wir DF eins, also Datenrahmen eins, und das wäre gleich Pandas Ich werde CSV lesen. Und dann müssen Sie den Namen der Datei übergeben , die Sie öffnen möchten. Supermarkiere das CSV und gib es einfach ein und vielleicht möchtest du das ausdrucken. Also DF da. Und ja, was wir hier haben, ist dass wir zuerst den Datenrahmen geladen , dass wir zuerst den Datenrahmen geladen und ihn dann ausgedruckt haben. Also haben wir diesen schönen Tisch da drin. So einfach ist es, Daten aus einer CS-Datei zu laden. Der Vorteil der Daten in Python besteht darin, dass Sie, sobald Sie sie in Python geladen haben, viele, viele Operationen mit Ihren Daten ausführen können . Sie können Statistiken erstellen und neue Spalten hinzufügen. Sie können Spalten zusammenführen. Sie können die Zahlen einer Spalte zu den Zahlen der anderen Spalten addieren . Und am Ende können Sie diese Daten wieder in Formate wie CSV, Excel usw. exportieren . Also werden wir das später machen. Aber lassen Sie uns zunächst im nächsten Video sehen, wie wir Daten aus verschiedenen Dateiformaten laden . 82. Excel-Dateien in Python laden (KEIN WASSERZEICHEN): Und lassen Sie uns weitermachen und die Excel-Datei Excel X laden, eigentlich eine Excel-Datei. Pandas lesen also Excel und Sie geben den Namen der Excel-Datei Und normalerweise sollten Sie hier auch einen anderen Parameter für Excel-Dateien übergeben , da Excel-Dateien, wissen Sie, mehrere Blätter enthalten können . Sie möchten also den Blattnamen angeben , der bei Null beginnt, also müssen Sie den Index tatsächlich übergeben. Wenn Sie das erste Blatt möchten, möchten Sie Null übergeben. Wenn Sie ein zweites Blatt möchten, möchten Sie eins übergeben und so eins. Also werde ich dort Null übergeben. Ich hatte nur ein Blatt in der Excel-Datei. D drei ausführen. Und wir konnten auch die Excel-Datei erfolgreich lesen. Also lass uns weitermachen. 83. Textdateien in Python laden: Ja, lass uns mit der TXT-Datei weitermachen. Es ist also ein Supermarkt, der durch Kommas getrennt ist. Es ist also eine durch Kommas getrennte Datenstruktur. Dafür, also für durch Kommas getrennte TXT-Datei, verwenden Sie wiederum R CSV. Einfach so, D vier. Und hier ist der Datenrahmen. der CSV-Datei der Supermärkte sagen manche sogar, dass es sich um eine durch Kommas getrennte Datei handelt, aber um genauer zu sein, würde man sagen, dass es sich um durch Zeichen getrennte Werte C steht also für Charakter. Und es könnte dort verschiedene Charaktere geben. In diesem Fall müssen Sie, wenn Sie Kommas als Trennzeichen verwenden, hier keinen Trennzeichenparameter übergeben Wenn Sie jedoch andere Werte als Trennzeichen haben , müssen Sie diese übergeben Das ist das nächste Szenario. Also DA fünf, rote Pandas, CSV. Wir sprechen also von Supermärkten, Semikolons, oder Supermärkten, Semikolons Punkt TXT Ja, lass mich das SiS jetzt ausprobieren. Wenn ich das also ausführe, kann Python das Semikolon dort nicht erkennen Der Grund dafür ist, dass der Separator-Parameter standardmäßig den Wert Komma hat Sie möchten das also in Ihr Trennzeichen ändern, das ein Semikolon ist. Führen Sie in diesem Fall in diesem Wir haben dort einen Fehler bekommen, unerwartetes Trennzeichen für Schlüsselwortargumente Schlüsselwortargumente Es scheint also, als ob Unterstrich gelesen wurde, CSV hat keinen separaten Parameter In diesem Fall möchten Sie dies tun, um um Hilfe zu bitten. Also ja, hier sind die Parameter , die Sie übergeben möchten. Es ist also tatsächlich ein SAP, und Sie können sehen, dass der Standardwert von SAP ein Komma ist Schließen Sie das und gehen Sie hierher, ändern Sie es in SAP, führen Sie es aus, und hier ist der Datenrahmen Großartig. Was bleibt noch zu tun? Ja, wir haben alles konsumiert. Und hier geht es darum, lokale Dateien zu lesen. 84. 83. Einführung in Numpy ++: Betrachten Sie dieses Graustufenbild. Jetzt besteht dieses Bild aus Pixeln. Dieses Bild hat drei mal fünf, also 15 Pixel. Es ist also ein ziemlich kleines Bild. Jetzt hat jedes Pixel einen Wert, und das ist es, was die Intensität der grauen Farbe für jedes Pixel definiert . In Wirklichkeit sind dies Zahlen, aber unser Computerbildschirm zeigt sie in einem Farbformat an, das für uns Menschen lesbar ist. Ich versuche zu erreichen, dass Programme Zahlen verwenden, um Bilder zu speichern. Dann wandelt der Computerbildschirm oder der Bildschirm diese Zahlen in Farben um. Python kann auch Bildverarbeitung durchführen, genau wie Photoshop. Wahrscheinlich kann es nicht all die coolen Dinge tun, die Sie mit Photoshop machen können, aber Sie können Python verwenden, um Dinge zu automatisieren. Zum Beispiel werden wir die Bildverarbeitungsfunktionen von Python verwenden die Bildverarbeitungsfunktionen von , um Gesichter aus Fotos anhand von Bildern erkennen und auch sich bewegende Objekte in Videos zu erkennen. Videos bestehen also aus Bildern. Es ist also im Grunde dasselbe. Und Python speichert und liest Bilder mithilfe von Zahlenfeldern Zum Beispiel könnte dieses Bild, wie Sie wissen, als eine Liste von drei anderen Listen dargestellt eine Liste von drei anderen Listen Also drei Listen, weil wir dort drei Zeilen mit Pixeln haben. Dann hättest du in jeder der Listen etwa fünf Zahlen und so weiter und so weiter, und die fünfte. Und das Gleiche gilt für die anderen beiden Listen. Wir haben fünf Zahlen, weil wir fünf Spalten haben, also fünf Pixel für jede Zeile. Und das ist ein Bild für Python. Und hier kommt Numpi ins Spiel. Sie können damit zwar Bilder darstellen, wie wir es hier getan haben, das ist nicht sehr effizient, da sie bei großen Bildern viel Speicher beanspruchen viel Speicher beanspruchen und daher die Operationen an ihnen verlangsamen Dies wird also von Numpi gelöst, einer Bibliothek, einer Python-Bibliothek, die ein mehrdimensionales Array-Objekt bereitstellt Lassen Sie mich also weitermachen und dieses Array-Objekt erstellen. Zuallererst müssen Sie Numbi importieren Und wenn Sie Pandas installiert haben, hätte Numpie zusammen mit Pandas installiert werden sollen da Pandas Wenn Sie noch einen Numpi installiert haben, fahren Sie einfach fort und installieren Sie Numpi fahren Und wenn Sie aus irgendeinem Grund Probleme unter Windows haben, dann machen Sie einfach weiter, wie ich es Ihnen gezeigt habe, und suchen Sie die vorkompilierten Python-Bibliotheken. Gehe auf diese Seite und suche dann nach Numpi finde heraus, ob du eine 3.5-Version von Python verwendest. Lass uns einfach diese Version herunterladen Und dann zeigst du mit Pip Install und dem Namen der Datei auf diese Datei Pip Install und dem Namen der Großartig. Nein, ich habe Num Pi installiert, also erstelle ich dieses mehrdimensionale Objekt und speichere es in einer Variablen. Das wäre Numpy Dot A-Bereich. Und sagen wir 27. Führe das aus und drucke es aus , sodass es ein NumPi-Array ist. So heißt es Dieses spezielle Array ist nicht gerade ein mehrdimensionales Array , weil es nur eine Dimension hat. Es ist also ein Flugzeug, es ist wie eine Ebenenliste, eine Python-Liste, aber es ist immer noch nicht genau der Typ. Es tut mir leid. Es ist also ein NPi N-dimensionales Array Es kann eindimensional, zweidimensional oder dreidimensional sein. Wir haben also eins, zwei, drei, und ich werde all diese Szenarien zeigen. Das war also das eindimensionale Array, und wenn Sie es in einer schönen Form drucken wollen, wäre das das Array. Nun, ich erstelle hier nur ein Numpy-Array mit Zahlen im Handumdrehen, aber normalerweise müsste man einen Strahl aus Bildern erstellen, und das machen wir gleich. Lassen Sie uns vorerst einige Arrays manuell erstellen. Lassen Sie uns nun sehen, welche zweidimensionalen Arrays. V-Form drei mal neun. Wir haben also bereits dieses eindimensionale Array und wollen es in ein zweidimensionales Array umwandeln. Wenn Sie das ausführen, erhalten Sie ein zweidimensionales Array. Das ist also ein zweidimensionales Array , weil es zwei Dimensionen hat. Stellen Sie sich das so vor, als würde dieses Bild fallen. Wir haben zwei Dimensionen, vertikal und horizontal. Nun, was ist ein dreidimensionales Array? Auch wenn dreidimensionale Arrays seltener verwendet werden, ist es dennoch gut, etwas über sie zu wissen Lassen Sie mich wie dem auch sei, ein dreidimensionales Array erstellen. Ich könnte sagen, drei mal drei drei, weil Sie wissen, dass Sie 27 Elemente haben, also drei mal drei ergibt Ihnen 27. Ja, das ist ein dreidimensionales Array. Stellen Sie sich das als einen Würfel vor , der drei Dimensionen hat. Also drei mal drei mal drei. Und praktisch, das werden Sie gleich in dieser Vorlesung sehen . Wo haben wir es mit dreidimensionalen Arrays zu tun? Also habt Geduld mit mir. Und Sie können die Ähnlichkeiten zwischen einem Nicht-Pi-Array und einer einfachen Python-Liste von Listen erkennen . Das hier wäre also wie ein zweidimensionales Array, wenn Sie es so nennen möchten. Die Struktur auf der unteren Ebene unterscheidet sich zwischen Python-Listen- und NPi-Arrays Und mit Nopi-Arrays können Sie auch effizientere Operationen durchführen, z. B. die Iteration zwischen Array-Elementen usw. Und Sie können auch ein Nopi-Array aus der Python-Liste erstellen. Zum Beispiel erhalte ich diese Liste hier und erstelle ein neues Objekt und zeige und erstelle ein neues Objekt dann auf Nupi. Um eine Liste in ein np-Array zu konvertieren, sollten Sie eine Array-Methode verwenden Und dann steht zwischen den Klammern das Objekt, das Sie konvertieren möchten M und das ist ein Array , das fast genau dem hier ist. Und wenn Sie das ausdrucken würden, könnten Sie den Unterschied nicht erkennen. Weißt du, sie sehen genau gleich aus. Aber das sind sie nicht , weil dies eine Liste ist, und das ist eine Dummheit. Ordnung. Großartig. Lass uns weitermachen. Das ist also Napi und wie ich bereits erwähnt habe, ist Napi eine Basisbibliothek für andere Bibliotheken wie Pandas und auch OpenCV , , Pandas-Datenrahmen basieren also auf Numpi-Arrays, und offene CV-Objekte basieren auf NuPI-Arrays und offene Also Pandas, was Pandas macht , ist, dass es einfach einige coole Funktionen hinzufügt. Da drin, wie es hinzufügt. Es bietet Funktionen für Tabellenüberschriften und Indizes, die Sie in Numpi nicht haben können weil Numpi einfacher sein soll und weniger Objekte speichern und Operationen ausführen Objekte speichern Deshalb ist Numpi eine Voraussetzung für viele Bibliotheken. Und lassen Sie uns diese Lektion hier lösen , und in der nächsten Lektion werden wir direkt weitermachen und ein NumPi-Array aus unserem Bild hier erstellen ein NumPi-Array aus unserem Bild Also dieses Bild. Okay, wir sehen uns dort. 85. 85: Und ja, CV Two ist installiert. Und was ich mit Civ Two machen kann, unter vielen anderen Dingen, was ich als allererstes tun kann, ist, ein Bild in Python mit CV Two-Methoden zu laden ein Bild in Python mit CV Two-Methoden Also werde ich das Bild laden, das übrigens ein sehr kleines Bild ist , ich habe nur 15 Pixel Du weißt schon, ein normales Bild, mit dem du Fotos gemacht hast oder mit deinem Handy oder was auch immer. Es hat etwa 1.000 mal tausend Pixel, was mehr oder weniger 1 Million Pixeln entspricht. Aber wir sollten die Dinge einfach halten, damit Sie verstehen, was vor sich geht. Lebenslauf, um das zu importieren und ja, das war erfolgreich. Weißt du, ich erstelle eine Variable und nenne IMF-Bild und G für Grau. Sie können es nennen, wie Sie wollen, und CV, um ein Bild zu leiten, es in Python zu laden, Sie möchten die Methode image shared verwenden. Und dann übergibst du den Namen deines Bildes. Sie finden dieses Bild im Ressourcenbereich. Also mach einfach weiter und lade es herunter. Und jetzt ist das hier im selben Verzeichnis wie mein Jupiter-Notizbuch, sodass ich weitermachen und auf den Namen der Datei zeigen kann , einschließlich der Erweiterung PNG mit kleinen Punkten. Und hier erwartet die Methode zum Lesen von Bildern noch ein weiteres Argument von Ihnen. Das kann entweder Null oder Eins sein. Null bedeutet also, dass Sie das Bild in Graustufen lesen möchten. Und wenn Sie eins bestehen, lesen Sie das Bild in BGR, was blau, grün und rot bedeutet Und du wirst verstehen, was die einzelnen Versionen bedeuten. Also lass uns das zuerst machen. Ja, das drucke ich aus. Und wie, das war es. Also was wir haben, ist kein Array. Es ist ein zweidimensionales Array, also hat es die Dimensionen drei mal fünf, was unserem Bild entspricht. Die Zeilen und fünf Spalten. Der Grund, warum wir dort Null übergeben, also das als Graustufenbild lesen, ist , dass als Graustufenbild lesen, ist , diese PNG-Datei in Wirklichkeit drei Bänder hat, oder Sie können sagen, drei Ebenen Und jede Ebene hat eine bestimmte Menge an Farben. Die erste Schicht hat also eine bestimmte Menge Blau, die zweite Schicht eine bestimmte Menge Grün und die letzte Schicht eine bestimmte Menge Rot. Die Kombination jedes Pixels ist also eine Kombination aus der Intensität von Blau, Grün und Rot. Ich weiß, dass sie in anderen Programmen RGB verwenden im Gegensatz dazu verwenden wir diese BGR, praktisch, diese Datei hier, dieses Bild ist praktisch ein Graustufenbild Jedes dieser Pixel hat jedoch seine eigenen Bänder, sodass durch die Kombination dieser Bänder in diesem Fall immer die Farben Grau, Weiß und Schwarz erzeugt in diesem Fall immer die Farben Grau, Weiß und Schwarz Wenn wir dort jedoch ein Farbbild hätten, würde es mit dieser Funktion in ein Graustufenbild umgewandelt Also nochmal, was wir hier haben ist, wissen Sie, 187 ist die Wertintensität für dieses erste Pixel Und dann haben Sie die andere Zahl, und für Weiß sehen Sie hier Weiß. Wir haben drei weiße Pixel. Und das sind 255, alle. Alle Farben reichen von Null, Null wäre Schwarz, Pechschwarz und 255 für Weiß. Und alles zwischen ihnen ist in der Grauskala. Wenn ich jetzt diese 21 ändere, erhalte ich das dreidimensionale Array, wobei dies die blaue Ebene, die grüne und die rote Ebene darstellt . Oder du kannst das sogar ausdrucken. Achten Sie jedoch darauf, dass das ein bisschen transponiert ist. Die Matrizen bestehen hier also aus drei Spalten und die Zeilen Im Grunde bedeutet das, dass dieses Pixel die entsprechenden Werte hat Es hat also eine Intensität von 187 für Blau, 198 für Grün und zwei von neun für Rot. Und ja, so erstellt man Numpi-Arrays aus Bildern Aber wie wäre es andersherum? Also Bilder von Numpi-Arrays erstellen. Nun, um das zu tun, machst du nochmal cv two, cv two, und dann würdest du auf die Iriz-Methode zeigen, also Bild Und dann willst du einen Namen für dein Bild angeben. Nehmen wir an, neues PNG mit kleinen grauen Punkten, und dann müssen Sie natürlich Ihr No-Pi weitergeben. Lassen Sie uns das Bild grau übergeben. das ausführen, erhalten Sie zwei, was bedeutet, dass Ihr Sturz jetzt hätte erstellt werden müssen. Ja, neues kleines Grau. Ja, das ist eine Floskel und ich hoffe , das stärkt dein Wissen über Nopi Jetzt machen wir weiter und machen hier noch ein paar Dinge. Und speziell in der nächsten Vorlesung werden wir lernen, wie man Nopi-Arrays indexiert, aufteilt und iteriert Im Grunde lernen Sie also, wie Sie auf diese Werte zugreifen können. Wir sehen uns dort in der nächsten Vorlesung. 86. 85. Indizieren, Slicen und Iterieren von Numpy-Arrays: In Ordnung. Du weißt, wie man Listen schneidet. Also null zu eins, wir geben dir den ersten Punkt der Liste und null bis zwei, den ersten und den zweiten Punkt der Liste und so weiter. Mit Nicht-Pi-Arrays machen Sie im Grunde dasselbe, außer dass Sie bei Nicht-Pi-Arrays manchmal zwei- oder mehrdimensionale oder dreidimensionale Arrays haben Lassen Sie mich weitermachen und ich werde erstellen. Ich beginne mit einem zweidimensionalen Also werde ich das von der Variablen bekommen. Das ist also das Nonpi-Array , mit dem wir arbeiten werden. Und ja, wenn du diese Zahl hier, hier, diese und das extrahieren hier, diese und Also diese vier Zahlen. Nun, Sie müssten zuerst den Index der Zeilen festlegen , die Sie in Scheiben schneiden möchten. Das wäre also Null vor zwei, was Ihnen die ersten beiden Zeilen ergibt. Eigentlich können wir das versuchen. Und du wirst sehen, dass du die ersten beiden Reihen bekommst. Nun, wenn du nur diesen Teil hier haben willst, also diese beiden Zahlen und diese beiden, würdest du bestehen wollen. Dort ein Komma und dann der Index für die Spalten. wäre, weißt du, Null hier, eins, also zwei, drei, ja, zwei bis vier, vielleicht Ja. Aber du machst es. Ah, das ist es. Das heißt, Sie haben dieses Indexsystem Es beginnt also bei Null für Zeilen, und dann ist die zweite Zeile eins und zwei und so weiter Vier Spalten, das Gleiche. Null, eins, zwei, drei und vier. Und wenn Sie möchten, können Sie sogar die Form Ihres N per Array sehen. Es ist also drei mal fünf, was null bis zwei und null bis vier bedeutet. Großartig. Und natürlich können Sie die Konvention der Listenindizierung verwenden, sodass Sie Null und alles danach oder einfach so übergeben können alles danach oder einfach so Sie erhalten also alle Zeilen und nur die Spalten 2-3. Ebenso können Sie nur einen Wert abrufen, wenn Sie möchten. Nicht besonders dieser, weil die Zahl Drei für Achse Null zu groß ist. Achse Null ist also eine horizontale Achse, was besagt, dass es keine Zeile mit Index drei gibt. Also setzen wir Null, Eins, Zwei. Also lassen Sie uns dort zwei weitergeben. Und Sie erhalten 182, was das allerletzte Element des Nopi-Arrays Ja, hier geht es um Indexierung. Wie wäre es mit einer Iteration durch ein Nopi-Array? Nun, es gibt zwei Möglichkeiten, das zu tun. Die erste Möglichkeit ist, sagen wir, für I in Ihrem Nopi-Array drucken Sie I. Damit werden die Zeilen Ihrer tauben Felder ausgedruckt die Zeilen Ihrer tauben Felder ausgedruckt Also, worauf ich in deinem Zahlenfeld zugreife, sind die Zeilen. In jeder Iteration erhält es also die erste Zeile und druckt sie in der ersten Iteration aus, dann die zweite und dann die dritte Und wenn Sie durch Spalten iterieren möchten, möchten Sie auf die transponierte Version Ihres Numpi-Arrays zugreifen transponierte Version Ihres Numpi-Arrays Und so machst du es. Und wenn Sie Wert für Wert iterieren wollen, würden Sie für I in Bild und Punkt Flat Print I sagen und Punkt Flat Print I Diese Eigenschaft ermöglicht es Ihnen also, nacheinander auf Werte Ihres Numpi-Arrays zuzugreifen Und hier geht es um Indexierung, Aufteilung und Iteration . Wir sehen uns in der nächsten Vorlesung. 87. 86. Numpy-Arrays stapeln und teilen: Sie jetzt wissen, wie man Numpy-Arrays schneidet und iteriert, lassen Sie uns einige spezifischere Operationen ausführen Da Sie jetzt wissen, wie man Numpy-Arrays schneidet und iteriert, lassen Sie uns einige spezifischere Operationen ausführen. Und das würde bedeuten, NPi-Arrays auf Lager zu halten, also Numpy-Arrays miteinander zu verketten und auch ein Numpi-Array in zwei kleinere Arrays aufzuteilen . Ja, ich habe dieses Numpy-Array immer noch hier. Beginnen wir also mit dem Stapeln von zwei Numpy-Arrays. Um das zu tun, möchten Sie vielleicht eine neue Variable erstellen, in der Sie Ihr großes Array speichern, und das würde Nupi und der Methode zum Speichern von zwei Nicht-Pi-Strahlen entsprechen . Eigentlich gibt es zwei Eigentlich Eine ist ein horizontaler Stapel, also ein H-Stapel. Das setzt voraus, dass zwei oder mehr Numpy-Arrays übergeben zwei oder mehr Numpy-Arrays , die Sie horizontal stapeln möchten Lassen Sie mich also OMG und dann dasselbe Array übergeben , das ist kein Problem Wenn Sie zwei verschiedene Arrays hätten, könnten Sie das tun, aber ich übergebe dort einfach dasselbe Array Wenn Sie das jetzt ausführen, erhalten Sie eine Fehlermeldung, und ich möchte, dass Sie diesen Fehler sehen , damit Sie ihn verstehen Es heißt also, dass der H-Stack ein Positionsargument benötigt , aber es wurden zwei angegeben, was bedeutet, dass der H-Stapel innerhalb der Klammern was bedeutet, dass der H-Stapel innerhalb der Klammern nur ein Argument erhält, aber wir übergeben zwei Wie gehen wir also vor, um zwei Nicht-Pi-Arrays zu verketten? Wir können dort einfach ein Nicht-Pi-Array übergeben. Die Lösung hier besteht also darin, ein Tupel zu haben. Von Nopi-Arrays, einfach so. Also ein Umsturz in der Eingabe der A-Stack-Methode . Das führst du aus. Und hier ist ein gestapeltes Array. Das ist also das erste Array und das nächste Array, das in diesem Fall zufällig dasselbe ist, aber wenn Sie möchten, können Sie mehr hinzufügen und Sie erhalten ein längeres Array, das so nicht sehr gut aussieht Sie können es also ausdrucken. Und ja, jetzt siehst du den Unterschied. Also das erste Array, das zweite und das dritte. Und wenn Sie vertikal stapeln möchten, sollten Sie dort V machen. Oh ja. Wie Sie erwartet haben, werden dadurch die Arrays in der vertikalen Position auf der vertikalen Achse verkettet in der vertikalen Position auf der vertikalen Achse Beachten Sie, dass beim Versuch, Arrays mit unterschiedlichen Dimensionen zu verketten, eine Fehlermeldung angezeigt unterschiedlichen IMC hat also drei Dimensionen, wenn Sie sich das von hier oben merken können Jetzt lernen Sie, wie man ein Array verkettet und wie man ein Array in kleinere Arrays aufteilt Nun, um das zu tun, könnten Sie eine Variable erstellen und dann numpy Und das setzt ein Numpy-Array voraus und wie viele Arrays Sie daraus erzeugen möchten Also horizontal, sagen wir drei. Richtig. Und ja, das besagt, dass die Aufteilung eines Arrays nicht zu einer gleichen Division führt. Der Grund dafür ist, wissen Sie, wir versuchen, dass dieses Array eine, zwei, drei, vier, fünf Spalten hat . Sie versuchen also, fünf durch drei zu teilen. Ein Umpi kann nicht entscheiden, wie das geht. Also sollte es dir zuerst ein Pi-Array mit diesen beiden Spalten geben zuerst ein Pi-Array mit diesen beiden Spalten und dann noch einen Schiedsrichter mit zwei Spalten und dann ein letztes NPi-Array mit Numpi kann das also nicht tun. Was du tun solltest, sind vielleicht fünf, und L T m Ich sollte dir fünf verschiedene Numpy-Arrays geben, was in diesem Fall zufällig ein Array für Und Sie können vertikal splitten. Diesmal können wir es mit drei versuchen , weil wir dort neun Reihen haben Und doch haben wir drei kleine Arrays. Beachten Sie, dass dieses LSD, also der Split, eine Python-Liste von Numpy-Arrays erzeugt Es ist also eine einfache Python-Liste. Und von dort aus können Sie auf jeden der Nub Roys zugreifen , wenn Sie möchten weißt du. Es gibt also das erste Array aus. Und ja, hier geht es darum, Numpi-Strahlen zu verketten und zu teilen Hoffe ich gebe dir einen guten Überblick über Numpi. Ich versuche, einige praktische Beispiele wie das Öffnen von Bildern zu machen. Aber das ist noch im theoretischen Teil. Napi ist also ziemlich theoretisch, und du verstehst es erst , wenn du es so benutzt Echte Beispiele wie die Arbeit mit Pandas, wie wir es zuvor im Kurs getan haben, und auch die Arbeit mit Bildern Deshalb werden wir uns in den nächsten Vorlesungen im nächsten Abschnitt mit Hardcore-Bildverarbeitung nächsten Vorlesungen im nächsten Abschnitt Und Sie werden sehen, wie nützlich Num Pi da drin ist. Und ja, ich hoffe, dir gefällt das und wir sehen uns später. 88. 87. App 1: Web-Karte mit Python und HTML +: Hallo nochmal und willkommen zu diesem neuen Abschnitt des Kurses. In diesem Abschnitt werden Sie natürlich die zweite Anwendung erstellen. Konkret werden Sie mit Python diese Webmap erstellen , die Sie hier sehen. Eine Webmap ist eine Karte, die über einen Browser angezeigt wird und über das Internet besucht werden kann Diese Map wurde mit Python und Volume erstellt. Volume ist eine Python-Bibliothek, und die Map hat drei Ebenen Sie hat eine Basiskartenebene. Die, die Sie hier mit diesen Namen auf der Rückseite sehen , und sie hat eine Polygonebene, die die Bevölkerung der Länder darstellt Außerdem haben wir hier diese Punktebene mit diesen Punkten und Sie können diese Ebenen ein- und ausschalten Wir haben auch diese Popup-Fenster. Das wirst du bauen. A, lass uns weitermachen und das machen . Wir sehen uns in der nächsten Vorlesung. 89. 88. HTML & Python: Eine HTML-Karte mit Python erstellen +: Hallo, ich hoffe, du folgst dem vorherigen Video, in dem ich dir die Map vorgestellt habe , die du in diesem Abschnitt erstellen wirst . Das war eine Webmap, und wie Sie vielleicht feststellen, die Standard-Python-Installation reicht die Standard-Python-Installation nicht aus, weil ein Python logischerweise nicht standardmäßig alle möglichen Funktionen haben kann , denn wenn es alle Funktionen hätte, würde Python sehr schwer werden Daher ist es eine kluge Wahl, externe Bibliotheken zu haben , die Sie installieren können oder Und das ist beim Web-Mapping der Fall. Um die Webkarte zu erstellen, die ich Ihnen in der vorherigen Vorlesung gezeigt habe , benötigen Sie eine Bibliothek, eine Bibliothek eines Drittanbieters, die als Volume bezeichnet wird. Wie Sie vielleicht wissen, müssen Sie diese Bibliothek installieren. Beachten Sie nur, dass ich einige frühere Videos zu diesem Abschnitt hatte, einige alte Videos, aber ich musste sie ändern. Ich nehme gerade neue Videos auf. Dies ist ein neues Video, ein aktualisiertes Video und die nächsten Videos dieses Abschnitts, da Volume im Vergleich zu den vorherigen Versionen einige Änderungen am Code vorgenommen hat . Deshalb musste ich die Videos neu machen. Diesmal verwende ich einen Mac-Computer, aber das wird keinen Unterschied machen Wenn Sie Windows, Linux oder Mac verwenden, funktioniert alles genauso. Der einzige Unterschied besteht natürlich in der Art und Weise, wie Sie Atom öffnen. Unter Windows erstellen Sie bitte einen leeren Ordner, in dem Sie die Dateien für dieses Projekt aufbewahren werden. Mein Ordner hier auf dem Mac wird unter Windows zugeordnet Sie können die Umschalttaste gedrückt halten und mit der rechten Maustaste klicken. Und dann öffne Atom hier, um Atom in diesem Ordner zu öffnen. Auf einem Mac können Sie Command Space und Atom drücken, dann zu View Developer wechseln , im Dev-Modus öffnen und dann den Ordner suchen und auf Öffnen klicken. Ja, das ist es. Ich werde das alles schließen, lass mich das Terminal öffnen und jetzt weitermachen und Volume installieren. Um das zu tun, müssen Sie install volume eingeben. Normalerweise müssten Sie das unter Windows tun. Wenn Sie auf einem Mac zwei Python-Installationen haben, müssen Sie möglicherweise PIP drei ausführen Das heißt ausdrücklich, Volume für Python Three zu installieren. Das Volume wurde erfolgreich installiert. Wenn Sie eine Meldung erhalten, die besagt, dass Gina Two für dieses Paket erforderlich ist, dann machen Sie einfach weiter und führen Sie PIP Three aus, installieren Sie Gina Two Ich gehe jedoch davon aus, dass Volume Jinja Two standardmäßig installiert , so wie es bei mir der Fall war, also sollte es startklar sein Sobald Sie das getan haben, werde ich Python öffnen, genau genommen Python 3. Auf der Map müssen Sie Python 3 explizit angeben. Was ich jetzt tun werde, ist, eine einfache Webmap zu erstellen . Ich werde dafür die interaktive Python-Shell verwenden dafür die interaktive Python-Shell , damit ich Ihnen die Dinge zeige. Versuchen Sie, das Volumen zu importieren. Es liegen keine Fehler vor, das bedeutet, dass das Volume erfolgreich installiert wurde. Nun, wie funktioniert Volume? Nun, alles dreht sich um ein sogenanntes Kartenobjekt. Das allererste, was Sie nach dem Import eines Volumes tun müssen, ist, ein Kartenobjekt zu erstellen. Ich verwende eine Variable, um das Kartenobjekt zu speichern , und dann entspricht es dem Volumenpunkt MAP. Das ist die Klasse, die dieses Objekt erstellt. Wenn Sie möchten, können Sie das Volume überprüfen, um eine Liste der verfügbaren Objekte zu erhalten , die Sie auf dem Volume verwenden können. Hier ist die Karte. Ignoriere die anderen vorerst, wir werden sie später durchgehen. Sie können jetzt auch um Hilfe bitten, Volume Dot Map, um zu sehen, was Sie an dieses Kartenobjekt übergeben können. Erstellen Sie eine Karte mit dem Volumen - und dem Flugblattpunkt Gs. Volume produziert tatsächlich, Sie verwenden Python, Sie schreiben Python-Code und dieser Python-Code wird automatisch in JavaScript - und HTML-Code und CSS-Code konvertiert . Weil Sie Javascript, CSS und HTML benötigen , um Webmps zu erstellen Sie können das nicht direkt mit Python-Code tun. Der Browser liest HML, CSS und JavaScript und gibt im Code dieser drei Programmiersprachen zwei Elemente wie Text und Linien und Punkte und Bilder wieder Das ist es, was Volume tut. Das ist wunderbar, dass man das mit Python über Python machen kann . Wie auch immer, Sie können hier unten in den Parametern nachschauen. Sie können hier einen Standortparameter übergeben. Und Sie können die Breite angeben. Wie dem auch sei, wenn Sie die Breite nicht angeben, wird eine Standardbreite von 100% des Browserbereichs verwendet, Sie müssen nicht auch Breite und Höhe angeben, und dann haben Sie Kacheln, und dann haben Sie Kacheln, Standardeinstellung ist Open Street Map-Kacheln. Kacheln ist ein Hintergrund der Karte. Das wirst du in einer Minute sehen. Sie haben auch andere Parameter, die Sie sich, glaube ich, selbst ansehen können. Ich habe Q gedrückt, um die Hilfe zu beenden und lassen Sie uns weitermachen und das Kartenobjekt erstellen. Endlich Volume Dot Map. Also Standort, Sie müssen dort einen Standortparameter übergeben , damit die Karte weiß, wo sie geöffnet werden soll. Es kann sich öffnen, sagen wir in der Nähe von Alaska oder in der Nähe von Grönland oder Südafrika Wir sprechen von der ersten Ansicht, aber dann können Sie die Ansicht vergrößern und verkleinern Lassen Sie mich an einem zufälligen Ort vorbeifahren. Standorte werden übrigens standardmäßig durch Koordinaten angegeben standardmäßig durch Koordinaten Sie müssen geografische Koordinaten angeben , also Breitengrad und Längengrad. Der Breitengrad reicht von -90 über Null bis 90. Also lass mich dort 80 bestehen. Übrigens, das steht tatsächlich in der Liste. 80 ein Komma und dann der Längengrad, der Längengrad reicht von Null bis -180 und Null bis Lass mich -100 überschreiten. Und schließ die Klammer. Sie übergeben eine Liste mit Koordinaten an den Standort. Eigentlich ist das genug, Sie können ein Kartenobjekt damit ausführen lassen, Sie bekommen keine Fehlermeldung, das heißt alles funktioniert einwandfrei. Jetzt haben Sie ein Map-Objekt, aber das ist nur ein Objekt in Python. Sie haben dieses Objekt noch nicht in HTML-, CSS- und JavaScript-Code übersetzt . Als Nächstes müssen Sie auf dieses Kartenobjekt zeigen. Verwenden Sie dann die Speichermethode und übergeben Sie dann einen Namen für die Kartendatei , die erstellt wird. Natürlich werden die Karten im HTML-Format erstellt. HTML enthält all diese Elemente, die den gesamten Browser rendern. Text und Bildmaterial und so weiter. Klammer schließen, ausführen. Wie Sie sehen, wurde hier eine Datei hinzugefügt, Map-One-Punkt-HTML . Aber lassen Sie mich zum Ordner gehen und darauf doppelklicken, der in Ihrem Standardbrowser geöffnet wird . Das ist also nur ein zufälliger Ort. Ich weiß nicht, was es ist. Insel Magan Das scheint in Kanada zu sein, sehr nördlich von Kanada. Das ist es. Das ist die Webkarte. Wenn Sie die Ansicht vergrößern, werden Sie mehr Details auf der Karte sehen. Je mehr Sie heranzoomen, desto mehr Elemente sehen Sie. Das wollte ich dir zeigen. Wenn du einen anderen Ort willst, solltest du die Koordinaten hier im Standort ändern. Aber wenn du nicht weißt, welche Koordinaten dein Lieblingsplatz hat, dann gibt es vielleicht verschiedene Möglichkeiten, das herauszufinden, aber ein schneller Weg ist, maps.google.com aufzurufen Nehmen wir an, Sie möchten das wissen , lassen Sie mich hier näher heranzoomen. Sie möchten die Karte um diesen Ort zentrieren, klicken Sie mit der rechten Maustaste darauf und gehen Sie zu Was ist hier Kopieren Sie diese Koordinaten, kopieren Sie diese Koordinaten, ? Kopieren Sie diese Koordinaten, kopieren Sie diese Koordinaten, oder wenn Sie sie nicht kopieren können, erinnern Sie sich einfach an sie? 38,58 ungefähr minus 99 mal 09. Dann musst du die Map erneut speichern, einen Punkt ML zuordnen und das überschreibt die vorherige Map Gehen Sie hierher, laden Sie neu, Sie sehen, jetzt haben wir einen anderen Mittelpunkt der Karte Natürlich können Sie auch mit dem Zoom herumspielen, also können Sie hier einen Zoom-Parameter hinzufügen Dies wird als Zoom-Start bezeichnet. Setzen wir es auf sechs. Vergiss nicht, die Klammer hier zu schließen. Führen Sie die obere Pfeiltaste aus, um eine zuvor ausgeführte Anweisung wie Map Save aufzurufen . Sie können auch wählen, ob Sie zum Browser gehen und mit Control R oder Command R neu laden möchten. Daraufhin wird Ihnen die neue Map mit einem anderen Zoom-Faktor angezeigt mit einem anderen Zoom-Faktor Wie dem auch sei, das war es auch schon. Versuche, ein bisschen damit herumzuspielen In der nächsten Lektion zeige ich Ihnen, wie Sie Punkte zu dieser Karte hinzufügen können. Ich werde mir das ansehen 90. HTML und Python Hinzufügen einer Markierung zur Karte (KEIN WASSERZEICHEN): Hallo nochmal und willkommen zu dieser neuen Vorlesung. In dieser Vorlesung lernst du, wie du Punkte zu der Karte hinzufügst , die wir zuvor erstellt haben, und das ist diese hier. Alles, was wir hier haben, ist eine Basiskarte, die Hintergrundkarte, bei der es sich um eine Ebene handelt, die eigentlich aus dem OpenStreet Map Service stammt Also Open Street Maps, sie geben dir eine Ebene Tatsächlich wird Volume Ihnen diese Ebene im Hintergrund über JavaScript zur Verfügung stellen. Sie können aber auch andere Ebenen hinzufügen, andere Basisebenen und auch Punkte, die Sie über der Basisebene hinzufügen können. Lassen Sie mich zum Code zurückkehren. Das haben wir in der vorherigen Vorlesung geschrieben. Eigentlich haben wir es hier in der interaktiven Shell geschrieben. Aber ich kopiere es einfach und füge es in die Datei ein, damit wir es haben und damit wir jetzt mehr Code hinzufügen können. Wie ich dir schon gesagt habe, kannst du Help Volume Dot Map machen und du siehst, dass du hier noch andere Dinge hinzufügen kannst, zum Beispiel hier hast du Parameter. Sie können Kacheln hinzufügen. Die Standardeinstellung ist offene Straßenkarten Wenn Sie jedoch eine andere Kachel angeben, z. B. eine helle Kartenbox, die in Anführungszeichen stehen muss, wie Sie hier sehen können, im Parameter tiles ein String-Objekt erwartet. Standort, zum Beispiel, erwartet einen Umsturz oder eine Liste, und genau das übergeben wir an eine Koordinatenliste Die Breite wäre eine Ganzzahl, eine Ganzzahl , die Als Einzelperson haben Sie auch andere Optionen, die Sie selbst ausprobieren können. Ich möchte diesen vorerst nur ausprobieren. Lassen Sie mich eine neue Python-Shell öffnen. Python drei ordnen eins zu, stellen Sie sicher, dass Sie Ihr Skript gespeichert haben, führen Sie es aus. Dann können Sie zum Ordner zurückkehren und die Map öffnen. Lass mich zum Neuladen zu Farfox Control R oder Command R gehen und du wirst sehen, dass sich der Hintergrund geändert hat, sodass wir jetzt eine neue Basiskarte haben Gehen wir jetzt zurück zum Drehbuch. Ich werde nun einige Punktmarkierungen über der Grundkarte hinzufügen einige Punktmarkierungen über . Wie machst du das? Nun, wenn du die Lautstärke machst, kannst du hier sehen, dass du einige Objekte hast und das, was wir wollen, ist eine Markierung oder eine Kreismarkierung. Ich werde sie beide ausprobieren. Aber ich möchte Ihnen die Logik erklären, wie Sie dem Kartenobjekt Objekte hinzufügen. Im Portfolio erstellen wir ein Kartenobjekt, und dann können Sie zwischen dem Kartenobjekt und sicheren Methode des Kartenobjekts der sicheren Methode des Kartenobjekts Elementobjekte zu dieser Map hinzufügen. Was ich in diesem Fall hinzufügen möchte, ist eine Markierung. Also kann ich Map Add Child machen. Wir verwenden die Adil-Methode , um Kinder hinzuzufügen. Diese Objekte, von denen ich spreche, werden als Kinder bezeichnet , wenn Sie sie der Karte hinzufügen Ordnen Sie Adchild zu und dann möchten Sie auf die Volumenmarkierung zeigen Nun, diese Marker-Methode, erwartet selbst einige Argumente Sie können helfen, Volume Dot Marker zu markieren. Erstellen Sie eine einfache Markierung für Aktienbroschüren auf der Karte. Leaflet ist die JavaScript-Bibliothek , mit der Sie dies visualisieren können Das ist die Engine, die diese Karten im Browser erstellt diese Karten im Browser Python erstellt mithilfe der Leaflet-Bibliothek einen JavaScript-Code , und Markern können Sie Pop-Pops hinzufügen Wenn Sie auf eine Markierung auf der Karte klicken, können Sie Informationen und Parameter anzeigen . Sie müssen einen Positionsparameter übergeben Markierung einen Positionsparameter übergeben , um sie zu visualisieren Standort ist also gleich zwei. Es ist eine typische Liste. Sagen wir, 38 Punkt zwei und -90 91 und Sie können auch bestehen Nach der Liste öffne ich ein Poometer, das hoch sein könnte. Ich bin ein Marker Ich muss auch den Icon-Parameter übergeben , der eigentlich ein anderes Objekt ist, das aus dem Volumenpunkt Con stammt . Sie erwarten , dass ich dort eine Farbe übergebe, wie, sagen wir, Grün. Im Grunde ist es das. Stellen Sie sicher, dass Ihre Klammern korrekt sind. Ich habe hier drei Klammern, drei schließende Klammern und eins und zwei und drei öffnende runde Klammern. Okay. Speichern Sie ein Skript, gehen Sie zum anderen Terminal und führen Sie es aus. Gehe zum Laden zu Firefox, und hier ist eine Markierung. Wenn ich klicke, erhalte ich die Popup-Meldung in einem schönen Fenster hier. So fügen Sie Ihrer Karte Markierungen hinzu. Ich würde jedoch vorschlagen, dass Sie einen etwas anderen Ansatz verfolgen , um Ihrer Karte Kinder hinzuzufügen. Ich würde vorschlagen , tatsächlich eine Feature-Gruppe ( Volumendaten, Feature-Gruppe) zu erstellen . Aber du kannst ihr einen Namen wie meiner Karte geben. Was dann passiert, ist, dass in dieser Feature-Gruppe die Markierung ein Feature mit Feature-Gruppen ist Sie können der Feature-Gruppe mehrere Features hinzufügen. Sie können also eine Markierung hinzufügen, Sie können Polygone hinzufügen usw. Anstatt Karte zu sagen, machst du das Feature-Group-Objekt, die Variable, die ich hier erstellt habe, ich übergebe sie hier Danach mappst du das Kind zu. Und Sie geben die Feature-Gruppe dort weiter. Das ist mehr. Dies dient dazu, Ihren Code besser zu organisieren, und es hilft Ihnen auch später, wenn Sie Ihrer Karte eine Ebene hinzufügen möchten, eine Funktion zur Ebenenkontrolle , mit der Sie Ebenen ein- und ausschalten können. Wir werden uns das später ansehen. Speichern Sie dieses Skript und lassen Sie mich es ausprobieren. Ziemlich tief auf der Seite. Wir haben also kein Kleingeld. Die Dinge werden genauso funktionieren, was bedeutet, dass die Feature-Gruppe einwandfrei funktioniert. Aber wie gesagt, es ist gut den Anruf organisiert zu halten, und es hilft Ihnen auch später, wenn Sie eine Layersteuerungsfunktion hinzufügen. Das wollte ich dir vorerst beibringen und ich werde später mit dir sprechen. 91. 90. HTML & Python: For-loops beim Hinzufügen mehrerer Marker verwenden: Großartig. Wir konnten diese Karte in der vorherigen Vorlesung erstellen. Wir haben eine Basiskarte und wir haben hier eine Markierungsfunktion. Das ist unser Code. In dieser Vorlesung zeige ich Ihnen nun, wie Sie Ihrer Karte mehrere Markierungen hinzufügen können. Das geht unter anderem dadurch , dass Sie diesen Ausdruck mehrfach schreiben. Das gefällt mir, und natürlich müssen Sie die Position dieser Markierungen ändern. Speichern Sie das Skript und führen Sie Reload aus, sodass Sie mehrere Markierungen haben Wie Sie wissen, ist es nicht möglich, mehrere Markierungen mit einer einzigen Methode hinzuzufügen mehrere Markierungen mit einer einzigen Methode Bei einer einzigen Markierungsmethode müssen Sie die Methode mehrmals anwenden. Dies ist jedoch nicht sehr klug. Das ist das Schöne am Programmieren. Sie können eine For-Schleife verwenden, um der Map tatsächlich mehrere Markierungen hinzuzufügen. Wir sprechen von Python for Loop, was eines der grundlegenden Merkmale von Python ist. Die vier Schleifen haben nichts mit Lautstärke zu tun. Nehmen wir an, für Koordinaten bräuchten Sie natürlich einige Eingaben mit den Koordinaten. Ich weiß nicht, so. Sagen wir eine Liste von Listen. Wir haben diese beiden Koordinaten. Lass mich das kopieren. Leg es da hin und ein anderes Mal und lass mich sie auf neun und sieben ändern. Dann müssen Sie das mit vier Leerzeichen einrücken. Ich werde das gleich erklären. Dann müssten Sie am Standort die Koordinaten übergeben. Bevor ich den Code erkläre, lassen Sie mich das ausprobieren. Ausführen, neu laden, wir haben immer noch die Markierungen da Natürlich hat sich der Standort gegenüber dem vorherigen geändert weil ich die Koordinaten geändert habe und hier. Also, wie funktioniert das? Nun, ich iteriere mit einer For-Schleife durch diese Liste von Listen Die Punkte auf der Liste dieser Hauptliste sind zwei weitere Listen Die Artikel können alles sein. In diesem Fall gibt es zwei Listen. Was passiert ist, dass die Koordinaten variabel sind. In der ersten Iteration wird das erste Element der Liste abgerufen und die kleine Liste eingefügt, also 32,2 Es wird diese Liste hier einfügen. Im Grunde wird das hier reingestellt. Mehr oder weniger. Das ist die Idee. In der nächsten Iteration werden die Koordinaten dann diese andere Liste abrufen und sie wieder hier einfügen, sodass die Marker-Methode zweimal ausgeführt wird Beim ersten Mal wird sie also eine Markierung mit diesen Koordinaten und bei der zweiten Iteration wird sie eine Markierung mit diesen Koordinaten erzeugen diesen Koordinaten und bei der zweiten Iteration wird sie eine Markierung mit diesen Koordinaten erzeugen. Das ist es Wir haben hier jedoch ein kleines Problem. Das Problem ist, dass Sie die Koordinaten in Wirklichkeit nicht einfach in eine Python-Liste eingeben können. Nehmen wir an, Sie haben 1.000 Koordinaten, die Sie einer Karte zuordnen müssen , und es ist schwierig, sie hier einzugeben oder sie sogar zu seitenweise, kopieren und aus dem Dokument hier einzufügen. Die Lösung dafür ist, dass Ihre Koordinaten normalerweise im wirklichen Leben vielleicht als Textdatei geliefert werden, vielleicht als Textdatei geliefert werden, z. B. als kommagetrennte Textdatei, CSV, Excel-Dateien Sie möchten diese Datei in Python laden und dann die Werte dieser Datei zur Marker-Methode hinzufügen . Du kannst das mit einer For-Schleife machen und wie machst du das genau? Nun, das werde ich in der nächsten Vorlesung erklären. Ich gebe Ihnen eine kommagetrennte Datei mit vielen Koordinaten, und wir werden sie in diesem Skript verwenden . Ich werde später mit dir reden 92. 91. HTML und Python: Dateiverarbeitung durch Hinzufügen von Markern aus Dateien: Hallo. In der vorherigen Vorlesung konntest du diese Karte mit mehreren Markierungen erstellen. Diese Karte hat zufällig nur zwei Markierungen, aber Sie haben die Idee verstanden und das Skript war dieses hier, sodass Sie hier so viele Koordinatenpaare hinzufügen können , wie Sie möchten. Aber in dieser Vorlesung möchte ich Ihnen zeigen, wie Sie Koordinatenpaare aus einer Textdatei hinzufügen können, das ist diese hier, Vulkane punktförmig als TXT Wenn Sie möchten, können Sie einfach den Namen von Vulkanen, der Text Vulkane in CSV umbenennen , dann können Sie es in einem Programm wie Excel öffnen Wenn Sie möchten, können Sie es in einer einfachen Textdatei anzeigen , wie ich es hier mache Python kann sowohl CSV- als auch Textdateien lesen. Was wir hier haben, sind einige Daten über Vulkane. Im Grunde haben wir die Nummer des Vulkans, die eine ID ist, Vulkan 020 Wir haben dann noch eine weitere Zahl, wie Sie sehen, jede Spalte, wir haben Spalten in dieser Datendatei und jede Spalte ist durch ein Komma getrennt Das ist der Name der ersten Spalte, der erste Wert der ersten Spalte ist dieser hier, dann ist es der Name der zweiten Spalte Der erste Wert der zweiten Spalte ist dieser hier, dann ist der zweite Wert der zweiten Spalte die Antwort eins, und dann haben wir eine Namensspalte, den Namen des Vulkans und hier. Entschuldigung, der Name ist hier, Baker, und dann beginnt das Komma hier, was bedeutet, dass der Standort dieser hier ist, USA Washington Dann haben Sie den historischen Status des ersten Vulkans und dann haben wir die Höhe, das ist dieser hier. Ich bin mir nicht sicher, ob sie in Fuß oder Metern sind , aber das kannst du herausfinden. Wenn Sie neugierig sind, können Sie nach diesem speziellen Vulkan recherchieren und die Höhe vergleichen. Wie auch immer, dann haben wir eine Art Vulkan. Sie haben einen Zeitrahmen , der D drei ist, ich bin mir nicht sicher, was das bedeutet, D vier. Schließlich interessiert uns das. Wir haben die Spalten Lat und Long. Das ist spät, das heißt Breitengrad und das ist Längengrad des Vulkans. Sie benötigen also diese beiden numerischen Werte , um die Merkmale, die Vulkane, einer Karte zuzuordnen, in diesem Fall einer Volumenkarte Das sind ungefähr 63, tatsächlich 62 63, einschließlich der Kopfzeile der Daten Wie laden wir diesen Herbst in Python? Nun, das zu laden fällt in Python. Lassen Sie mich das Terminal leeren und Sie müssten zuerst eine sehr nützliche Bibliothek namens Pandas installieren namens Pandas Wir werden diese Bibliothek später verwenden, daher werde ich Pandas vorerst nicht im Detail erklären , da wir nur eine oder zwei ihrer Funktionen verwenden werden , die ich in dieser Vorlesung erläutern werde Fahren Sie fort und installieren Sie Pandas, falls Sie keine Pandas haben. Installieren Sie Pandas oder PIP drei installieren Sie Pandas, je nachdem, wie Sie Python konfiguriert haben, und dann können Sie eine Python-Sitzung öffnen Pandas importieren. Um eine Datei mit Pallas zu laden, zeigen Sie auf Pallas , die CSV, Volcanos TXT lesen . Stellen Sie sicher, dass Ihre Python-Sitzung in dem Verzeichnis geöffnet wurde , in dem sich Ihre Volcan-TH-Datei Meine Sitzung befindet sich zum Beispiel im Mapping-Ordner , der hier ist, sodass ich einfach einen Dateinamen übergeben kann Andernfalls müssen Sie möglicherweise den absoluten Pfad der Datei übergeben, der mit einem Schrägstrich usw. beginnt , je nachdem, in welchem Betriebssystem Sie sich befinden, und das ausführen und Daten aufrufen und Sie bekommen die Daten einfach so ausgedruckt Panda ist eigentlich die gelesene CSV-Mathematik, die in der Lage ist , zwischen diesen Kommas zu unterscheiden, wo sich die Kommas befinden, und es erstellt ein webstrukturiertes Datenformat Wenn du hier runter gehst, hast du hier einige Spalten, Spalte, Spalte, Spalte und dann bis zum Ende Dann hast du andere Spalten, weil Python eigentlich nicht ausdrucken kann, das Terminal erlaubt dir nicht, alle Spalten in einer innerhalb dieses Bereichs hier zu haben , weil das zu viel wäre. Wie auch immer, Sie haben den Status Elevation, geben Timeframe, Lat und Long Das ist ungefähr mit den Daten. Jetzt müssen Sie herausfinden , wie Sie durch diesen Datenrahmen iterieren Dies wird als Datenrahmen bezeichnet. Das Datenobjekt wird Datenrahmen genannt. Sie können seinen Typ tatsächlich überprüfen. PanascFrame-Datenrahmen. Ich denke daran, tatsächlich zwei Listen aus diesen Datenrahmenspalten zu erstellen , um die Breitengradspalte in eine Python-Liste und die Längengradspalte in eine andere Python-Liste einzufügen eine Python-Liste und die Längengradspalte in , sodass wir ein natives Python-Objekt haben, dem es sich um eine Liste handelt, und dann können wir diese Liste mithilfe der Vierschleife iterieren diese Liste mithilfe der Vierschleife Lassen Sie mich versuchen, das zu tun . Importieren Sie Pandas und erstellen Sie dann das Datenrahmenobjekt Beim Laden der Daten habe ich CSV Volcano TXT gelesen, das war's. Wie konvertieren wir eine Datenrahmenspalte in eine Liste? Nun, der Weg, das zu tun, ist, sagen wir L oder T egal data und dann den Namen der Spalte, also LT , so dass Sie übrigens eine Liste von Spalten erhalten können, indem Sie Datenpunktspalten machen Hier sehen Sie, Sie haben eine breite und eine lange Spalte. Dann machst du das, was bedeutet, in eckigen Klammern aufzulisten aufzulisten , es zu schließen Was Sie hier gemacht haben, sind Daten mit einem einzigen Attribut Wir geben ein seriöses Objekt zurück Aber dieses seriöse Objekt, wir konvertieren es in eine negative Liste Das wird eine Python-Liste sein. Dies wird auch als ähnliches Objekt angezeigt. Das ist ein ernstes Objekt. Dies ist eine Liste, aber ich bevorzuge es, an einer Liste zu arbeiten , weil die Arbeit an Listen schneller ist als die Arbeit an Datenrahmenreihen. Die Idee ist, hier zwei Listen zu haben. Das entspricht der Liste auf der Kopie, die hier eingefügt wurde, das Gleiche gilt für den Letzte und lange Liste. Wir müssen hier also vorsichtig sein geht, wie wir diese beiden Listen durchgehen denn wir haben zwei Listen und jede davon hat 62 Einträge Sie können das überprüfen, indem Sie hier, hier unten, dass es 62 Elemente hat und dasselbe gilt für die Längengradliste Das bedeutet, dass der erste Eintrag der Breitengradliste dem zweiten Punkt der Breitengradliste entspricht , tut mir leid, der Längengradliste. Die ersten beiden Elemente bilden die erste Position der ersten Markierung. Das bedeutet, dass wir in der ersten Iteration beide Standorte extrahieren müssen Eigentlich wird diese Struktur nicht mehr angemessen sein. Was Sie tun müssen, ist, sagen wir, die Variablen Lat und Loan durchzugehen . Wenn Sie durch zwei Listen gleichzeitig iterieren, müssen Sie die Zip-Funktion verwenden und dann geht es nach oben. Im Grunde funktioniert diese Funktion wie folgt. Sagen wir für I, J und Zip. Nehmen wir an, die erste Liste ist 123. Die zweite ist 456. Print, ich und J. Das passiert. Diese Schleife durchläuft diese beiden Listen gleichzeitig. Was passiert ist, dass ich den ersten Punkt der ersten Liste durchgehe , während ich den ersten Punkt der zweiten Liste durchgehe . In der ersten Iteration werden eins und vier extrahiert. Eins hier und vier hier. Und Sie können eine solche Extraktion mit der ZIP-Funktion durchführen. Andernfalls können Sie das nicht tun , wenn Sie die ZIP-Funktion nicht verwenden. ZIP verteilt die Artikel also sozusagen nacheinander. Und das Gleiche gilt hier, LT wird den ersten Punkt dieser Liste bekommen L One wird den ersten Punkt dieser Liste bekommen. Und dann müssen Sie hier eine Liste mit LT und LN erstellen . Ja, das ist es. Speichern Sie das Skript, gehen Sie zum Terminal, um es auszuführen. Es ist nicht hier, das Terminal. Ich verlasse das einfach. Python drei, kartiere einen Schnittpunkt. Keine Fehler, geh zu Firefox und lade es neu. Ich habe aus irgendeinem Grund keine Markierungen, aber ich habe keine Fehlermeldung erhalten Dies ist eines der Szenarien , in denen im Terminal keine Fehlermeldung angezeigt wird. In diesem Fall müssen Sie Ihren Code sorgfältig überprüfen . Datenpaneele drei CSV, geschweige denn Daten. Hier ist der Fehler. Was passiert ist, dass ich Breitengradliste die falsche Spalte zuweise Lassen Sie mich die Reihenfolge ändern und es erneut versuchen. Lassen Sie sich also nicht von Fehlern einschüchtern. Fehler passieren ständig. Sie müssen nur kaltblütig sein und die Fehler lesen , wenn Sie hier einen Fehler erhalten, und den Code auch genau ansehen Lass mich nachladen. Ich habe jetzt ein paar Marker Das sind die Standorte von Vulkanen im Norden der USA, genauer gesagt in den Vereinigten Staaten Okay. Sie haben auch dieses Pop-up, das gut funktioniert, aber ich gehe davon aus, dass es Ihnen nicht besonders gefällt , weil es keine Informationen anzeigt. Was wir hier tun müssen, ist, dieses Pop-up tatsächlich dynamisch zu gestalten , sodass es einige aktuelle Informationen anzeigt. Ich zeige Ihnen im nächsten Video, wie Sie dynamische Popups erstellen . Ich rede dort mit dir. 93. 93: Hallo, nochmal. In diesem Video zeige ich Ihnen, wie Sie die Höhenwerte hinzufügen. Diese hier im Popup-Fenster. Derzeit druckt unser Skript diese Zeichenfolge einfach im Popup-Fenster aus. Das werden wir ändern. Dazu laden Sie zunächst die Höhendaten in eine Python-Liste. Dann willst du in der Schleife hier sagen, sagen wir, L in Z plat lone Lv so Hier im Pop-Pop-Argument übergeben Sie das L-Attribut Auch hier erstellen wir eine Liste mit dem Namen F, Variable LV. Das wird eine Liste aller Höhen sein, und dann gehen wir diese drei Listen durch LT bekommt den ersten Gegenstand der Miete, LN bekommt den ersten Gegenstand der Ausleihe, L bekommt den ersten Gegenstand von LF und diese Gegenstände werden in dieser Funktion hier verteilt LT hier drin, LN hier und L hier, EL hier drin. Nun, ich möchte das speichern und ausführen, erwarte aber eine Fehlermeldung. Ich möchte, dass Sie den Fehler sehen, damit Sie sich auch mit dem Umgang mit Fehlern vertraut machen. Der Fehler tritt in Zeile 14 auf. Ordnen Sie in dieser Datei einen Punkt Pi zu, das ist unsere Datei, Zeile 14 ist hier. Das ist eine Zeile und dann haben wir bei Child Pop Up. Es scheint, dass dieser Fehler mit einem Popup-Objekt zu tun hat. Ich werde sagen, das ist eigentlich keine sehr gute Fehlermeldung. Es ist schwierig, diesen Fehler zu lesen und zu beheben. Umfang der Informationen ist hier nicht sehr gut, aber wir haben trotzdem einige Hinweise. Pop, hier steht Name, Kindname-Attribut oder NupiFlow 64, Objekt hat kein Attribut Es scheint, dass Volume versucht, diese Methode „Name abrufen“ anzuwenden , eine Methode innerhalb der Volume-Codebasis, und versucht, sie auf eine Zahl anzuwenden Ich denke, dass dieses L hier tatsächlich eine Zahl ist. Ich kann das überprüfen, indem ich sage print type, save execute the script again, hier ist ein Typ. Das ist ein Num Pi Float 64. Im Grunde ist es ein Float-Typ. Es ist eigentlich ein spezieller Float der Numpi-Bibliothek. Aber wie auch immer, du kannst es Float nennen. Es ist also eine Zahl, es ist keine Zeichenfolge. Aber wenn Sie sich Hilfe, Entschuldigung, Hilfe, Lautstärke, Punktmarkierung ansehen, werden Sie feststellen, dass der Popup-Parameter eine Zeichenfolge von Ihnen als Eingabe erwartet. Stattdessen übergibst du eine Fließkommazahl. Also willst du das nicht tun. Was Sie tun möchten, ist einfach, Sie konvertieren diese Flow-Nummer einfach in eine Zeichenfolge. Speichern Sie das Skript. Gehe zum Terminal. Führen Sie es erneut aus. Gehen Sie zu Firefox, laden Sie es neu und die Höhe wird korrekt angezeigt Ja, das war's auch schon. vielleicht möchten Sie auch das, was Sie anzeigen, stilisieren , um dort weitere Informationen hinzuzufügen, z. B. zusätzliche Raumzähler Ich füge die Zeichenfolge zu allen Informationen im Popup-Fenster für alle Höhenangaben Wir sprechen von 2.447,0 Metern. Das ist die Höhe des Vulkans. Ja, das ist die Idee. Ich hoffe, das war klar und ich werde später mit dir reden. 94. 93. Funktionen verwenden - Eine Farbgenerierungsfunktion für Marker erstellen ++: Hallo nochmal und willkommen zu dieser neuen Vorlesung. Was wir bisher haben, ist diese Karte mit diesen 62 Markierungen, von denen jede einen Vulkanstandort in den Vereinigten Staaten darstellt . Diese Karte ist jedoch nicht sehr intelligent, die einzige Information, die diese Karte vermittelt, sind die Standorte der Vulkane Und Sie haben auch eine Basiskarte. Diese Karte hat auch einen guten Aspekt, weil Sie solche Informationen extrahieren können , wenn Sie auf die Symbole klicken. Möglicherweise möchten Sie diese Karte jedoch so transformieren, dass sie tatsächlich ein Attribut anzeigt und nicht nur Vulkanstandorte. Die Art und Weise, das zu tun, mag verschiedene Möglichkeiten geben, das hängt von Ihrem Wissen über Zytografie ab, aber ich könnte dafür sorgen, dass die Karte hier ein Attribut anzeigt. Ich könnte zum Beispiel die Farben dieser Markierungen ändern , um den Höhenbereich tatsächlich anzuzeigen Nehmen wir an, wir können diese Markierungen in drei Farben einteilen Nehmen wir an, Grün, Orange und Rot, Grün wäre beispielsweise für Höhen von 0 bis 1 Tausend Metern oder 2.000 Meter und Orange für oder 2.000 Meter und 2000 bis 3.000 Meter, und dann würden rote Markierungen Vulkane mit einer Höhe von mehr als 3.000 Metern darstellen Vulkane mit einer Höhe von Wie machen wir das also mit der Lautstärke? Kehren wir zum Atom zurück. Hier ist unser Code, was wir bisher haben. Derzeit übergeben wir an das Argument icon ein Farbargument mit dem Wert Grün. Im Grunde müssen wir diese Dynamik so gestalten, dass sich die Farbe je nach Höhe ändert. Leider können wir das mit Volumen nicht machen. Volume verfügt nicht über native Funktionen zum Erstellen dynamischer Farben für Ihre Markierungen. Daher müssen wir hier ein bisschen kreativ sein und dafür Python-Kernfunktionalitäten verwenden . Wenn Sie an Dynamik denken, denke ich an Funktionen. Im Grunde durchläuft diese Schleife den Breitengrad, Längengrad und die Höhe und leitet dann diese drei Werte an diesen Ausdruck hier weiter. Der Farbe wird jedoch immer eine Zeichenfolge übergeben. Aber wie ändere ich es zum Beispiel je nach Höhe? Nun, der Weg, das zu tun, besteht darin, eine Funktion zu erstellen, eine Funktion, die eine Höhe als Eingabe erhält und dann einige Aktionen innerhalb der Funktion ausführt und dann eine Farbe zurückgibt, die vom Höhenwert abhängt. Sie können sagen, wenn die Höhe geringer ist als dieser Wert, geben Sie mir die grüne Farbe, hier eine grüne Zeichenfolge. Und so weiter und so fort. Um Ihnen eine Vorstellung davon zu geben, wie das funktionieren würde, lassen Sie mich die Funktion hier schreiben. Dies wäre ein guter Ort, um das zu tun, bevor Sie ein Kartenobjekt erstellen. Aber immer müssen Sie immer eine Funktion erstellen , weil ich die Funktion hier aufrufen werde, also müssen Sie ab hier und aufwärts die Funktion vor diesem Ausdruck erstellen . Ich werde das hier erstellen. Nennen wir eine Funktion, rufen wir einen Produzenten auf. Lassen Sie es uns für eine Weile einfach halten, nur um Ihnen zu zeigen, wie das funktionieren würde. Lassen Sie es uns sehr, sehr einfach halten. Sagen wir, wir kehren grün zurück. Wenn Sie dies auf Color Producer ändern und die Klammern nicht vergessen, indem Sie Klammern übergeben, bedeutet das, dass Sie die Funktion aufrufen. Wenn Sie die Klammern nicht übergeben, bedeutet das, dass Sie nur den Funktionsnamen aufrufen und die Funktion nicht ausführen. Ich lasse es einfach so und führe Map One Dot Pi aus. Ordnung. Wenn du nachlädst, bekommst du dasselbe Denn was passiert, ist das. Dieses Ding hier, diese Funktion, Kohle wird dem entsprechen, was auch immer du hierher zurückgibst. Der Typ dieses Objekts ist eigentlich eine Zeichenfolge. Es ist genau die grüne Zeichenfolge. Daher können Sie hier jetzt einige Bedingungen hinzufügen. Im Grunde müssen Sie hier eine Eingabe übergeben, Höhe, lassen Sie mich eine beliebige Variable schreiben, Höhe schreiben und hier müssen Sie L. L für Letlon L übergeben, wir haben 62 Zeilen in der Datentabelle und for loop durchläuft die erste Zeile der Sie ermittelt die Höhe und leitet sie an diesen Funktionsaufruf weiter. Die Funktion übergibt L in Höhe. Dann sagen Sie hier, wenn die Höhe weniger als 1.000 beträgt , möchten Sie Grün zurückgeben, wenn die Höhe weniger als 1.000 Meter beträgt. Eine Blatthöhe liegt zwischen 1.000 Metern, sie ist größer als 1.000 Meter oder weniger als 3.000 Meter. Gib Orange zurück. Sonst, gib Rot zurück. Rot wird zurückgegeben, wenn keine dieser Bedingungen erfüllt ist, was bedeutet, dass die Höhe weder weniger als 1.000 Meter noch 1.000-3.000 Meter beträgt Das bedeutet, dass mehr als 3.000 Meter übrig sind. In diesem Fall geben wir Rot zurück. diese Werte herauszufinden, müssen Sie tatsächlich ein wenig Daten untersuchen. Vielleicht möchten Sie sich die Daten so schnell ansehen , um zu sehen, welche Werte Sie haben. Und entscheiden Sie sich dann für den Schwellenwert für die Kategorie. Sie können aber auch aussagekräftigere statistische Analysen durchführen Sie können ein Histogramm erstellen und sich die Datenverteilung ansehen und dann für diese Werte entscheiden Aber lassen Sie uns die Dinge einfach halten und uns für diese Werte entscheiden Ich löse diesen Check schnell , wenn alles an seinem Platz ist. Lass mich den Code ausprobieren. Geh und lade neu Wir haben hier ein paar verschiedene Farben. Ja. Das sieht gut aus. Lassen Sie mich die Werte noch einmal überprüfen. Orange liegt zum Beispiel zwischen 1.000 Metern und 3.000 Metern. Es geht uns gut. Das Rot liegt über 3.000 Metern. Es scheint, dass es funktioniert. 95. 94. HTML und Python: So fügst du Marker hinzu und stilisierst: Ordnung. Ich hoffe, du löst die Übung, aber mach dir keine Sorgen, wenn deine Karte ein bisschen anders aussieht als meine. Wie dem auch sei, hier sind meine Markierungen, eigentlich Kreismarkierungen. Und ich habe grüne, orange, rote und orange Markierungen. Du verstehst die Idee. Und sie haben auch eine Art von Undurchsichtigkeit Also habe ich einen Opazitätswert von 0,7 festgelegt, was für sie 70% bedeutet Wie Sie sehen, können Sie die sich unter dieser Markierung befindet, hier sehen Wie dem auch sei, hier ist ein Code. Lassen Sie mich erklären, was ich gegenüber dem vorherigen Code gegenüber dem ursprünglichen Code geändert habe . Ich habe die Markierung zur Kreismarkierung geändert. Der Standort bleibt derselbe. Auch das Popup-Attribut bleibt gleich. Und dann habe ich hier einen Radius von sechs hinzugefügt, was sechs Pixel bedeutet. Das ist die Größe dieser Kreismarkierungen. Dann habe ich eine Feldfarbe hinzugefügt. Das Feldfarbattribut bezieht sich auf den inneren Bereich des Kreises. Sie sehen diesen orangefarbenen Bereich, aber Sie haben hier auch diese äußere Farbe, die ich auf Grau gesetzt habe , und das machen Sie mit dem Farbargument. Die Farbe entspricht Grau für alle Markierungen. Die Standardfarbe ist Schwarz, was meiner Meinung nach etwas schwer für das Auge ist Wie dem auch sei, hier ist eine Feldundurchlässigkeit. Aus Gründen der Transparenz habe ich 0,7 angegeben, und das war's. Ich hoffe, das ist jetzt klar und ich werde später mit Ihnen sprechen. 96. 95. HTML & Python: Arbeiten mit JSON-Daten: Hallo, willkommen wieder. In dieser Vorlesung zeige ich Ihnen, wie Sie dieser Karte eine weitere Ebene hinzufügen können. Derzeit haben wir zwei Ebenen. Wir haben die Basiskarte, das sind Kartenkacheln pro Kartenbox, die Sie hier sehen können, und die Daten werden von OpenStreet Map bereitgestellt und Sie haben auch Ihre benutzerdefinierte Ebene, die eine Ebene mit Kreismarkierungen ist In geographischen GIS-Informationssystemen werden diese als Ebenen bezeichnet Jetzt möchte ich meiner Karte eine dritte Ebene hinzufügen, bei der es sich um eine Polygonebene handeln wird Diese aktuelle Ebene mit Markierungen kann als Punktebene bezeichnet werden Sie haben auch Linienebenen und Polygonebenen. Mit Punkten lassen sich Orte besser darstellen, und Sie haben Linien. Linien eignen sich am besten für die Darstellung geografischer Merkmale , die Linien wie Straßen und Flüssen ähneln Dann haben wir Polygone. Polygone eignen sich am besten zur Darstellung von Bereichen. In dieser Vorlesung werde ich Ihnen beispielsweise zeigen, wie Sie eine Ebene hinzufügen, eine Polygonebene, die die Weltbevölkerung nach Ländern darstellt Weltbevölkerung Länder werden als Gebiete dargestellt. Und was wir tun werden, ist jedes der Länder eine bestimmte Farbe hat , die die Bevölkerung dieses Landes angibt. Punkte für Standorte, Linien für Linien und Polygone für Flächen Jetzt benötigen Sie natürlich einige Daten, um eine Polygonebene zu erstellen Genau wie bei Markierungen hatten wir einige Daten im CSV-Format im Textformat Und dann verwenden wir diese Daten, wir öffnen sie mit Pandas und dann haben wir diese Datenzeilen durchgearbeitet diese Datenzeilen durchgearbeitet und die Markierungen zur Karte hinzugefügt Bei Polygonen können Sie nun Polygone über Volumen hinzufügen, indem Sie die GeoJSON-Methode mit Volumenpunkten verwenden Lassen Sie mich hier im Grunde etwas Platz schaffen, so würde das funktionieren Sie möchten hier eine Feature-Gruppenvariable hinzufügen, Sie möchten ein untergeordnetes Objekt hinzufügen, bei dem es sich um ein Volume-Geo-JSON-Objekt handeln würde . Dies ist hier die Methode mit Klammern. Dadurch wird ein GeoJSON-Objekt erstellt. Für GeoJSON-Daten verwenden wir diese World Dot JSON-Datei. Sie finden dies in der Anlage zu dieser Vorlesung. Lassen Sie mich erklären, was das ist, aber Vorsicht, öffnen Sie es nicht auf Atom, denn wenn Ihr Computer etwas langsam ist, kann Ihr Atom abstürzen. Versuchen Sie, es mit einem leichteren Editor wie Notepad oder CAT auf einem Linux-Terminal oder Mac zu öffnen oder CAT auf einem Linux-Terminal oder Mac Wie auch immer, das ist die JSON-Datei. Sie können sie als JSON oder GeoJSON bezeichnen. Tatsächlich ist GeoJSON ein Sonderfall von JSON. Im Grunde ist das Format immer dasselbe. Es beginnt mit geschweiften Klammern und enthält im Grunde eine Zeichenfolge, die einem Python-Wörterbuch mit Schlüsseln und Werten ähnelt Schlüssel, Schlüssel und Wert , wo diese geschweifte Klammer irgendwo hier endet, glaube ich, wenn ich mich nicht irre Nun, dieser endet hier. Ja. Dann hast du die andere Schlüsselgeometrie. Was ist Geometrie? Nun, die Art der Geometrie ist Multipolygon. Im Grunde haben Sie diese Attribute , die die Daten beschreiben Geben Sie Koordinaten für mehrere Polygone ein. Das fängt jetzt an, die Features, die Polygone, zu beschreiben Dies sind die Koordinaten des ersten Polygons, das auf der Karte angezeigt wird Nehmen wir an, dies ist ein bestimmtes Land , nämlich Antigua und Ein kleines Land, aber trotzdem. Dies sind die Koordinaten, die die Position des Polygons auf Ihrer Karte bestimmen Im Grunde liest Volume all diese Informationen und entscheidet, wo die Polygone platziert Dann können Sie auch andere Attribute wie die Bevölkerung verwenden , die hier steht. Sie verwenden diesen Bevölkerungswert, um der Population eine Farbe zuzuweisen Und so weiter und so fort, Sie haben alle Länder der Welt in dieser JSON-Datei. Verbringen Sie ein paar Minuten damit, sich diese Datei anzusehen, um ihre Struktur zu verstehen. In der nächsten Lektion werde ich die JSON-Datei in Python laden und die Polygonebene anzeigen Wir sehen uns dort. 97. 97: Großartig. In der vorherigen Vorlesung habe ich dir gezeigt, wie eine JSON-Datei aussieht. In dieser Vorlesung werde ich diese JSON-Datei zum Code hinzufügen. Denken Sie daran, dass ich Ihnen die JSON-Datei zur Verfügung gestellt habe. In der vorherigen Vorlesung konnten Sie es aus den Vorlesungsressourcen herunterladen . Diese GeoJSON-Methode erhält also ein Datenattribut , das dem Dateiobjekt der JSON-Daten entspricht dem Dateiobjekt der JSON-Daten Grundsätzlich müssen Sie ein Python-Dateiobjekt erstellen , das Sie mit open erstellen können. Denken Sie daran, dass Open eine klassische Python-Methode zum Erstellen von Dateiobjekten ist. Da geht der Pfad über die Datei. Dies befindet sich zufällig im selben Verzeichnis wie mein Map One Dot Py-Skript. Ich bin gerade dabei, World JCO zu bestehen. Ich öffne es im Grunde im Lesemodus. Ich lasse es vorerst so, speichern, ausführen. Ich denke, wir werden hier eine Fehlermeldung bekommen. Ja, wir müssen dort einen Kodierungsparameter hinzufügen , wie in der Fehlermeldung vorgeschlagen. Das gehört zur offenen Methode. Entspricht UTF acht SIG. Sag noch einmal, geh und führe Load aus, und wir haben die Polygone auf der Karte angezeigt Das war ziemlich einfach zu machen. Sie sollten wissen, dass Sie auch Punkte über GeoJSO hinzufügen können Punkte über GeoJSO hinzufügen In diesem Fall fügen wir Polygone hinzu, aber diese JSON-Datei könnte auch Linien oder Punkte in ihren Attributen enthalten In diesem Fall hatten wir also ein Attribut, das besagte, dass mehrere Polygone handelt, aber das könnten Punkte oder Linien sein In diesem Fall zeigt Volume diese Merkmale in Abhängigkeit von diesem Typattribut hier an Natürlich hätten Sie auch das Koordinatenattribut mit den Koordinaten der Linie. Die Punkte, an denen die Linie unterbrochen und abgebogen wird, bei Punkten hätten Sie hier Koordinatenpaare. Ich hoffe, du verstehst die Idee. Es ging um diesen Vortrag. In der nächsten Vorlesung zeige ich Ihnen, wie Sie eine Choropleth-Karte erstellen. Dabei handelt es sich um eine Karte , bei der Flächen farbig dargestellt werden , um Merkmale darzustellen In diesem speziellen Fall werden wir diese Polygone mit unterschiedlichen Farben verwenden, um die Weltbevölkerung für welches werden wir diese Polygone mit Land darzustellen die Weltbevölkerung werden wir in der nächsten Vorlesung tun. Wir sehen uns. 98. 97. Python & JSON: Die Bevölkerungsschicht stilisieren: Hallo, nochmal. In diesem Vortrag zeige ich Ihnen, wie Sie eine Landkarte eines Landes anhand der Bevölkerungszahl erstellen. Wir werden die Bevölkerung jedes Landes in abgestuften Farben anzeigen. Wir werden uns also eine Reihe von Farben überlegen , um die Bevölkerungszahl von niedrig bis hoch darzustellen. Wir haben diese Information in unserer W-Punkt-JSON-Datei, die in diesem Pop-2005-Attribut gespeichert ist. Pop 2005 bedeutet Bevölkerungszahl von 2005, was ziemlich alt ist, aber für Bildungszwecke sollte das kein Problem sein. Kommen wir also zurück zum Code und der Art und Weise , wie man die Farbe dieser Polygone ändert, denn standardmäßig haben wir diese grüne Es gibt auch Transparenz auf den Polygonen. Sie können die Basiskarte im Hintergrund sehen. Um das zu ändern, müssen Sie auf Argument der Stilfunktion zugreifen. Aber ich habe hier etwas aus der vorherigen Vorlesung durcheinander gebracht , was später zu Problemen führen könnte Das muss nicht in einer runden Klammer stehen, also lösche auch die hier Wir haben also eine, zwei, drei offene Klammern und drei schließende Klammern. Jetzt sollte es in Ordnung sein. Wir müssen GeoJSON ein weiteres Argument hinzufügen Dies ist das erste Argument. Data ist das erste Argument , das hier endet. Fügen Sie dort ein weiteres Funktionsargument im Stil hinzu, und Sie können hier tatsächlich die Zeile umbrechen. Es steht Ihnen in Python frei, Zeilen zu unterbrechen, wenn der Ausdruck in eckigen Klammern, eckigen oder geschweiften Klammern steht oder geschweiften Klammern In diesem Fall steht dieser Ausdruck in Klammern, sodass wir ihn umbrechen können , und es ist gut, ihn am Komma zu unterbrechen Stilfunktion entspricht, jetzt erwartet dies eine Lambda-Funktion Lambda-Funktionen sind genau wie Funktionen, normale Funktionen, aber sie sind in einzelnen Codezeilen geschrieben Nehmen wir zum Beispiel an, L entspricht Lambda. Dies ist eine Lambda-Funktion X in einer Zweierpotenz. Oh, tut mir leid, ich hatte da einen Tippfehler, nicht und Bub, sondern Lamb A ist hier eine Funktion, genau wie eine normale Funktion, und dann können Sie L aufrufen. Sie können einen Wert wie Fünf übergeben und das ergibt fünf als Zweierpotenz Wie Sie sehen, können Sie die Funktion in einer einzigen Zeile schreiben . Dies kann auch in anderen Fällen wie diesem hier nützlich sein , die Sie gleich sehen werden. Lambda X. Damit können Sie auch anonyme Funktionen schreiben Diese Funktion hat keinen Namen. Wie hier habe ich dieser Funktion einen Namen zugewiesen , weil ich sie später aufrufen musste. Aber diese hier müssen wir nicht später aufrufen, sodass Sie keinen Namen angeben müssen. Hier wäre die Syntax korrekt, wenn ich das einfach so machen würde. Lass uns weitermachen und das machen. Füllen Sie die Farbe mit einem Großbuchstaben C, einem Kleinbuchstaben F und einem Großbuchstaben. Das sollte in Sagen wir, gelb. Wenn du willst, kannst du es so lassen. Speichern Sie das Skript. Beenden Sie die Python-Shell und führen Sie das Skript aus. Die Ausführung verlief einwandfrei. Lassen Sie mich die Karte überprüfen, neu laden und Sie werden sehen, dass die Farben der Polygone gelb werden . So können Sie die Attribute Ihrer JSON-Datei ändern Attribute Ihrer JSON-Datei heißt, Sie fügen im Grunde dieses Attribut hinzu, das nicht in der JSON-Datei enthalten ist , wenn Sie danach suchen. Du wirst unter nichts finden. Jetzt können Sie damit herumspielen, indem Sie diesem Wörterbuch Bedingungen hinzufügen, wie zum Beispiel I X Properties Pop 2005 ist weniger als, sagen wir, 10 Millionen, zehn, eins, zwei, drei, eins, zwei, drei, eins, zwei, drei Damit meine ich, dass Gelb auf die fünfte Farbe gesetzt wird, wenn X das angrenzende Merkmal darstellt. Wenn die Eigenschaften tatsächlich das Pop 2005-Attribut dieses Attributs dieses Attributs sind, das hier ist, dann dieses Attributs dieses Attributs sind, das hier ist, ist das Pop 2005. Ich weiß, das ist ein bisschen kompliziert. Lassen Sie mich einen Software-Wrap machen. Jetzt habe ich alle Textumbrüche hier in der Ansicht und hier ist Pop 2005 tatsächlich Teil dieses Wörterbuches bis hierher. Dieses Wörterbuch, das sind eine Reihe von Eigenschaften. Dieses Wörterbuch ist der Wert dieses Schlüssels oder des Eigenschaftenschlüssels. Das bedeutet, dass wir mit dieser Syntax, die in Python bekannt ist, auf den Wert des Propellerschemas zugreifen mit dieser Syntax, die in Python bekannt ist, auf den Wert des Propellerschemas in Python bekannt ist, auf den Wert des Propellerschemas In der Zwischenzeit stehen X-Eigenschaften, was hier X ist, für Merkmale Sie greifen also von Funktionen aus auf Eigenschaften zu. Im Hintergrund ist das ein bisschen wie eine Blackbox, aber Volumen, was Volumen bewirkt, ist, dass es alle Merkmale aller Polygone durchsucht und prüft, ob der Wert von Pop 2005 weniger als 10 Millionen ist, und wenn ja, dann wird es diese Farbe als Füllfarbattribut festlegen Das ist mehr oder weniger alles. Ich denke, es ist besser , das grün zu setzen. Wenn es weniger als 10 Millionen sind, setzen Sie es grün, sonst orange. Wenn zwischen 10 Millionen, mach hier dasselbe. Eigenschaften, eigentlich kannst du den Code hier knacken. Also, Properties Pop 2005 lass uns hier 20 Millionen angeben. Das sind nur willkürliche Zahlen. Sie können alles angeben , was Sie wollen, aber das wirkt sich darauf aus, wie Ihre Polygone klassifiziert und gefärbt werden Für eine Bevölkerung von 10000000-20 Millionen erhalten wir orange Farben Sonst rot. Alles über zehn wird rot gefärbt. Speichern Sie das und ich hoffe, das wird funktionieren. Keine Fehler. Erneut laden Wir haben die USA rot eingefärbt, weil dort mehr als 20 Millionen Menschen leben Es scheint gut zu funktionieren Ja, Portugal Portugal hat eine Bevölkerung von etwa 12 oder 15 Millionen Menschen. Ich bin mir nicht sicher. Es liegt im mittleren Bereich unseres Klassifizierungsalgorithmus. Ah, das ist mehr oder weniger alles, und wenn du willst, kannst du Fragen stellen. Ich helfe dir gerne und spreche später mit dir. Danke. 99. 98. Python & JSON: Hinzufügen eines Ebenen-Bedienfelds +: Hallo, und willkommen nochmal zu einem weiteren Vortrag über Web-Mapping mit Python und Volume. Dies ist die Karte, für die wir das erstellt haben , und sie enthält eine Basisebene, eine Polygonebene und eine Markierungsebene. Das ist unser Code. Nun, was ich in dieser Vorlesung tun möchte, ist, eine Funktion zu implementieren, mit der ich die benutzerdefinierten Ebenen ein- und ausschalten kann. Mit benutzerdefinierten Ebenen meine ich die Polygonebene und die Markerebene, weil es auszuschalten zumindest soweit ich weiß, nicht möglich ist, die Basiskarte Es wäre nicht sinnvoll, die Basisebene auszuschalten. Du willst keine leere Seite. Schauen wir uns also an, wie das geht. Das Hauptmerkmal hier ist Layer-Control-Klasse des Lautstärkemoduls, die auf diese Weise hinzugefügt werden kann. Sie möchten auf das Kartenobjekt zeigen , dem Sie ein Kind hinzufügen möchten. Die Ebenensteuerung wird als untergeordnetes Objekt hinzugefügt. Steuerung der Lautstärkeebene. Nun, das wird nicht funktionieren. Aber ich möchte das trotzdem ausführen , damit Sie diesen Fehler später nicht machen. Lass mich die Seite neu laden. Sie sehen hier nur die Basiskarte, überhaupt keine Ebenen Der Grund, warum das nicht funktioniert , ist , dass Sie, als Sie der Karte die Ebenensteuerung hinzugefügt haben, noch immer nicht die Feature-Gruppe hinzugefügt haben. Dabei handelt es sich um haben, noch immer nicht die Feature-Gruppe hinzugefügt haben ein Objekt, das die Jason-Ebene und die Markerebene enthält. der Layerkontrolle suchen wir also nach der Feature-Gruppe, die der Karte hinzugefügt wurde, aber sie wird zu diesem Zeitpunkt nicht gefunden. Daher sind die Dinge durcheinander. Es ist wichtig , das Angebot, dass Sie den Feature-Gruppen-Layer zur Karte hinzugefügt haben, hier zu platzieren den Feature-Gruppen-Layer zur Karte hinzugefügt haben, hier zu Führen Sie es erneut aus. Laden Sie die Karte neu und Sie sehen die Ebenen dort und Sie werden dieses Feld hier sehen Kartenfeld hell. Es geht um die Basiskarte und Sie können sie nicht ausschalten. Sie haben auch das Element Meine Karte hier im Ebenensteuerungsfeld. Dies ist das Ebenenkontrollfeld und Sie können diese Ebene ein- und ausschalten. Aber wie Sie sehen, werden dadurch sowohl die Polygon- als auch die Punktebene gleichzeitig aus- und eingeschaltet , was Sie nicht möchten Wir machen weiter und ändern das. Ich werde erklären, warum das passiert. Das passiert, weil die Ebenenkontrolle funktioniert, sie sucht nach Objekten, die der Karte mit einem Kind wie hier hinzugefügt wurden. Sie haben ein Kind hinzugefügt und Sie haben dem Kartenobjekt nur ein Kind hinzugefügt. Daher betrachtet die Ebenenkontrolle dieses Objekt als ein einzelnes Element des Ebenensteuerungsfensters. Aber dieses Featuregruppen-Objekt enthält Kreismarkierungen, aber es enthält auch die GOJ-Summe Ebene. Daher müssen Sie hier Ihre Strategie ändern. Wie kannst du das machen? Es kann verschiedene Möglichkeiten geben. Eine Möglichkeit besteht darin, tatsächlich eine Feature-Gruppe für Vulkane zu erstellen Nennen wir es Fg V. Sie fügen hier GV hinzu und dann möchten Sie eine weitere Featured Group Lass mich diese Zeile kopieren und hier einfügen. Sie möchten eine weitere Feature-Gruppe für Population. Nennen wir das Population. Nennen wir das Vulkane so, ändern wir den Variablennamen FGP, FGP hier, FV da. Füge ein Alpachild hinzu, das FG P für die Population sein muss. Jetzt sieht alles gut aus. Mal sehen, ob Layer Control diese beiden Feature-Gruppen jetzt lesen kann. Geh und lade die Karte neu, das sieht gut aus. Vulkane funktionieren gut, die Bevölkerung auch. Alles funktioniert gut. Das ist eine Landkarte. Wenn du das so bauen könntest wie ich, dann gute Arbeit. Sie können sich auch dafür entscheiden, Feature-Gruppen tatsächlich nicht zu verwenden. Sie hätten GeoJSON direkt zur Karte hinzufügen können. In diesem Fall für Vulkane, in dem Sie die at-Child-Methode mehrmals ausführen, hätten Sie in diesem Fall jedoch dem Sie die at-Child-Methode mehrmals ausführen , eine Ebene für jeden Sie hätten Ihrem Kartenobjekt 62 Kinder hinzugefügt, wenn Sie hier eine Karte ohne Feature-Gruppe gemacht Das heißt, in diesem Bedienfeld hätten Sie 62 Einträge, 62 Ebenen, und das ist nicht das, was Sie wollen. Die Feature-Gruppe ist hier praktisch. Für Vulkane ist es notwendig. Aber für GeoJSON hättest du hier Map verwenden können und alles wäre Aus Konsistenzgründen ist es jedoch gut, beide zu bestimmten Feature-Gruppen hinzuzufügen beide zu bestimmten Feature-Gruppen Vulkane hier und Bevölkerung hier. Das ist also der Code, und ich hoffe, Ihnen hat dieses Programm gefallen und Sie können gerne Fragen stellen Ich werde später mit dir sprechen. Wir sehen uns. 100. 99. App 2: Englischer Thesaurus +: Hallo und willkommen zu diesem neuen Abschnitt des Kurses, und in diesem Abschnitt beginnt das eigentliche Angebot In diesem Abschnitt werden wir also die erste Anwendung des Kurses entwickeln . Bis jetzt hast du dich mit den Grundlagen von Python befasst. Sie lernen Funktionen, Schleifen, Bedingungen und den Umgang mit Dateien usw. Jetzt werden wir all diese Konzepte in die Praxis umsetzen indem wir echte Programme erstellen, die von Benutzern verwendet werden können, anstatt uns nur durch triviale Zeichenketten und Zahlen und so weiter zu schleifen Also, was werden wir in diesem Abschnitt bauen? Nun, Sie werden ein Programm erstellen , in das Sie ein Wort eingeben können, ein englisches Wort, und das Programm gibt die Definition dieses Wortes auf Englisch zurück . Lassen Sie mich also weitermachen und das Programm demonstrieren. Ich benutze Python drei. App Dot P ist ein Skript. Das Programm fordert Sie also auf, ein Wort einzugeben, für das Sie die Definition benötigen. Sagen wir zum Beispiel Mountain. Und so erhalten Sie die Definition für Berg. Und in diesem Fall gibt es zufällig zwei Definitionen. Bergberge sind also ein Merkmal der Erdoberfläche, das sich hoch über die Basis erhebt. A, Berg hat eine andere Bedeutung, nämlich eine große Menge von Dingen, die nicht auf einem Haufen liegen. Wie dem auch sei, es gibt Wörter, die nur eine Bedeutung haben , wie Mathematik. Ich hoffe, ja. Sie erhalten also nur eine Definition für Mathematik. Aber das Programm hat auch noch andere Funktionen, zum Beispiel wenn man AN mit doppeltem N, also mit einem zusätzlichen N setzt und Enter drückt. Das Programm stürzt nicht ab, sondern zeigt eine Meldung an Es sagt dir, Habe ich stattdessen geregnet. Es ist also ein ziemlich intelligentes Programm , das das Wort erraten kann, an das der Benutzer vielleicht gedacht hat, als er das Wort eingegeben Geben Sie also Y ein, wenn ja, wenn Sie Regen meinten, oder N, wenn nein Oh ja, ich meinte Regen, also warum? Und Sie haben die Definition für Regen, die zufällig zwei Definitionen hat. Das ist die erste und das ist die zweite. Das Programm wird sagen, wenn Sie ein sehr zufälliges Wort eingeben ein sehr zufälliges Wort , das keine solche Bedeutung hat, erhalten Sie die Meldung, dass das Wort nicht existiert. Bitte überprüfen Sie es noch einmal, da das Programm kein ähnliches Wort finden kann. Es kann zuerst kein Wort finden. Außerdem versucht es, ein ähnliches Wort wie dieses zu finden, aber das tut es nicht, weil ich nicht glaube es ein passendes Wort dafür gibt. Also druckt es diese Nachricht aus. Es gibt auch andere Dinge wie, weißt du, wenn du eine Mischung aus Buchstaben wie Großbuchstaben R und A hast, bekommst du dort immer noch die richtige Eingabe Das ist also ein Programm. Es hat eine Befehlszeilenschnittstelle, das heißt Sie geben die Eingabe über die Befehlszeile weiter und Sie erhalten die Eingabe erneut von der Befehlszeile. Später in den nächsten Abschnitten werde ich jedoch Ihre Webanwendungen erläutern und erläutern, wie Sie Webanwendungen mit Python erstellen. Dann kehren Sie hierher zurück und erstellen tatsächlich eine Webanwendung mit dem Code , den Sie in diesem Abschnitt lernen werden. Sie können dieses Programm also um eine Weboberfläche erweitern , um es benutzerfreundlicher zu gestalten . Die Benutzer können die Eingabe über ein Webformular eingeben, über eine Webseite klicken und dann eine Taste drücken und dann die Ausgabe auf der Webseite abrufen. Der Code, den Sie in diesem Abschnitt lernen werden, ist jedoch sehr wichtig. Es heißt Python. Sie werden also etwas über Bedingungen und Schleifen lernen. Sie werden also all das umsetzen, was Sie im vorherigen Abschnitt gelernt haben indem Sie dieses Programm entwickeln Ich hoffe, dir gefällt das und ich wünsche dir viel Erfolg. Wir sehen uns in der nächsten Vorlesung. 101. 100. Deinen Datensatz in Python verstehen +: Hey, hallo nochmal. Im vorherigen Video habe ich das Programm demonstriert, damit Sie wissen wie das Programm aussieht und welche Ausgabe das Programm generiert. Auch die Oberfläche des Programms, bei der es sich um eine Befehlszeilenschnittstelle handelt. Sie geben die Daten über die Schnittstelle ein, der Benutzer gibt die Daten über die Befehlszeilenschnittstelle ein und Sie erhalten die Ausgabe erneut über die Befehlszeile. Jetzt habe ich hier irgendwo einen Ordner angelegt und ihm einen Namen gegeben. Sie können ihm einen beliebigen Namen in diesem Ordner geben in diesem Ordner Ich werde alle Dateien dieses Projekts ablegen. Wir sprechen über Datendateien wie Data Dot JSON. Dies ist eine Datei, die ein Vokabular enthält , das das Programm extrahiert Wir werden nach einem Wort fragen und diese Datei enthält die Definition des Wortes. Und auch die Punkt-Pi-Dateien werden hier eingefügt. Wir kennen die Ausgabe, jetzt müssen wir herausfinden, wie wir zu dieser Ausgabe gelangen, und wir werden den Ansatz Schritt für Schritt verfolgen, was bedeutet, dass wir zuerst eine einfache Version des Programms entwickeln, dem Programm einfach ein Wort geben und das Programm gibt die Definition dieses Wortes zurück. Aber das wird sehr einfach sein, weil der Benutzer manchmal ein Wort weitergibt, das nicht existiert, und als Programmierer müssen Sie dieses Wort für dieses nicht existierende Wort zählen. Anstatt das Programm zu unterbrechen, zu unterbrechen und dem Benutzer einen Fehler anzuzeigen, müssen Sie dem Benutzer eine benutzerfreundlichere Nachricht zeigen benutzerfreundlichere Nachricht Das werde ich in den nächsten Videos machen. Aber das allererste, worüber wir nachdenken müssen, sind die Daten. Also habe ich im Internet recherchiert und diesen Datensatz mit Wörtern und Definitionen gefunden . Das sind jetzt etwa 5 Megabyte an Daten. In Atom dauert das Öffnen eine Weile, also habe ich darauf geklickt und warte immer noch darauf, dass es geöffnet wird. Jetzt öffnet es sich Wenn Ihr Atom einfriert, können Sie es mit einem leichteren Editor wie Notepad oder Nano auf dem Mac oder VIM öffnen einem leichteren Editor wie Notepad oder Nano auf dem Mac oder VIM Also wie dem auch sei, das ist eine Punkt-JSON-Datei. Was ist Jon JSON ist wie eine Sprache. Manche sagen, es ist keine Sprache, es ist nur eine Reihe von Regeln, wie man einige Daten formatiert. JSON folgt diesem Format. Es beginnt mit einer geschweiften Klammer, dann haben wir nur Schlüssel- und Wertepaare Das ist wie ein Python-Wörterbuch. Der Schlüssel ist durch den Wert durch eine Spalte getrennt. diesem speziellen Fall stehen unsere Werte in eckigen Klammern, was darauf hindeutet, dass Sie manchmal mehr als ein Element in den Klammern haben , zum Beispiel. Lassen Sie mich nach dem Wort Control F oder Command F suchen. Regen. Das wird uns hierher bringen. Lassen Sie mich zuerst zu View und Toogle Soft Wrap gehen. Dadurch wird der Text auf meinen Bildschirm passen Im Moment sehen Sie, dass Niederschlag außerhalb der Bildschirmverklebungen befindet. Das dauert auch eine Weile , weil wir hier ziemlich viele Daten haben. Jetzt sehen die Daten besser aus, also lassen Sie mich erneut nach Regen suchen und herausfinden, dass dies der Schlüsselbegriff für Regen ist , sagen wir, das Wort Regen und das ist die Definition von Regen. In diesem Fall haben wir zwei Definitionen, weil Sie für einige Wörter möglicherweise mehr als eine Bedeutung haben oder dass Sie mehr als eine Form haben. Das ist zum Beispiel Regen als Substantiv, es ist ein Niederschlag und das ist das Verb für Regen. Wenn es regnet, um aus den Wolken und Wassertropfen zu fallen. Es ist ein Verb und ein Substantiv und sie sind durch ein Komma getrennt. Das ist also wie ein Python-Wörterbuch. Jetzt müssen wir herausfinden, wie diese Daten in Python geladen werden. Denn um auf Daten aus dieser Datei zuzugreifen, müssen Sie sie zuerst als einen bestimmten Python-Datentyp in Python laden als einen bestimmten Python-Datentyp in Python und dann auf Daten aus diesem Datentyp zugreifen Denken Sie einen Moment darüber nach, welcher Python-Datentyp für diese JSON-Datei besser geeignet wäre . Denken Sie darüber nach und ich werde genau das in der nächsten Vorlesung zeigen . Wir sehen uns dort. 102. 101. JSON-Daten in Python laden: Ich glaube, es war ziemlich einfach zu erkennen, dass der beste Weg, diese Daten in Python zu laden , ein Python-Wörterbuch ist. Das sieht genauso aus wie ein Python-Wörterbuch und sobald Sie es in ein Python-Wörterbuch laden, ist es sehr einfach, auf einen Wert für einen Schlüssel zuzugreifen. Wie laden wir das also in ein Python-Wörterbuch? Nun, lassen Sie mich hier eine Befehlsshell öffnen. Im Moment werde ich nur etwas Schnelles in einer interaktiven Python-Shell demonstrieren . Aber zuerst müssen Sie möglicherweise diese JSON-Datei schließen , da dies Atom verlangsamt. Sag nicht die Änderungen Ich habe sowieso keine Änderung vorgenommen. Python drei, das wird mein Python 3.6 0.1 öffnen. Aber selbst wenn Sie Python 2 haben, funktioniert dieses Programm genauso. Wie laden wir also JSON in ein Python-Wörterbuch? Nun, dafür müssen wir die JSON-Standardbibliothek verwenden. Bei einer Standardbibliothek bedeutet dies, dass Sie JSON nicht installieren müssen. Sie müssen es nur importieren. Sobald Sie das getan haben, gibt es dort eine nette JSON-Dot-Load-Methode. Diese Lademethode, die erwartet tatsächlich, ich kann sie so zeigen, Hilfe JSON dot Load. Damit wird dieses Argument hier angezeigt, das ist ein dateiähnliches Objekt, das ein JSON-Dokument enthält. Wir sprechen von einem Dateiobjekt in Python, und wir müssen die Datei erstellen. Der Weg, das zu tun, ist einfach. JSON nochmal laden. Wir erstellen ein Dateiobjekt mit der Methode open. Das weißt du schon. Dann übergibst du den Pfad zur Datei. Da mein Terminal hier auf diesen Ordner verweist, muss ich nur noch einen Dateinamen übergeben. Ich muss dort keinen vollständigen Pfad angeben. Auf diese Weise können Sie entweder die R-Methode übergeben, die für Lesemodus steht, oder Sie können sie einfach so belassen und der Lesemodus ist standardmäßig. Achten Sie darauf, die Klammern zweimal zu schließen. Wir haben hier zwei öffnende Klammern, zwei schließende Klammern hier, das ist alles. Was sind nun Daten? Daten sind ein Wörterbuch. Es ist ein Python-Wörterbuch und du kannst es ausdrucken. Ja, es sind ziemlich viele Daten. Das hat eine Weile gedauert, aber normalerweise müssen Sie nicht das gesamte Wörterbuch ausdrucken. Sie könnten überprüfen, ob Sie auf ein Wort oder einen Schlüssel aus dem Wörterbuch zugreifen können. Nehmen wir an, das Schlüsselwort, Sie müssen Klammern, Entschuldigung, Anführungszeichen für den Schlüssel verwenden . Das ist, was Sie bekommen, legen den Wert für das Wort für die Schlüsselanordnung fest. Nun, da Sie mehr oder weniger wissen, wie das funktioniert, versuchen Sie, eine Funktion zu entwickeln, die als Eingabe einen Schlüssel erhält und dann den Wert für diesen bestimmten Schlüssel zurückgibt, und versuchen Sie auch, das Laden von Adjacon Fall einzubeziehen das Laden von Adjacon Fall und auch die Ausgabe auszudrucken Wenn Sie damit Probleme haben, zeige ich Ihnen im nächsten Video, wie wir das machen. Wir sehen uns dort. 103. 102. Die App zur Definition eines Wortes zurückgeben: Ich hoffe, du hast herausgefunden, wie man eine Funktion erstellt , die einen Schlüssel, ein Wort abruft und die Definition dieses Wortes zurückgibt. Lassen Sie mich das Programm schnell erstellen. Lassen Sie mich diese App One Point in Pot Jason nennen. Daten, z. B. siehe JSON, laden, Daten öffnen, Punkt JS. Das ist es. Definiere die Funktion. Übersetzen, lass mich das übersetzen nennen. Word, und alles was Sie tun müssen, ist das Datenwort zurückzugeben. Das ist es. Dann können Sie entweder, sagen wir, entweder so etwas wie Word Eagle to Arraign machen oder Sie können dies dynamisch tun , indem Sie den Benutzer um Eingabe bitten Ein Wort wie dieses drucken, ein Leerzeichen lassen und dann müssen Sie nur die Ausgabe des Wörterbuchs ausdrucken Da Sie dieses Wörterbuch bis jetzt kennen, es nur eine Zeichenfolge zurück, gibt es nur eine Zeichenfolge zurück, aber Sie drucken keine Ausgabe. Wenn Sie diese Ausgabe in der Befehlszeile anzeigen möchten, müssen Sie Translate Word ausdrucken. Das ist es. Lassen Sie sich jetzt nicht mit diesen Variablennamen verwechseln. Dies ist eine globale Variable und dies ist auch eine globale Variable. Wir definieren hier eine Variable und übergeben sie hier. Dann geht das, was auch immer hier übergeben wird , zu diesem hier. Das könnte ein anderes Wort sein, ein anderer Variablenname. Sagen wir W W. Das ist eine lokale Variable. Sie hat innerhalb der Funktion eine Bedeutung und kann alles sein. Wenn du hier W übergibst, muss es auch hier W sein. Dadurch wird dieser Wert an diesen Wert hier übergeben. Normalerweise ziehen es Programmierer vor, hier und da denselben Namen einzugeben Aber für dich als Anfänger wollte ich dir diesen Unterschied zeigen , dass das hier nicht dasselbe sein muss Speichere das Script, öffne vielleicht ein anderes Terminal. Python Three App Punkt Pi, Ausführen, Geben Sie ein Wort ein, Rig, und das ist die Ausgabe. Wie wäre es mit diesen Worten? Wir haben da einen schlimmen Fehler. Aber das willst du dem Benutzer nicht zeigen, weil es nicht sehr lesbar ist. Verfolge den letzten Anruf als letztes Wie zählen wir dieses Szenario in unserem Code? Das musst du herausfinden. Denk drüber nach. Auch in der nächsten Lektion werden wir genau das tun, also müssen wir berücksichtigen , dass das Wort, das der Benutzer weitergibt, möglicherweise nicht im Schlüsselsatz des Wörterbuchs enthalten ist. Regen war ein Datenschlüssel im Jason-Wörterbuch, dieser Name jedoch nicht, also müssen wir damit rechnen. Das werde ich dir in der nächsten Vorlesung zeigen. Wir sehen uns. 104. 103.So geht die App mit nicht vorhandenen Wörtern um: Ordnung, lassen Sie uns weitermachen und dieses Programm benutzerfreundlicher Anstatt diesen Fehlerblock anzuzeigen, werden wir eine Meldung anzeigen, die besagt, dass das Wort nicht existiert Bitte überprüfe es noch einmal oder so. Der Weg, das zu tun, ist, lassen Sie mich zur interaktiven Python-Shell gehen . Sie können so etwas wie diesen Regen in den Daten überprüfen und Sie erhalten zwei. Wenn Sie das in Daten tun, erhalten Sie Falschmeldungen. Wir müssen das nutzen und sagen, wenn Wort in Daten ist, muss das W sein. Wir sprechen über diese Variable, also wenn es sich um Daten handelt, also wenn es sich um Daten handelt, möchten Sie den Wert zurückgeben. Das ist der Wert, und wenn true zurückgibt, wird er ausgeführt, s, gib zurück, dass das Wort nicht existiert, überprüfe es bitte noch einmal. Wenn dieser Wert falsch ist, wird else ausgeführt. Tatsächlich wird der Ausdruck unter else ausgeführt, und dieser wird nicht ausgeführt. Wie Sie sehen, ist das durchaus lesbar, sehr humorvoll. Das ist eigentlich eine gute der großartigen Funktionen von Python. Ich kann das jetzt speichern und hier das Programm ausführen. Regen würde wie zuvor funktionieren. Und das besagt, dass das Wort nicht existiert Bitte überprüfe es noch einmal. So einfach ist das. Das Programm nimmt Gestalt an. Sie müssen jedoch weitere Tests durchführen, um nach unterschiedlichen Eingaben zu suchen , um alle möglichen Eingaben zu berücksichtigen alle möglichen Eingaben zu berücksichtigen , die der Benutzer möglicherweise dort eingibt. Nehmen wir an, der Benutzer schreibt Regen in Großbuchstaben und das bedeutet , dass das Wort nicht existiert Aber tatsächlich ist Regen das Wort, das in Ihrem Datensatz existiert Und wie zählen wir nach verschiedenen Großbuchstaben? Möglicherweise haben Sie auch eine solche Buchstabenmischung , und es heißt immer noch, dass das Wort nicht existiert oder dass es sogar so regnet Das Wort existiert nicht. Denk nochmal darüber nach und in der nächsten Vorlesung werde ich das umsetzen, was sehr einfach ist. Wir sehen uns dort. 105. 104. So geht die App mit Wörtern mit Groß- und Kleinschreibung um: Großartig. Wir haben jetzt dieses Programm, das einen Wert aus einem Wort zurückgibt, das wir eingegeben haben. Ich begründe die Definition dieses Wortes. Es gilt auch für nicht existierende Wörter in unserem Datensatz, nämlich Data Dot JS. Um die verschiedenen Groß- und Kleinschreibung von Buchstaben zu zählen , die wir möglicherweise eingeben, schauen Sie das liebe STR an das Ihnen die Methoden zeigt, die Sie auf eine Zeichenfolge anwenden können. Hier gibt es eine niedrigere Methode. Das bedeutet, wenn man dort Regen hineinlässt, ist es so, dass die Methode mit Klammern angewendet werden sollte. In der unteren Version des Buchstabens bekommst du Regen. Da unsere Daten in unserem Datenpunkt JS in der Datei alle in Kleinbuchstaben geschrieben sind , Sie sobald Sie die Eingabe hier, die Zeichenfolge, erhalten, können Sie, sobald Sie die Eingabe hier, die Zeichenfolge, erhalten, sie in Kleinbuchstaben umwandeln und dann diese Version an den Wörterbuchachsenausdruck hier übergeben diese Version an den Wörterbuchachsenausdruck Das wäre so etwas wie, weißt du, W entspricht einem Punkt niedriger Wir aktualisieren hier den W-Wert, die Zeichenfolge, die der Benutzer eingibt, und dann wird das W hier als Kleinbuchstabe übergeben , so einfach ist Lassen Sie mich einen kurzen Test machen. Regen und du bekommst die richtige Definition von Regen. Lassen Sie uns über weitere mögliche Werte nachdenken , die der Benutzer eingeben könnte. Lassen Sie mich die Befehlszeile löschen, damit Sie besser sehen. Lass mich das Programm nochmal aufrufen. Das Wetter funktioniert gut. Aber wie wäre es, wenn der Benutzer, anstatt Regen zu gießen, ein Extra eingibt. Das Programm sagt, dass das Wort nicht existiert, was wahr ist. Aber als Programmierer möchten Sie Ihr Programm so intelligenter wie möglich machen so intelligenter wie möglich In diesem Fall sollten Sie erwägen, nach Zeichenketten zu suchen , die der Benutzereingabe ähneln In müssen Sie überprüfen, ob es eine Zeichenfolge gibt , die diesem Wort ähnlich ist. Anstatt zu sagen, dass das Wort nicht existiert, möchten Sie dem Nutzer vorschlagen , dass Sie dieses Wort vielleicht gemeint haben, ähnlich wie bei einer Suche bei Google. Das ist ein bisschen komplex, aber nicht so viel. Wie du das umsetzt, zeige ich dir in der nächsten Vorlesung Schritt für Schritt. Also da. 106. 105. Die Ähnlichkeit zwischen Wörtern berechnen: Gut. Wie ich bereits im vorherigen Video erwähnt habe, müssen wir jetzt berücksichtigen , wenn der Benutzer etwas falsch eingibt Stattdessen geben sie dort ein Extra oder so etwas In diesem Fall möchten Sie den Benutzer darüber informieren, dass er dort etwas falsch eingegeben hat. Wie machen wir das? Nun, wenn Sie keine Ahnung haben, wie das geht, ist es am besten, einige Nachforschungen bei Google anzustellen , da die Welt der Programmierung sehr breit ist und Sie nicht unbedingt jede mögliche Problemumgehung oder Lösung kennen müssen, um etwas zu tun Im Grunde müssen wir einen Algorithmus finden , um, sagen wir, das Arraign mit N und das eigentliche Wort Arraign mit einem N zu vergleichen sagen wir, das Arraign mit , das Ende und zu sagen, ob diese beiden sind, entscheiden, ob sie sich ähneln oder nicht, aber Sie müssen das Rad nicht neu erfinden, wenn es schon jemand anderes getan hat. Deshalb müssen Sie im Internet recherchieren und sehen, ob das etwas ist , ob es dort eine Bibliothek gibt oder jemand einen Quellcode, der das tut, eine Funktion oder etwas Ähnliches. Aber normalerweise findet man dafür oft eine Bibliothek. Wenn Sie etwas recherchieren, stellen Sie fest, dass Sie das mit ein paar Bibliotheken tun können, und eine davon ist eine Standardbibliothek und sie heißt D Flip. finden Sie übrigens dieser Seite finden Sie übrigens eine Liste der Python-Standardbibliotheken. Indexpunkt der Python.org-Bibliothek mit HTML-Code. Das ist der Link. Hier sind alle Standardbibliotheken , die Sie in Python importieren können. Lass mich hierher gehen und Dilip importieren. Dies ist eine Bibliothek zum Vergleichen von Text. Eine der Methoden ist Sequence Matcher. Es ist ein langer Name, also können Sie von lip aus sagen: Import Sequence Matcher Was es macht, ist Sequence Matcher. Sie müssen dort keine bestehen. None ist der Wert für das Argument ist Junk. Das erste Argument ist ein Argument namens Junk Wenn Sie also zwei Textblöcke vergleichen, vergleichen wir in diesem Fall nur Wörter Wenn Sie zwei Textblöcke vergleichen und dort etwas Junk haben, Sie haben Bruchlinien und Leerzeichen, dann müssen Sie hier eine Funktion übergeben , die diese Zeilen ignoriert Dieses Szenario haben wir vorerst nicht , also lassen Sie es uns einfach halten Für dieses Argument gehen wir weiter. Dann übergeben Sie die beiden Zeichenketten, Sie möchten das Wort Regen mit doppeltem N mit dem eigentlichen Wort Regen vergleichen dem eigentlichen Wort Regen und das wird ein Sequenz-Matcher-Objekt zurückgeben, was nicht interessant ist, also müssen Sie die Ratio-Methode darauf anwenden , um das tatsächliche Verhältnis zu erhalten Dies deutet auf eine Ähnlichkeit zwischen diesen beiden Zeichenketten auf einer Skala von 0 bis 1 Sie sagen, dass diese ziemlich ähnlich sind. Jetzt geht es darum die Ähnlichkeit zwischen zwei Zeichenketten zu ermitteln, aber was wir stattdessen brauchen, ist im Grunde eine Liste, eine Abfolge von Zeichenketten. Wir haben diese Wörterbuchschlüssel. Wir haben ein Wörterbuch mit vielen Schlüsseln und der Benutzer übergibt ein Wort, sagen wir Wut mit N, und Sie müssen dieses Wort mit all den Schlüsseln des Wörterbuchs vergleichen, weil Sie RN mit N nicht mit einem N in Ihrem Programm vergleichen können, weil Sie nicht wissen , ob das dem tatsächlich ähnlich ist. Ist sozusagen das umgekehrte Problem. Aber Diflip hat dafür noch ein anderes Feature und das nennt man enge Matches Sie müssen das aus DLPGClose-Matches importieren. Aber ich werde diese Funktion in der nächsten Vorlesung nutzen. Wir sehen uns dort. 107. 106. Aus einer Liste von Wörtern die besten Treffer finden: Also haben wir uns die Sequence Matcher-Klasse angesehen , die die Verhältnismethode dieser Klasse zurückgibt Sie gibt diese Zahl zurück, aber jetzt müssen wir sehen, wie man das ähnlichste Wort aus einer Liste oder aus den Schlüsseln eines Wörterbuchs herausbekommt Konzentrieren wir uns zunächst auf die Reihenfolge. Eine Liste ist eine Sequenz, und anhand der Philip-Eingabe erhalten Sie ähnliche Treffer. Wenn Sie jetzt helfen, suchen Sie nach engen Übereinstimmungen. Sie können die Argumente sehen, die Sie an diese Methode übergeben können . Das erste ist das Wort. Das wird das Wort sein , das der Benutzer weitergibt, und dann haben Sie eine Reihe von Möglichkeiten. Wort ist eine Sequenz, für die möglichst genaue Übereinstimmungen gewünscht werden, typischerweise eine Zeichenfolge. In der Regel handelt es sich dabei um eine Zeichenfolge, die Sie vergleichen möchten. Possibilities ist eine Liste von Sequenzen oder eine Liste von Zeichenketten, man könnte sagen, normalerweise ist es eine Liste von Zeichenketten. Dann ist N gleich drei. Dadurch wird die Anzahl der Treffer definiert , die die Methode Get Close Matches zurückgeben soll Nehmen wir an, Sie übergeben eine Liste von Möglichkeiten mit sechs Einträgen und jedes Element hat das Verhältnis 1-0 0-1 und diese Methode gibt die drei ähnlichsten Treffer zurück, also die Zeichenketten, die dem hier übergebenen Wort am ähnlichsten Sie können diesen Argumentwert ändern, wenn Sie möchten, und Sie haben einen Grenzwert Das ist hier das Verhältnis. Standardmäßig werden nur die Elemente zurückgegeben, die ein Verhältnis von mindestens 0,6 oder mehr haben Unter diesem Wert werden die Treffer nicht berücksichtigt. Frage an die Hilfe und lass mich versuchen, enge Matches zu finden. Mal sehen, was wir bekommen. Sagen wir Regen, dann haben Sie natürlich eine Liste in eckigen Klammern. Sagen wir, hilf Pyramiden und Regen. Ich lasse das N und den Cutoff so, wie sie standardmäßig sind. In diesem Fall regnet es also. Der Grund, warum es regnet , ist, dass Regen einen Grenzwert von mehr als 0,6 oder ähnlichem hatte dass Regen einen Grenzwert von mehr als 0,6 oder ähnlichem Wenn Sie sich für den Grenzwert interessieren, können Sie einen Sequenzabgleich verwenden, aber der spezifische Wert interessiert uns nicht Und so war Rain der einzige , der diese Bedingungen erfüllte Regen bekommen wir hier als Liste. Wir sind in der Lage, die engste Übereinstimmung aus einer Liste herauszuholen, aber wie holen wir die Nahübereinstimmung aus unseren Wörterbuchschlüsseln heraus? Nun, wir haben hier immer noch eine Datenvariable, die ich zuvor hier in dieser Sitzung geladen Ich lade sie aus der JSON-Datei. Also mit Datenpunktschlüsseln. Es gibt eine Methode für Wörterbücher, die Schlüssel genannt wird, und damit können Sie eine Liste aller Schlüssel des Wörterbuchs abrufen aller Schlüssel des Wir sprechen nur über die Schlüssel und alle Werte der Dies sind die Wörter und jedem von ihnen ist ein Wert zugeordnet. Im Grunde können Sie die Art des Datenpunkt-Kusses überprüfen, nur um zu sehen, um was es sich handelt. Es ist wie ein ausgegrabenes Kuss-Objekt, aber es verhält sich wie eine Liste Alles, was Sie dann tun könnten, ist die G-Matches-Methoden anzuwenden Übergeben Sie den Regen dort an den Datenpunkt Kuss. Mal sehen, was wir bekommen. Wir haben drei Spiele. Er hat Regen. Zug und Regen Wenn du ein Ende von fünf erreichst, bekommst du dort mehr Treffer Es ist jedoch wichtig zu beachten , dass die Liste hier geordnet ist. Das allererste Wort ist das mit einem höheren Ähnlichkeitsverhältnis Wir sind nur an diesem ersten Wort interessiert. Wie bekommt man das? Nun, Sie werden diese Zahl ignorieren, weil Sie nur das erste Wort wollen und Sie dort Null übergeben können, weil das eine Liste ist und der erste Eintrag einen Index von Null hat, also bekommen Sie Regen um Regen, wenn das falsch getippte Wort Im Grunde haben wir jetzt die Engine, um das ähnlichste Wort aus der Sequenz herauszuholen, und alles, was wir tun müssen, ist, diese Funktionalität hier in unserer Funktion zu implementieren Zunächst möchte ich den Benutzer nur durch eine Nachricht darüber informieren, dass er ein falsches Wort eingegeben hat. Ich möchte den Benutzer nur darüber informieren, damit er das Programm erneut ausführen kann. Beim nächsten Mal geben sie vorerst ein neues Wort ein, aber später machen wir etwas Intelligenteres. Denken Sie also vorerst einfach darüber nach und geben Sie eine Nachricht heraus, in der Sie Ihren Vorschlag mit dem richtigen Wort erwähnen Ihren Vorschlag mit dem richtigen Wort , das der Benutzer möglicherweise im Sinn hatte. Lass uns das in der nächsten Vorlesung machen. Wir sehen uns. 108. 107. Aus einer Gruppe von Wörtern das ähnlichste Wort finden: Großartig. Das Programm läuft gut. Ich hoffe, dir gefällt das. Es ist kein großes Programm , also haben wir hier nicht viel Code. jedoch Dies implementiert jedoch eine ganze Reihe von Aspekten von Python. Wir laden Daten in Python in einen Python-Datentyp, und wir haben Funktionen, wir haben hier Bedingungen, wir haben Benutzereingaben und später werden wir auch vier Schleifen in diesem Code implementieren Wir werden später darüber sprechen, warum wir vier Schleifen benötigen. Wir haben Bibliotheken, wir importieren Bibliotheken. Das ist Jason. Wir müssen auch die Diflp-Bibliothek importieren. Woran wir gerade arbeiten. Konzentrieren wir uns vorerst auf den Flip. Und das Wort, das wir haben, ist, dass wir diese Zeichenfolge doppelt übergeben diese Zeichenfolge doppelt und hier haben wir eine Reihe von Vorschlägen. Die besten Treffer des Wortes in den Schlüsseln unseres Wörterbuches. Der Benutzer kann aber auch ein Wort übergeben , das überhaupt nicht existiert und für das es keine ähnlichen Treffer gibt. Im Grunde haben Sie drei Szenarien. Der Benutzer gibt das genaue Wort wie Regen ein und Sie geben sofort Daten mit diesem bestimmten Schlüssel zurück . Das ist das erste Szenario. Im zweiten Szenario gibt der Benutzer ein Wort ein, das einem der Wörter in Ihrem Wörterbuch sehr ähnlich ist , z. B. Regen mit einem zusätzlichen N. In diesem Fall möchten Sie das erste Element der Liste zurückgeben, das die Get-Close-Treffer generiert. Das erste Szenario ist, wenn Sie eine leere Liste erhalten, was bedeutet, dass es in Ihrer Liste kein solches Wort gibt , das dem ähnlichen Wort ähnelt. Wir haben drei Szenarien, was bedeutet, dass wir hier drei Bedingungen im Bedingungsblock anwenden müssen hier drei Bedingungen im Bedingungsblock anwenden Im Moment haben wir nur zwei. Wir brauchen noch eine, die besagt, meinten Sie dieses Wort, überprüfen Sie es bitte noch einmal. Vorerst werden wir nur eine Nachricht weiterleiten und auch etwas notieren. Möglicherweise möchten Sie dort auch einen höheren Grenzwert wie 0,8 übergeben dort auch einen höheren Grenzwert wie 0,8 Denn manchmal, wenn das ein niedriger Wert von 0,5 ist und du ein zufälliges Wort übergibst, schlägt dir das ein paar Wörter , die du vielleicht nicht willst Vielleicht möchten Sie damit herumspielen. In diesem Fall erhalten Sie eine leere Liste. Ich denke, ich werde einen Wert von 0,8 für den Grenzwert verwenden , wenn ich ihn hier im Skript implementiere. Gehen wir also zu unserem Code. Als Erstes müssen wir überprüfen, ob das Wort in Daten enthalten ist, und den Wert für dieses Wort zurückgeben. Sie fragen sich vielleicht, was ist, wenn Sie zuerst nach Ähnlichkeiten suchen möchten und nicht nach diesem? Nun, ich denke, die erste Bedingung, die Sie erfüllen müssen , ist die, von der Sie glauben, dass sie häufiger vorkommen wird Wenn Sie glauben, dass die meisten Benutzer das richtige Wort eingeben werden, müssen Sie zuerst nach dieser Bedingung suchen Sie möchten nicht, dass das Programm Bedingungen durchläuft , bei denen die Wahrscheinlichkeit geringer ist, dass sie eintreten. Sie möchten dies also zuerst durchgehen und dann werden die anderen ignoriert, wenn dies den Wert true zurückgibt. Wenn dies nicht zu true zurückkehrt, wenn es falsch ist, dann sollten Sie nach einer anderen Bedingung suchen. Wenn Sie nach mehr als zwei Bedingungen suchen, müssen Sie die IF-Anweisung für mehrere Bedingungen implementieren für mehrere Bedingungen Im Grunde müssen wir prüfen, ob diese Liste leer ist oder nicht Wenn sie nicht leer ist, bedeutet das, dass wir eine Übereinstimmung im Wörterbuch haben. In diesem Fall möchten wir dieses Spiel vorschlagen. Wir möchten dieses Spiel in der Nachricht erwähnen. Das heißt, wenn wir näher kommen. tut mir leid. Lass es mich zuerst importieren. Holen Sie sich aus dem Lib-Import nahe Übereinstimmungen. ALIF erhalten enge Treffer. Das Wort, das in D steht, klingt so. Das ist ein Listenobjekt. Das ist dasselbe wie das hier. Dies ist ein Listenobjekt und Sie möchten überprüfen, ob Länge dieser Liste dann größer als Null ist. Wenn ja, möchten Sie zurückkehren. Nachricht, sagen wir, haben Sie hier ein Zeichenkettenformat verwendet, Prozent. Ich erkläre, was das ist. Benötigst du das stattdessen? Nach der Zeichenfolge, nachdem Sie Codes geschlossen haben, steht der Prozentoperator, und hier übergeben Sie die Variable, die diesen Formatierer innerhalb dieser Zeichenfolge ersetzt Dies wird durch die Variable ersetzt, die Sie hier übergeben In unserem Fall wollen wir Get Close-Matches für W und Tasten übergeben und Sie möchten das erste Element dieser Liste abrufen und es hier ablegen. Das ist, um es zu verstehen. Nehmen wir an, wir haben eine Variable, die den Wert eins hat , und Sie sagen: Hey, so, Prozent A und der Prozentsatz S werden durch eins ersetzt. Das ist das Gleiche, was wir hier machen. Und das ist alles was wir tun müssen. Wenn das als Fall gewertet wird und dies auch als falsch ausgewertet wird, dann bedeutet das, dass wir es mit einer leeren Liste zu tun Der Benutzer hat ein Wort eingegeben, für das es in unserem Wörterbuch keine Treffer gab, und es gab kein ähnliches Wort in unserem Sie möchten das Wort zurückgeben, das nicht existiert. Lass mich das Skript sagen, geh zum Terminal. Die angezeigte Pfeiltaste, um einen zuvor ausgeführten Befehl aufzurufen . Python, drei Apps, ein Punkt, py, führe Enter word aus. Lassen Sie mich mit einem richtigen Wort beginnen, Regen, und Sie erhalten andere Definitionen für Regen. Lassen Sie mich noch einmal ausführen, Regen mit einem zusätzlichen N wir bekommen diese Nachricht. Meinten Sie stattdessen Regen? Also wurde der Prozentsatz a durch den ersten Punkt der Liste ersetzt , zurück durch Get Close Matches. Auch hier gilt: Wenn Sie dort eine sehr zufällige Zeichenfolge übergeben, heißt das, dass das Wort nicht existiert. Bitte überprüfen Sie es noch einmal. Das ist es. Ich sehe jedoch immer noch ein Problem damit, wir können das Programm immer noch benutzerfreundlicher machen. Das Problem ist jetzt, dass, wenn der Benutzer versehentlich einen Regen betritt, was sagen Sie, Sie dort einfach eine Nachricht weiterleiten , in der steht, meinten Sie stattdessen Regen? Oh ja, ich meine Regen, aber wie kann ich Regen eingeben? Warum muss ich das Programm wieder beenden? Ich denke also eine Lösung, bei der Sie, anstatt hier nur eine Nachricht zu übergeben und das Programm zu beenden, stattdessen eine weitere Eingabeanweisung ausführen. Eine weitere Eingabeanweisung und eine weitere Eingabefunktion wie diese hier, wo Sie den Benutzer bitten, sagen wir, Y einzugeben , wenn er rag meinte, oder N für nein, y für ja und für nein, wenn er nicht rag meinte. ja, dann im Grunde genommen, gibst du den Wert für das Regenwort zurück. Wenn sie Nein zur Eingabenachricht weiterleiten, dann entschuldigen Sie sich, wenn das nicht das Wort ist, das Sie gemeint haben, dann wissen wir nicht, was Sie vorhaben. Wir sagen also, dass das Wort nicht existiert Bitte überprüfe es noch einmal. Das denke ich auch. Ja, denk darüber nach und ich werde es in der nächsten Vorlesung umsetzen. Ich rede dort mit dir. 109. 108. Vom Benutzer eine Bestätigung erhalten: Großartig. Wie ich bereits im vorherigen Video erwähnt habe, werden wir jetzt eine zusätzliche Benutzereingabemeldung in das Programm implementieren . Anstatt diese Zeichenfolge zurückzugeben, möchte ich im Grunde eine Eingabenachricht zurückgeben. Wenn das Programm herausfindet , dass der Benutzer ein Wort mit ähnlichen Wörtern in einem Wörterbuch eingegeben hat, möchten Sie den Benutzer bitten, Y oder N einzugeben. Wie machen Sie das? Nun, natürlich mit einer Eingabefunktion. So wie das. Lass uns eine weitere Nachricht von der Liste hinzufügen. Treten Sie ein. Warum? Ja. Ich, ja. Oder N, ich nein. Was auch immer der Benutzer eingibt, Sie müssen diese Eingabe verarbeiten. Diese Eingabe Y oder N wird grundsätzlich in einer Variablen gespeichert, aber noch nicht. In dieser Konfiguration , die wir hier haben, wird nichts in der Variablen gespeichert. Es wird nur ein spontaner Wert sein, also müssen Sie ihn in einer Variablen speichern . Nehmen wir an, Y N, also für Ja und Nein, entspricht dem Jetzt werden also entweder Y oder N in Y und Variable gespeichert. Sie müssen diese Variable verarbeiten. YN Eagles to, ja, was müssen wir tun? Wenn der Benutzer Regen sagen wollte, geben wir Daten zurück Hier müssen wir das richtige Wort eingeben. Das richtige Wort, wir erhalten das richtige Wort aus diesem Ausdruck. Get close matches gibt uns die beste Übereinstimmung und wir müssen diese Übereinstimmung in das Datenwörterbuch übernehmen, damit wir den Wert der Definition für Regen erhalten. Wir verwenden diese Übereinstimmung, weil der Benutzer zugestimmt hat , dass Regen die beste Übereinstimmung ist. Dieser Wert wird durch Regen ersetzt und der Benutzer stimmt dem zu. Ich hoffe, das ist klar. Bitte stellen Sie Fragen. Wenn das kompliziert ist, antworte ich Ihnen gerne. Falls ja, dann gib das zurück. Lassen Sie mich das überprüfen und diesen Zwischenschritt ausführen Entschuldigung, ich habe hier den Gleichheitsoperator verwendet , der ein Zuweisungsoperator ist. Sie müssen überprüfen, ob Sie den Vergleichsoperator verwenden möchten , der aus zwei gleichen Operatoren besteht. Speichern Sie das Skript erneut und geben Sie das Wort Regen ein. Meinten Sie stattdessen Regen? Geben Sie Y ein, wenn ja, oder N, wenn nein. Lassen Sie mich Y eingeben. Die Definitionen für Regen sind korrekt Die Definitionen für Regen Großartig. Vielleicht muss ich die Nachricht hier verbessern, den Punkt löschen und dort eine Spalte und ein Leerzeichen verwenden. Das sollte besser sein. Wenn du wieder Regen durchlässt und wenn du Ja oder Nein bestehst, sagst du einfach N, bekommst du keins. Weil du die N-Zeichenfolge nicht berücksichtigst . Sie erhalten nein, weil die Funktion nichts zurückgibt. Was hier passiert ist , ist, hier rein zu gehen. Wort ist also gleichbedeutend mit Regen. Das Wort wird hier weitergegeben. Y ist gleich Regen, dann prüfen wir, ob Regen in den Daten nicht auch in den Daten ist, weil er bei N ist. Das wird nicht ausgeführt. Die Funktion führt diese Anweisung nicht aus, sie gibt auch nicht die Definition für Regen zurück, aber sie geht zu dieser Anweisung. Dadurch wird eine Ähnlichkeit gefunden, sodass die Liste größer als Null ist, und dann wird sie ausgeführt. Deshalb haben wir hier eine weitere Eingangsnachricht bekommen. Dann machen wir dort weiter. Wenn wir eine weitere verschachtelte Bedingung haben, ziehen wir unter L ein, was kein Problem ist Aber seien Sie vorsichtig, Sie müssen sie einrücken. Das ist eine Ebene des Einrückens, die tiefer ist als Hier sind wir. Wenn der Benutzer bestanden hat, warum geben wir diese Aussage zurück? Wenn der Benutzer alles andere besteht, zählen Sie nicht für dieses spezielle Szenario. Daher wird keine Return-Anweisung ausgeführt, das Programm wird also hier beendet und es wird keine zurückgegeben, da nichts zurückgegeben wurde. Dies wird auch nicht ausgeführt da es sich um eine Einrückungsebene mit dieser handelt und da dies ausgeführt wurde, geht das Programm hier nie auf diese Ebene. Was wir tun müssen, ist, andere Benutzereingaben wie N zu zählen andere Benutzereingaben wie N Wenn der Benutzer in diesem Fall N eingibt, können wir nur die Nachricht zurückgeben, dass das Wort nicht existiert Bitte überprüfen Sie es noch einmal , es ist dasselbe wie hier Wir müssen mit einer anderen Bedingung rechnen. Die Benutzer können N übergeben, aber sie können auch eine andere zufällige Zeichenfolge übergeben , und Sie möchten nicht, dass das Programm keine zurückgibt, Sie möchten, dass das Programm eine Nachricht zurückgibt. Zum Beispiel haben wir Ihre Anfrage nicht verstanden. Das ist es. Das ist alles, was du für deinen Eintrag tun kannst, vielleicht ist das besser. Das ist ein Programm. Auch hier haben wir ein Szenario, dem der Benutzer genau Regen eingibt, und das wird in diesem Fall ausgeführt, und das Szenario, in dem der Benutzer ein Wort eingibt, das keine Übereinstimmung hat. ASD CAC C, so etwas in der Art. In diesem Fall wird dies nicht ausgeführt. Den Sitz habe ich. Lass mich das Programm jetzt testen. Geben Sie ein Wort ein. Regen. Wir haben die Definitionen für Regen. Geben Sie erneut das Wort ein. Regen, so was. Meintest du stattdessen Regen? Geben Sie ein, wenn ja, geben Sie ein, nein, wenn nein. Lassen Sie mich versuchen, ja, und wir bekommen die richtige Definition. Und geben Sie N für Nein ein. Das Wort existiert nicht, bitte überprüfen Sie es noch einmal. Das war auch gut. Das haben wir hinrichten lassen. Das andere Szenario wäre so. Anstatt Y und N einzugeben, tippst du einfach etwas und sagst, wir haben deine Eingabe nicht verstanden. Gut. Das andere Szenario ist , wenn Sie ein Wort eingeben , für das es überhaupt keine Übereinstimmung In diesem Fall wird das Wort sofort ausgeführt. Und das ist es. Übrigens, selbst wenn Sie Zahlen eingeben, sagen wir eins, existiert das Wort nicht , weil es nicht im Wörterbuch enthalten ist. Ich denke, unser Programm ist jetzt ziemlich intelligent. Es berücksichtigt dort viele Szenarien und es ist ziemlich benutzerfreundlich, würde ich sagen. Es gibt jedoch eine letzte Sache, die wir verbessern können, und zwar die Weise, wie das Programm Definitionen anzeigt. Wenn Sie die Prüfung bestehen, nehmen wir an, drei hat auch zwei Definitionen. Übergeben wir ein Wort, das nur eine Definition hat . Struktur vielleicht. Oh, das hat drei Definitionen. Ordnung. Pyramide. Dies hat auch zwei Definitionen. Wie dem auch sei, du verstehst die Idee. Ich habe versucht, ein Wort zu finden , das eine Definition hat. Aber im Grunde genommen erhalten Sie mit einem solchen Wort, das eine Definition hat , immer noch eine Liste , die hier endet, also kein Komma und keine anderen Elemente Es ist eine Liste mit einem Element. Wenn Sie ein Wort haben, das mehr als eine Bedeutung hat, erhalten Sie diese Liste mit mehr als einem Element. Sie möchten also nicht, dass die Benutzerliste in solchen Klammern angezeigt wird. Das Beste, was Sie dem Benutzer zeigen können, ist, wenn Sie eine Bedeutung, eine Definition für das Wort haben , zeigen Sie einfach diese Definition an, keine Anführungszeichen, keine eckigen Klammern, nur eine Definition. Wenn Sie mehr als eine Definition haben, zeigen Sie nur eine Definition pro Zeile an. Im Grunde haben Sie also mehrere Zeilen mit Definitionen. Ja, das müssen wir auch implementieren , um endlich zu sagen, dass unser Programm gut ist und von jedem benutzt werden kann und dass die Ausgabe einfach zu lesen ist. Denk darüber nach. Wir werden es in der nächsten Vorlesung implementieren, SU. 110. 109. Den endgültigen Output optimieren +: Großartig. Wir haben jetzt ein funktionierendes Programm und bearbeiten jede Funktion, die wir wollten. Das einzige Problem mit dem Programm ist , dass die Ausgabe nicht sehr benutzerfreundlich ist. Damit meine ich, sagen wir hier ja. Das ist die Ausgabe und du bekommst hier eine Liste. Es ist eine Python-Liste. Stattdessen wollen wir jede dieser Zeilen in einer separaten Zeile im Terminal anzeigen . Damit diese Ausgabe für das menschliche Auge besser lesbar ist. Lass uns weitermachen und das tun. Wie können wir so etwas umsetzen? Diese Ausgabe ist jetzt ein Listenobjekt, was bedeutet, dass der Aufruf hier, der Funktionsaufruf, dieses Listenobjekt erzeugt. Was wir tun können, ist, dass wir vielleicht durch dieses Listenobjekt iterieren könnten, so etwas wie wir das Listenobjekt in einer Variablen speichern können , Ausgabe wird diese Liste zugewiesen Dann können Sie vier Elemente in der Ausgabeliste speichern und das Element ausdrucken Lass uns das speichern und ausprobieren. Wir werden hier ein Problem haben, aber Schritt für Schritt. Geben Sie Y, Y ein, und das ist es, was ich haben wollte. Nach der ersten Definition fällt Niederschlag in Form von flüssigem Wasser in die erste Zeile und nach der zweiten Definition fällt Niederschlag aus Wolken und Wassertropfen in die zweite Zeile. Das ist gut. Wir sollten jedoch bedenken, dass unser Programm nicht nur Listen erzeugt, sondern manchmal auch Zeichenketten, wie diese hier. Nein, das habe ich nicht so gemeint. Wie dem auch sei, das ist es, was du bekommst und das willst du nicht. Das ist eine Nachricht , die besagt, dass das Wort nicht existiert. Was das Programm also tut, was Python tut, ist, dass es durch alle Arten von Ausgaben iteriert , die die Funktion generiert Eine Funktion generiert eine Liste, manchmal und manchmal generiert sie eine Zeichenfolge Wie können wir das beheben? Wir haben eine Liste und eine Zeichenfolge. Denken wir an den Unterschied. Wie können wir eine Liste von einer Zeichenfolge unterscheiden? Was ist der Unterschied zwischen einer Liszone und einer Zeichenfolge? Nun, der Unterschied ist eindeutig ein Datentyp. Eine Liste ist ein Listenobjekt und eine Zeichenfolge ist ein String-Objekt. Wie wäre es, hier eine Bedingung zu implementieren? Wir sagen so etwas, wenn es sich um eine Art der Ausgabe handelt. Ist eine Liste, dann ziehe diese mit vier Leerzeichen ein und jenes ebenfalls Dieser Look ist jetzt innerhalb der Bedingung verschachtelt und wird nur ausgeführt, wenn das Ergebnis wahr ist, nur wenn wir eine Liste vom Programm zurückerhalten Andernfalls, wenn es keine Liste ist, muss es eine Zeichenfolge sein In diesem Fall möchten wir die Ausgabe ausdrucken ohne sie zu wiederholen. Lass mich nachschauen Und diesmal bekommen wir die richtige Ausgabe die Meldung, dass das Wort nicht existiert , bitte überprüfe es noch einmal. Lassen Sie uns ein anderes Mal mit einem richtigen Wort nachschauen und wir haben die richtigen Definitionen da drin. Versuchen wir es mit einem anderen Wort. Mathematik. Dieses Mal hat das Wort Mathematik nur eine Definition, also haben wir die Definition hier zusammengefasst. Es ist eine Wissenschaft. Lass uns auch das andere Szenario ausprobieren, Rag. Meinten Sie Reichweite? Nein. Das Wort existiert nicht, bitte überprüfe es noch einmal. Wir haben diese Zeile hier ausgeführt. Das ist also der komplette Code. Ich denke, wir können unser Programm jetzt als abgeschlossen betrachten. Das habe ich mir überlegt, das Programm zu erweitern. Jetzt ist das Programm ziemlich benutzerfreundlich und wir erwägen dort viele Szenarien, in denen der Benutzer in das Programm eingeben kann. Die Oberfläche ist jedoch immer noch eine Befehlszeilenschnittstelle, es handelt sich also nicht um ein grafisches Desktop-Programm und auch nicht um eine Webanwendung. Die Schnittstelle ist die Befehlszeile, Sie senden Eingaben über die Befehlszeile und Sie erhalten Ausgabe über die Befehlszeile. Ich versuche damit zu sagen, dass Sie dieses Programm tatsächlich erweitern können , sodass Sie es in eine Webanwendung umwandeln können es in eine Webanwendung umwandeln in der der Benutzer, anstatt die Eingabe über die Befehlszeile einzugeben, Eingaben über eine Webseite eingeben kann. Über eine Live-Website können sie Eingaben vornehmen, eine Taste drücken und die Ausgabe dann dynamisch auf der HTML-Webseite abrufen . Das ist mit Python möglich, aber Sie sind noch nicht bereit, das zu tun, weil wir noch einige Abschnitte vor uns haben. Wir haben einige Anwendungen , in denen ich Ihnen beibringen werde , wie man Webanwendungen mit Python entwickelt. Danach können Sie zu diesem Code zurückkehren und ihn erweitern und ein Webinterface erstellen. zu erstellen eine grafische Desktop-Benutzeroberfläche Mit dem Wissen, das Sie in diesen Abschnitten erwerben, werden Sie auch in der Lage sein, eine grafische Desktop-Benutzeroberfläche , da wir uns in diesem Kurs auch mit grafischen Benutzeroberflächen befassen. Außerdem befassen wir uns auch mit Datenbanken. Warum erwähne ich Datenbanken? Nun, weil wir in diesem Programm diese Datei verwenden, um unseren Datensatz zu speichern. Das Problem dabei ist, dass, wenn vorerst zu groß wird, es nur 5 Megabyte sind, das ist gut Wenn die Datei jedoch zu groß wird, müssen Sie die Datei jedes Mal, wenn Sie das Skript ausführen, in Python laden . Wie hier laden wir die Datei in die Python-Sitzung, wenn Sie das Skript ausführen. Wenn die Datei nun zu groß ist, wird das sehr zeitaufwändig sein. Was Sie stattdessen tun möchten, eine Datenbank zu verwenden. Vielleicht. Was bei der Datenbank passiert, ist, dass Sie eine Abfrage an die Datenbank stellen und anstatt den gesamten Datensatz zu erhalten, Sie erhalten tatsächlich nur die Zeile oder Wert , nach dem Sie abfragen. Datenbanken sind sehr effizient und werden später im Kurs Datenbanken behandeln. Nach einigen Abschnitten werde ich zu diesem Programm zurückkehren. Ich gebe es Ihnen als Übung, sodass Sie es erweitern können, indem Sie eine Oberfläche, eine grafische Oberfläche dafür oder eine Weboberfläche erstellen , und ich gebe Ihnen Zugriff auf eine Datenbank, in der Sie Daten für dieses Programm abfragen können , sodass es ein wirklich robustes Programm mit einer sehr benutzerfreundlichen Oberfläche wird . Ich hoffe, Ihnen gefällt die Idee und ich hoffe, Ihnen gefällt der Kurs. Lassen Sie uns mit einigen weiteren Abschnitten fortfahren. Wir sehen uns später bei 111. 110. So behebst du Syntax-Fehler in Python: Hallo, willkommen zu dieser neuen Vorlesung. Dies ist die wichtigste Vorlesung die Sie bisher in diesem Kurs gehalten haben. Bitte versuchen Sie, das Beste daraus zu machen. Das ist eigentlich ein neues Video , das ich dem Kurs hinzufüge. Ich hatte diesen Vortrag vor ein paar Mal nicht, also habe ich ihn eine ganze Weile nach der Veröffentlichung des Kurses hinzugefügt . Und bis jetzt hatte ich dieses Konzept, also die Fehler, nach und nach in anderen Vorlesungen erklärt . Aber ich hatte das Gefühl, dass das nicht genug war, und ich sah, dass die Schüler immer noch Schwierigkeiten hatten, Fehler in Python zu verstehen und mit ihnen umzugehen. Ich habe beschlossen, einen speziellen Vortrag über Fehler in Python zu halten. Hier sind wir. Ich sagte, das ist die wichtigste Vorlesung weil wir in den vorherigen Videos etwas über Funktionen, Zeichenketten und Zahlen gelernt haben . Und das sind individuelle Konzepte, die du eine Stunde oder später lernst, du lernst Funktionen und Zeichenketten usw. Aber wenn Sie nicht wissen, wie man einen Fehler liest, wie man einen Fehler versteht und damit umgeht, wenn Sie das nicht wissen, werden Sie Probleme haben, mit allem umzugehen, mit jedem anderen Objekt wie Funktionen, Zeichenketten und Zahlen usw. also sehr wichtig, einen Fehler zu verstehen und zu wissen, wie man damit umgeht, und zu wissen, wie man damit umgeht, wie man ihn behebt Und selbst die erfahrensten Programmierer machen Fehler in ihren Programmen Der Unterschied besteht darin, dass sie wissen wie man diese Fehler liest, wie man sie versteht und behebt. Aber jeder macht Fehler. Wenn in Ihrem Programm ein Fehler auftritt, geraten Sie nicht in Panik Folgen Sie einfach den Anweisungen , die ich Ihnen in diesem Video zur Behebung des Fehlers gebe . Darum geht es in diesem Vortrag. Also, was ist ein Fehler überhaupt? Ein Fehler in einem Programm ist ein Bug, der dazu führt, dass das Programm nicht richtig funktioniert. In Python gibt es grundsätzlich zwei Arten von Fehlern. Wir haben Syntaxfehler und wir haben Ausnahmen. Konzentrieren wir uns zunächst auf Syntaxfehler und vergessen wir Ausnahmen. Wir werden zu den Ausnahmen gehen, nachdem wir die Syntaxfehler erklärt haben. Ich habe diesen Code hier und das ist eigentlich eine Python-Datei. Dies ist das Symbol, das auf einem Mac angezeigt wird. Derzeit bin ich auf einem Mac-Computer, aber das macht nicht den geringsten Unterschied, egal wo Sie sind, Linux, Windows oder Mac, alles ist gleich Ich habe das Terminal hier und lasse mich dieses Programm ausführen Das hat ein paar Fehler. Lass mich es ihnen zeigen. Auf dem Mac können Sie Python Three mit dem Befehl Python three aufrufen . Unter Windows können Sie einfach Python oder einen beliebigen Befehl aufrufen , den Sie verwenden. Sie können auch einen beliebigen Editor verwenden Fehler Punkt Pi ist ein Name, den ich der Ausführung des Skripts gegeben habe. Das ist jetzt also ein Beispiel für einen Syntaxfehler. Dies ist der gesamte Text der Fehlermeldung, und das ist sehr wichtig. Wann immer Sie einen Fehler erhalten, lautet der erste Rat, den ich Ihnen gebe, nicht in Panik zu geraten. Konzentrieren Sie sich einfach auf den Fehler, lesen Sie ihn Zeile für Zeile, so als ob Sie ein Gedicht oder was auch immer lesen würden. Die erste Zeile des Fehlers zeigt Ihnen also den Namen einer Datei, die den Fehler enthält. In diesem Fall ist der Fehler Punkt Pi. Dann haben Sie ein Komma und nach dem Komma haben Sie die Zeile, in der der Fehler aufgetreten ist Es ist Zeile drei und Sie können hier sehen, dass Zeile drei diese hier ist Sie haben aber auch der Einfachheit halber, Python druckt die Zeile im Terminal aus. In neun Fällen ist hier der Fehler und danach haben Sie die Art des Fehlers. Es ist ein Syntaxfehler. Sie haben auch andere Arten von Fehlern wie Namensfehler, Typfehler, aber das sind Ausnahmen, und ich werde später erklären, warum wir sie Ausnahmen nennen. Dies ist eine Art von Syntaxfehler und die anderen sind Ausnahmen. Dies ist ein Typ, und dann haben Sie nach der Spalte eine Beschreibung. Manchmal ist die Beschreibung spezifischer und detaillierter. Dieses Mal ist einfach eine ungültige Syntax. Sie müssen herausfinden, wo Sie einen Fehler gemacht haben oder wo Sie eine Syntax Ihres Programms verpasst haben. Außerdem zeigt dieser Pfeil hier nach oben, und der Pfeil zeigt entweder auf das Zeichen, dass der Fehler auftritt, oder auf das Ende des Tokens. Token ist, das ist in diesem Fall ein Token, neun. Es kann eine Zahl sein, es kann eine Zeichenfolge sein, alles Mögliche. An dieser Stelle deutet das auf das Token hin. Aber es könnte auch so sein 999, speichere das Skript als niedlich ab, in diesem Fall siehst du, dass es dich auf das Ende eines Tokens zeigt. Hier in der Nähe hast du jetzt einen Pfeil und ich weiß, dass es sich tatsächlich um eine Funktion handelt und Funktionen in Python A benötigen Klammern, also musst du 999 innerhalb solcher Klammern übergeben und das lässt du. Speichern und erneut ausführen. Ordnung. Sie haben einen weiteren Fehler, aber geraten Sie nicht wieder in Panik. Das ist immer mein Rat. Stattdessen habe ich den Fehler gelesen, es heißt Dateifehler Zeile fünf, diesmal Zeile fünf. Es ist nicht mehr Zeile drei, was bedeutet, dass Zeile drei repariert wurde. Python durchläuft alle Zeilen nacheinander von oben nach unten. Es überprüft die erste Zeile und sagt, es ist in Ordnung. Kein Fehler da, geht zur nächsten Zeile, kein Fehler, geht zur dritten Zeile, diesmal kein Fehler. Die vierte Zeile ist auch in Ordnung. In der fünften Zeile ist ein Fehler aufgetreten. Auch hier handelt es sich um einen Syntaxfehler, und dieser wird genauer beschrieben. Fehlende Klammern im Druckaufruf. Beachten Sie, dass Sie diesen Fehler nur erhalten , wenn Sie Python drei verwenden. Wenn Sie Python zwei verwenden, dies kein Pfeil, da Python zwei, print eine Anweisung und keine Funktion war. Bei Anweisungen wie return oder print in Python Two müssen Sie keine Klammern übergeben. Die Syntax wäre korrekt. Auch hier zeigt dieser Pfeil auf das Token, wir fügen dort nur Klammern hinzu. Drücken Sie S, um das Skript zu speichern und erneut auszuführen. Diesmal erhalten wir keinen Fehler, das Skript wurde einwandfrei ausgeführt und die Ausgabe wurde hier ausgedruckt, eins, zwei, drei. Wir hatten drei Druckfunktionen, das Ausdrucken der Ausgabe. Das gibt keine Ausgabe zurück , weil wir nichts drucken. Dies ruft nur die Funktionseingabe und erzeugt eine Ausgabe, aber das druckt nichts. Wenn Sie es drucken möchten, möchten Sie dort die Funktion print statement übergeben . Es kann auch andere Arten von Syntaxfehlern geben, z. B. wenn Sie diese einen, zwei und drei definieren möchten. Aber anstatt es mit einer eckigen Klammer zu schließen, verwenden Sie stattdessen eine runde Klammer. Speichern Sie das Skript und führen Sie es aus. Sie sehen, dass Sie in Zeile fünf einen Syntaxfehler (ungültige Syntax) erhalten haben , und das ist dieser hier. Auch hier zeigt Ihnen der Pfeil auf das Token, Sie müssen also herausfinden, wie diese runde Klammer hier reparieren können, und das wissen Sie. Sie müssen es mit einer eckigen Klammer schließen, das sollte das Problem beheben. Es geht um Syntaxfehler. Sie sind sehr einfach zu beheben. In der nächsten Vorlesung werde ich Ausnahmen erläutern. Ich sehe dich dort. 112. 111. So behebst du Laufzeitfehler in Python: Hallo, nochmal, willkommen zu dieser neuen Vorlesung. In der vorherigen Vorlesung haben wir über Fehler im Allgemeinen gesprochen über Fehler im Allgemeinen und ich habe mich auf Syntaxfehler konzentriert , eine der beiden Arten von Fehlern, die man in Python hat. Sie haben Syntaxfehler und Sie haben Ausnahmen. Jetzt werden wir über Ausnahmen in Python sprechen. Jede andere Art von Fehler, die kein Syntaxfehler ist, ist eine Ausnahme. Oft werden alle Fehler, Syntaxfehler und Ausnahmen als Fehler bezeichnet. Also wirst du das überall hören. Jetzt habe ich hier ein neues Drehbuch , das ich für diese Vorlesung erstellt habe. Versuche zu erraten, was ich als Ausgabe erhalte, wenn ich dieses Skript ausführe. Ich habe A gleich eins, B entspricht Zeichen zwei, drucke 2,5 und drucke A plus B. Ratet mal, was ich für einen Moment bekommen werde Lassen Sie mich jetzt das Skript ausführen, Python drei, Fehler Punkt Pie. Fehler in der Datei Pi, Zeile vier, was die letzte Zeile ist. In diesem Fall erhalten wir einen Syntaxfehler. Ungültige Syntax. Das kann für Sie jetzt sehr verwirrend sein, weil Sie sich den Ausdruck „ A plus B“ ansehen, aber dort keinen Pfeil sehen. Für einen Anfänger kann das ziemlich frustrierend sein, aber versuchen Sie, hier auf die linke Seite des Pfeils zurückzuschauen Denken Sie an den Pfeil, dass der Pfeil auf das Token zeigt und das Token im Skript nicht korrekt geschrieben wurde In diesem Fall besteht das Problem darin, dass diese Zeile hier eine offene Klammer, eine runde Klammer und dann die Funktion int hat, dann hat die Funktion int ihre eigene Klammer, die innerhalb ihrer Eingabe eingeschlossen ist. Das sind die Klammern der in-Funktion, aber die Print-Funktion hat keine schließende Klammer. Was du stattdessen getan hast, was ich tatsächlich getan habe. Was ich getan habe, ist, dass ich, anstatt dort eine Klammer anzubringen, eine weitere Druckfunktion geschrieben habe. Python hatte eine schließende Klammer erwartet, aber ich habe eine Druckfunktion eingegeben Deshalb heißt das, dass sich diese Druckfunktion nicht an der richtigen Position befindet. Das ist die Idee. Immer, wenn du diesen Pfeil siehst, sieh dir zuerst diese Linie an, dann aber davor. Das tut mir leid. Immer, wenn Sie diesen Pfeil hier sehen, schauen Sie sich zuerst diese Zeile hier an, aber vergessen Sie auch nicht, dass das Problem auch vor dieser Zeile liegen könnte. Es ging um den Syntaxfehler. Ich werde hier erklären, warum ich über diesen Syntaxfehler gesprochen habe. Lassen Sie mich das noch einmal ausführen. Der Syntaxfehler wurde jetzt behoben, aber wir haben immer noch einen weiteren Fehler Der Grund, warum ich einen Syntaxfehler in meinen Code aufgenommen habe , war, Ihnen zu zeigen, dass Python tatsächlich zuerst nach Syntaxfehlern sucht. Im Grunde analysiert es den Code. Es sucht nach Syntaxfehlern. Es führt den Code noch nicht aus. Als ich Python Three Errors Dot Pi hier ausgeführt habe, wurde der Code nicht ausgeführt, sondern der Interpreter sucht nur nach Syntaxfehlern Es sucht noch nicht nach Ausnahmen. Zuerst müssen Sie die Syntaxfehler beheben, und genau das haben wir hier getan. Wir haben diese Klammer hinzugefügt und wir beheben die Syntaxfehler. Jetzt wirft Python eine Ausnahme aus. Und hier habe ich den Code ausgeführt und sehen uns die nächste Zeile Dort haben wir Nummer zwei, die aus der Ausgabe dieser Zeile hier stammt. Ab Zeile drei haben wir die Ausgabe korrekt erhalten. Im Grunde führt Python wieder ein Skript von oben nach unten aus. Wenn es keine Syntaxfehler findet, wenn es Syntaxfehler findet, es nichts aus. To wird ausgedruckt, und dann erhalten Sie diese Rückverfolgung des Fehlers zurück. Was dort beginnt und hier endet. Das ist ein Block des Fehlers. Manchmal kann es sich bei den Fehlern mehr als einen Fehlertyp handeln. In diesem Fall haben wir nur einen Fehlertyp, nämlich einen Typfehler, aber Sie können hier mehrere Blöcke haben. Der wichtigste Fehler, auf den Sie sich konzentrieren müssen, ist jedoch die letzte Zeile des Fehlers, der letzte Block des Fehlers. In diesem Fall haben wir nur einen Block, auf den wir uns konzentrieren. Zeile vier, das ist diese hier drin. Das ist eine Linie. Auch hier wird die Zeile ausgedruckt, genau wie im Fall eines Syntaxfehlers. Hier haben Sie hier eine Art des Fehlers, dem es sich um einen Typfehler handelt. Was ist ein Typfehler? Ein Typfehler bedeutet, dass mit einem Ihrer Objekttypen in Ihrem Skript etwas nicht stimmt . Sie haben die Beschreibung hier. Ich habe den Operandentyp vier plus unterstützt. Das bedeutet also, dass der Plus-Operator einen Typ hat, der nicht unterstützt wird, der Plus-Operator, mit anderen Worten, unterstützt keinen der Typen, die Sie ihm gegeben haben, es ist entweder der Typ der Variablen A oder der Typ der Variablen B. Es heißt Int und String Es wird nicht ausdrücklich angegeben, ob Int oder String ein Objekt ist, einer Zeichenfolge verwenden aber es besagt, dass Sie keinen Plus-Operator mit einer Ganzzahl und können, die logisch falsch ist , weil Sie einem Text keine Zahl hinzufügen können. Das versteht Python nicht und es löst einen Typfehler Ausnahmen sind logische Fehler und Sie müssen jetzt Ihre Logik verwenden um den Fehler zu beheben, und unsere Logik verwenden , indem Sie den Fehler sorgfältig untersuchen, und genau das haben wir getan Was wir tun wollen, wir wollen das beheben. Jetzt liegt es an mir, ob ich diese beiden Objekte verketten oder eine mathematische Additionsoperation durchführen wollte diese beiden Objekte verketten oder eine mathematische Additionsoperation durchführen eine mathematische Nehmen wir an, wenn ich beabsichtige, eine Addition zwischen diesen beiden Zahlen vorzunehmen, müsste ich B in eine Gleitkommazahl oder eine Ganzzahl umwandeln Sag das. Hinrichten. A, in diesem Fall bekommst du keinen Fehler, du bekommst zwei ausgedruckt aus der dritten Zeile und 3,0 aus der letzten Zeile, die wir gerade repariert haben. Wenn ich jedoch beabsichtige, die Verkettung zwischen diesen beiden Zeichenketten auszudrucken , anstatt B in einen Flow umzuwandeln, müsste ich A in eine Zeichenfolge konvertieren In diesem Fall erhalte ich den Text eins und zwei, eins und zwei. Das wäre ein String-Objekt, keine Zahl. Auch wenn es hier als Zahl angezeigt wird, ist es nur so, wie das Terminal sie ausdruckt. Auch hier handelt es sich um Fehler , die während der Laufzeit auftreten, sodass das Skript ausgeführt wird Syntaxfehler sind Analysefehler, daher versucht der Interpreter zu verstehen ob das Skript syntaktisch korrekt ist, ob Sie voll sind und ob Sie die Python-Syntaxregeln befolgt haben die Python-Syntaxregeln befolgt Sie benötigen Klammer, schließende Klammer für öffnende Klammer. Sie benötigen ein abschließendes Zitat nach dem ersten Zitat und so weiter. Jetzt gibt es auch andere Arten von Ausnahmen. Nicht nur ein Tippfehler, möglicherweise liegt auch ein Namensfehler vor. Nehmen wir an, anstatt auszudrucken, dass wir C ausdrucken, speichern, ausführen. Hier ist ein Traceback. Auch hier wurden zwei aus der dritten Zeile ausgedruckt. Im Traceback steht Zeile vier bei Druck C. Der Name des Fehlernamens C ist nicht definiert Auch hier handelt es sich nicht um einen Syntaxfehler , da Sie bei der Syntax keine Fehler gemacht haben Sie haben diesen Variablennamen, der korrekt ist. Sie haben Klammern, die runde Klammern öffnen und runde Klammern schließen. Syntaktisch ist alles korrekt, aber dieses C-Objekt, Python, weiß das nicht Sie haben diese C-Variable nicht definiert, Python weiß nicht, was ausgedruckt werden soll Python ist in der Lage, A auszudrucken, weil es weiß, dass A sich auf Ganzzahl eins bezieht , und druckt daher Ganzzahl eins aus, aber C hat nichts. Sie erhalten diesen Namensfehler. Und wann immer Sie Ihren Namensfehler bekommen, wissen Sie, dass dieser Name hier nicht von Ihnen definiert wurde. Um dies zu beheben, möchten Sie C vielleicht so definieren und ausführen, und Sie erhalten keine Fehlermeldung. Möglicherweise haben Sie auch andere Arten von Fehlern, z. B. C geteilt durch Null, sehen Sie, was Sie bekommen. Zero-Divisionsfehler, Division durch Null. Das ist die Beschreibung dieses Fehlers. Eine Division durch Null ist mathematisch weder möglich noch sinnvoll Da Python auf Mathematik basiert, gibt es einen Fehler aus, den Sie beheben müssen. Sie müssen den Ausdruck entfernen, der durch Null dividiert Wie dem auch sei, hier geht es um Fehler in Python. Ich hoffe, Sie haben viel von dieser Vorlesung und der vorherigen Vorlesung verstanden von dieser Vorlesung und der vorherigen Vorlesung verstanden Es ist relativ einfach, Fehler zu beheben, aber manchmal gibt es Fehler, bei denen Sie möglicherweise Schwierigkeiten haben, sie zu verstehen und zu beheben. Später werden wir uns zum Beispiel mit Bibliotheken und manchmal mit Bibliotheken befassen , da sie verschiedene Arten von Fehlern aufweisen. müssen sich jedoch keine Sorgen machen, denn es gibt andere Dinge , die Sie für einen Fehler tun können , den Sie nicht verstehen. Darüber werde ich in der nächsten Vorlesung sprechen . Ich werde dich dort sehen, siehst du. 113. 112. So behebst du schwierige Fehler: Großartig. Willkommen wieder zu diesem neuen Video. Dies ist das dritte Video über Fehler. Wir haben über Syntaxfehler gesprochen, wir haben über Ausnahmen gesprochen, und jetzt werden wir darüber sprechen, wie Sie einen Fehler beheben können, wenn Sie die Nachricht nicht verstehen. Konzentrieren wir uns auf diesen Fehler. Ein Divisionsfehler von Null. Falls Sie gut in Mathematik wären, könnten Sie diese Fehler leicht beheben. Sie werden verstehen können, dass man eine Zahl nicht durch Null teilen kann. Sie würden dies beheben, indem Sie diesen Ausdruck hier entfernen. Wenn Sie jedoch nicht so gut in Mathematik wären, Ihnen möglicherweise schwer, dies zu verstehen. In diesem Fall können Sie diesen Fehler am schnellsten beheben, indem Sie diese Zeile hierher kopieren, Control C. Wählen Sie sie aus, kopieren Sie sie mit Control C oder klicken Sie mit der rechten Maustaste und kopieren Sie sie dorthin und gehen Sie dann zu Google. Fügen Sie es einfach ein. Jetzt, bei Google, haben diese rund 100.000 Ergebnisse erzielt. Python ist sehr beliebt und du wirst für fast jedes Problem , das du mit Python hast, eine Lösung bekommen. Bevor Sie sich die Dokumentation ansehen oder irgendwo eine Frage stellen, ist es sehr wahrscheinlich, dass jemand anderes Ihr Problem hatte, bevor er eine Frage dazu gestellt hat Ihr Problem hatte, bevor , und auch dafür gibt es eine Lösung . Eine sehr gute Website für Fragen und Antworten ist stockoverflow.com Fast immer, wenn Sie bei Google nach einem Fehler suchen, werden die ersten Ergebnisse von Suck Overflow stammen Jemand hat eine Frage mit diesem Titel gestellt. Ich habe einen Fehler, wenn ich das Programm mit Python ausführe. Es ist genau derselbe Fehler wie du das magst. So vermeiden Sie diesen Fehler. Es geht auch um die gewünschte Ausgabe. Auf diese Frage gibt es zwei Antworten . Die Antwort mit dieser grünen Markierung hier ist akzeptierte Antwort und hat die meisten Stimmen. 11 und dafür gibt es zwei negative Stimmen, minus zwei. Tatsächlich ist der Unterschied zwischen Plus- und Minus-Stimmen zugunsten von Nein-Stimmen. Dies sind zwei verschiedene Antworten, die Sie sich ansehen können. Normalerweise möchten Sie sich die akzeptierte Antwort ansehen , die die Lösung enthält. In diesem Fall hat dies jedoch auch die Erklärung. Es heißt, du kannst nicht durch Null teilen. Dies führt dazu , dass Python einen Fehler ausgibt. Das ist immer noch eine gute Antwort, und ich denke, sie hat dieses Stimmengleichgewicht nicht verdient. Aber dieser gibt eine Lösung für den Umgang mit einem Fehler , die uns zu einem anderen Konzept führt , nämlich dem Umgang mit Fehlern in Python. Nehmen wir an, Sie haben ein Programm, Sie haben eine Funktion, die zwei Eingabewerte erhält und diese beiden Eingabewerte dann dividiert Manchmal kann der Benutzer jedoch Null als zweite Eingabe übergeben. In diesem Fall würde Ihr Programm abstürzen, wenn Sie sagen, der erste Wert wäre zwei und der zweite Wert wäre Null, würde Ihr Programm abstürzen, und wenn Sie möchten, können Sie die Ausnahmebehandlung verwenden , um zu verhindern , dass das Programm abstürzt Das können Sie mit Try-and-Accept-Anweisungen tun. Wie dem auch sei, wir werden das in den nächsten Vorlesungen in diesem Abschnitt behandeln . Es ging darum, bei Google nach einem Fehler zu suchen Google nach einem Fehler zu und Sie können leicht die Lösung dafür finden. Wie du siehst. Das sind sehr klare Fragen. Es ist eine große Community und jeder kann positiv und negativ abstimmen und Kommentare abgeben. Im Grunde sind die Antworten sehr genau. Sie finden jedoch nicht immer eine Antwort bei Google. In diesem Fall ist es an der Zeit , Ihre eigene Frage zu stellen. Als Erstes überprüfen Sie erneut, ob Sie den Fehler verstanden haben , und beheben ihn, wenn Sie ihn verstehen. Die zweite Sache ist, dass Sie bei Google suchen . Wenn die ersten beiden Ihr Problem nicht lösen, ist es an der Zeit, eine Frage zu stellen. Sie können entweder innerhalb des Kurses eine Frage stellen. Während Sie sich ein Video ansehen, können Sie unter Q&A ( Frage und Antwort) stöbern und eine Schnellsuche durchführen, wenn Sie hier eine Antwort auf Ihre Frage finden Falls Sie sie nicht finden können, können Sie eine Frage stellen oder Sie können eine Frage auf Stock Overflow Du kannst diese Schaltfläche hier verwenden, eine Frage stellen und ich helfe dir gerne hier auf der Kursoberfläche, Bereich Fragen und Antworten, oder andere Leute können dir auch auf Stock Overflow weiterhelfen. Es ist jedoch sehr wichtig, etwas zu wissen. Die Struktur Ihrer Frage ist sehr wichtig, um eine gute Antwort zu erhalten. Manchmal gibt es sehr schlechte Fragen wie, sagen wir, mein Code funktioniert nicht, wie behebe ich das? Das ist alles. Mit diesen wenigen Informationen ist es sehr schwierig, eine gute Antwort zu bekommen. Es ist sehr wichtig, eine gute Frage zu stellen und ich werde dir in der nächsten Vorlesung zeigen, wie man eine gute Programmierfrage stellt. Das ist auch eine sehr wichtige Vorlesung. Das siehst du dort. 114. 113. So stellst du eine gute Programmierfrage: Hallo, nochmal und willkommen zu einem weiteren Vortrag. In dieser Vorlesung zeige ich dir, wie man eine gute Programmierfrage stellt. Wie ich in der vorherigen Vorlesung erwähnt habe, ist es sehr wichtig, eine gute Programmierfrage zu stellen, um eine gute Antwort zu erhalten. Lassen Sie mich Ihnen zunächst zeigen, was eine Frage zur Bettprogrammierung ist. Ich klicke zum Beispiel auf Frage stellen und hier ist der Titel der Frage. Eine Frage zur Bt-Programmierung hätte einen sehr allgemeinen Titel wie diesen. Hier ist der Hauptteil der Frage , in dem Sie Ihre Frage ausführlich beschreiben müssen. Manche Leute sagen einfach, ich habe einen Fehler bekommen, als ich versucht habe, zwei Zahlen einzugeben. Ich unterbreche die Frage einfach. Eine bessere Frage wäre, den Code, den Sie so ausgeführt haben, dort einzufügen. Dies reicht jedoch auch nicht aus , da Sie auch die Fehlermeldung anzeigen müssen. Lassen Sie mich das löschen und eine gute Programmierfrage wäre , wenn Sie über Fragen sprechen , die einen Fehler enthalten, Fragen, die über einen Fehler sprechen , den Sie in Ihrem Code haben. Das ist dein Code. Ein guter Titel wäre es, die Fehlermeldung aufzunehmen. Dieser würde gut passen. Wenn es sich um eine sehr lange Nachricht handelt, können Sie festlegen dass nur der Name des Fehlers enthalten ist. Und dann wäre eine gute Frage, hallo. Ich habe den folgenden Code ausgeführt und erwartet, dass im letzten Print-Main eine Division angezeigt wird, aber ich habe einen Fehler bekommen . Hier ist mein Code. Also hast du den Code dort eingegeben, das gesamte Skript. Sie sich keine Sorgen, wenn Ihre Frage lang ist Es ist besser, lang zu sein als unvollständig zu sein. Hier ist der Fehler. Sie hier sicher, dass Sie auch Ihren gesamten Fehler-Traceback einschließlich der Ausgabe angeben Von dieser Zeile der Befehlszeile bis zur nächsten Zeile. Diese ganze Sache geht auf deine Frage zurück. Kopiere es einfach. Mach dir keine Sorgen, wenn es lang ist. Kannst du helfen? Das wäre eine gute Programmierfrage. Nun, hier fehlt noch etwas sehr Wichtiges, und das ist die Hervorhebung des Codes. Sie müssen den Code auswählen und hier auf dieses Symbol klicken. Der Fehler auch. Lassen Sie mich die Frage stellen. Externe Links müssen kostenlose Bildungsinhalte enthalten Klicken Sie einfach auf Weiter. Hier ist eine Frage, hier sieht es aus wie am anderen Ende. Diese Frage hat vier gute Elemente, die sie zu einer guten Frage machen. Das erste Element besteht darin, dass der Autor erwähnt was er oder sie als Ausgabe des Skripts , das er gerade ausgeführt hat, erwartet hat. Es heißt also, dass ich erwartet hatte, die Aufteilung in der letzten gedruckten Erklärung zu bekommen, das ist diese hier, aber ich habe einen Fehler bekommen. Als Erstes müssen Sie die erwartete Ausgabe angeben. Sie müssen erklären, was Sie erwartet haben, denn andernfalls, wenn Sie nicht erklären, was Sie erwarten , weiß die andere Person, die Ihnen helfen möchte , das Ziel Ihres Codes oder Ihrer Frage nicht und weiß daher nicht, wie sie Ihnen helfen kann, dieses Ziel zu erreichen. Das Erste, was erwartet wird, ist das Erste. Zweitens müssen Sie Ihren gesamten Code einbeziehen. Und stellen Sie sicher, dass Sie Ihren Code als Text einfügen. Es ist besser, Text als Bildschirm anstelle von Screenshots zu verwenden , da Text, die Person, die Ihnen helfen möchte, Ihren Code kopieren und auf ihrem Python-Interpreter ausführen kann Ihren Code kopieren und auf ihrem Python-Interpreter ausführen Wenn Sie jedoch Screenshots hinzufügen, handelt es sich um Bilder, und es ist für andere Personen schwierig , Ihren Code auszuprobieren Wenn du das bei Stack Overflow stellst, würde deine Frage geschlossen werden, denn wenn du sie mit einem Screenshot statt mit der Textversion deines Codes stellst, würde die Frage nahe kommen, weil sehr strenge Regeln Stack Overflow eine qualitativ hochwertige Frage - und Antwortseite Das ist das zweite Element. Das dritte Element ist, dass Sie Ihren gesamten Bildschirm mit einbeziehen müssen , tut mir leid Von Anfang bis Ende, das war das dritte Element und das letzte Element, das vierte Element ist, dass Sie Ihren Code hervorheben müssen Auf diese Weise sehen Sie, dass dies viel sichtbarer ist und für andere einfacher zu beheben ist. Die Kursoberfläche bietet die Funktion, dass Sie Ihren Code hervorheben können. Bei Stock Overflow haben Sie auch diese Möglichkeit. Stellen Sie einfach eine Frage, schreiben Sie Ihren Werdegang und markieren Sie ihn und verwenden Sie dann diese geschweifte Klammer Ja, das ist es. Wenn Sie gute Fragen stellen, stehen die Chancen gut, dass Sie auch eine gute Antwort bekommen. Ich hoffe, das macht Sinn und ich hoffe, ich habe dir etwas gezeigt , das du nicht wusstest, und ich werde später mit dir sprechen. Wir sehen uns. 115. 114. Den Code selbst mit Fehlern umgehen lassen: Hallo, nochmal. Lassen Sie uns noch einen Vortrag über Fehler in Python halten. In dieser speziellen Vorlesung geht es um den Umgang mit Fehlern. Umgang mit Fehlern kann vorerst ein fortgeschrittenes Konzept sein, das es zu verdauen gilt, da Sie immer noch die Grundlagen von Python durcharbeiten und noch keine echte Anwendung gesehen Aber später werden wir die Fehlerbehandlung verwenden , wenn wir reale Anwendungen erstellen Sie werden also später die Fehlerbehandlung besser verstehen . Konzentrieren wir uns zunächst auf die Syntax und versuchen, so viel wie möglich zu verstehen. Ich werde hier ein Beispiel machen, das ich bereits erwähnt habe. Nehmen wir an, wir haben eine Funktion , die auf diese Weise eine Division zwischen zwei gegebenen Zahlen durchführt. Gib A geteilt durch B zurück. Dann rufst du die Funktion auf. Teile eins, zwei. In diesem Fall versucht die Funktion, eins durch zwei zu teilen. Lassen Sie mich die Ausgabe ausdrucken, damit wir sie auf dem Terminal sehen können. Gehe zum Terminal und führe das Skript aus, du erhältst 0,5. Nun, das ist gut. Wenn der Benutzer dort jedoch , sagen wir, Null eingibt, führen Sie die Ausführung aus und Ihr Programm stürzt ab, sodass ein Fehler angezeigt wird. Nun, dieser hier ist ein Beispiel für eine längere Fehlermeldung, die ich bereits in den vorherigen Videos erwähnt habe und die besagt , dass Sie möglicherweise mehr als einen Fehler in Ihrem Trace-Back haben könnten . Hier steht zum Beispiel Dateizeile vier, diese Zeile hier. In dieser Zeile hat Python den Fehler zuerst erfasst. Im Grunde versuchte Python, diese Zeile auszuführen, konnte es aber nicht. Es hat das nicht geschafft , weil diese Zeile versucht hat, die Informationen von dieser Funktion abzurufen , und diese Funktion versuchte, diese mathematische Operation mit Null nach der Division auszuführen. Das ist also nicht möglich und Python weist hier darauf hin. Das ist der Hauptfehler in der Zeile in diesem Ausdruck. Darauf sollten Sie sich konzentrieren. Wenn Sie jedoch Fragen stellen, sollten Sie, wie bereits erwähnt, die gesamte Fehlermeldung in Ihre Frage aufnehmen . Zurück zur Behandlung von Fehlern Ich versuche hier zu sagen, dass Python ausgeführt werden soll, wenn Sie hier andere Funktionen und andere Codezeilen haben hier andere Funktionen und andere Codezeilen , die Sie ausführen möchten. Aber wenn der Benutzer hier diese Nullzahl übergeben würde, würden die anderen Zeilen nicht ausgeführt werden. Ihr Programm würde abstürzen und das wollen Sie nicht. Um dies zu vermeiden, verwenden Sie Try and Accept. Im Grunde versuchen Sie, die Ausnahme zu erfassen. Um die Ausnahme zu behandeln. Der Weg, das zu tun, ist ziemlich einfach. Versuch, du sagst Versuch und gib A B zurück. Das muss so eingerückt sein Try ist eingerückt, weil es sich unter der Funktionsdefinition befindet, und Return wird eingerückt, weil es sich unter dem Dann müssen Sie außer Execute. Dies muss sich auf derselben Einrückungsebene wie tr befinden. Sie sind derselbe Block. Außer wenn es eine Ausnahme gibt, ist das, was Sie tun möchten, Prio, Sie teilen durch Null oder es ist bedeutungslos Lass mich das jetzt versuchen. Und du verstehst, dass Zero-Division bedeutungslos ist. Entschuldigung, ich wollte hier zurückschicken, nicht drucken. Ich erkläre dir , warum du da keine findest. Sie haben keine als Ausgabe erhalten, weil die Funktion versucht hat, diesen Ausdruck auszuführen, aber sie hat einen Fehler bekommen, also ignoriert sie diese Zeile, aber sie hat einen Fehler bekommen, also ignoriert sie diese Zeile, führt sie nicht aus und geht dann zur nächsten Zeile Diese Zeile wird ausgeführt, wenn sie nicht ausgeführt wird. Es ist also bedeutungslos, die Nulldivision auszudrucken, aber es wurde auch keine ausgedruckt denn wenn Sie eine Funktion ausführen , die keine Rückgabeanweisung hat, wie in diesem Fall, hatten wir hier eine Print-Anweisung, Print-Funktion, keine Return-Anweisung In diesem Fall kann die Funktion , wenn sie nichts zurückgibt, auch eine Druckfunktion oder eine andere Funktion haben Wenn es jedoch keine Rückmeldung gibt, wird keine ausgedruckt. Im Grunde führt es die anderen Verfahren wie die Druckanweisung aus und druckt die Aussage aus Aber wenn es keine Rückmeldung gibt, druckt es keine aus Wie dem auch sei, wiederholen Sie die Ausführung und in diesem Fall erhalten Sie nur, dass die Nulldivision bedeutungslos ist Im Grunde genommen, wenn Sie hier andere Codezeilen wie diese hätten , würden diese auch ausgeführt werden Das geschieht mithilfe des Try-and-Accept-Blocks , der sicherstellt, dass der Codefluss fortgesetzt wird. Eine weitere wichtige Sache, die Sie beachten , ist, dass es ratsam ist , hier den genauen Namen des Fehlers zu verwenden , den Sie akzeptieren möchten. Also Null Divisionsfehler. Wie Sie sehen, wurde dies blau dargestellt, was bedeutet, dass dies tatsächlich ein Python-Schlüsselwort ist, das von Python erkannt wird. In diesem Fall erhalten Sie, wenn Sie das ausführen , dieselbe Ausgabe wie diese. Oder wenn du dort eine Zahl übergibst , aus der es möglich ist, eine Division zu erhalten, bekommst du diese. Das mit dem Backslash tut mir leid. Ich habe das versehentlich wieder in meinem internen Execute eingegeben , also verstehst du Was ich über Zero Division Error sagen will , ist , dass manchmal andere Arten von Fehlern in Ihrem Code auftreten können manchmal andere Arten von Fehlern in Ihrem Code Andere Arten von Ausnahmen. Nehmen wir an, Sie haben dort einen Namensfehler und sagen , dass Sie mit Ausnahme aller Fehler, die Sie nicht bestehen, im Grunde alle Arten von Fehlern dort mit einbeziehen. Das ist ein bisschen gefährlich für Ihren Code, weil Sie möglicherweise Probleme haben , die Sie nicht bemerken und die Sie im Grunde ignorieren, aber das sollten Sie nicht Du solltest da explizit so spezifisch sein. Wenn es andere Arten von Fehlern gibt, wie z. B. einen Namensfehler , wird dieser Namensfehler Ihr Programm zum Absturz bringen . Sie wissen, was vor sich geht , und Sie müssen genau sein. Wenn Sie auch diesen Fehler behandeln möchten, können Sie hier eine weitere Ausnahme hinzufügen, mit Ausnahme von beispielsweise einem Namensfehler. Ja, hier geht es um die Behandlung von Fehlern in Python. Ich hoffe, das macht Sinn. Ich hoffe, ich erkläre das gut über Fehler. Ich werde in den nächsten Vorlesungen mit dir sprechen. 116. 115. Einführung in das Computer Vision mit Python +: Hallo, willkommen in diesem neuen Bereich. Und in den Vorlesungen dieses Abschnitts werden Sie Computer Vision mit Python lernen. Ich werde Computer Vision in einer Minute erklären. Das werden wir also in diesem Abschnitt lernen. Und dann werden wir im nächsten Abschnitt eine Anwendung erstellen, die bewegte Objekte von der Computer-Webcam aus erkennt und die Zeiten speichert und visualisiert , zu denen die Objekte den Videoframe betreten und verlassen haben Das ist also ein Anwendungsbereich von Computer Vision. Nun, vielleicht haben Sie eine Vorstellung davon, was Computer Vision ist, aber wenn nicht, werde ich es jetzt erklären. Computer Vision ist also der Bereich, sich mit der Erfassung und Verarbeitung von Bildern befasst und Entscheidungen auf der Grundlage dieser oder der Bilder trifft. Sie geben also ein Bild an den Computer weiter, und der Computer versucht, es zu verstehen, und er kann bestimmte Dinge tun, zum Beispiel kann er Ihnen sagen, wie viele Phasen das Bild hat und welche Farbe das Bild dominiert, und so weiter Ich weiß, Computer sind Müll. Ich meine, du musst ihnen genau sagen, was sie tun sollen. Und hier kommt Python ins Spiel. Wir werden Python verwenden, um Bilder zu laden und zu verarbeiten und Dinge wie Gesichts - und Bewegungserkennung durchzuführen. Heute umfasst Vision sowohl Bilder als auch Videos, da es sich bei Videos einfach um Stapel von Bildern handelt , die sehr schnell angezeigt Computer und damit Python verwenden also dieselben Befehle, um Bilder und Videos zu lesen. Und Sie können Computer Vision mit Python mit OpenCV machen. OpenCV steht für Open Source Computer Vision. Und die Ise-Bibliothek wird nicht nur in Python, sondern auch in anderen Programmiersprachen verwendet in anderen Programmiersprachen , um Computer-Vision-Aufgaben zu erledigen. In diesem Abschnitt werde ich Ihnen OpenCV vorstellen und Sie werden lernen, wie Sie es verwenden können, indem Sie Gesichter anhand von Bildern erkennen Im nächsten Abschnitt werden wir dann tiefer eintauchen und Videos mit OpenCV verarbeiten und einige sich bewegende Objekte in Echtzeit per Webcam-Video erkennen in Echtzeit Also, ja, das ist über diese Vorlesung, und lassen Sie uns weitermachen und OpenCV in der nächsten Lektion schnell einrichten danach damit arbeiten Also ja, danke und wir sehen uns in der nächsten Vorlesung. 117. 116. Laden, Anzeigen, Größenänderung und Erstellen von Bild ++s mit OpenCV: Großartig. Lassen Sie uns also weitermachen und ein bisschen mit OpenCV herumspielen In dieser Vorlesung lernen Sie insbesondere, wie Sie Bilder mit OpenCV in Python laden, und Sie lernen, wie Sie sie anzeigen, ihre Größe ändern und dann die Größenänderungsbilder in neuen Bilddateien speichern Laden Sie also Bilder, zeigen Sie sie an, ändern Sie ihre Größe und schreiben Sie sie. Und ich habe ein schönes Bild von der Galaxie, also werde ich damit herumspielen Das erste, was Sie tun möchten, ist die Bibliothek zu importieren. Die zweite Sache ist, dass Sie das Bild in Python laden möchten. Das Bild würde also der REIT-Methode cv two dot image entsprechen. Die Methode erwartet jetzt also den Pfad zu dem Bild, das Sie in Python laden möchten. Und das wäre Galaxy Dot JPG. Also mein Skript, eine Punkt-Pi-Datei, befindet sich im selben Verzeichnis wie Galaxy Dot JPG. Also muss ich hier nur den Dateinamen übergeben. Und dann gibt es noch einen weiteren Parameter für das Bild für ihn bei method. Und dann benötigt dieser Parameter drei Argumente. Dieser Parameter gibt nun an, wie Sie das Bild in Python lesen möchten. Möchten Sie es also als RBG-Bild lesen, was bedeutet, dass Sie drei Bänder in Ihrem Bild haben möchten Sie möchten also ein Farbbild mit einem roten, blauen und einem grünen Band Wenn Sie also das Bild so lesen möchten, wie es mit den Farben ist, sollten Sie es hier weitergeben. Wenn Sie das Bild als Schwarzweißbild in einer Graustufe lesen möchten, sollten Sie Null übergeben. Und wenn Sie ein Graustufenbild haben, bedeutet das, dass Ihr Bild ein Band Und ich komme zurück zu den Bands und erkläre sie gleich Wir haben also auch minus eins. Das bedeutet ein Farbbild, aber Sie haben auch einen Alphakanal, was bedeutet, dass Ihr Bild Transparenzfunktionen hat. Wenn Sie also Operationen anwenden, die Transparenz erfordern, können Sie dies beim Laden des Bilds mit einem Argument minus eins hier nachlesen . Okay, also ich würde gerne Null ausprobieren. Großartig. Bevor ich das Bild zeige, bevor ich das Bild auf dem Bildschirm zeige, möchte ich, dass Sie verstehen, worum diesem Bildobjekt geht. Also würde ich den Typ davon einfach so ausdrucken wollen. Führe das Skript aus. Skript eins. Ja. Ja, und versuche es erneut. Das ist also das dimensionale Array von NumPin. Und wenn du willst, kannst du das ausdrucken. Und Sie werden das tatsächliche Num-Pi-Array sehen. Das ist also ein zweidimensionales Array mit Werten auf der horizontalen Achse und auch auf der vertikalen Achse. Denken Sie jetzt an das Bild, und das wäre der allererste, also der obere linke Intensitätswert eines ersten Pixels. 14 wäre also zum Beispiel der Intensitätswert in der Graustufe. Für das erste Pixel des Bildes, also für das obere linke Pixel des Bildes. Und dann das zweite Pixel und so weiter, und dann haben Sie diese Punkte, was bedeutet, dass Python die Liste nicht anzeigen kann, die lange Liste hier drin, weil Sie ein paar tausend Werte in der ersten Zeile haben , und dann haben Sie die zweite Pixelreihe im Bild und die dritte und so weiter. Und das ergibt die Matrix der Pixel des Bildes. Und wenn Sie wissen möchten, wie viele Zahlen, wie viele Werte Sie in horizontaler Richtung und wie viele Werte Sie in vertikaler Richtung haben, können Sie die Bildform drucken. Okay. Nehmen wir an, die Bildauflösung beträgt 14 85 mal 990. Python speichert das Bild also als Schiedsrichterarray als Zahlenmatrix , so einfach ist das Wenn Sie das dimensionale Array Ihres Bildes überprüfen möchten , können Sie das mit diesem Ausdruck tun Und Sie sehen, dass Sie zwei Dimensionen haben. Nun, wenn das ein Farbbild wäre, also mit drei Fledermäusen rot, blau und grün, würden sich die Dinge ein wenig ändern. Also hast du drei Dimensionen. Und Sie sehen auch, dass das neue Array ein bisschen anders ist. Hier haben Sie also Werte für jedes der Bänder für Grün, für Rot bis Grün und Blau. Also möchte ich bei dem grauen Bild bleiben. Und was ich jetzt tun kann ist, dass ich das Bild auf dem Bildschirm anzeigen kann. Und dafür willst du das Bild verwenden, also zeige ich die Methode. Dadurch wird ein Fenster angezeigt und Sie möchten dem Fenster einen Namen geben, also möchten Sie diesem Fenster einen Titel geben. Sagen wir Galaxie. Und was Sie hier übergeben, ist das Bildobjekt. Also dieser. Großartig. Und dann möchten Sie eine Zeit angeben, zu der Ihr Fenster geschlossen werden soll , weil dadurch das Fenster angezeigt wird, aber Sie möchten auch einige Funktionen definieren , damit der Benutzer das Fenster schließen kann. Wenn Sie hier Null eingeben und der Benutzer eine beliebige Taste drückt, wird das Fenster geschlossen. Lassen Sie mich das auf Cb zwei ändern. Wenn Sie also Null eingeben, kann der Benutzer das Fenster durch Drücken einer beliebigen Taste schließen. Wenn Sie eine Zeit eingeben möchten, könnten Sie 2000 sagen und das bedeutet 2000 Millisekunden Das bedeutet also 2 Sekunden. Also haben wir gesagt, wie der Benutzer das Fenster schließen möchte, und dann möchten Sie angeben, was zu tun ist, wenn der Benutzer eine Taste drückt oder 2 Sekunden wartet Sie möchten also alle Fenster zerstören. Das ist eine Methode, die das Fenster schließt. Gut. Mal sehen, was passieren wird. Okay, wir haben das Bild angezeigt bekommen und es hat zwei Sagen gewartet und dann ist es geschlossen Wenn Sie es auf Null setzen, bleibt das Bild dort. Und wenn Sie die Taste drücken, wird es geschlossen. Lass mich das Bild noch einmal zeigen. Der Grund dafür, dass das Bild nicht auf meinen Bildschirm passt, ist, dass das Bild, wie Sie hier in diesen Werten sehen, 1485 Pixel hoch ist Also die Höhe, das ist die Höhe, und sie ist 990 Pixel breit Meine Bildschirmauflösung ist also auf 1.280 mal 720 eingestellt. Das bedeutet, dass dieses Bild mit dieser Größe nicht auf meinen Bildschirm passt, weil mein Bildschirm dafür zu klein ist Lassen Sie mich das in diesem Fall schließen. Was Sie tun können, ist , die Größe des Bildes zu ändern und dann das präzise Bild anzuzeigen Also laden wir das Bild und bevor wir es zeigen bevor wir es an die I'm Show-Methode übergeben, möchten wir sagen, die Größe ändern Bild. Das wäre gleich. CV Two ändert die Größe, und das würde zwei Parameter erhalten Das erste ist natürlich ein Bildobjekt, dessen Größe Sie ändern möchten Also IMG ist unsere Variable, und dann möchten Sie ein Tupel mit den neuen Dimensionen angeben , ich würde sagen 1.000 mal 500 Und dann willst du das neue Bild hier übergeben. Was hier passiert, ist, dass Python tatsächlich die Größe des Num-Pi-Arrays ändert. Es wird also das Array mit dieser Anzahl von Werten in Pixeln verwenden und ein Array mit diesen neuen Dimensionen erstellen. Was dort also passieren wird, ist, dass Python diese Werte interpoliert Es hat hier also ziemlich viele Werte, aber dann geht es von hier zu diesem Wenn es also sieht, sagen wir, es hat vier für einen Wert und dann sechs für den Nachbarwert. Und was Python tun wird , ist, dass es im Grunde vier und sechs bekommt und daraus einfach einen Wert macht. Sagen wir also fünf. Das ist im Grunde die Idee. Also interpoliert es die Werte und zeigt dann das interpolierte Bild auf dem Was in unseren Augen ziemlich gut aussieht. Okay, lass uns das sehen. Und das ist das Bild. Und Sie sehen, dass das ein bisschen weit gedehnt ist. Es war also ein großes Bild, aber jetzt ist es ziemlich breit. Und weil das eigentlich die Breite des Bildes ist und das ist die Höhe. Also, wenn du willst, kannst du 501.000 sagen. Also nochmal, und jetzt siehst du mehr oder weniger das Zweier-Verhältnis des Bildes Wenn Sie jedoch das Bildverhältnis beibehalten möchten, sollten Sie hier etwas weiter gehen. Nehmen wir also an, wir möchten eine Größe anzeigen, die halb so groß ist, dass das Verhältnis des Bilds beibehalten wird. Was wir also tun können, ist, Zugang zu diesen Werten zu benötigen. Und wir können diese Werte aus der Shape-Methode abrufen. Das erzeugt also ein Werkzeug mit diesen beiden Werten, und dann gehen wir hierher und sagen, Bild, Form Und das wäre dieser Wert, also 990, der einen Index von eins hat Und dann haben wir wieder Bild und Form mit dem Index Null für diese Zahl. Und dann wollen wir das durch zwei teilen. Okay. Und ich rechne damit, dass ich einen Fehler bekomme, aber was ist S. Also ja, wir haben einen Fehler. Es ist ein Typfehler. Das erwartete Integer-Argument hat Float. Aber was wir hier tun, ist, dass wir, wenn wir diese Zahl durch zwei teilen, eine Gleitkommazahl erhalten. Also würden wir so etwas wie 742,5 bekommen. In diesem Fall wollen wir das in eine Ganzzahl umwandeln Aus 742,5 wird also 742. Okay. Und lassen Sie uns die Konsistenz auch hier in Ganzzahlen beibehalten. Lass uns sehen Wir haben hier eine ungültige Syntax, also zeigt sie uns auf Zeile 11, irgendwo am Anfang, was ziemlich irreführend sein kann Sie möchten also vor dieser Zeile sehen, die hier ist. Und Sie können sehen, dass diese Klammer hier hier geschlossen wird. Wir brauchen also eine weitere Klammer, die hier in der ersten Klammer schließt. Also spar dir das. Versuch es nochmal. Und dieses Mal sieht das Bild gut aus. Sie lernen also, wie man ein Bild in Python lädt, und Sie lernen, wie man die Größe eines Bildes ändert wie man ein Bild auf dem Bildschirm anzeigt Und jetzt schreiben wir das Bild zur Größenänderung in eine neue Datei Dafür sollten Sie die IM-Schreibmethode verwenden. Also Bildblatt. Und Sie möchten dem neuen Bild einen Namen geben, Galaxy, sagen wir, geändertes Punkt-JPG Und dann übergeben Sie das Bildobjekt, das Sie in dieser Datei speichern möchten Das Komma wird hier also salzig, und das Bild, das Sie speichern möchten, ist ein präzises Bild. Das ist es. Hinrichten. Und wir haben die alte Bildgröße im Handumdrehen geändert. Python erhält also das Numpy-Array. Ich füge es ein, sodass es seine Größe ändert, und dann zeigt es es auf dem Also das ist Galaxy, das hier, und dann können wir das schließen Und hier haben wir unser neues Image. Also die Größe der Galaxie ändern. Wenn Sie also zu dem Ordner gehen, in dem sich diese Dateien befinden, werden Sie feststellen, dass dieses Bild neue Dimensionen hat Also 495 mal 742. Und das wollte ich dir in dieser Vorlesung beibringen. Ich hoffe, es hat Ihnen gefallen und wir sprechen später mit Ihnen. 118. 117. Erklärung der vorherigen Übung: Nun, ich hoffe, Sie lösen die Übung, und ich glaube, sie war nicht schwierig. Mein Ziel dort war es, Sie an OpenCV-Code zu gewöhnen. Warum nicht eine For-Schleife üben? Wie Sie sich vorstellen können, würde diese Übung mit einer For-Schleife verkauft werden. Lassen Sie mich also schnell den Code Zeile für Zeile durchgehen. Wir haben also zwei wichtige OpenCV, SL CV zwei und die Globe-Bibliothek Wenn Sie sich daran erinnern können, findet Globe anhand eines bestimmten Musters die Pfadnamen einiger Dateien In diesem Fall habe ich zum Beispiel diese JPG-Dateien hier, also ein, zwei, drei, vier, fünf Bilder. Und ich sagte, okay, erstelle eine Liste von Dateinamen, die alles im ersten Teil und dann JPG als Erweiterung enthalten . Das erzeugt also eine Liste wie sagen wir C und dann den Pfad hier und dann Galax C, das GPG Und dann der andere Bildpfad und so weiter, du hast die Idee Und dann müssen wir diese Liste für jeden Bildpfad in der Liste in dieser Liste durchgehen für jeden Bildpfad in der Liste in dieser Liste Wir werden diese Operationen für jedes der Listenelemente durchführen. Also lesen wir zuerst diesen Bildpfad. Okay, diese Bilddatei hat tatsächlich ein Schwarzweißbild. Null ist also ein Flag-Argument, was eigentlich eine Bildrate von Schwarz-Weiß in der Graustufe impliziert . Dann erstellen wir eine Variable, in wir die Bilder zur Größenänderung speichern Das Bild ist also 100 mal 100. Ich übergebe hier das Originalbild und die Größe, die neue Größe, die das Bild erhalten wird. Dann wollen wir das Bild nur zur Demonstration zeigen. Das ist nicht wirklich wichtig, aber Sie können sich damit die Bilder ansehen , deren Größe geändert wird. Und das ist der Name des Fensters. Und dann übergebe ich hier eine Wet-Key-Methode, und 500 bedeutet 500 Millisekunden Also wird jedes Bild angezeigt und es wird eine halbe Sekunde, 500 Millisekunden warten Und dann, nach dieser halben Sekunde, geht Python zur nächsten Zeile und dann zur nächsten und dann geht es zum nächsten Punkt der Liste und so weiter. Warten Sie also 500 Millisekunden, und dann haben wir nach Ablauf dieser Zeit alle Fenster zerstört nach Ablauf dieser Zeit alle Fenster Und dann schreiben wir das verkleinerte Bild. RE war also eine Variable, die das Bildobjekt, das in der Größe geänderte Bildobjekt, enthält der Größe geänderte Und das hier, alles ist ein neuer Name der Datei. Also, was wir hier bekommen, ist, dass wir am Anfang des Bildes einen präzisen Namen haben werden am Anfang des Bildes einen präzisen Namen haben Und dann, gleich danach, haben wir einen Namen für das Originalbild Also hätten wir zum Beispiel für Galaxy ReciseGalaxy Das Bild hier wäre hier Galaxy Dot JPG, was dieses hier ist Und hier, weil sich das Skript in diesem Ordner befindet, würde diese Liste tatsächlich so aussehen wie Galaxy Dot JPG, dann Kangaroos, weißt du, Australien, Punkt GBG und Das ruft also die relativen Pfade der Dateien ab. Wir bekommen nicht den vollständigen Pfad. Okay, ich hoffe, das ist klar. Wenn wir die Größe von Galaxy geändert haben, könnten wir einen Unterstrich hinzufügen, damit wir das präzise Wort vom Namen des anderen Bildes unterscheiden . Großartig Lassen Sie mich dieses Python-Skript ausführen. Also Alpha-Sekunde, Alpha-Sekunde und, ja, es ist geschafft. Und lass uns die Bilder überprüfen. Ab hier sind es also die Originalbilder und das sind die Bildprodukte. Sie können hier also sehen, dass all diese 100 mal 100 sind. Und sie sind in einer Graustufe. Okay, das ist es. Wir sehen uns in der nächsten Vorlesung. 119. 118. Gesichter in Bildern mit OpenCv und Python erkennen: Hallo, willkommen zu dieser neuen Vorlesung. Und hier lernst du, Gesichter zu erkennen. Und wir werden OpenCV mit Python verwenden , um ein oder mehrere Gesichter aus einem Bild zu erkennen Also, wie funktioniert die Gesichtserkennung im Grunde genommen? Nun, die Idee ist, dass jemand einige Kaskaden erstellt hat, denen es sich im Grunde um einige XML-Dateien wie diese Diese EML-Datei enthält Informationen über die Merkmale, die ein Bild eines Gesichts Wir sprechen also über das Verhältnis der Schatten von Augen, Nase und Lippen und all diese Merkmale. Diese Pixelintensitätszahlen werden in dieser XML-Datei gespeichert, die erstellt wurde, indem einige Bilder mit Gesichtern als Trainingsmuster Im Grunde sagen Sie Ihren Computern: Okay, das sind alles Gesichter, und dann verwenden Sie Software wie OpenCV, um solche XML-Dateien zu erstellen Diese werden also harte Kaskaden genannt, und das ist eine harte Kaskade für ein Objekt mit frontalem Gesicht Und wenn Sie andere Objekte möchten, finden Sie sie in diesem Sie haben also Ganzkörper, linkes Auge und Unterkörper und so weiter. Alternativ können Sie einen Abschnitt mit Ressourcen in dieser Vorlesung verwenden . Sie können es in einer Zip-Datei mit allen vorhandenen XML-Hard-Kaskaden herunterladen allen vorhandenen XML-Hard-Kaskaden Aber in dieser Vorlesung werden wir uns auf das Front-of-Face konzentrieren. Also werden wir diese Kaskade verwenden, um einen Pass zu erkennen. Jetzt funktioniert es so , dass wir das Bild in Python laden und Python dann mitteilen, dass dies ein Modell ist , nach dem Sie im Bild suchen möchten und dass Sie dieses Modell finden möchten, also das XML-Modell im Bild. Und was Python mit Hilfe von OpenCV machen wird, ist, dass es anfängt, das gesamte Bild über ein Fenster zu durchsuchen Und dann wird es die Größe des Bildes ändern, es wird die Bildgröße verringern und bei Verwendung desselben Fensters wird es nach kleineren Durchgängen suchen und Wir werden das Schritt für Schritt durchgehen. Schreiben wir also das Skript , das Gesichter erkennt. Impulsivität ist das Erste , was Sie tun möchten. Und als Nächstes möchten Sie die Kaskade in Python lesen Nennen wir also die variable Phasenkaskade. CV zwei, und wir haben eine Methode namens Cascade Classifier. Dadurch wird also ein Phasenkaskadenobjekt in Python erstellt, und alles, was wir hier übergeben müssen ist der Pfad der Herzkaskade Das ist es. Und das wird ein kaskadiertes Klassifikatorobjekt erzeugen. Und jetzt können Sie dieses kaskadierte Klassifikatorobjekt der Pace-Funktion verwenden , um nach einer Phase in Ihrem Bild zu suchen Als Nächstes möchten Sie vielleicht das Bild in Python laden, das Bild, nach dem Sie suchen möchten, Gesicht. Nehmen wir an, Bild ist gleich. Sie wissen also, dass wir Bilder in Python über die Bildlesemethode des geöffneten CV laden können , und Sie können hier einfach den PG-Namen für die Fotosuche übergeben. Ich übergebe den Dateipfad dieses Bildes. Also übergebe ich hier keinen zweiten Parameter. Das heißt, ich lese das Bild als Farbbild. ist jedoch eine gute Idee, bei der Suche nach einem Gesicht Graustufenbilder zu verwenden bei der Suche nach einem Gesicht Graustufenbilder Also habe ich das Bild hier geladen, aber ich werde die Graustufenversion des Bildes verwenden die Graustufenversion des , wenn ich nach einem Gesicht in diesem Bild suche Es wird angenommen, dass dies zu höheren Genauigkeit bei der Suche nach Gesichtern führt, da Sie möglicherweise feststellen, dass OpenCV bei stark frequentierten Bildern mit vielen Funktionen da Sie möglicherweise feststellen, dass OpenCV bei stark frequentierten Bildern mit vielen Funktionen nicht zu Sie erhalten also möglicherweise Gesichter, die OpenCV übersieht, oder Sie erhalten Merkmale, die als Gesichter klassifiziert werden Die Verwendung des Graustufenbilds erhöht jedoch die Genauigkeit. Ich könnte hier weitermachen und eine Nullkennzeichnung angeben, sodass ich dieses Bild als Graustufe lesen könnte, aber ich möchte das Originalbild tatsächlich als Farbversion behalten , weil ich die Farbversion am Ende zeigen möchte, aber das Graubild verwenden Geben Sie es an die Methoden weiter, mit denen wir nach dem Gesicht suchen werden. Also erstelle ich hier eine Graubildvariable, in ich die Graustufenversion des Bildes sortiere. Also Lebenslauf zwei, und wir haben eine Methode namens CVT-Farbe, und die verwendet als Argument natürlich das Originalbild und eine Flagge Also ein Argument. Es heißt Cv, zweifarbig, BGR, zweigrau Das bedeutet also, dass das BGR-Bild, also blaue, grüne, rote Bänder, umgewandelt wird und es in ein Graustufenbild umgewandelt wird Lass uns sehen. Wenn du also schnell dieses Graubild zeigen willst, wenn du willst, zeigt Civ Two dort ein graues Bild Wir geben dem Fenster einen Namen, grau und das Bild, das Sie anzeigen möchten, dann müssen Sie hier den Parameter Weight Key übergeben Sagen wir Null, also drücken wir Aiki und das Fenster wird geschlossen CV zwei zerstört alle Fenster. Sie haben diese Methoden also in den vorangegangenen Vorlesungen gelernt. Lassen Sie mich das ausführen. Das ist also eine Graustufenversion des Bildes. Komm. Jetzt werden wir eine Methode namens Detect Multi Scale verwenden. Und was diese Methode tun wird, sie wird nach dem Kaskadenklassifikator suchen Es wird also in unserem Bild nach dieser XML-Datei für das Frontalgesicht suchen in unserem Bild nach dieser XML-Datei für das Frontalgesicht und die Koordinaten des Tempos im Bild zurückgeben des Tempos im Das ist zum Beispiel das Bild, und was diese Methode zurückgibt, ist, dass und was diese Methode zurückgibt, ist, sie das Gesicht findet und es sagt. Es gibt dir also die Nummer der Zeile und die Spalte des oberen linken Punktes des Gesichts. Es wird also hier beginnen und dir auch die Höhe des Gesichts und die Breite des Gesichts angeben. Also bekommen wir ein Rechteck. Und dann werden wir dieses Rechteck in das Bild zeichnen. Das ist also im Grunde so, aber du wirst es besser verstehen. Also müssen wir, sagen wir, eine Pass-Objektvariable erstellen . Wo werden diese X-, Y-, Breiten- und Höhenwerte gespeichert ? Also lasst uns das schnell schnappen. Also müssen wir uns auf das Cascade Classifier Objekt beziehen, das hier ist Und was wir mit diesem Objekt machen wollen, ist Multi Scale zu erkennen, und Sie wollen das Graubild erkennen Und dann möchten Sie den Skalierungsfaktor dort eingeben. Sie wissen, wenn Sie viele Parameter haben und es zu viele gibt, um in eine Zeile zu passen, können Sie nach dem Koma einfach die Eingabetaste drücken und Python liest Ihre Zeile so, als wäre es eine einzige Zeile. Sie werden also sicher sein, dass sie nach dem Koma einfach die Eingabetaste drücken. Also haben wir den Skalierungsfaktor. Und ein guter Wert, den man dafür angeben könnte, wäre 0,5. Nun, was bedeutet das? Wie auch immer? Nun, lassen Sie uns dieses Bild betrachten. Python wird der Originalgröße des Bildes beginnen und suchen. Ich werde ein Fenster erstellen , das nach Gesichtern im Bild sucht. Suchen Sie also in diesem Bereich in diesem Bereich in diesem Bereich. Sobald dies der Fall ist und Sie einen Skalierungsfaktor von 1,05 angeben, weisen Sie Python an, die Skala für die Suche in der nächsten Phase um 5% zu verringern die Skala für die Suche in der nächsten Phase um 5% Python wird das Bild also um 5% verkleinern Und es wird nach größeren Gesichtern im Bild suchen. Suchen Sie also erneut, suchen Sie erneut und verkleinern Sie dann das Bild erneut um 5% und suchen Sie nach größeren Gesichtern usw., bis die endgültige Größe erreicht ist. Das bedeutet also, dass ein kleinerer Wert eine höhere Genauigkeit bedeutet. Wenn Sie zum Beispiel 0,5 Python angeben, verringern Sie die Skala um 50% Es wird also mit der Originalgröße beginnen und dann um 50% höher werden, und dann um 50% höher werden sodass Sie damit nicht viel Genauigkeit erzielen Der Vorteil bei dieser Zahl ist, dass das Skript schneller ausgeführt wird. Sie müssen also weniger Durchgänge zum Bild machen, wenn Sie nach einem Gesicht suchen. 0,5 ist gut. Okay. Und dann haben Sie einen weiteren Parameter namens minimale Nachbarn. Dieser Wert ist normalerweise auf fünf festgelegt. Und das ist im Grunde, dass es Python mitteilt , wie viele Nachbarn rund um das Fenster gesucht werden sollen. Vielleicht möchten Sie ein wenig mit diesen Zahlen experimentieren und herausfinden, welche die besseren Ergebnisse erzielt. Aber diese beiden Zahlen sind gut akzeptierte Zahlen. Also lass uns jetzt etwas tun. Lass uns Gesichter ausdrucken und schauen, worum es geht. Also, was für ein Objekt das ist. Und ich könnte die Art von Gesichtern auch einfach so drucken. Also führe ich das Skript jetzt aus und was das Skript tun wird , es wird diese XML-Datei lesen und das Bild laden, es wird die Graustufenversion des Bildes erstellen Und dann erkennt es die Koordinaten der oberen linken Ecke des Gesichts im Bild und die Breite und Höhe des Rechtecks, das das Gesicht im Bild definiert Und dann druckt es den Typ der Gesichter aus und es druckt die Gesichter, das eigentliche Gesichtsobjekt. Drücken Sie also darauf, um das Ganze zu beenden. Also Pace ist ein NumPi-Array, N-dimensionales Array-Objekt Und es ist ein Array mit vier Werten. Wir haben also unser Gesicht erkannt. Dies sind Werte, die im Grunde die Phase im Bild definieren. Im Grunde haben wir hier also 155, was die 155 . Spalte sein sollte Das ist also das X. Also sollte das Rechteck irgendwo hier in der Stirn beginnen Und das sollte 83 sein. Also die Zeile 83, Spalte 155, und dann haben wir die Breite, die 382 ist, und die Höhe, die dieselbe ist. Und so haben wir ein Rechteck im Gesicht. Lassen Sie uns nun das Rechteck im Gesicht auf dem Bild zeichnen. Also haben wir das Faces-Array erstellt. Und dann wollen wir auf all diese Werte dieses Arrays zugreifen. Um das zu tun, können wir eine Vierschleife verwenden. Also vier X, Y, Breite und Höhe in Gesichtern. Also, Bild. Also aktualisieren wir das Bildobjekt, das wir hier gelesen haben, wir haben es hier geladen, also aktualisieren wir es indem wir ein Rechteck in das Bild zeichnen. Und wieder müssen Sie das Bildobjekt hier übergeben, und dann müssen Sie vier weitere Argumente übergeben. Das erste Argument wäre der Startpunkt des Rechtecks. Das wären also X und Y. Also diese Koordinaten der Phasenanordnung. Großartig Und dann ist der nächste Parameter ein weiteres Tupel das die Koordinaten der anderen Ecke des Bildes definiert der anderen Ecke des Bildes Also haben wir hier die obere linke Ecke und wir haben die unterste rechte Ecke hier unten. Also das wäre X plus die Breite. Und Y plus die Höhe. Das ist es. Noch ein Parameter. Dies wäre die Farbe , die Sie diesem Rechteck geben möchten. Das kommt also als BGR-Format. Sie möchten also einen Wert für die blaue Farbe übergeben. Sagen wir also Null für Blau und wir haben ein grünes Rechteck. 255 für Grün. Also haben wir dort ein volles Grün und dann Null für Rot. Sie können auch einen anderen Parameter übergeben , nämlich die Breite des Rechtecks. Sagen wir drei. Okay. Und wenn Sie das getan haben, also nachdem Sie Ihr Bild aktualisiert haben, möchten Sie vielleicht Ihr Bildfenster jetzt auf dem Bildschirm anzeigen. Wir verwenden also die Methode zum Anzeigen von Bildern, aber hier haben wir ein graues Bild, also wollen wir ein aktualisiertes Bildobjekt übergeben. Und wir sollten startklar sein. Speichern Sie das Skript, gehen Sie und versuchen Sie es auszuführen. Und mein System ist nicht in der Lage , das Gesicht zu finden. Ja, ich habe hier etwas mit einem Namen durcheinander gebracht, also lass mich diesen Punkt ändern, Py, Enter Also hat das nichts mit dem Drehbuch zu tun. Und lass es mich noch einmal versuchen. Großartig. Ich hoffe also, dass Sie das erwartet haben. Also das Rechteck beginnt hier und hat eine Breite und eine Höhe, und es endet hier. Manchmal haben Sie jedoch, wie Sie vielleicht bereits wissen, Bilder, die größer als Ihre Bildschirmauflösung sind. In diesem Fall würde Ihr Bild nicht auf Ihren Bildschirm passen. Sie könnten also Größe des Bildes ändern, bevor Sie es anzeigen Lassen Sie mich hier also eine Variable mit veränderter Größe erstellen, und das wäre gleich cv two resize, und Sie möchten das Bild übergeben, das das Rechteck dort enthält, und Sie möchten die Größe des Bildes auf Sie müssen also hier die Auflösung des Bildes einstellen. Und wie Sie wissen, können Sie hier einfach einige Werte eingeben, sagen wir, 500 mal 500. Diese Werte könnten Ihr Bild jedoch ausdehnen Eine bessere Lösung wäre also , auf die Form des Bildes zuzugreifen. Oder die Auflösung des Bildes, und das sollte die Breite Ihres Bildes sein. weißt du also schon. Ich erkläre das. Ich gehe das kurz durch, und um sicherzugehen, dass du eine passende Größe bekommst, könntest du sie durch drei teilen. Und dann wiederum, in Form, erhältst du die Höhe, die der erste Wert des Tupels ist , und dividierst sie wieder durch drei Und Sie möchten diese beiden Ganzzahlen auch konvertieren , weil Sie möglicherweise Fließkommazahlen erhalten, und Python wird sagen, und Python wird sagen dass es die Größe eines Bildes nicht auf Fließkommazahlen Das sollte also okay sein. Dann möchten Sie das verkleinerte Bild anzeigen. Testen Sie es schnell Mir fehlt hier die Klammer, also sollte das alles ein Umkippen sein, aber hier fange ich nicht als Umsturz Also Klammer hier und Schluss hier drin . Das sollte jetzt funktionieren. Ja. Also, das war mein Bild, aber versuchen wir es jetzt mit einem anspruchsvolleren Bild. Das hier. Wir haben also zwei Gesichter , die nicht sehr klar sind. Das ist keine echte Frontalphase. Dieser Typ hier hat seine Augen geschlossen und sein Kinn ist nicht sichtbar. Und wir haben auch diese beiden Gesichter hier in den Zeitungen, ich das Originalbild von hier aus öffnen konnte. Sie haben im Grunde eine sehr niedrige Auflösung, und ich denke, Python wird diese beiden Gesichter nicht erkennen können. Lassen Sie mich das überprüfen. Hier ist unser Gesichtsdetektor, und wir wollen den Namen der neuen Bilddatei weitergeben. Speichern Sie das Skript und fahren Sie fort und führen Sie es aus. Wir haben hier also etwas, das zur Realität zurückkehrt. Und wie Sie dieses Mal sehen, waren Python und OpenCV in der Lage, diese Phase zu erkennen, obwohl sie sich nicht in einer sehr frontalen Und offensichtlich war es auch in der Lage , die Hand dieses Typen zu erkennen Python liest es also als Phase. Und was Sie in diesem Fall tun können ist, diese Werte hier zu optimieren, also den Skalierungsfaktor und die minimalen Nachbarn Etwas, das Sie vielleicht auch interessieren könnte, ist, dass das Phasen-Array hier in diesem Fall zwei Listen enthält Das ist also die erste Phase, die Koordinaten der ersten Phase und dann die zweite Phase. Was in diesem Fall zufällig von der Hand ist, aber Sie haben die Idee trotzdem. also vielleicht eine Skala von 1,1 verwenden, können Sie diese Hand vielleicht loswerden. Also ja, das ist es. Du kannst auch versuchen, das Tempo dieses Typen zu erkennen, aber ich glaube nicht, dass du es schaffen wirst. Damit du weißt, dass diese Techniken ihre Grenzen haben. Also ist es ein Computer. Es ist kein Mensch, also wird es immer einige Nachteile in der Genauigkeit haben Ich hoffe, Sie fanden das so niedrig, und wir sehen uns in der nächsten Vorlesung 120. 119. Videos aufnehmen mit OpenCv und Python: Hallo, willkommen zu dieser neuen Vorlesung. Und in dieser Vorlesung werden wir OpenCV verwenden, um Videos von der Computer-Webcam aufzunehmen Sie benötigen also OpenCV und importieren es als CV Two, wie Sie importieren es als CV Two, wie OpenCV verwenden wir für die Bildverarbeitung und natürlich für die Videoverarbeitung, weil Video aus Bildern besteht Wir haben also viele Bilder und sie werden als Frames bezeichnet Und diese Frames, diese Bilder werden nacheinander in hoher Geschwindigkeit angezeigt, und dann können wir diese Bilder als Video sehen. Und du wirst diesen Vortrag entweder hassen oder lieben. Was wir tun werden, ist, dass wir hier bei der ein wirklich niedriges Niveau der Videoverarbeitung auf ein wirklich niedriges Niveau der Bildverarbeitung setzen werden. Wir werden die Frames nacheinander lesen , also Bilder eins nach dem anderen. Und Sie werden sehen, wie wir Loops in Python verwenden, um diese Bilder anzuzeigen und tatsächlich ein Fenster zu erstellen , in dem Bilder schnell angezeigt werden, und Sie können es als Video sehen. Wenn Sie also einen Laptop haben, haben Sie wahrscheinlich eine Gebäudekamera. Wenn Sie einen Desktop ohne Kamera haben, benötigen Sie eine externe Kamera, um mir in diesem Vortrag zu folgen. Und jetzt möchten Sie vielleicht als Erstes ein Video lesen. Sobald Sie ein Video gelesen haben, können Sie ein Video entweder von der Webcam oder aus einer Videodatei lesen . Und sobald Sie das Video gelesen haben, können Sie andere Funktionen anwenden z. B. das Video ausgrauen oder dem Video Text hinzufügen oder Objekte im Video erkennen usw. Als Erstes möchten Sie also ein Objekt erstellen, sagen wir ein Video, und das entspricht der Videoaufnahme mit Bildpunkten Das ist also die Methode, die ein Videoaufnahmeobjekt auslöst. Und dafür gibt es hier ein Argument, das entweder eine Zahl wie Null, Eins, Zwei, Drei oder der Pfad der Videodatei sein kann. Wenn Sie also eine Zahl eingeben, bedeutet das, dass Sie ein Video von einer Kamera aufnehmen. Nehmen wir an, ich habe eine eingebaute Kamera in meinem Computer, habe aber auch eine externe Kamera. In diesem Fall hat eine meiner Kameras einen Index von Null, die andere Kamera einen Index von eins, und wenn ich eine dritte Kamera habe , hat sie einen Index von zwei und so weiter. Das ist es also. Wenn du eine Videodatei hättest, könntest du einfach Movie Dot MP Four oder so etwas sagen . Das hängt von Ihrem Videodateinamen ab, und Sie müssten diese Datei irgendwo auf Ihrem Computer haben. Aber in diesem Vortrag sprechen wir über das Aufnehmen von Videos von der Webcam. Ich habe also nur eine Webcam in meinem Computer, also gebe ich hier Null ein. Das ist es. Sobald Sie das getan haben, möchten Sie sicherstellen , dass Sie veröffentlichen. Die Kamera. Wenn Sie also auf Ihr Objekt zugreifen möchten, ist Video Dot Release die Methode. Und dann müssen Sie dort keine Argumente übergeben. Schauen wir uns also an, was wir haben, wenn wir das ausführen. Diese Python-Datei. Python, Capture Dot Pi ist der Name meiner Datei. Und offensichtlich passiert nichts. Aber auf meiner Seite bemerkte ich, dass meine Kamera für eine Sekunde oder für einen Bruchteil einer Sekunde eingeschaltet war . Also wurde das Licht der Kamera eingeschaltet und dann geschlossen. Es wurde sofort ausgeschaltet. Was passiert, ist, dass wir hier tatsächlich die Kamera auslösen, die Webcam, aber dann lassen wir die Kamera sofort los. Python wird also die Kamera öffnen und in einer Millisekunde die Kamera freigeben Lass es mich nochmal versuchen. Manchmal kann es vorkommen , dass Sie überhaupt kein Licht sehen. Sie sehen es also nicht, weil der Vorgang sehr schnell abläuft. Ihr Computer benötigt also wahrscheinlich einige Sekunden, um das Licht Ihrer Kamera tatsächlich einzuschalten. Und wir können ihm ein paar Sekunden geben, also. Um das zu tun, möchten Sie die eingebaute Zeitbibliothek importieren. Die Zeitbibliothek bietet einige Operationen im Zusammenhang mit der Zeit. In unserem Fall werden wir es zum Beispiel verwenden, um das Skript 3 Sekunden lang zu halten. Das bedeutet also, dass Python versucht, das Skript Zeile für Zeile auszuführen, sodass es CV Two pünktlich importiert und dann die Kamera auslöst. Und bevor wir die Kamera loslassen, lassen wir das Skript 3 Sekunden warten. Das wird also ausgeführt. Warten Sie 3 Sekunden und führen Sie dann die andere Methode aus. Das ist es. Lassen Sie mich das jetzt noch einmal ausführen. Okay, das Licht ist an. Eins, zwei, drei, aus. Jep. Und das Video ist veröffentlicht Jetzt denkst du vielleicht, warum sehen wir nicht, dass dein Gesicht dort in der Videokamera im Fenster auftaucht? Nun, der Grund ist folgender: Siehst du hier eine Zeile, dass ich ein Fenster zeige? Nein. Also warum erwartest du, dass mein Gesicht dort zu sehen ist? Und das machen wir, indem zuerst ein Frame-Objekt erstellen, das die Bilder dieses Videoaufnahmeobjekts liest. Und lassen Sie mich das zuerst tun, bevor ich auf weitere Erklärungen eingehe. Lassen Sie mich also Check Frame sagen. Das wäre genauso wie Videopunkt ROT, einfach so. Was wir hier lesen, ist, dass wir hier einen booleschen Datentyp und ein Umpire-Array haben Lassen Sie mich das ausdrucken, damit Sie es besser verstehen. Also zuerst überprüfen und dann den Rahmen ausdrucken. Okay? Führe das Skript aus. Warten Sie 3 Sekunden und schließen Sie es. Also, was wir hier haben, ist, ich werde das erweitern. Also haben wir die Prüfvariable gefunden. Und wir haben das Numpi-Array, das das Bild darstellt Dieses Bild ist eigentlich das erste Bild, das das Video aufnimmt In diesem Jahr können wir das Goldbarren für verschiedene Zwecke verwenden, z. B. um zu überprüfen, ob das Video läuft oder nicht Möglicherweise müssen Sie das also überprüfen, während Sie Ihre Programme ausführen. Und der Rahmen ist der wichtigste weil wir das Frame-Objekt verwenden werden, also verwenden wir dieses Schiedsrichter-Array, das ein dreidimensionales Array ist weil es ein Farbbild ist, also drei Bänder hat Und das weißt du aus den vorherigen Vorlesungen in denen wir Bildverarbeitung gemacht haben Okay. Und wir werden diesen Frame durchgehen und ihn mit der Image-Show-Methode zeigen. Also zeige ich die Image-Show-Methode der CV Two-Bibliothek. Wir werden also rekursiv jedes aufgenommene Videobild anzeigen jedes aufgenommene Videobild Ich hoffe also, dass das Sinn macht. Bevor wir das rekursiv machen, möchte ich hier unten ein Fenster zeigen Also Lebenslauf zwei, ich zeige es, und lassen Sie uns einen Namen für die Fensteraufnahme eingeben und das Frame-Objekt dort übergeben Und denken Sie auch daran, dass Sie, wenn Sie eine Methode zum Anzeigen von Bildern übergeben , sicherstellen möchten, dass das Fenster geschlossen ist, wenn Sie also ein Fenster anzeigen. Und das tun Sie mit der Cv-Gewichtstastenmethode, und Sie können Null übergeben , sodass Sie eine beliebige Taste drücken und das Fenster schließen können. Und Sie wollen, dass CV zwei alle Fenster zerstört. Wenn also diese Taste gedrückt wird, zerstörst du alle Fenster. Und eigentlich willst du das hier platzieren, damit das Video nicht veröffentlicht wird, bevor du diese Taste drückst. Was passiert, ist, dass Python diese Zeilen ausführt und dann darauf wartet, dass Sie die Taste drücken, und dann gibt es das Video frei und zerstört dann das eigentliche Fenster, und zerstört dann das Sie auf dem Bildschirm sehen Okay, mal sehen, was jetzt passieren wird. Überraschung, ich habe nur zwei Zähne. Das wusstest du nicht. Okay, ich mache Witze. Ich habe noch mehr Aber was Python hier getan hat, ist, dass es die Kamera ausgelöst hat. Also hat es hier die Kamera ausgelöst und dann das erste Bild des Videos gelesen. Das allererste Bild, sobald die Kamera ausgelöst wird, liest sie das erste Bild und dann haben wir dieses Bild ausgedruckt und es ist hier irgendwo in der Befehlszeile, und dann hat das Skript 3 Sekunden lang geschlafen, also hat es nichts gemacht Es hat 3 Sekunden gewartet und dann CV 2 mit der AmShow-Methode erstellt. Es hat ein Fenster erstellt, in dem das erste Bild des Videos Das Bild, das Sie gerade gesehen haben, ist also das erste Bild des Videos Und dann der eigentliche Frame, das Fenster ist immer noch geöffnet, also wartet es auf eine Taste, die wir drücken müssen. Wenn ich jetzt also eine Taste drücke, werden diese letzten beiden Zeilen ausgeführt. Das bedeutet also, dass das Video veröffentlicht wird und dieses Fenster zerstört wird. Also drücken Sie die Taste und ja, das ist passiert. Python verarbeitet also einen Videoframe genauso wie einfache Bilder. Das heißt, Sie können auch Methoden wie cv two dot, CVT color anwenden wie cv two dot, CVT color Und Sie können diesen Frame hier übergeben und ihn dann in der Farbe BGR Gray speichern Farbe BGR Gray Speichern Sie es in einer grauen Variablen. Ich konvertiere also den Rahmen, also den Farbrahmen, in ein graues Bild. Und eigentlich muss ich das hier oben machen. Und dann kann ich die Graustufenversion des Bildes hier zeigen. Okay, lass es mich nochmal versuchen. Das ist also eine Graustufenversion, die mit der Imshow-Methode angezeigt wird . Das ist also die Idee Wie wäre es nun, ein echtes Video zu zeigen, kein einziges Bild dort? Nun, die Antwort ist, dass wir hier eine Wildschleife verwenden müssen. Der Grund, warum wir das tun müssen, ist, dass eine While-Schleife einige Anweisungen unendlich ausführt einige Anweisungen unendlich bis Sie die Schleife an einem bestimmten Punkt mit Anweisungen wie beispielsweise break unterbrechen Die Idee ist also, dass wir den gesamten Code hierher stellen müssen den gesamten Code hierher Also müssen wir es in eine Zeitschleife bringen , und genau das mache ich. Sie können also je nach Tastatur entweder eine Tastenkombination auf Ihrer Tastatur verwenden je nach Tastatur entweder eine Tastenkombination auf Ihrer Tastatur oder zu Zeilen bearbeiten gehen und dann Einrücken wählen, um diese Zeilen einzuziehen Also hier ist eine Abkürzung. Aber wie dem auch sei, dann willst du schreiben, solange es wahr ist. Und dann geht alles in die Wild-Schleife, so einfach ist das. Aber wir sind noch nicht fertig. Wir haben hier noch ein paar Dinge zu erledigen. Aber zuerst möchte ich sichergehen, dass du den Wil-Loop verstehst. Lassen Sie mich hier schnell die Python-Konsole auslösen. Also, was Wil Loop macht, ist, sagen wir, obwohl es wahr ist, drucken. Sagen wir eins. Wenn Sie das jetzt ausführen, wird einer unendlich gedruckt Meine Konsole ist hier also sehr ausgelastet, und ich kann das mit einer Tastaturunterbrechung unterbrechen , also Control C oder das kontrollieren, wenn das nicht funktioniert Also, Wilby sagt, obwohl es wahr ist, was immer wahr sein wird, führe diese Zeilen aus Aber wenn ich versuche, das jetzt auszuführen , wird Python die Videoaufnahme auslösen die Videoaufnahme und das Fenster anzeigen, aber es ist nur ein Fenster. Also nur ein Bild ist das erste Bild des Videos. Denn was passiert, ist, dass die Drahtschleife anfängt, aber sie geht. Es erzeugt einen Frame, den ersten Frame des Videos. Also das aktuelle Bild, das ist das allererste Bild, in dem das Video beginnt, dann konvertiert es das Bild in ein Graustufenbild. Und dann rutscht es für 3 Sekunden, okay? Dann zeigt es das Bild. Und dann, was der i-Loop hier macht, wartet er darauf, dass du eine Taste drückst Wenn Sie dann eine Taste drücken, stoppt der Vorgang. In diesem Fall können Sie also einen anderen eingeben. Lassen Sie mich dort etwas Platz schaffen. Also musst du diesen Wert hier ändern, also die Argumente. Wenn wir Null eingeben, bedeutet das, dass jede Taste, die Sie auf der Tastatur drücken, das Fenster schließt. Wenn Sie jedoch beispielsweise 2000 eingeben, bedeutet das, dass das Skript 2000 Millisekunden wartet, was 2 Sekunden entspricht Und mal sehen, was hier passieren wird. Also zeigt es zuerst mein Gesicht, dann wartet es hier 3 Sekunden. Dann wartet es weitere 2 Sekunden. Dann zeigt es den anderen Frame. Es ist also sehr langsam, einfach so. Okay. Nun, wenn du eine Taste drückst, passiert nichts, weil du die Null von hier entfernst . In diesem Fall werde ich das Skript hier zwangsweise beenden, Control C. Wir brauchen diesen Zeitzettel nicht mehr, und wir brauchen hier auch eine Bedingung. Und bevor wir das tun, speichern wir diese Aktion in einer Schlüsselvariablen Und dann sagen wir, dass die Taste gleich oder der Methode ist, und dann übergibst du eine Taste von der Tastatur. Wenn also Q gleich ist, dann unterbrechen Sie die While-Schleife Und setzen wir es diesmal auf 1.000. Okay. Also, das wird das Video aufnehmen, ich starte das Video und dann wird es durch all diese Zeilen iterieren Es erstellt also einen Frame, konvertiert ihn in Grau und zeigt den Frame hier an, und dann wartet es 1 Sekunde Und wenn Sie die Taste auf der Tastatur drücken, wird die Drahtschleife unterbrochen. Und wenn es dann kaputt geht und das Video, das veröffentlicht wird, ausgeführt wird das Video gestoppt und das Fenster wird zerstört. Wenn Sie jedoch keine Taste drücken, wird dies 1 Sekunde warten, dann wird das nächste Bild angezeigt. Und dann, nach 1 Sekunde, wird das nächste Bild angezeigt und so weiter. Also, speichere das Skript, führe es aus. Also verbessert sich das Video. Ja, sieht jetzt gut aus. Ja, wenn du Q drückst, hörst du auf. Okay, lass es uns weiter verbessern. Warum nicht eine Millisekunde? Hey, wie geht's uns? Also, es funktioniert gut. Und Sie können hier auch sehen , dass der Scheckbarren, der NumPirea, bei jeder Iteration gedruckt wird Und wir können das jetzt beenden, wenn wir Q drücken, einfach so. Wenn Sie nun wissen möchten, wie viele Frames dort generiert werden, gibt es einen netten Trick, den wir machen könnten. Wir könnten eine Variable erstellen, sagen wir, A entspricht einer Variablen außerhalb der Y-Schleife Und dann sagst du hier, A entspricht A plus eins. Dann, nachdem die Schleife hier unterbrochen wurde, möchten Sie A drucken. Also, wenn Sie das Skript ausführen, erhält A den Wert Eins und wenn dann die Wandschleife zu laufen beginnt, durchläuft sie die erste Iteration und erhöht den A-Wert um A entspricht also eins plus eins. Also werden es zwei sein. Also wird A auf zwei aktualisiert. Dann wird es bis zum Ende gehen und dann wird es wieder anfangen. Diesmal wird es also wieder A sein, entspricht zwei plus eins Also wird A bei der zweiten Iteration drei sein, und so weiter, oder du kannst das Ganze auf eins setzen Wenn wir also zwei Iterationen haben, bedeutet das, dass A zwei sein wird, und wenn wir drei haben, sind es drei und so weiter Und dann drucken wir A hier außerhalb der Schleife, okay? Und lass uns sehen, was wir haben. Ich lasse das Video 3 Sekunden laufen und wir werden sehen, wie viele Wiederholungen wir haben werden Nehmen Sie also eins, zwei, drei auf und hören Sie auf. Also der letzte Wert, der hier ausgedruckt wurde, ist ein Wert. Das heißt, wir hatten 51 Iterationen in etwa 3 Sekunden, was, sagen wir, ungefähr 20 Bildern pro Sekunde entspricht Also unsere Kamera, meine Kamera, nimmt 20 Bilder pro Sekunde Lassen Sie mich das noch einmal ausführen, das letzte Mal. Wenn ich also meinen Finger hier in die Kamera lege, also habe ich das Bild geschwärzt und du wirst sehen, dass das Numpy-Array jetzt Null, Null, Null ist Weil die Einzelbilder des Bildes nur Nullwerte haben Das Bild hat also keine Intensität. Oh. Okay, das wollte ich dir in diesem Vortrag zeigen. Also, wie gesagt, sobald Sie diese Rahmen haben, können Sie Operationen auf sie anwenden, sodass Sie dort Rechtecke zeichnen, Bilder erkennen und so weiter Das machen wir, also bauen wir unsere reale Anwendung. Indem wir eine Bewegungserkennung in unseren Bildern implementieren und dann die Zeiten erfassen, wir eine Bewegungserkennung in unseren Bildern implementieren und dann die Zeiten erfassen denen ein Objekt in unseren Frame oder unser Video eindringt , und wir haben eine Liste dieser Zeiten. Ich hoffe, du liebst diesen Vortrag, ihn nicht gehasst, und wir sehen uns beim nächsten 121. 120. App 3: Webcam-Bewegungsmelder-App: Willkommen zu dieser neuen Vorlesung, und sie ist etwas ganz Besonderes. Ich stehe zufällig vor der Kamera, weil Sie in dieser Vorlesung ein Programm entwickeln werden, das bewegte Objekte vor einer Computer-Webcam erkennt. Und dann zeichnet es die Zeit auf, zu der das Objekt in die Webcam eingedrungen ist. Also der Videoframe und der Zeitpunkt, zu dem das Objekt den Videoframe verlassen hat Jetzt gibt es also ein sich bewegendes Objekt. Im Bild und wenn ich weggehe, siehst du, dass es im Video jetzt kein grünes Rechteck mehr gibt. Und jetzt tauche ich wieder auf, gehe wieder raus und so weiter. Also werden wir diese Anwendung mit Python von Grund auf neu erstellen. Ja, wir müssen noch viel lernen, wie Bild - und Videoverarbeitung und so weiter. Und zu guter Letzt, was wir tun, wenn Sie Q für Beenden drücken, erhalten Sie ein Diagramm. Und wie gesagt, das Diagramm zeigt die Zeiten, zu denen das Objekt in den Frame eingedrungen ist. Wir haben es hier also mit einer interaktiven Grafik zu tun. Und ja, das sind die Zeiten , in denen das Objekt in die Webcam eingedrungen ist, wie hier, und hier hält es länger an. Also, das kann eine großartige Anwendung sein , wenn Sie Objekte erkennen möchten. Sie können diese Anwendung dieses Python-Programms zum Beispiel auf dem Raspberry-Server ablegen dieses Python-Programms zum Beispiel auf dem Raspberry-Server , der ein kleiner Server ist, und Sie können sie irgendwo ablegen vielleicht möchten Sie Tiere entdecken. Vielleicht möchten Sie wissen, wann das Tier das Bild betritt und wann es wieder herauskommt , oder ob es mit Menschen zusammen ist, falls das der Fall ist Also ja, das ist ein Programm, und ich hoffe, es gefällt euch Wir müssen eine Menge Code schreiben, also fangen wir an, und ich werde in der nächsten Vorlesung mit Ihnen sprechen. 122. 121. Bewegliche Objekte aus dem Webcamp mit Python erkennen: Hey, da sind wir wieder. Und in diesem Vortrag werden wir unser Bewegungserkennungsprogramm für die reale Welt weiter ausbauen . Bevor ich den Code schreibe, möchte ich Ihnen zunächst die Architektur des Programms erklären , das wir erstellen werden. Also, wie dieses Programm Bewegungen im Video erkennen kann. Und ich gehe davon aus, dass Sie bereits wissen, wie man dieses Skript erstellt. Also haben wir das in den vorherigen Vorlesungen gebaut. Und was dieses Drehbuch macht, ist, falls du es verpasst hast, Hey. Also, es löst das Video aus, so wie du es tust. Von der Computer-Webcam. Also verarbeiten wir Frames hier in dieser Wile-Schleife und so weiter Also weißt du das. Ich werde sie jetzt nicht durchgehen. Als Nächstes müssen wir also die Frames verarbeiten, die in dieser Wile-Schleife iteriert werden in dieser Wile-Schleife iteriert Und ich habe hier ein paar Bilder, um meine Ideen, meine Konzepte zu veranschaulichen Lassen Sie mich zu dem Verzeichnis gehen , in dem sie sich befinden. Dieses Bewegungserkennungsprogramm wird also die Webcam auslösen , genau wie unser aktuelles Skript. Und eine Voraussetzung dafür, dass das Programm gut funktioniert , ist, dass, sobald Sie die Webcam ausgelöst haben, erste Frame des Videos der statische Hintergrund sein sollte. Wenn Sie also planen, dieses Programm zu verwenden, nehmen wir an, Sie richten eine Webcam auf einem Laptop oder einem Raspberry-Pie-Server ein. Nehmen wir an, Sie möchten die Bewegung eines bestimmten Tieres in einem Gebiet erkennen . Sie möchten also zuerst die Kamera auslösen, möchten also zuerst die Kamera auslösen während der Hintergrund statisch ist, und dann möchten Sie diesen Hintergrund als Basisbild verwenden , damit Sie die anderen Bilder vergleichen können. Und dann kann Python erkennen, ob es eine Änderung zwischen dem ersten Frame und den nächsten Frames gibt. Das ist also eine Sache, die du tun musst. Das ist also ein Beispiel für einen Hintergrund. Und dann etwas, das Tier wird auf deiner Kamera erscheinen. Dann musst du in dein Script im Programm zuerst schreiben , wir würden dieses Bild ausgrauen wollen, also das Hintergrundbild und den aktuellen Frame der Kamera. Sie speichern das erste Bild der Videoaufnahme in einer Variablen und konvertieren dieses Bild dann in ein Graustufenbild Dann durchläuft der iLoop die aktuellen Frames und Sie machen dasselbe mit dem aktuellen Frame, also konvertieren Sie sie in Graustufen und dann, was Sie mit diesen beiden Graustufenbildern der aktuellen Iteration der Schleife machen diesen beiden Graustufenbildern , wenden Sie den wenden Sie Das ist der Unterschied, ein Beispiel für Differenzframe oder Delta-Frame, wenn man das so sagen kann Auf diesem speziellen Bild werden Sie feststellen, dass hinter mir eine Zimmerlampe steht. Normalerweise kann man die Lampe nicht sehen, aber Python macht tatsächlich den Unterschied zwischen dem Rahmen, in dem ich erschienen bin und dem Hintergrundrahmen, in dem die Lampe sichtbar ist. Es entsteht also dieses graue Bild, bei dem jedes Pixel einen bestimmten Wert hat. Es hat also einige Intensitätswerte. In Ordnung. Also das bedeutet zum Beispiel, dass die hohen Intensitätswerte wie dieser hier, wo ich bin, bedeuten, dass es in diesem Bereich eine mögliche Bewegung gibt. Die schwarzen Bereiche deuten zwar darauf hin, dass es keine Bewegung gibt. Aber Sie sehen hier auch einige helle, schwarze Pixel, denn wenn ich vor der Kamera auftauche, ist hinter mir Schatten und so weiter. Aber wir werden später etwas anderes anwenden, das als Schwellenwert bezeichnet wird. Also sagen wir im Grunde, wenn Sie in dem Bild, das ich Ihnen gerade gezeigt habe, einen Unterschied im Delta-Frame sehen, wenn Sie einen Unterschied von mehr als 100 Intensitäten sehen, rechnen Sie diese Pixel in weiße Pixel um, okay? Und für Pixel, die unter dem Schwellenwert liegen, konvertieren Sie sie in Schwarz. Okay. Sie denken sich also den Umriss des Objekts aus, das sich in der Kamera im Bild bewegt. Also führen wir all diese Prozesse innerhalb der Wile-Schleife durch. Und wenn wir dann den Schwellenwert innerhalb der Schleife berechnet haben , werden wir mit dem aktuellen Frame die Konturen der weißen Objekte im Frame ermitteln Okay. Für dieses spezielle Bild hätten wir also Konturen um dieses Objekt herum und die Konturen um dieses Objekt herum und auch um dieses herum. Dann schreiben wir eine Vierer-Schleife, die alle Konturen des aktuellen Frames durchläuft Es wird zu dieser Kontur gehen, zu dieser, zu dieser und zu dieser. Und dann werden wir innerhalb dieser Schleife den Bereich der Konturen überprüfen. Das hat zum Beispiel eine Fläche von, sagen wir, 500 Pixeln. Wenn also die Fläche der Kontur beispielsweise mehr als 500 Pixel beträgt, betrachten Sie dies als ein sich bewegendes Objekt. Wenn die Fläche, sagen wir, weniger als 500 beträgt, also dieser hier wahrscheinlich 20 Pixel, sagen wir, das wird nicht als bewegtes Objekt betrachtet. Ich hoffe, das ergibt Sinn. Als Nächstes zeichnen wir ein Rechteck um die Konturen, die größer als die Mindestfläche waren. Dadurch werden diese Rechtecke im Originalbild angezeigt. Also in der Farbversion des aktuellen Rahmens. Das heißt, wir werden ein Rechteck im Video sehen , während das Video abgespielt wird, wir werden ein Rechteck um das Objekt herum sehen. Später werden wir die Zeiten ermitteln, zu denen das Objekt, das sich bewegende Objekt, in den Videoframe eingedrungen ist, zu dem Zeitpunkt, zu dem das Objekt den Hintergrund verlassen hat Aber jetzt konzentrieren wir uns einfach darauf, das Objekt, das sich bewegende Objekt im Video, zu erkennen sich bewegende Objekt im Video Okay, und lass uns zum Drehbuch zurückkehren. Schließ das und das und das. Okay. Und lassen Sie uns hier einige unnötige Zeilen entfernen. Wir hatten hier also eine Variable, die wir erstellt haben, weil wir sehen wollten, wie viele Frames wir im Video hatten. Also brauchen wir das nicht mehr und wir brauchen nicht, dass das Skript für 3 Sekunden stoppt. Also entferne ich den Zeitzettel und den, den ich gesehen habe. Okay. Und jetzt hier, der erste Teil ist der kniffligste. Wir müssen einen Weg finden, den aktuellen Frame des Videos zu speichern Sobald das Video startet, möchten wir das Numpy-Array in einer Variablen speichern und diese Variable statisch haben, sodass wir den Wert dieser Variablen nicht ändern wollen, während die Schleife im Skript ausgeführt wird Und das geht so, dass wir zuerst einen variablen Frame für den ersten Frame erstellen müssten einen variablen Frame für den ersten Frame erstellen Also müssen wir ihm einen Wert zuweisen , der keinen Wert hat. Keiner ist also ein spezieller Python-Datentyp , mit dem Sie eine Variable erstellen und ihr nichts zuweisen können, aber Sie haben die Variable dort. Wenn Sie diese Variable also später aufrufen, sagt Python nicht, dass die Variable nicht definiert ist. Okay, wenn du es nicht verstehst, warte bitte und du wirst es in einer Weile verstehen. Und was Sie jetzt tun müssen, ist eine Bedingung zu schreiben und dort eine fortlaufende Anweisung anzuwenden. Lassen Sie mich zuerst die Bedingung schreiben und dann erkläre ich Ihnen, was das bewirkt. Also wollen wir überprüfen, ob der erste Frame nicht ist Und wenn er bekannt ist, werden wir den ersten Frame zuweisen, den grauen Frame. Das bedeutet also, dass das Skript ausgeführt wird und das Video ausgelöst wird. Dann beginnt der Wire Loop zu laufen und er erhält das erste Bild oder Video und speichert es in dieser Frame-Variablen. Diese Frame-Variable wird in einen grauen Rahmen umgewandelt. Und dann sagen wir, wenn der erste Frame bekannt ist, was in der ersten Iteration der Schleife der Fall ist, ist das wahr Der erste Frame ist also eigentlich kein, weil wir hier keinen zuweisen Weist den NumPi dem ersten Frame zu. Beim ersten Bild erhalten Sie also das Graustufenbild, das den allerersten Frame des Videos darstellt Das passiert also in der allerersten Iteration des Loops, okay? Aber dann wird Python diese anderen Codezeilen ausführen und dann zur zweiten Schleife übergehen. Und was Python tun wird, ist , den zweiten Videoframe aufzunehmen. Okay? Nehmen wir an, das erste Bild war ein Hintergrundbild, und dann erscheint plötzlich ein Objekt in der Kamera vor der Kamera. Python schnappt sich also ein Schiedsrichter-Array, das dieses Objekt enthält Also werden der zweite Frame und dieser Frame in Grau umgewandelt Dann sagen wir hier, das erste Bild ist keins, das erste Bild ist variabel, wir erhalten das erste Bild des Videos. Und sobald wir den ersten Frame aufgenommen haben, wollen wir nicht, dass diese anderen Codezeilen ausgeführt werden Denn hier werden wir den Unterschied zwischen den Frames anwenden und die Frames verwischen und so weiter Wir wollen also nicht, dass diese ausgeführt werden. Stattdessen möchten wir, dass Python zum Anfang der Schleife geht und mit dem zweiten Frame fortfährt. Um das zu tun, müssen wir hier weitermachen. Das heißt also , fahren Sie bis zum Anfang der Schleife fort und führen Sie nicht den Rest des Codes aus. Okay. Also das erste Bild ist keins. Das erste Bild erhält den Wert des ersten Bildes des Videos und geht dann zur nächsten Iteration In der nächsten Iteration nehmen wir das zweite Bild des Videos und dann wird die graue Version dieses Frames Videos und dann wird die berechnet Und dann geht es wieder zur Bedingung über. Und ist in diesem Fall der erste Frame keiner? Nein, das liegt nicht daran, dass das erste Bild in der ersten Iteration der While-Schleife den Wert des grauen Bildes erhalten hat in der ersten Iteration der While-Schleife den Wert des grauen Bildes Also werden diese Zeilen hier nicht bei der zweiten Iteration der Schleife ausgeführt, okay? Großartig. Das heißt, wir können jetzt Delta-Frame anwenden, sodass wir den Unterschied zwischen dem ersten Frame und dem aktuellen Frame des Bildes berechnen können zwischen dem ersten Frame . Der erste Frame ist also die erste Frame-Variable und der aktuelle Frame ist eine graue Variable. Aber vorher möchten wir etwas mit dem aktuellen Frame des Bildes machen. Wir möchten eine Gaußsche Unschärfe auf das Bild anwenden. Und ein Punkt hier. Der Grund, warum wir Gaußsche Unschärfe anwenden wollen , ist, dass wir das Bild verwischen wollen, also wollen wir es verschwommen machen, also es glätten, weil dadurch Rauschen entfernt und die Genauigkeit bei der Differenzberechnung erhöht bei Das ergibt als Parameter das Bild, das Sie verwischen möchten Und dann übergeben wir hier das Graubild und speichern die verschwommene Version des Bildes wieder im Graubild Und dann haben wir einen weiteren Parameter , der als Tupel dargestellt wird, und hier müssen wir die Breite und Höhe des Gaußschen Kernels übergeben die Breite und Höhe des Gaußschen Kernels also im Grunde die Parameter für die Unschärfe, aber 21 wären aber 21 Und du brauchst auch noch einen verlorenen Parameter. Das wäre also die Standardabweichung und ich übergebe Null. Null wird hier auch häufig verwendet. Wenn Sie mehr über sie erfahren möchten, können Sie die Dokumentation durchgehen, aber diese Werte wären gut. Also machen wir das graue Bild hier verschwommen. Dann hier unten müssen wir den ersten Frame des Bildes, also den Hintergrund, mit dem aktuellen Frame vergleichen also den Hintergrund, mit dem aktuellen Frame Nennen wir das den Frame, und das würde dem Unterschied zwischen CV Dot Apps entsprechen. Also absoluter Unterschied zwischen dem ersten Frame und dem aktuellen Frame, der grau ist. Beachten Sie, dass der erste Frame auch eine graue Version sein wird, eine verschwommene Grauversion sogar Wir vergleichen hier also mit verschwommenen Graustufenbildern. Okay? Und was uns das geben wird, ist ein anderes Bild, okay? Und eigentlich würde ich das Bild gerne hier auf dem Bildschirm zeigen . CB zwei Bilder zeigen. Delta-Rahmen. Mal sehen, was wir davon haben werden. Und bevor ich das Skript ausführe, werde ich zuerst aus der Ansicht verschwinden und dann werden wir erscheinen. Lassen Sie uns noch einmal sehen. Okay, nichts ist passiert, weil ich vergessen habe, den Namen des Fensters einzugeben. Nennen wir das Delta. Rahmen. Und sagen wir mal grauen Rahmen dafür. Lassen Sie mich es jetzt noch einmal ausführen. Und hier bin ich. Also das ist eine verschwommene Graustufenversion , die hier läuft, und wir haben den Unterschied Okay. Damit du die Lampe hinter mir im Delta-Rahmen sehen kannst. Großartig. Drücken Sie auf Qiki und beenden Sie das Video Wenn ich jetzt drucken möchte, nur um den Delta-Frame zu überprüfen Dadurch können wir den Unterschied zwischen den Intensitäten der entsprechenden Pixel erkennen Intensitäten der entsprechenden Also lass mich sehen. Und wenn ich jetzt damit aufhöre. Und los geht's. Also, was wir hier fünf haben, bedeutet, dass es keinen Unterschied gibt. Also in diesem Bereich gibt es wahrscheinlich keine Bewegung, aber dann haben Sie 174, was ziemlich weiß ist. Das bedeutet also, dass Python dies als Bewegung klassifizieren wird. Okay, das war nur, um dir die Werte des Datenrahmens zu zeigen Was wir jetzt tun müssen, ist diese Werte zu klassifizieren. Nehmen wir an, wir möchten einen Schwellenwert zuweisen. Nehmen wir an, wir haben Werte, die über 30 liegen Wenn also der Unterschied zwischen dem ersten Bild und dem aktuellen Bild mehr als 30 beträgt, klassifizieren wir das als weiß Wir werden also sagen, dass in diesen Pixeln wahrscheinlich Bewegung ist. In diesen Pixeln befindet sich also ein Objekt. Und wenn der Unterschied weniger als 30 ist, weisen wir ihm ein schwarzes Pixel zu. Okay? Also können wir das machen. Also sind wir hier. Wir können das mit der Threshold-Methode der CV-Two-Bibliothek tun. Nehmen wir an, frisches Delta entspricht CV Two, dem Schwellenwert. Und was das erwartet, ist das Bild. Das möchten Sie als Schwellenwert festlegen, und dann möchten Sie einen Schwellenwert angeben. Also 30 wir bei 30. Und welche Farbe möchten Sie den Werten zuweisen , die mehr als 30 sind? Nun, Sie möchten eine weiße Farbe zuweisen, die dem Wert 255 entspricht. Okay. Und Sie benötigen hier noch ein weiteres Argument, nämlich die Schwellenwertmethode. Es gibt eine ganze Reihe von Methoden, aber wir verwenden diese Methode hier. Also binärer Schwellenwert. Sie können mit anderen experimentieren, wenn Sie möchten. Großartig. Und jetzt wollen wir sehen, wie dieser Fresh Delta-Rahmen aussehen wird. Lebenslauf zwei zeigt Thresh Frame, okay. Frisches Delta. Großartig. Lass uns sehen. Offenbar habe ich den falschen Delta-Frame geschrieben , nicht den Frame-Delta. Und noch ein Tippfehler in Zeile 19 , hier CV zwei Okay, hoffen wir, dass es diesmal klappt. Und noch ein Fehler. Diesmal habe ich hier etwas verpasst. Okay. Diese Methode hier, also die Schwellenwertmethode, gibt tatsächlich ein Tupel mit zwei Werten zurück ein Tupel mit zwei Werten Und der erste Wert wird benötigt, wenn Sie andere Schwellenwertmethoden verwenden Das erste Element des Umsturzes schlägt also im Grunde einen Wert für den Schwellenwert vor, wenn Sie andere Methoden verwenden Bei binären Schwellenwerten müssen Sie jedoch nur auf das zweite Element des Tupels zugreifen, das ist der eigentliche Frame, der zurückgegeben Aus der Threshold-Methode. Sie möchten also auf das zweite Element des Tupels zugreifen. Okay, ich verspreche, das ist ein Verlustfehler. Großartig. Endlich, und das ist der Schwellenrahmen. Siehst du, du kannst dort meinen Umriss sehen, aber du siehst hier auch einige weiße Bereiche wegen der Schatten. Ich werde also als Objekt erkannt, aber auch meine Schatten werden als Objekte erkannt. Okay? Also verstehst du die Idee. können wir sofort loslegen und diesen Thresh Delta Frame benutzen , den ich Thresh Delta genannt habe Ich sollte ihn Thresh Frame nennen, weißt du, nur aus Gründen Also können wir jetzt weitermachen und Konturen der weißen Objekte im Thresh Frame erstellen Konturen der weißen Objekte im Thresh Frame Aber vorher würde ich gerne etwas anderes machen. Ich würde diese Bereiche gerne verzögern. Also möchte ich die schwarzen Löcher aus diesen großen weißen Bereichen im Bild entfernen . Im Grunde möchte ich also meinen Schwellenrahmen glätten. Und um das zu tun, müssen Sie die verzögerte Methode der CV Two-Bibliothek verwenden . Nehmen wir an, wir wollen den Threshold-Frame, CV Two, DLD, ändern . Auch hier möchten Sie einen Threshold-Frame übergeben Wenn Sie nun ein Kernel-Array haben und möchten, dass dieser Prozess sehr ausgefeilt ist, würden Sie dieses Array hier übergeben Wir haben keins und wir brauchen keins, also müssen Sie für diesen Parameter keines übergeben. Und hier gibt es noch einen weiteren Parameter, Iterationen. Sagen wir zwei. Das definiert also, wie oft Sie das Bild durchgehen möchten, um die Sohlen zu entfernen Je größer diese Zahl ist, desto glatter wird das Bild sein Okay. Lass es mich schnell überprüfen. Oh ja, ich habe den Namen vorhin geändert, aber ich habe ihn hier in der I'm Shaw-Methode nicht geändert. Frischer Rahmen. Okay. Sie können also wahrscheinlich feststellen, dass die Bereiche, die weißen Bereiche, jetzt glatter sind Wenn ich also weggehe, werden Sie aufgrund meines Schattens nur einige Bereiche bemerken , die da sind Also, soweit scheint es zu funktionieren. Lass es uns jetzt erstellen. Großartig. Also haben wir diese drei Frames. Was kommt als Nächstes? Nun, als Nächstes müssen wir die Konturen dieses erweiterten Schwellenrahmens finden die Konturen dieses erweiterten Schwellenrahmens In Bezug auf die Konturerkennung mit OpenCV haben Sie zwei Methoden Sie haben also eine Methode zum Finden von Konturen und eine zum Zeichnen von Konturen. Und mit der Methode „ Konturen finden finden Sie die Konturen in Ihrem Bild und speichern sie in einem Tupel Andererseits zeichnet die Methode „Konturen zeichnen “ Konturen in einem Bild In diesem Fall wollen wir also die Konturen finden und dann den Bereich der Konturen überprüfen. Nehmen wir an, Sie haben eine Kontur wie einen Kreis und möchten daher den Bereich finden, den diese Kontur definiert. Sie möchten diese Konturen also in einem Tupel speichern. Sie möchten also CNTs C und einen weiteren Unterstrich schreiben. Okay. Das wäre gleich. Lebenslauf zwei, finde Konturen. Und dann möchten Sie den Frame übergeben , für den Sie die Konturen finden möchten. Und es ist gut, tatsächlich eine Kopie des Frames zu verwenden, sodass Sie den Schwellenrahmen nicht ändern möchten . Verwenden Sie hier also „Kopieren“. Dies ist jedoch der erste Parameter, der Rahmen, aus dem Sie die Konturen finden möchten, und dann müssen Sie die Methode abrufen. Extern. Sie möchten also die externen Kontraste oder die Objekte zeichnen , die Sie im Bild finden werden Und Sie haben noch eine weitere Argumentkette, ein Prox-Symbol. Das ist also eine Näherungsmethode, die OpenCV für das Abrufen der Steuerelemente anwendet Großartig. Was wir also haben, ist dass wir den aktuellen Frame durcharbeiten Also verwischen wir es und konvertieren es in Graustufen, finden den Delta-Frame und wenden den Also das Schwarz-Weiß-Bild. Dann finden wir alle Konturen der Objekte der verschiedenen Objekte in diesem Bild. Wenn Sie also zwei weiße durchgehende Bereiche in Ihrem Bild haben , jedoch unterscheiden, erhalten Sie zwei Konturen. Also eine Kontur für jeden der Bereiche. Diese Konturen werden in dieser CNTs-Variablen gespeichert. Wir sprechen also über das aktuelle X, was wir tun wollen, ist, diese Kondore herauszufiltern Wir wollen also überprüfen , ob wir nur die Kondore behalten wollen, die, sagen wir, eine Fläche haben, die größer als 1.000 Pixel ist Dazu müssen Sie, sagen wir, für Konturen in CNTs iterieren für Konturen in Und wenn die Kontur den Bereich der Kontur durchläuft. also die Kontur, durch die wir iterieren, Wenn also die Kontur, durch die wir iterieren, weniger als 1.000 ist, geht es wieder bis zum Anfang der vier Schleifen weiter Das bedeutet also, sagen wir, Python hat drei Kondore gefunden und es wird den ersten durchqueren und das Gebiet dieses Konors Wir verwenden also den Conor-Bereich der CB-Two-Bibliothek. Wenn der Bereich weniger als 1.000 Pixel hat, fahren Sie mit dem nächsten Zähler fort. Gehen Sie also zum zweiten Conor und überprüfen Sie es immer wieder Andernfalls, wenn die Fläche größer oder gleich 1.000 ist, werden die nächsten Zeilen hier nach den vier Schleifen ausgeführt Was möchten Sie also tun, wenn eine Kontur größer als 1.000 Pixel ist? Nun, wir wollen das Rechteck, das diese Kontur umgibt, auf den aktuellen Rahmen zeichnen. Stellen Sie also sicher, dass Sie sich innerhalb der vier Schleifen befinden. Wir iterieren also immer noch und das sind also die Parameter, die das Rechteck definieren, das dem CV-Rechteck mit zwei Punkten oder der aktuellen Kontur entsprechen würde CV-Rechteck mit zwei Punkten oder der aktuellen Kontur Wenn die Kontur also gleich oder größer als 1.000 Pixel ist, also wenn sie eine Fläche von gleich oder mehr als 1.000 Pixeln hat , wird dies ausgeführt Wir erstellen also ein Rechteck, und dann wollen wir dieses Rechteck auf unseren Rahmen in unseren aktuellen Rahmen zeichnen . Also CV zwei Rechtecke. Deshalb verwenden wir diese Methode bereits in unseren Vorlesungen zur Phasendetektion. Und hier würden wir den Farbrahmen verabschieden wollen. Okay. Das ist also der Rahmen, und Sie möchten X und Y angeben. Das sind also die Koordinaten der oberen linken Ecke des Rechtecks, X Y, und Sie möchten auch die Koordinaten der rechten unteren Ecke des Rechtecks angeben die Koordinaten der rechten unteren Ecke auch die Koordinaten der rechten unteren Ecke des Rechtecks Also X W einfach so. Und auch die Farbe deines Rechtecks, mal sehen. Grün und Breite. Sagen wir drei. Was wir also in diesen beiden Zeilen gemacht haben , ist, dass wir dieses Tupel mit diesen vier Koordinaten erzeugt haben Und diese Werte werden automatisch zugewiesen. X und Y erhalten also den Wert aus dem Rechteck, das diese aktuelle Steuerung der vier Regelkreise miteinander verbindet. Und dann werden diese Werte verwendet, um ein Rechteck im Rahmen des aktuellen Rahmens zu zeichnen . Und dann wollen wir den aktuellen Frame zeigen. Also lass es mich hier hinzufügen. Bild zeigen. Nennen wir das „ Frame“ und „Frame“. Eigentlich ist diese Methode hier Bonding, richtig. In Ordnung, lassen Sie mich das Skript jetzt ausprobieren. Ein Lebenslauf zwei hat kein Attribut „Konturen finden“. Also hier habe ich ein U, das nicht da sein sollte. Lass es uns nochmal versuchen. Ja, das ist lustig. Ich neige dazu, dieses Wort Konturbereich falsch zu tippen. Zeile 24, entferne das U und sollte auch hier Kontur sein Okay. Die Kontur ist nicht wieder definiert. Ich habe noch einen hier. Also hab Geduld mit mir. Versuch es noch einmal. Äh, ja, dieses Mal scheint es zu funktionieren. Also keine Objekte. Objekte. Keine Objekte. Objekte. Großartig. Großartig. Das wollte ich Ihnen in dieser Vorlesung beibringen, und wir werden mit den nächsten Vorlesungen weitermachen , denn was wir bisher gemacht haben , ist, dass wir dieses Objekt erkennen und ein Rechteck um dieses Objekt zeichnen können . Aber das ist nicht sehr praktisch. Ich meine, in der realen Welt reicht es nicht aus, nur ein Rechteck um Ihr Objekt zu zeichnen, und das war's dann. In der nächsten Vorlesung werden wir also die Zeiten speichern , zu denen das Objekt in den Frame eintritt , wenn das Objekt den Frame verlässt Wir müssen diesem Code also noch ein paar Zeilen hinzufügen. Und ich weiß, dass dieser Code hier ziemlich viel zu konsumieren war, aber ich hoffe, das ist jetzt klar. Wenn Sie Fragen haben, können Sie sie gerne stellen, und wir sehen uns in der nächsten Vorlesung. 123. 122. Zeitstempel zur Objekterkennung in einer CSV-Datei speichern ++: Ordnung, ich habe hier mein Bewegungserkennungsprogramm im Griff. Und wie Sie sehen, fängt mich das gerade in Bewegung Wenn ich weggehe, kann man dort nur ein paar Schatten sehen. Also, das ist großartig, aber wie gesagt, aber wie gesagt, vielleicht möchten Sie die Zeiten speichern, zu denen ein Objekt in den Rahmen eintritt , damit Sie am Ende so etwas erhalten. Das ist also der erste Eingang. Als Startzeit ist dies die Stelle, an der das Objekt den Frame verlassen hat und dann der zweite Eingang des Objekts und so weiter In dieser Vorlesung werde ich Ihnen also zeigen, wie Sie diese Tabelle mit diesem Skript erstellen Also werden wir hier etwas mehr Code hinzufügen. Und der Weg, damit zu beginnen, besteht darin zuerst den Punkt herauszufinden, die Zeile im Skript, an der sich der Status von, sagen wir, Bewegung zu Nichtbewegung ändert . Wir haben hier also keine Bewegung. Also, sobald die Webcam ausgelöst wird, sagen wir, ist der Status Null. Also nur ein Symbol, das ich auswähle, um anzuzeigen , dass es im aktuellen Bild keine Bewegung Dann erhalten Sie das erste Bild, das den Status Null hat, und dann graden Sie aus, und dann überprüfen Sie, ob das erste Bild keines ist, und dann setzen Sie die Schleife wieder fort und dann nehmen Sie das zweite Bild Der Status ist also immer noch Null, dann wenden Sie die Differenz an, den Schwellenwert, und erweitern Und dann rasieren Sie durch die Konturen. Wenn Sie also einen Bereich finden, der kleiner ist, als ich das zuvor geändert habe, gebe ich 10.000 an Ich wollte also größere Objekte erkennen , weil ich näher an der Kamera war, also wollte ich sie anpassen. Je nachdem, welche Objekte Sie aufnehmen möchten, möchten Sie diese Pixel hier anpassen. 10.000 ist also so etwas wie ein Fenster mit 100 mal 100 Pixeln. Wir prüfen also, ob Sie kein Fenster finden, das größer als 10.000 ist, dann mit dem Anfang der Schleife fort , bis Sie ein Steuerelement mit dieser Größe finden , das größer ist. Wenn Python das Steuerelement mit dieser Größe findet, wollen wir den Status auf eins ändern Okay. Und lassen Sie uns jetzt diese Statusvariable ausdrucken. Sie möchten sie also am Ende Ihrer Schleife ausdrucken, also den Status. Und lassen Sie mich diese Numpy-Arrays löschen, die gedruckt werden. Die brauchen wir nicht und machen hier Platz. Das ist also innerhalb der Schleife, und ich erwarte jetzt, dass der Status Eins oder Null ausgedruckt wird, je nachdem, ob ein Objekt im Rahmen befindet oder nicht. Wenn das funktioniert, bedeutet das, dass wir jetzt den aktuellen Status des Frames haben und wir diese 10 für andere Dinge verwenden können. Also lass uns sehen. Okay, im Moment gibt es nichts. Lass mich das minimieren, damit wir die Konsole sehen können, das auch. Großartig. Also Null wird ausgedruckt, und wenn etwas auftaucht, siehst du jetzt eins. Nochmals, eins, null, eins, eins, null. Großartig. Wir können jetzt einfach eine Datums- und Uhrzeitmethode anwenden, weißt du, wie es die Datumszeit jetzt tut. Und das würde die Uhrzeit jedes Frames aufzeichnen. Also genau das wollen wir nicht. Wir wollen die Methode „Daytime Do Now“ verwenden, aber nicht so, weil das die Zeiten für jeden Frame aufzeichnen würde. Stattdessen wollen wir wissen, wann sich der Status auf 0-1 ändert, was darauf hindeutet, dass ein Objekt in den Frame eindringt Also wollen wir diese Zeit aufzeichnen. Und wir wollen auch das andere Mal aufnehmen wenn sich der Status auf 1:0 ändert, sodass das Objekt den Frame verlässt Sagen wir eine Statusliste, das wäre gleichbedeutend mit leeren Klammern, einer leeren Und dann möchte ich den Status des Objekts an diese Liste anhängen des Objekts an diese Liste anhängen Nachdem diese Schleife beendet ist, die hier ist, möchte ich hier auf derselben Ebene wie die Schleife sein, also möchte ich etwas außerhalb der Schleife anwenden Also Statusliste, ich möchte den aktuellen Status der Liste hier in dieser Statusliste anhängen der Liste hier in dieser Statusliste Großartig. Und zur Veranschaulichung, um Ihnen zu zeigen, worum es in dieser Statusliste geht, würde ich sie gerne ausdrucken . Und ich möchte eine Liste außerhalb der Drahtschleife ausdrucken , also möchte ich sie nicht jedes Mal ausdrucken , wenn die Schleife wiederholt wird Also Bewegung hier. Und kündige. Das sind also die Status für jeden der Frames. Also Null, Null, Null, keine Bewegung, und dann ist etwas in den Frame eingedrungen Und dieses Etwas ist eingedrungen, sagen wir, 30 Frames, und dann verlässt das Objekt den Frame Und das ist es. Was wir jetzt tun wollen, ist festzuhalten, was als Nächstes kommt. Als Nächstes wollen wir also die Zeit erfassen , in der wir 0-1 und auch 1-0 wechseln Im Grunde geht es uns also darum, die letzten beiden Elemente der Statusliste zu erfassen Nehmen wir an, wir haben den Status Null. Wir beginnen also mit einer leeren Liste, und das erste Element , das an die Statusliste angehängt wird , ist Null Und dann wird das zweite Element, sagen wir, Null sein oder sagen wir, es wird eins sein Deshalb wollen wir eine Bedingung anwenden, um zu überprüfen , ob sich die letzten beiden Elemente der Liste ändern. Ich weiß, das mag verwirrend sein, aber sobald ich diese vier Codezeilen hier geschrieben habe, wirst du es verstehen und es wird sehr viel Sinn machen. Also wollen wir überprüfen, ob die Statusliste da ist. Also das letzte Element der Statusliste, das einen Index von minus eins hat, denken Sie an die Listenindizierung, wenn das gleich eins ist, und die Statusliste mit dem Index minus zwei Das Element, das zuerst hinzugefügt wurde, das Element, das an zweiter Stelle hinzugefügt wurde, ist also gleich Null Wir möchten den Tag dieses Ereignisses in einer Liste festhalten. Lassen Sie uns hier also eine Liste erstellen, sagen wir mal ist leer Und dann gehen wir hierher und sagen, Zeiten anhängen, Tageszeit, Punkt jetzt, Sie kennen diese Funktion Also wollen wir den aktuellen Zeitstempel anhängen, zu dem diese Änderung eingetreten ist Das heißt also, wir müssen das oder von Datum, Uhrzeit, Datum und Uhrzeit importieren Also Tagesunterricht aus der Datetime-Bibliothek. Wir zeichnen also im Grunde die Zeit auf, zu der sich der Status auf eins geändert hat Und wir wollen auch die Zeit aufzeichnen, zu der sich der Status auf 1:0 ändert Wir hätten also eine ähnliche Bedingung, aber diese wäre Null und das wäre eins. Okay. Also, was hier passiert ist, gehen wir zurück zum Anfang der Schleife. Also hat Python das erste Bild aufgenommen, und er konvertiert es in Grau und verwischt es und wendet dort eine Gaußsche Unschärfe auf das erste Bild an Und dann speichern wir den ersten Frame in der ersten Frame-Variablen, und dann machen wir weiter und berechnen die Differenz zwischen dem ersten Frame und dem aktuellen Frame, finden Konturen, und wenn dieser Tiefpunkt Konturen über 10.000 findet, ändert sich die Statusvariable von Null, also hat sie bei Null angefangen, also ändert sie sich hier bei eins. Und das bedeutet, dass diese leere Statusliste einen anderen Wert erhält. Aber der erste Wert ist immer Null, also beginnt die Liste mit Null. Du weißt schon, wie hier. Also der allererste Wert ist Null. Nehmen wir also an, für die nächsten zehn Frames wird es Null, Null, Null sein und so weiter. Und wenn dann ein Objekt in den Frame eindringt und der Status dann auf eins wechselt. Wir haben also Null, Null, Null, Null und dann Eins. Und dann vergleichen wir hier die letzten beiden Punkte der Liste. Okay. Und hier möchte ich die Zeitliste ausdrucken , damit du siehst, was vor sich geht. Und ich erwarte hier bei der ersten Ausführung einen Fehler hier bei der ersten Ausführung weil wir noch etwas zu tun haben, aber mal sehen. Also, ja, es heißt, der Listenindex liegt außerhalb des zulässigen Bereichs. Das bedeutet, dass Python Probleme hat, auf das zweite Element der Liste zuzugreifen das zweite Element der , weil die Liste hier keine Elemente enthält, also keine Elemente enthält. Und dann fügen wir ein Element hinzu, also fügen wir den Status hinzu. Und dann versucht Python, das zweite Element zu finden, aber es gibt kein zweites Element. Also müssen wir hier einen Trick machen. Wir müssen zwei Artikel hinzufügen. Okay. Sagen wir, keiner und keiner. Lassen Sie uns das Skript jetzt erneut ausführen. Im Moment ist dort also kein Objekt. Jetzt erscheint ein Objekt, es geht zweimal wieder raus und noch einmal. Also drei Eingänge. Und ich habe damit aufgehört Lassen Sie mich jetzt diese Liste durchgehen. Das ist unsere Zeitliste. Das ist also die Zeit. Also hier der Monat, der Tag und wie Minuten und Sekunden, und dann Mikrosekunden hier drin. Das ist also die Startzeit , zu der ein Objekt den Frame zum ersten Mal betrat Und dann ist dies eine Zeit, in der das Objekt den Rahmen verlässt. Also blieb ich 2 Sekunden dort, also 51 bis 53. Das nächste Objekt kommt in den Rahmen. Also von dieser Sekunde bis zu dieser, also für zwei weitere Sekunden, und dann noch ein drittes Mal 0-1 für 1 Sekunde Also haben wir drei Eingänge im Rahmen. Also hoffe ich, dass das Sinn macht. Das ist gut, aber manchmal kann es passieren, dass, wenn Sie das Skript ausführen, sodass Sie einen Hintergrund haben, das Objekt angezeigt wird und das Objekt verschwindet und wieder angezeigt wird. Und wenn Sie das Programm zu diesem Zeitpunkt beenden , lassen Sie es mich beenden. Sie werden sehen, dass Sie hier eine Startzeit für den ersten Eingang haben , dann die Endzeit und dann haben Sie hier eine weitere Startzeit für den zweiten Eingang. Aber dann hast du keine Ausgangszeit. Vielleicht möchten Sie also die Endzeit des Austritts Ihres letzten Objekts hinzufügen , dem Zeitpunkt, zu dem das Fenster geschlossen wurde. Sie möchten also am Ende hierher gehen und das Skript wartet auf einen Schlüssel. Wenn Sie hier also auf Quit drücken, wird die While-Schleife unterbrochen. Aber vorher sollten Sie vielleicht den Status überprüfen. Wenn der Status also eins ist, und in diesem Fall würden Sie dieses Szenario hier haben. Wenn der Status also eins ist Sie die Taste auf der Tastatur drücken, möchten Sie Ihrer Zeitliste ein weiteres Element hinzufügen. Also Tageszeiten angehängt , das ist jetzt, großartig. Also das sollte jetzt anders funktionieren. Also lass uns das Skript ausführen. Kein Objekt. Objekt. Kein Objekt, Objekt im Frame, beenden. Und jetzt sollten wir vier Tage hier sein. Viermal, eins, zwei, drei und vier. Das hier wurde also in diesem Ausdruck hier aufgezeichnet. Großartig. Und das nächste, was wir jetzt tun wollen, ist, diese Liste in einen Pandas-Datenrahmen und dann in eine CSV-Datei zu werfen diese Liste in einen Pandas-Datenrahmen . Wir werden also eine Start - und eine Endspalte haben. Und in der Startspalte hätten wir zum Beispiel diesen Wert und in der Endspalte hätten wir die anderen Werte. Also dieser hier und der letzte. Okay. Zuallererst brauchen wir einen leeren Datenrahmen, Pandas-Datenrahmen Also werden wir natürlich Pandas verwenden , um Datenrahmen zu erstellen Also lass mich Pandas hier importieren. Und nehmen wir an, der Datenrahmen DF entspricht Pandas DataFrame, wobei die Spalten so einfach beginnen und enden Dadurch wird für uns eine Datenrahmenstruktur erstellt, die keine Werte hat, aber zwei Spalten hat Und dann ist das nächste , was Sie tun möchten, außerhalb des Regelkreises. Sobald Sie also Ihre Zeitliste erstellt haben , möchten Sie diese Liste durchgehen und diese Werte dann an den Pandas-Datenrahmen anhängen diese Werte dann an den Pandas-Datenrahmen anhängen Sie benötigen also eine Schleife, sagen wir, für I Also müssten Sie hier mit einem Zweierschritt iterieren. Und Sie würden so oft iterieren wollen, wie Werte in der Liste enthalten sind Also fängst du bei Null an und landest dann bei wie vielen Werten du in der Liste hast Nun, Sie können das mit der Längenmethode herausfinden, also Länge mal mit einem Zweierschritt. Toll. Das heißt, bei jeder Iteration DF-Solid-Datenrahmen sich selbst gleich Punkt anhängen. Sie aktualisieren also den Datenrahmen, und hier müssen Sie ein Wörterbuch übergeben Für die Startspalte müssten Sie also die Zeiten I und für die Endspalte eingeben. Die Schlüssel des Wörterbuchs hier sind also Start und Ende, und Sie sollten die Zahlen I plus eins anhängen Und Sie möchten den Index ignorieren. Also gleich T. Großartig. Also, sagen wir, für mich in Reichweite wäre das, sagen wir, wir haben eine Liste mit sechs Einträgen. Wir haben also drei Sterne und drei Mal. Das würde also einen Bereich von Null bis Sechs mit einem Schritt von zwei bedeuten. Für Null würden wir das also tun. Also fangen wir in der Schleife bei Null und greifen zeitweise auf das Objekt mit einem Null-Index zu, was zufällig zum Beispiel dieses Element ist. Also der erste Gegenstand. Und dann hängen wir dieses Element an die erste Zeile der Startspalte an Und dann greifen wir auf das Element Null plus eins zu, das zufällig ein Element mit Index eins ist, was dieses Element sein sollte, also das zweite Element Und wir hängen dieses Element an die letzte Spalte für dieselbe Zeile Das ist es also. Dann gehen wir zum nächsten Punkt. Diesmal würden wir also mit Index drei beginnen, also drei hier, also drei hier, fügen es der Startspalte hinzu und dann vier fügen es der Startspalte zur Endspalte hinzu, tut mir leid und so weiter. Und schließlich hätten wir einen Datenrahmen. Und was Sie dann vielleicht tun möchten, ist DF zwei CSV. Sagen wir mal CSV. Also exportieren wir den Datenrahmen in eine CSV-Datei. Großartig. Mal sehen, wie das ausgehen wird. Es wird ziemlich dunkel hier. Okay. Und noch einmal. Frame, hör auf. Und wie Sie sehen, wurde die CSV manchmal in meinem Dateisystem erstellt. Und das sind die Zeiten. Ich kann es auch mit Excel öffnen. Das sind also die Start- und Endzeiten. Wenn Sie möchten, können Sie sie hier formatieren, Zellen formatieren, und Sie können die Daten jetzt sehen. Großartig. Großartig. Damit ist dieser Vortrag beendet, und ich hoffe, er hat Ihnen gefallen. Wir haben jetzt ein ziemlich gutes Drehbuch, und um es schöner zu machen, würden wir diese Zeiten grafisch darstellen wollen. So verwandeln Sie Ihre Daten in echte Informationen. Und das werden wir in den nächsten Vorlesungen tun. Aber vorher möchte ich Ihnen die Bouquet-Bibliothek vorstellen , eine Bibliothek für interaktive Visualisierungen im Bitte folgen Sie den Vorlesungen in der richtigen Reihenfolge, und ich bin mir sicher, dass Sie viel lernen werden Wir sprechen später mit dir. 124. 123. Einführung in die Bokeh-Bibliothek +: Hallo, und natürlich willkommen in diesem neuen und sehr aufregenden Bereich Und in diesem Abschnitt, also in den Vorlesungen dieses Abschnitts, werden Sie lernen, wie Sie mit Python Visualisierungen im Browser generieren mit Python Visualisierungen im Browser Wir sprechen also von interaktiven Visualisierungen, und dafür werden wir die Bouquet-Python-Bibliothek verwenden Boke ist also eine Python-Bibliothek, und sie ist ziemlich neu. Und mit Bouque können Sie Daten aus verschiedenen Datenquellen, Datendateiformaten wie CSV, Python-Liste, JSON-Dateien usw. abrufen Datendateiformaten wie CSV, Python-Liste, JSON-Dateien usw. Und Sie können wunderschöne Visualisierungen im Browser erstellen Visualisierungen Ich war ein Benutzer von Math Plus Lib und Seaborn. Also zwei weitere Python-Bibliotheken, die verwendet werden, um Visualisierungen mit Python durchzuführen Aber ich würde sagen, Boke ist moderner. Und sobald ich es Ihnen vorgestellt habe, bin ich mir sicher, dass Sie es für Ihre Datenvisualisierungsprojekte verwenden werden Ihre Datenvisualisierungsprojekte In diesem Abschnitt werde ich Ihnen zeigen, wie Sie Linien- und Streudiagramme erstellen und wie Sie verschiedene Diagramme zu einem Diagramm und Zeitreihendiagrammen kombinieren können verschiedene Diagramme zu einem Diagramm und Zeitreihendiagrammen Und wir werden den Code in das Jupiter-Notizbuch schreiben, das früher als IPython-Notizbuch bekannt war Und das Jupiter-Notizbuch ist wie eine Kombination aus Python-Konsole, sodass Sie interaktiven Code schreiben, aber Sie können auch das von Ihnen geschriebene Skript speichern. Das Jupiter-Notizbuch sieht ungefähr so aus. Okay. Und ich zeige Ihnen in der nächsten Vorlesung, wie Sie das Jupiter-Notebook installieren. Daher eignet sich Jupiter hervorragend für Datenanalysen und Visualisierungen sowie für Web-Scrapping und andere Also ich bin mir sicher, dass du es lieben wirst. Und hier, lass uns mit der nächsten Vorlesung weitermachen. 125. 124. Erstelle deinen ersten Bokeh-Plot: Großartig. Jetzt weißt du, was Boke ist, weil ich das in der vorherigen Vorlesung erklärt habe In dieser Vorlesung zeige ich Ihnen, wie Sie ein sehr einfaches Buchdiagramm erstellen ein sehr einfaches Buchdiagramm Ja, also fangen wir bei Null an und werden das Diagramm Schritt für Schritt verbessern. Ja, nehmen wir an, das ist dein erstes Buchdiagramm oder vielleicht hast du schon einmal Buchgrafiken erstellt. Also, bevor du diesen Kurs belegst, weißt du, schon ein paar Dinge. Dennoch würde ich vorschlagen, dass Sie hier beginnen , weil ich Ihnen Schritt für Schritt die richtige Logik zur Erstellung von Diagrammen zeigen werde . Ah, lass uns weitermachen und das machen. Mm. Ich verwende manchmal Jupiter-Notizbuch, um Python-Code zu schreiben, und manchmal verwende ich den Atom-Editor. Das Jupiter-Notizbuch ist also eigentlich ein guter Anfang, weil es uns ermöglicht, interaktiven Code zu schreiben. Wir können einfach eine einzelne Codezeile schreiben und sehen, was sie macht. Das ist also großartig, um mit einer Bibliothek zu beginnen, damit Sie die Bibliothek erkunden können, indem Sie kleine Codeteile probieren. Und wenn Sie die Umschalttaste drücken und mit der rechten Maustaste auf Windows über dem Ordner klicken , können Sie hier das Befehlsfenster öffnen. Dadurch wird eine Eingabeaufforderung im aktuellen Ordner geöffnet. Auf einem Macro-Linux können Sie also vielleicht so etwas wie das Terminal hier öffnen oder Sie können ein Terminal normal und dann den Pfad zu Ihrem Arbeitspfad auf CD speichern. Also werde ich den Code in dieses Verzeichnis schreiben. Und um Jupiter zu installieren, würdest du sagen, PIP installiere Jupiter Notebook Und diese Anforderung ist bereits erfüllt, da ich Jupiter Notebook bereits installiert habe Jupiter Notebook bereits installiert Wenn Sie das nicht getan haben, können Sie einfach weitermachen und, Sie wissen schon, es wird für Sie installiert. Und um Jupiter Notebook zu starten, würdest du einfach Jupiter Notebook sagen. Und das öffnet ein Jupiter-Notebook auf dem lokalen Host. Es ist also wie ein servicebasiertes Notebook. Und ja, wenn du jetzt etwas erstellst, erstellst du ein Python-kostenloses Notizbuch. Und nenne es. Einfach so ein einfaches Diagramm. Und im Demo-Ordner haben Sie diesen einfachen Grafikpunkt IPYNB, der für IPython-Notebook steht , aber jetzt wird das iPython-Notizbuch in Jupiter Notebook umbenannt Aber die Erweiterung bleibt immer noch dieselbe. Und Sie haben auch diese Checkpoints, bei denen es sich um Dateien handelt, die automatisch reduziert werden, wenn Jupiter Ihre Sitzungen speichert Jetzt sollten Sie Ihre Befehlsfront offen lassen, und dann schreiben Sie hier den Code Wissen Sie, wenn Sie Jupiter-Bücher nicht bevorzugen, können Sie Ihren Lieblingseditor verwenden. Das wäre also Atom oder Vim oder die Standard-Python-IDE und so weiter Es spielt keine große Rolle. Und ich werde Kommentare verwenden, um meinen Code zu kommentieren, und das wird dir helfen, meinen Code leichter zu lesen und zu verstehen, weil , weißt du, ich werde hier etwas Code schreiben und etwas Code und später so. Und ich werde den Code erklären, während ich ihn eintippe. Aber manchmal vergisst du, was ich hier eingegeben habe , und du hast Mühe, es zu verstehen, aber wenn ich hier einige Befehle habe, sagen wir, die X- und Y-Werte grafisch darzustellen Und wenn ich diesen Kommentar hier schreibe, liest Python ihn nicht als Code, also ignoriert es ihn, aber du kannst ihn lesen und du wirst davon ausgehen , dass ich diesen Kommentar für den nächsten Block schreibe. Also schreibe ich den Befehl, lasse kein Leerzeichen und tippe den Code dort ein. Und dann lasse ich dort ein Leerzeichen und gebe dort einen anderen Code ein. Es ist also ein weiterer Block, nichts mit diesem Befehl zu tun hat. In diesem Kommentar wird es also um diesen Codeblock gehen. Manchmal möchte ich vielleicht spezifische Kommentare zu bestimmten Zeilen hinzufügen. Zum Beispiel dieser hier. In diesem Fall schreibe ich den Befehl einfach dort. Also sagen wir für die X-Werte hier oder so ähnlich. Großartig. Und der erste Kommentar bezieht sich normalerweise auf das Drehbuch. Wir werden also ein einfaches BOE-Diagramm erstellen. Das wird ein Liniendiagramm sein. Großartig. Und ich lasse dort ein Leerzeichen und hier starte ich den Code. Also zuerst werde ich Boke importieren. Ich werde das später erklären, aber Bouquet hat ein paar Schnittstellen Und die erste Schnittstelle ist das Plotten von Blumensträußen. Es wird also die Oberfläche zum Plotten von Blumensträußen genannt. Und ich werde die Schnittstellen später durchgehen. Konzentrieren wir uns zunächst darauf, wie ein Diagramm aussieht und wie der Code aussieht, um ein Booger-Diagramm zu erstellen Aus dem Import von Bouquet-Plots importieren Sie also das Figurobjekt, das wichtigste Objekt in Bouquet, weil quasi einen Container enthält, in dem Sie Punkte und Linien hinzufügen, und Sie hatten Beschriftungen für die Punkte, und Sie hatten Noten für die Handlung, Legenden Sie fügen also alles zu diesem Figurobjekt hinzu. Das ist es. Und dann benötigen Sie einige hilfreiche Tools von Bokeh, die von der Booke Dot IO-Schnittstelle stammen Von dort aus möchten Sie die Ausgabedatei importieren und anzeigen. Ja, das ist im Grunde das , was wir brauchen. Sie werden gleich sehen , was das alles ist, und dann müssen wir einige Daten erstellen. Lassen Sie uns dort also einige gefälschte Daten erstellen. Bereite einige Daten vor. Ich werde Listen verwenden. Sagen wir, eins, zwei, drei, vier und fünf. Das ist also für die X-Achse. Im Diagramm werden diese Werte also entlang der X-Achse abgebildet Und dann haben wir dort die Y-Achse. Sagen wir, sechs, sieben, acht, neun, zehn. Beachten Sie, dass diese Listen dieselbe Länge haben müssen, um sie in Bukit grafisch Andernfalls gibt Bouquet einen Fehler aus. Ich werde sagen, dass Sie wissen, Bouquet anfangen wird, Paare aus dieser Liste zu nehmen. Es braucht also eins und sechs, und es wird diese entlang der X- und Y-Achse abbilden. Es wird also ein Punkt mit den Koordinaten eins und sechs, dann zwei und sieben usw. erstellt . Ich mache fünf und zehn durch. Wenn Sie dann hier eine Zeilennummer hinzufügen, sagen wir sieben oder was auch immer, wird Python sagen: Oh, ich habe kein Paar für sieben auf der Y-Achse gefunden. Sie erhalten also eine Fehlermeldung. Großartig. Also haben wir die Daten. Bereiten Sie die Ausgabedatei vor. Hier verwenden Sie also die Ausgabedateifunktion. Und dort übergibst du den Namen der HTML-Datei, die erstellt wird Sie können also jeden gewünschten Namen wählen. Und als Nächstes möchten Sie eine Figurenobjektinstanz erstellen. Sie haben dort die Figurenklasse. Sie haben es eingegeben und können es jetzt einfach so verwenden jetzt einfach so Ich speichere das in der Variablen F. Lassen Sie mich das kommentieren. Figurobjekt erstellen. Und dann endlich ein Liniendiagramm erstellen. Und um das Liniendiagramm zu erstellen verweisen Sie auf das Figurobjekt, das Sie erstellt haben, und wenden dann die Linienmethode wenn Sie eine Linie erstellen möchten. Und die Linie erwartet von Ihnen, dass Sie das X-Array mit Daten und das Y-Array ebenfalls übergeben . Ich weiß also, dass alles, was ich hier gebe, die Mindestanforderungen sind , um ein Grundstück zu bauen. Aber es gibt viele Funktionen, die Sie später hier im Code hinzufügen werden , sodass wir unsere Plots mit Funktionen wie Legenden und Beschriftungen, Farben und Transparenz usw. bereichern wie Legenden und Beschriftungen . Aber das ist sozusagen das Rückgrat. Und wenn Sie einmal eine Linie erstellt haben, müssen Sie nur noch die Show-Methode verwenden , um Ihr Figurobjekt anzuzeigen. Und um das in Jupiter auszuführen, können Sie einfach Control und Enter drücken. Warte eine Sekunde. Und ich habe dort einen Fehler bekommen. Oh, aber es sollte eine Ausgabedatei sein. Tut mir leid. Führen Sie es erneut aus und hier ist das Liniendiagramm. Wie dem auch sei, wenn Sie sich das ansehen, sehen Sie, dass der erste Punkt der Linie an der ersten Koordinate liegt Das ist also die X-Achse, eine für die X-Sechs für das Y. Wenn Sie hier hinschauen, sind es eins und sechs, und dann haben Sie zwei und sieben und so eins bis zum letzten Punkt , der fünf bis zehn ist Fünf und zehn. Ja. Also das ist eine Grafik. Und das ist kein Bilddiagramm. Wie Sie sehen können, kann ich das verschieben und Sie haben hier auch ein paar Tools. Diese werden also Tools genannt. Und was Sie damit machen können, sagen wir, das ist ein Stift, und Sie sehen hier diese vertikale blaue Linie, das bedeutet, dass das Stiftwerkzeug bereits aktiviert ist. Und wenn ich meinen Cursor so bewege, schiebe ich mit dem Stift um das Diagramm herum. Wenn Sie, sagen wir, auf das Zoomrad klicken, werden Sie sehen, dass sowohl Pan als auch Radzoom jetzt aktiviert sind, und ich kann das Mausrad verwenden, um die Ansicht zu vergrößern und zu verkleinern. Denken Sie jetzt daran, dass ich Ihnen gesagt habe, Bouquet interaktive Grafiken erzeugt. Also hier ist es. Dies ist jedoch nur eine grundlegende Funktionalität der Interaktivität, da ich Ihnen später, wie ich Ihnen bereits sagte, hier Widgets hinzufügen werde, die sehr stark mit einem Diagramm interagieren Wie dem auch sei, im Grunde haben Sie auch dieses Feld Zoom, mit dem Sie einen bestimmten Bereich Ihres Diagramms vergrößern können Dort hast du auch dieses Reset, wodurch das Diagramm tatsächlich auf seine Standardansicht zurückgesetzt Und was noch übrig ist, wir haben diese Hilfe-Schaltfläche, die Sie zur Bouquet-Dokumentation gelangen, und ich werde die Bouquet-Dokumentation später durchgehen, die für Sie sehr hilfreich ist, um Hilfe zu erhalten Und es ist auch eine sichere Schaltfläche hier, mit der Sie Ihre Diagramme in PNG-Grafiken und Bildern speichern können. Wenn Sie also Ihr Diagramm jemals in Bilder konvertieren möchten , können Sie diese Schaltfläche verwenden. Und a, es geht darum , ein einfaches Diagramm zu erstellen, und ich möchte dir ein paar Übungsaufgaben geben , weißt du. Weißt du, hier habe ich ein Liniendiagramm verwendet, aber du kannst auch andere Arten von Glyphen verwenden So werden diese Geometrien in Boha genannt und Sie können sich ein Bild davon machen, welche Glyphen Sie verwenden können. Sie können sie auf Ihre Figur anwenden, indem Sie D und F ausführen, was die Objektinstanz Ihres Figurobjekts ist Du wirst es hier sehen, lass uns die Linie finden. Hier ist die Linie. Das ist also der, den du benutzt hast. Aber ich möchte Sie bitten, Ihre eigenen Grafiken mit dem Dreieck zuerst Alana Circle zu erstellen mit dem Dreieck zuerst Alana Circle Das wäre also sehr einfach. Anstatt der Warteschlange, reichen Sie diese Dinge einfach hier weiter und sehen Sie, was Sie bekommen. Aber versuche, das Diagramm von Grund auf neu zu erstellen , anstatt meins zu kopieren. Und lassen Sie mich das kommentieren. Ich habe vergessen zu kommentieren. Sie können auch mit einigen anderen Daten herumspielen , um zu sehen, wie das funktioniert. Und ja, das wird sicherstellen, dass Sie verstehen, wie man ein sehr einfaches Bouquet-Plot erstellt. Und in der nächsten Vorlesung werde ich Ihnen zeigen, wie Sie realere Daten verwenden können. Wir verwenden sie also hier, aber in der nächsten Vorlesung werden wir CSV-Dateien verwenden. also aus einer CSV-Datei zeichnen, werden wir dasselbe Diagramm erstellen. Wir sehen uns dort 126. 125. Bokeh mit Pandas verwenden +: Gut. Wir konnten mit diesem Code ein Liniendiagramm erstellen, und ich hoffe, Sie haben ein wenig mit diesem Code herumgespielt und sich damit vertraut gemacht. Nun, Sie sehen hier, dass wir zwei Listen als Ausgabe haben. In dieser Vorlesung werde ich Ihnen beibringen, wie Sie CSV-Dateien verwenden, um Ihre Boket-Diagramme Und ich werde diesen Code als Referenz verwenden. Also werde ich einfach, du weißt schon, du musst Escape drücken. Wenn Sie Escape drücken, können Sie Tastenkombinationen und Tastenkombinationen auf Ihre Zellen anwenden . Und Sie können hier eine Liste von Tastenkombinationen sehen . Und was ich jetzt zum Beispiel tun möchte, ist, dass ich eine Zelle mit C kopieren und dann einfügen möchte ich die Zelle darunter mit V einfügen. Aber zuerst müssen Sie sich im Befehlsmodus befinden. Um also in den Befehlsmodus zu wechseln, müssen Sie Escape drücken, wie es im Hilfeskript steht. Und ja, stellen Sie sicher, dass Escape und dann C und dann, und Sie bekommen eine weitere Zelle hier drin. Außerdem möchte ich diesen Header hier tatsächlich entfernen und zu View, Togle Header und dann auch TogleToLbr gehen Togle Header und dann auch TogleToLbr gehen Also habe ich hier mehr Platz für dich. Also das ist der Code, mit dem ich arbeiten werde. Geben Sie ein und ja, ich werde vorerst an diesem Code arbeiten. Und lass mich hierher gehen. Das ist ein Arbeitsverzeichnis. Ich werde einfach weitermachen und eine CSV-Datei erstellen. Sagen wir Dot Dot CSV. Ja, und ich werde es einfach mit Nopats bearbeiten. Sie können Excel verwenden, wenn Sie möchten. Also werde ich hier nur zwei Spalten haben. Das ist die Kopfzeile und dann eine für X, sechs, für Y, zwei und sieben und drei und acht und vier und neun und noch eine weitere, zehn. Spar dir das. Schließ es. Beachten Sie also, dass sich der Datenpunkt CSV im selben Verzeichnis wie der grundlegende Grafikpunkt IPYNB befindet, und gehen Sie zu Ihrem Skript Jetzt importieren wir Boca hier, aber ich werde auch Panels importieren Lassen Sie uns das hier und Pandas erwähnen. Lassen Sie mich den Kleinbuchstaben B verwenden und Pandas importieren. Ja, bereite ein paar Daten vor. Hmm. Also, ich nehme an, du kennst Pandas Also im Grunde ist der Datenrahmen das Hauptobjekt, und Sie möchten einen Datenrahmen aus dem CSV-Herbst erstellen , der Datenpunkt CSV ist, einfach so Und dann lassen Sie uns hier zwei Variablen erstellen. Die X-Variable wird also gleich DF sein. Eckige Klammern, die X-Spalte. Verwechseln Sie also nicht die X-Spalte mit der X-Variablen. Sie haben einfach zufällig den gleichen Namen. Okay. Und auch das Y-Array, das F.Y? Okay. Ja. Ja, das sollte reichen. Lass mich das umbenennen. Aus CSV. Ausführen. Und Sie erhalten genau die gleiche Zeile wie zuvor, mit der einfachen Liste hier drin. Und, ah, das ist im Grunde die Art und Weise, wie Sie Ihre Buchmacher-Plots mit Pandas DataFrame-Arrays füttern Ihre Buchmacher-Plots mit Pandas DataFrame-Arrays Also nochmal, ähm, nur um die Dinge zu verdeutlichen, das ist der Er hat zwei Spalten, und Sie haben dann die X-Spalte. Das wurde also gespeichert. Eigentlich ist das die Indexspalte, diese hier. Das sind die tatsächlichen Daten dieser Spalte. Und Sie haben dort auch die Y-Spalte. Also, das ist es. Wie Sie sehen, ist Bouquet in der Lage, Playlisten zu lesen, also Pythleis wie diese hier, und aktuelle Playlisten und auch Datenrahmen oder Serien Das nennt man also seriös. kannst du überprüfen. Ja, ein ernster. Und ja, das ist es. DD, um eine Zelle zu löschen. Und ja, wir werden dort mit ein paar weiteren Vorträgen weitermachen , wir sehen uns. 127. 126. Einen Zeitreihen-Plot erstellen +: Ordnung. In dieser Vorlesung lernen Sie, Zeitreihendiagramme zu erstellen. Wir sprechen von Daten, bei denen sich eine der Achsen befindet. Normalerweise besteht die X-Achse aus Daten oder Uhrzeiten. Nehmen wir an, wir haben Temperaturbeobachtungen für mehrere Daten, und wir müssen diese Werte entlang der X- und Y-Achse aufzeichnen . Ich habe hier ein paar nette Daten, die wir diesem Link entnehmen werden. Es ist also eine CSE-Datei. Sie müssen die CSV-Datei eigentlich nicht herunterladen, da wir sie als Link direkt an die CSV-Methode übergeben als Link direkt an die CSV-Methode Was wir hier haben, ist eine Datumsspalte und einige andere Attribute. Vielleicht möchten Sie die Daten also entlang der X-Achse zeichnen. Und dann möchten Sie auf der Y-Achse eines dieser Features zeigen. Nehmen wir dieses Attribut an, schließen wir. Also werde ich das schließen. Ich brauche diese Datei nicht, weil ich einen direkten Link verwende und mich eine neue Zelle erstellen lasse. Also werde ich hier wieder die Zeichenoberfläche von Bouquet verwenden hier wieder die Zeichenoberfläche von Bouquet Und importiere auch Pandas. Der Schlüssel hier ist, dass wir einen Pandas-Datenrahmen verwenden und dann diese Datenzeitspalte als Daten analysieren , sodass Python sie als Daten liest und sie tatsächlich auf der X-Achse zeichnen kann Und dann werden wir eine Linienglyphe verwenden, um diese Daten zu plotten. Eine Linienglyphe wäre also, weißt du, du kannst Kreise, Dreiecke usw. verwenden, aber du kannst auch Linien Sie würden hier also eine Linie übergeben, aber dann macht die Größe keinen Sinn, weil Sie vielleicht Line with für die Linie übergeben möchten with für die Linie übergeben möchten Also nicht Größe, sondern Linie mit. Und weißt du, wenn du das ausführst , siehst du keine Kreise mehr, also ist es jetzt kein Streudiagramm, sondern ein Liniendiagramm Also verwenden wir dasselbe Konzept für die Erstellung dieses Tageszeitdiagramms, des Zeitreihendiagramms Als Erstes möchten Sie also die CSV-Daten in Python laden. Das Panel liest also CSV, und Sie können den Link, diesen Link, direkt an die CSV-Methode übergeben . Also, wie praktisch ist das? Und dann möchten Sie den Parse-Datums-Parameter year übergeben und den Namen der Spalte angeben, und den Namen der Spalte angeben in der sich diese Daten befinden Und der Name dieser Spalte war Datum. Wenn Sie sich an die CSV-Datei erinnern , die ich zuvor geöffnet habe, war das Datum. Sobald Sie also das Datenrahmenobjekt geladen haben, möchten Sie ein Figurobjekt erstellen. Nehmen wir an, die Breite entspricht 500 und wir kämpfen. Sagen wir vorerst 500, dann schauen wir, wie es läuft, und können es später ändern Wir haben hier also den Typparameter der X-Achse. Damit sollten Sie also Ihre Achse, Ihre X-Achse, räumlich gestalten wollen , sodass Datentypen mit Datum und Uhrzeit gelesen werden können. Um also zu deklarieren , dass Sie Daytis haben, müssen Sie dort ein Tagesargument als Zeichenfolge übergeben Das ist es also. Und dann möchten Sie das Linienobjekt dort anwenden. Ähnlich wie jetzt müssen Sie die X-Achse und die Y-Achse passieren. Die X-Achse hier sollte also das DF-Datum sein. Und die andere Achse ist, sagen wir, nah, also die geschlossene Spalte. Und lassen Sie uns die Linie orange machen. Und was sonst? Vielleicht eine Transparenz von 0,5. Und geben Sie an, wo Sie das speichern möchten. Also unter welchem Namen HTML Time Series Dot HTML. Und zum Schluss zeigen Sie die Handlung. Und lass uns sehen. Und etwas funktioniert nicht, also kann Python die Daten dort nicht abrufen. Oh, ich muss die Daten hier eigentlich als Liste übergeben. Also ja, es sieht besser aus, aber es sieht auch ein bisschen zusammengedrückt Also, was Sie hier tun können, ist, dass Sie das auf, sagen wir, 250 ändern können und Sie erhalten dort ein besseres Diagramm Wenn Sie es nun auf die gesamte Seite ausdehnen möchten , können Sie dort etwas tun. Sie können das Responsive tatsächlich weitergeben und es auf true setzen. Nun, lass uns sehen. Also bekommst du dort eine größere Grafik. Und natürlich können Sie dort hineinzoomen, um einige Details zu sehen. Für den 8. Mai haben Sie also einen Wert von einer Unze. Sie verstehen die Idee. Damit ist dieser Vortrag und wir sehen uns in der nächsten. 128. 127. Weitere Visualisierungsbeispiele mit Bokeh: In Ordnung, lassen Sie es uns jetzt zusammenfassen. Also waren wir in der Lage, Graphen zu generieren, und Sie haben gesehen, dass wir bis zum Gesetz einzelne Graphen generiert haben. Hier sehen Sie zum Beispiel ein Liniendiagramm. Wenn Sie nun mehrere Glyphen in einem Diagramm kombinieren möchten, wäre das sehr einfach Nehmen wir an, Sie haben zwei Grundstücke. Sie werden dort ein Streudiagramm hinzufügen. Sie müssen also eine Kreisglyphe hinzufügen. Also direkt unter dieser Linienglyphe oder darüber spielt das keine Rolle Also Kreise mit diesen Koordinaten oder wir können sie ändern. Lassen Sie uns also die X-Achse verdoppeln. Acht mal zwei für mich in dieser Liste, die hier endet. Und dann sollte das die Größe sein, sagen wir acht und oliv. So erhalten Sie also mehrere Glyphen in einem Diagramm. Das war sehr einfach. Und so glaube ich, gebe ich Ihnen eine gute Einführung in die Bouquet-Bibliothek. Und ich glaube, Sie sehen ihr Potenzial, also ist es großartig, Bouquet tatsächlich für die Generierung von Visualisierungen zu verwenden Bouquet tatsächlich für die Generierung von Visualisierungen Wenn Sie nun tiefer in Bouquet einsteigen möchten, also möglicherweise verschiedene Arten von Diagrammen zeichnen müssen , weisen wir Sie zunächst auf diese Ressource hin Das ist also Dokumentation, die Bouquet-Dokumentation. Und hier geht es ums Plotten mit Glyphen. Was Sie hier haben, sind verschiedene Beispiele. Wir verwenden tatsächlich diesen und auch andere, Linien. Und Sie können auch Patches plotten. Im Grunde übergibst du hier die Koordinaten der einzelnen Punkte des Polygons und Bouquet zeichnet das Polygon Das sind also die grundlegenden Dinge. Und hier möchte ich ein bisschen aufhören. Also das hier nennt man eigentlich ein quadratisches Grundstück hier nennt man eigentlich ein quadratisches Anstatt also einen Linienkreis zu passieren , passieren Sie ein Quad Und woraus das besteht, ist die Spitze. Also die obere Grenze deines Quadranten. So hat zum Beispiel der erste Quadront hier einen oberen Rand von zwei und einen unteren von einem Es ist also die Grenze zwischen eins und zwei. Und dann wäre links eins und rechts, 1.2, also eins links und 1.2 rechts. Und dann haben Sie den nächsten Quadranten, das ist auch dieser hier mit seinen Koordinaten, und hier sind die Farben sodass Sie CSS-Farbcodes verwenden können, wenn Sie möchten, zusätzlich zu Farbketten wie Rot und Orange und Gelb und so weiter Der Grund, warum ich diesen Plot eingestellt habe , ist, dass wir diesen Plot verwenden werden , um die Zeiten für unser Videoprogramm zu visualisieren Also die Zeiten, zu denen ein Objekt in den Videoframe eintritt und wann das Objekt den Videoframe verlässt Es wäre toll, wenn Sie jetzt darüber nachdenken würden, wie Sie die CS-Datei, die wir zuvor im Videoprogramm generiert haben, verwenden und diese Datei in einem ähnlichen Diagramm wie diesem plotten in einem ähnlichen Diagramm wie diesem Da gibt es einige Tricks, und ich erwarte nicht, dass Sie das vollständig lösen, aber es ist gut, darüber nachzudenken. Sie haben auch diese Galerie hier, die Bouquet-Galerie. Hier haben wir einige wunderschöne Grundstücke. Sie haben das Histogramm. Wenn du auf eines davon klickst, so werde ich zum Beispiel diese Karte erstellen Sie können diesen Code einfach kopieren und in Ihr Skript einfügen und ausführen, und Sie erhalten dieselbe Map. Das wollte ich Ihnen über Bouquet beibringen, und wir werden es später, wie gesagt, verwenden, um diese Zeiten zu visualisieren, in denen sich ein Objekt in unserem Videoframe vor unserer Webcam bewegt unserem Videoframe vor unserer . Also werde ich später mit dir reden 129. 128. Zeitintervalle aus den von der Webcam-App generierten Daten zeichnen: Hallo und willkommen zu dieser neuen Vorlesung. Also werde ich hier unserem Bewegungserkennungsprogramm den letzten Schliff geben . Konkret werde ich mithilfe der Bouquet-Bibliothek ein Diagramm erstellen, in dem ich die Zeiten visualisiere , zu denen das Objekt in den Frame, den Videoframe, eintritt und Frame, den Videoframe, Und die endgültige Ausgabe wird ungefähr so aussehen. Was wir hier haben, ist ein Diagramm mit einer X-Achse. Das ist die Darstellung der Tageszeit, während die Y-Achse eigentlich keinen Sinn Also nur eine vertikale Verlängerung der Balken, die hier ist. Also was wir hier haben ist, sagen wir, ich habe die Kamera an diesem Tag gestartet, also am 17. März. Also diese erste Aufnahme hier ist, Sie können sehen, dass sie an diesem Tag angefangen hat und nach 4 Sekunden beendet wurde. Dieses Objekt trat also am Startdatum in den Frame und blieb dort für 4 Sekunden und verließ dann den Videoframe In ähnlicher Weise haben wir dieses andere Objekt. Also immer noch am 17. März. Und dann haben wir diesen anderen hier. Und dann fängt neulich hier an. Also der 18. März, und das sind die Stunden zwischen diesen Tagen. Also 4:00 Uhr acht, 12, 16 und Zelt. Und Sie können auch sehen , dass ich hier Hover-Funktionen hinzugefügt habe , sodass ich diese Informationen erhalte, wenn ich mit der Maus über diese Balken fahre Und Sie können hier auch hineinzoomen. Wenn Sie also mehr Informationen dazu wünschen, können Sie sich die Informationen hier übersichtlich ansehen. Das ist also das Produkt. Das Skript erzeugt im Moment die Start- und Endzeit des Objekts, das in den Frame eintritt, in einer CSV-Datei. Konkret löst das Programm das Video von der Webcam aus Und dann hast du da ein paar Gegenstände drin. Drücken Sie Cue zum Beenden. Also, was Sie bekommen, ist mal die CSV-Datei. Wobei jede Zeile die Startzeit und dann die Uhrzeit darstellt. Okay, das weißt du schon. Also im Moment haben wir hier auch eine Liste mit dem Status des aktuellen Frames. Das hat also, sagen wir, 100 Elemente, das heißt, wir hatten 100 Frames in diesem 7-Sekunden-Video. Nun, das Erste, was Sie vielleicht tun möchten, ist hier sehr schnell eine kleine Verbesserung. Diese Liste, wenn Sie mit einer Webcam ein langes Video aufnehmen lassen. Wenn Sie sie also viele Stunden lang laufen lassen, wird diese Liste möglicherweise zu umfangreich Um Speicherprobleme zu vermeiden, Sie hier nachlesen. Hier überprüfen Sie also das letzte Element der Liste und das Element vor dem letzten Element. Also die letzten beiden Artikel, das bedeutet, dass wir diese anderen Artikel nicht benötigen. Wir müssen also nur zwei verlorene Gegenstände behalten. Das heißt, gleich nachdem wir den neuen Status hier angehängt haben, sagen wir, dass die Statusliste der Statusliste entspricht, aber nur mit den letzten beiden Elementen Wenn ich das jetzt ausführe, erhalte ich nur die letzten beiden Status des Videoframes, die als Liste ausgedruckt Also die Liste wird hier gedruckt. Also das ist eine Verbesserung , der Erinnerung zuliebe. Also, wie umgehen wir es, ein Grundstück mit Blumensträußen zu bauen? Also müssen wir zuerst über die Struktur unserer Skripte nachdenken . Also dieses Plotobjekt, das wir mit einem Quadranten erstellen werden, also wird davon ausgegangen, dass ein Datenrahmen als Eingabe gesendet wird Wir haben hier also tatsächlich einen Datenrahmen. Und wir senden den Datenrahmen an die Zeit der CSV-Datei. Ich werde hier eine weitere Datei erstellen, ein Python-Skript, sagen wir, Punkt Pi plotten Und hier schreibe ich das Skript, den Code zum Plotten der Daten In diesem Fall bedeutet das, dass wir den Datenrahmen dieses Bewegungsmelderprogramms in dieses Skript übernehmen müssen den Datenrahmen dieses Bewegungsmelderprogramms in dieses Skript übernehmen müssen Was Sie also tun können, ist , aus Bewegung, Detektor, DF importieren zu wollen Bewegung, Detektor, DF importieren Dadurch wird der DF-Datenrahmen verfügbar gemacht, der in diesem Bewegungsmelderprogramm generiert wird , was bedeutet, dass Sie, wenn Sie das Programm später ausführen möchten, den Plotpunkt Pi mit Python ausführen werden Wenn Sie also Plotin Punkt Pi ausführen, wird Plotting Dot Pi die Ausführung dieses Punkt-Py-Skripts für den Bewegungsmelder aufrufen Ausführung dieses Punkt-Py-Skripts für den Bewegungsmelder Das Video von einer Webcam wird also gestartet, und wenn diese Schleifen enden, wird dieser Datenrahmen generiert Das heißt, danach das Skript, der Code des Plotpunkts Pi ausgeführt Also hier bekommst du den Datenrahmen und plottest ihn und so weiter Ich hoffe, das ist klar. Lassen Sie uns jetzt weitermachen und die Plotschnittstelle von Boke importieren die Plotschnittstelle von Boke Aus BokePloting wird also nicht die gesamte Plotschnittstelle importiert Wir benötigen nur die Abbildung und die Ausgabedatei. Lassen wir es dabei eng angehen. Lassen Sie uns dann weitermachen und das Figurenobjekt erstellen. Und X ist Typ und wird vom Typ Datum und Uhrzeit sein. Stellen wir eine Höhe von 100 und eine Breite von 500 ein. Und lassen Sie uns es responsiv machen. Titel des Graph Motion Graph. Okay. Sobald wir dort eine Zahl haben, wollen wir eine Glyphe in diese Figur einzeichnen Diese Glyphe wäre in diesem Fall ein Quadrant, also ein Quadrat Ein Quadrant wäre also besser geeignet, um diese Zeitintervalle dort darzustellen Der Trick, mit dieser Quad-Glyphe Ihr Datum und Ihre Uhrzeit entlang dieser X-Achse zu visualisieren, besteht also dieser Quad-Glyphe Ihr Datum und Ihre Uhrzeit entlang dieser X-Achse zu visualisieren darin, Parameter von links nach rechts, unten und oben zu übergeben unten und oben Für links würdest du also die Startzeit ausgeben wollen, also links neben der Box mit den Boxen, die du hier siehst Der linke Rand wäre also die Startzeit und der rechte Rand. DF wäre also die Endzeit. Also hier ist unsere CSV-Datei, die wir nicht verwenden, aber das ist eine Struktur der Daten. Also die Startzeit links und dann die Endzeit, die rechts an das Rechteck des Quadranten grenzt die rechts an das Rechteck des Quadranten Und dann ist hier ein Trick, den wir für unten machen können. Wir würden einen festen Wert behalten wollen. Also Null für jeden Quadranten und dann auch eins für jeden Quadranten Das ist es. Farbe ist kein Problem. Sagen wir grün. Und ich würde das vorerst gerne versuchen. Also werde ich eine Datei ablegen. Das wäre Graph Dot HTML. Zeig die Pi-Figur. Und lass uns sehen, was bis jetzt passieren wird. Also Python, wir wollen jetzt keinen Bewegungsmelder ausführen, aber wir wollen das Plotten dieses Pi ausführen Das ist also unser Hauptskript , mit dem wir anfangen. Und ich habe hier einen dummen Syntaxfehler von Book a plotting figure. Ich wette, du wusstest es, dass ich das Schlüsselwort Import hier übersehen habe Also aus Bokeploting die Abbildung importieren, Datei anzeigen, speichern und erneut versuchen. Und hier ist das Webca-Objekt. Schon wieder Objekt. Ein anderes Mal. Kündigen. Und lass uns sehen , was jetzt passieren wird. Und noch ein Fehler, responsiv. Gut. Das tut mir leid. Versuch es nochmal. Erstes Objekt und dort zweites Objekt und noch eins? Beenden. Und wir sollten die Grafik sehen. Ja. Ja, es sieht gut aus. Ja, ich kann es hier sehen und Sie können auch feststellen, dass wir hier eine ziemlich unnötige Granularität haben Wir brauchen hier also nicht alle Aufkleber. Außerdem können Sie hier sehen, dass dies 19 Sekunden sind, was bedeutet, dass es 19 Sekunden nach der letzten Minute ist. Also wenn es, sagen wir, 15 Minuten und 19 Sekunden wären. Also 20 Sekunden der 15 Minuten und so weiter. Sie sehen also nicht wirklich das große Ganze in nur 10 Sekunden Video, aber um es informativer zu machen, würde ich dieser Leiste ein Hover-Tool hinzufügen , sodass, wenn ich die Maus hier bewege , wie Sie wissen, Sie die Start- und Endzeit sehen sollten, sodass Sie dort die komplette Zeit sehen können , falls die Beschriftungen hier nicht ausreichen Aber zuerst entfernen wir hier die Aufkleber. Also gehen wir zurück zum Drehbuch und lassen mich das aufschreiben. Der Weg, das zu tun, wäre, das Figurobjekt zu modifizieren, also die P-Variable. Also arbeiten wir an der Y-Achse, also Yaxs. Wir greifen also auf das Y-Achsenobjekt des Figurobjekts zu, dann auf die Farbe der kleinen Häkchen und wollen sie auf „Keine“ setzen Also das tickt hier. Sie können auch sehen, dass wir auch ein Grid haben. Wir wollen diese Zwischenzeilen hier also nicht haben, und das können wir tun, indem wir auf das Grid-Objekt zugreifen, das ist list, also müssen Sie auf das erste Element der Liste zugreifen. Da gibt es also einen ziemlichen Trick, aber damit muss man Frieden schließen. Also, Ticker sagen erwünscht. Anzahl der Zecken. Das ist also die Methode und setze sie auf eins. Schauen wir uns also an, wie sich das Diagramm diesmal ändern wird. Und es ist eine gute Idee, dem Diagramm einen anderen Namen zu geben , damit wir die beiden Grafiken vergleichen können. Also grafiere eins dafür. Und lass uns sehen. Hier. Und kündige. Und ich habe ein Attribut mit der Farbe des kleinen Häkchens. Ich neige dazu, das falsch auszudrücken. Das Gute ist, dass Bouquet eine ziemlich gute Fehlerbehandlung hat, also ähnliche Attribute oder eine geringfügige Farbe der Hilfsstriche hat Es ist also tatsächlich in der Lage zu lesen, was Sie dort eingeben, und es schlägt Ihnen vor, was Sie eingeben sollen, wenn die Linienfarbe so klein ist. Also haben wir hier eine Zeile. Also versuche es nochmal. Mal sehen, was wir diesmal bekommen. Jetzt sieht es sauberer aus, wie Sie sehen können. Hier ist unsere vorherige Grafik. Dies ist das neue, also haben wir hier keine horizontalen Rasterlinien und Häkchen. Und ich dachte daran, diesen Vortrag zu diesem Zeitpunkt zu beenden. Und in der anderen Vorlesung werde ich Ihnen zeigen, wie Sie diese Hover-Fähigkeiten zu Ihrem Diagramm hinzufügen Also werde ich in der nächsten Vorlesung mit Ihnen sprechen. 130. 129. Eine Hover-Funktion implementieren: Großartig. Wir haben ein Diagramm, das die Zeitintervalle visualisiert, in denen das Objekt in den Videoframe eingetreten Lassen Sie uns nun unseren Code so ändern, dass wir ein Fenster hinzufügen. Ein Fenster wird hier angezeigt, wenn der Benutzer mit der Maus über diese Quadranten fährt unseren Code so ändern, dass wir ein Fenster hinzufügen. Ein Fenster wird hier angezeigt, wenn der Benutzer mit der Maus über diese Lass uns das machen. Und das Boke-Tool zur Implementierung der Hover-Funktionalität wird Hover-Tool genannt Und darauf wird über die untergeordnete Oberfläche zugegriffen , die als Modelle bezeichnet wird, also Boket-Dot-Modelle also Boket-Dot-Modelle Sie möchten also das Hover-Tool importieren. Lassen Sie uns nun sehen, wie wir das in unserem Skript verwenden Und im Grunde ist dies eine Methode, die von Ihnen einige Datenfelder erwartet , sodass die Hover-Tool-Methode sie anzeigt, wenn der Benutzer die Maus auf diesen Quadranten Wenn sich der Cursor also auf diesem bestimmten Quadranten befindet , werden die Daten für diesen Quadranten im Popup-Fenster angezeigt also Nachdem Sie Ihre Figur erstellt haben, möchten Sie ein Hover-Objekt erstellen, das dem Hover-Werkzeug entspricht Welches hat dort einen Parameter mit zwei Tipps, und dieser wird als Argument eine Liste von Tupeln erhalten, und in jedem Tupel und in jedem Tupel möchten Sie die Zeilen des Popup-Fensters angeben Nehmen wir an, Sie möchten in der ersten Zeile Ihres Popup-Fensters eine Startzeichenfolge haben, und neben dieser Startzeichenfolge möchten Sie das Array mit Ihren Daten haben Das hat diesen Raumdekorateur hier. In unserem Fall wäre das also die Startspalte aus dem Datenrahmen Wir wollen also die Startzeit und dann auch die Uhrzeit. Also für die Zeichenfolge und und für den Namen einer Spalte. Also das sollte fast reichen. Aber wir müssen dieses Tool mit der at tools-Methode hinzufügen. Also das Hover-Objekt, wir müssen es zu den Werkzeugmenüs hinzufügen Das sollte also ein Punkt sein. Und das ist es. Und wir werden hier noch mehr hinzufügen müssen, aber mal sehen, was wir bis hierher bekommen. Also Python plottet Punkt Py. Hier ist ein Objekt, noch eins ein drittes und dann hör auf Also ja, hier ist ein Diagramm, und wir sind fast da, aber noch nicht. Wie Sie sehen, hat Python aus irgendeinem Grund Probleme beim Abrufen der Werte der Start- und Endspalte Und Sie stellen auch fest, dass wir hier zwei Spalten für jede dieser Zeilen Das erste, was Sie tun möchten, ist diese Spalte zu entfernen. Sie benötigen das nicht , da Bouquet es standardmäßig hinzufügt. Das ist es also. Und um nun das andere Problem zu lösen, besteht das Hauptproblem der Fragezeichen darin, die Spaltendatenquellenmethode hinzuzufügen. Das kommt von der Low-Level-Schnittstelle des gebuchten Modells. Spaltendatenquelle ist also eine standardisierte Methode, um Daten für ein Buchdiagramm bereitzustellen. Wenn Sie also Datenrahmen, Listen oder andere Objekte haben , müssen Sie diese für einige Funktionen in einem Buch in ein Spaltendatenquellenobjekt konvertieren. Was eigentlich sehr einfach ist. Und lass es mich hier machen. Also nehmen wir hier den Datenrahmen und sagen wir dann, die Spaltendatenquelle, CDS, das wäre gleich der Spaltendatenquelle. Also die Methoden und die Daten, die Sie an ihn übergeben möchten. In diesem Fall haben wir also einen Datenrahmen. Und wenn Sie das getan haben, müssen Sie das hier anpassen, nicht das Figurenobjekt, weil wir hier keine Daten übergeben. Wir konstruieren gerade die Umgebung für die Handlung, aber Sie müssen das Quad modifizieren. Konkret möchten Sie hier den Quellparameter übergeben, dem Datenquellenobjekt der Spalte entsprechen sollte. Also CDS in unserem Fall, dieses hier. Also sagen Sie Bocket, diese Daten zu verwenden, und dann brauchen Sie nicht auf den Datenrahmen zu zeigen Also geben Sie dort einfach die Namen Ihrer Spalten ein. Also lass uns sehen, was wir dieses Mal haben. Objekt, noch einer hat gekündigt. Hier ist eine Grafik. Und ja, fast da. Aber das Problem ist dass wir dieses Mal die Tage nicht im richtigen Format bekommen . Der Grund dafür ist die Hotol-Methode. Also hier, wir sind hier. Die Hovertol-Methode ist nicht in der Lage, Datentypen für Tageszeiten abzurufen Aber das ist kein Grund zur Sorge , denn wir können die Datenzeiten in Zeichenketten im Datenrahmen konvertieren Bevor wir also den Datenrahmen an die Methode des Spaltendatenquellenobjekts übergeben , konvertieren wir die Start- und Endspalten in Zeichenkettendatentypen Sie wissen also bereits, wie man mit Daytis arbeitet. In diesem Fall werden wir also einige Formatierungen für den Tag vornehmen. Wir könnten also eine weitere erstellen, also eine neue Spalte, sagen wir, eine Startzeichenfolge. Also die String-Version der Startspalte, die der vorhandenen Startspalte entsprechen sollte. Punkt DT, mit dem Sie die Tagesformatierung und die STR-Uhrzeit formatieren können. Und so definieren Sie jetzt, wie Ihr Datum angezeigt werden soll. Sie möchten also zuerst das Jahr anzeigen, dann den Monat, einen Gedankenstrich und den Tag danach und vielleicht ein Leerzeichen dort, eine Stunde, Minuten und Sekunden. Und das Gleiche gilt für die letzte Spalte. Also Zeichenfolge und hier und dasselbe hier. Und wie Sie jetzt davon ausgehen können, müssen wir diese Änderungen hier berücksichtigen. Das sollte also die Startzeichenfolge sein und das sollte die Endzeichenfolge sein. Also zeigen wir diese Zeichenketten jetzt im Popup-Fenster an. Und mal sehen, wie das diesmal läuft. Das erste Objekt geht dorthin, zweite und das letzte und noch eins. Beenden. Und ich schätze, wir haben hier ein Problem. Ich habe die Werte hier nicht geändert. Ich habe also völlig das Falsche getan. Ich hätte die Tage in diesem Quadrantenobjekt nicht ändern weil es sich um Datetimes handelt , weil wir hier die Tagesachse definiert haben Dieser Express-Tag ist also. Also hier sollte die ursprüngliche Startspalte beginnen und hier die Endspalte Also habe ich aus Versehen diese Werte dort eingegeben. Also fange die Zeichenfolge hier an und die Zeichenfolge hier. Also das sollte diesmal reichen. Lassen Sie uns das noch einmal überprüfen. Alles sieht gut aus. Und lass uns sehen. Los geht's. Ja, wir konnten uns die Daten schnappen. Lass uns sehen. Ja, das sieht gut aus. Jetzt glaube ich, dass diese Grafik gut lesbar ist, und ich glaube, dass Sie einige Informationen aus dieser Grafik herausziehen können . So können Sie sehen, wie lange ein Objekt im Videoframe verblieben ist und wann Sie den Frame gestartet haben und wann es den Frame verlassen Und ich hoffe, Sie finden das manchmal nützlich. Wie ich bereits sagte, können Sie einen Raspberry Pie Server verwenden. Wir haben also nur einen kleinen Computer und hosten diese Anwendung auf diesem Server. Und natürlich können Sie eine Kamera bauen und natürlich können Sie sie in diesen Server einbauen und sie Videos für Ihre Bedürfnisse aufnehmen lassen. Vor allem hoffe ich, dass Sie aus dieser Übungsaktivität gelernt haben, und ich weiß, dass es ziemlich viel zu konsumieren war. Wenn Sie jedoch Fragen haben, beantworte ich sie gerne. Also zögern Sie nicht, sie im Diskussionsforum zu stellen. Und ich werde später in den nächsten Vorlesungen mit Ihnen sprechen . Wir sehen uns. 131. 130. App 4 Teil 1 - Datenanalyse und Visualisierungen mit Pandas und Matplotlib +++: Hallo und willkommen zu einem der wichtigsten Projekte des Kurses, dem Datenanalyse- und Visualisierungsprojekt Wie Sie vielleicht wissen, ist Python zweifellos die beste Programmiersprache für Datenanalyse und Visualisierung. Python konnte Sprachen, die in der Datenanalyse verwendet werden, wie R, überholen , und das Geheimnis von Python ist eine Vielzahl von Bibliotheken, die Sie mit Python verwenden können Und das bedeutet, dass Sie Ihre Datenanalyseberichte und -diagramme, die Sie mit Python erstellen, mit anderen Python-Bibliotheken kombinieren können Ihre Datenanalyseberichte und -diagramme, die Sie mit Python erstellen , mit anderen Python-Bibliotheken komplette Anwendungen wie , komplette Anwendungen wie Web-Apps oder sogar Desktop-Apps , Dinge automatisieren usw. Python ist also definitiv das richtige Tool für die Datenanalyse. Es ist sehr mächtig. In diesem Abschnitt werde ich Ihnen nicht nur den Code zeigen, der diese und jene Operation ausführt, sondern ich werde Ihnen auch die Logik hinter der Datenanalyse zeigen, was Sie tun sollten, wenn Sie ein Datenanalyseprojekt haben. Da ich einen Abschluss in Geodatenanalyse habe, werde ich Ihnen einige meiner Fachkenntnisse auf diesem Gebiet vorstellen Ich gebe Ihnen einen Datensatz mit 45.000 Datensätzen, und wir werden diese Daten in Informationen umwandeln Genau darum geht es bei der Datenanalyse und -visualisierung Daten in Informationen umzuwandeln Wir werden zum Beispiel Fragen beantworten wie An welchem Wochentag sind die Menschen am glücklichsten Und dafür werden wir unsere Daten verwenden. Die Daten sind einfach Daten, aber den glücklichsten Tag der Woche zu kennen , das Ein wichtiger Teil dieses Abschnitts ist nun die Datenvisualisierung Lassen Sie mich Ihnen einige der Handlungen zeigen, die wir in dieser Videoserie erstellen werden in dieser Videoserie erstellen , nur um Ihnen einen Anreiz, eine Motivation zu geben eine Motivation zu sich diese Videoserie tatsächlich anzusehen. All diese Grafiken sind interaktiv. Um Ihnen eine Vorstellung davon zu geben wie diese Grafiken aussehen werden, finden Sie hier einige Diagramme , die wir erstellen werden. In diesem speziellen Diagramm wird die durchschnittliche Bewertung für jeden Tag angezeigt, sodass das Datum auf der X-Achse und die durchschnittliche Bewertung auf der Y-Achse liegt. Dann werden wir Kreisdiagramme wie dieses erstellen. Und auch andere interessante Arten von Diagrammen. Tatsächlich werde ich Ihnen zeigen, wie Sie jede Art von Diagramm erstellen können , das Ihren Daten und Ihren Bedürfnissen entspricht. Und das wird eigentlich ganz einfach sein, weil ich Ihnen den Trick, die Logik dahinter erklären werde . Und die gute Nachricht bei diesen Diagrammen ist, dass Sie nicht viel konfigurieren müssen , weil sie sofort einsatzbereit sind, und das wird durch die Bibliothek ermöglicht , die wir verwenden werden. Machen Sie sich also bereit und ich werde im nächsten Video mit Ihnen sprechen. 132. 131. Den Datensatz mit Python und Pandas erkunden +: Willkommen zurück. Wenn Sie Datenanalysen durchführen, möchten Sie sich zunächst mit Ihren Daten vertraut machen, indem Sie das Tool verwenden, das Datenanalyse-Tool, das Sie für Ihr spezielles Projekt ausgewählt haben . In diesem Fall handelt es sich bei dem Tool um Python. In diesem Video werden wir also die Daten mit einem Jupiter-Notizbuch in Python laden . Schauen Sie sich dann diese Daten an und extrahieren einige sehr grundlegende Informationen über die Daten, z. B. schauen Sie sich an, welche Spaltennamen wir haben , wie viele Zeilen wir haben und andere einfache Attribute unserer Daten. Lass uns das machen. Ich möchte Sie darüber informieren, dass ich einen leeren Ordner mit dem Namen review erstellt habe. Underscore Analysis und ich lege die Bewertungen in dieser CSV-Datei in diesen Ordner Sie finden diese Rezensionen CSV-Datei , die dieser Vorlesung beigefügt ist, also als Vorlesungsressource das bitte herunter und legen Sie es in einen Ordner, genau wie ich es getan habe. Und dann sollten Sie in der Lage sein , diesen Ordner auf der Jupiter-Homepage zu finden , der mit 8888 Schrägstrich drei lokalisiert ist Also habe ich diesen Ordner direkt im Ordner meines Benutzers erstellt, also das ist der Ordner also das ist der Ich kann darauf klicken und hier sind die Bewertungen in dieser CSV-Datei. In Ihrem Fall können Sie es erstellen, wo immer Sie möchten und es dann mithilfe dieses Verzeichnisbaums hier suchen. Während ich in diesem Ordner von Jupiter bin, kann ich zur neuen Drop-down-Liste gehen und zu Python Drei gehen, um ein neues Jupiter-Notizbuch zu erstellen. Das Jupiter-Notizbuch wurde also erstellt. Ich kann es in etwas anderes umbenennen, den Namen des Jupiter-Notizbuches. Machen wir es uns einfach und sagen Bewertungen. Umbenennen und das wird mit der IPYNB-Erweiterung angezeigt. Lassen Sie mich hier etwas mehr Platz schaffen , damit Sie mehr Code sehen Ich werde den Header ausschalten. Und jetzt fangen wir an zu codieren. Das allererste, was wir tun wollen, ist natürlich Pandas zu importieren, die Bibliothek, die zur Datenanalyse mit Python verwendet wird Datenanalyse mit Python Und dann wollen wir eine Variable erstellen, die die Daten enthält, die den von Pandas gelesenen Daten entsprechen Da wir mit einer CSV-Datei arbeiten, die Methode, die wir aus der Pandas-Bibliothek heraus verwenden möchten ist die Methode, die wir aus der Pandas-Bibliothek heraus verwenden möchten, Read In Klammern wollen wir einfache oder doppelte Anführungszeichen angeben, wo immer Der Pfad zur CSV-Datei. Wenn Sie den Namen jetzt nicht korrekt eingeben , erhalten Sie eine Fehlermeldung. Lassen Sie mich also versuchen, diese Zelle mit Control Enter auszuführen , wenn Sie unter Windows arbeiten , oder Command Enter, wenn Sie auf einem Mac sind. Wie ich dich gewarnt habe, habe ich einen Fehler bekommen. Es heißt, keine solche Datei oder kein solches Verzeichnis , weil ich die Datei falsch eingegeben Also Bewertungen. Dieses Mal erhalte ich bei der Ausführung keine Fehlermeldung, was bedeutet, dass die Daten erfolgreich geladen wurden. Ich kann Escape, B, Enter drücken und die Datenvariable und die Strg-Eingabetaste erneut aufrufen , um den Datenrahmen zu sehen. Wir können also sehen, dass wir eine, zwei, drei, vier Spalten haben. Und wir haben hier auch diese Indexspalte von Pandas automatisch hinzugefügt wurde Im Grunde handelt es sich um einen Zahlenbereich, der bei Null beginnt. Das ist also die erste Zeile unserer Daten, diese hier drin. Das hat diesen Index von Null. Und es endet in der letzten Reihe. Sie können sehen, dass dies die erste Reihe, zweite, dritte, vierte, fünf Reihen ist, und dann zeigt Jupiter die Zeile nach der fünften Reihe nicht an, weil es viele Zeilen gibt und es unpraktisch wäre, sie hier zu sehen Sie können jedoch die letzten fünf Zeilen des Datenrahmens sehen die letzten fünf Zeilen des Datenrahmens Und das gibt Ihnen einen Überblick über den Datenrahmen. Stattdessen drucke ich jedoch gerne den Kopf des Datenrahmens aus, also nur die ersten Zeilen. Also die ersten fünf Zeilen, das gibt Ihnen eine kompaktere Ansicht. Es gibt Ihnen eine Vorstellung davon, welche Spalten Sie haben und welche Art von Zeilen Sie auch haben. Es ist also gut, wenn hier der Kopf des Datenrahmens angezeigt wird. Dann können wir Escape drücken. B und erstelle hier eine neue Zelle. Geben Sie ein, um einen anderen Code zu schreiben. Sie können die Form des Datenrahmens ermitteln, indem Sie auf die Shape-Eigenschaft zugreifen. Das ist also eine Methode mit Klammern. Das ist eine Immobilie. Das braucht keine Klammern. Und dann kommen Sie zur Form des Datenrahmens, die im Grunde der Anzahl der Zeilen und der Anzahl der Sie sehen eine, zwei, drei, vier Spalten. Möglicherweise möchten Sie auch eingeben und die Spalten anzeigen, die Ihr Datenrahmen enthält. Obwohl wir sie dort haben, ist dies eine weitere Möglichkeit, die Namen der Spalten zu sehen , indem Sie auf die Spalteneigenschaft zugreifen. Wenn Sie mit Daten arbeiten, haben Sie als Nächstes in der Regel einige spezifische Spalten , die Sie interessieren kann es sich um eine oder mehrere Spalten handeln. In diesem Fall könnte es für uns von Interesse sein, einen Überblick über die Spalte zu erhalten, um zu sehen , was die Mindest - und Höchstbewertung ist und wie diese Bewertungen verteilt sind, und sie hier als Diagramm darzustellen, damit wir unsere Daten besser verstehen können . Also mache ich Escape, B, Enter und Data Dot Hit. Also das wird ein Histogramm sein. Klammern sind wir daran interessiert, die Verteilung der Bewertungen zu sehen Deshalb gebe ich hier die Bewertungsspalte ein, sage Zeichenfolge, führe aus und wir erhalten dieses Diagramm Lassen Sie mich Ihnen erklären, was diese Grafik bedeutet. Das bedeutet, dass wir zum Beispiel von rechts beginnen. Diese Bar hier, diese erste Bar bedeutet, dass wir rund 24.005 Sternekritiken und Bewertungen haben 24.005 Sternekritiken und Bewertungen Sie sehen, wir haben zum Beispiel eine Bewertung von 5,0 Sternen. Wir haben also rund 24.005 Sternebewertungen im gesamten Datenrahmen Und insgesamt haben wir 45.000 Zeilen. Dann die nächste Bar hier, das sind 4,5-Sterne-Bewertungen, wie die da drin Und davon haben wir, sagen wir, 7.000 Dann haben wir hier vier Sterne, etwa 9.000, vielleicht 3,5 Sterne Das sind Drei-Sterne-Bewertungen. Es sind ungefähr 2000. Dann haben wir 2,5 Sterne-Bewertungen. Dieser hier drin, zwei Sterne-Bewertungen. 1,5 Sterne-Bewertungen. Das ist die niedrigste Zahl unter allen Bewertungen. Die Leute geben also nicht viele 1,5-Sterne-Bewertungen ab. Und wir haben auch diese Ein-Sterne-Bewertungen hier drin. Es ist nicht das Bassdiagramm. Ich persönlich mag es nicht, aber es ist ein schneller Weg, damit Sie wissen, wie Ihre Daten verteilt sind. Sie wissen, dass, okay, wir haben die Daten 1-5 und fünf ist der am häufigsten vorkommende Wert in Ihren Daten. Und das ist ungefähr dieser Vortrag. So können Sie sich einen Überblick über Ihren Datenrahmen verschaffen. In der nächsten Vorlesung werden wir in unseren Datenrahmen hineinzoomen , um tatsächlich bestimmte Zeilen oder bestimmte Abschnitte unseres Datenrahmens auswählen zu können bestimmte Zeilen oder bestimmte Abschnitte unseres Datenrahmens auswählen bestimmte Abschnitte unseres Datenrahmens um einzelne Werte zu sehen. Mit anderen Worten, wir werden Python verwenden , um durch unsere Daten zu navigieren und bestimmte Abschnitte der Daten auszuwählen und anzuzeigen. Also wir sehen uns im nächsten Video. 133. 132. Daten mit Python auswählen: Hallo, willkommen zurück. In diesem Video werden wir Daten in unseren Datenrahmen vergrößern , indem wir bestimmte Spalten des Datenrahmens auswählen , bestimmte Zeilen, mehrere Spalten, mehrere Zeilen, bestimmte Regale im Datenrahmen. Wir werden lernen, wie man Bedingungen anwendet , sodass Sie Daten auf der Grundlage verschiedener Filter extrahieren können usw. Fangen wir also an. Ich werde Jupiter öffnen. Und ich werde zur Bewertungsanalyse gehen. Ordner und klicken Sie auf die Jupiter Notebook-Datei. Nun, Sie sollten wissen, dass, wenn ich hier eine neue Zelle öffne und versuche, auf die Datenvariable zuzugreifen, dieser Namensfehler angezeigt wird. Daten sind nicht definiert, denn wenn Sie einfach ein Jupiter-Notizbuch öffnen, werden die Zellen nicht automatisch ausgeführt. Das ist also noch keine Variable im Namensraum dieser interaktiven Python-Sitzung. Daher sollten Sie die Zellen entweder ausführen, indem Sie zur ersten Zelle gehen und Shift Enter drücken und dann Shift Enter drücken, um die andere Zelle auszuführen Shift Enter, Shift Enter, oder Sie können zu dieser Schaltfläche gehen. Um alle Zellen auszuführen. Drücken Sie also darauf, starten Sie neu und starten Sie alle Zellen. Und dann erhalten Sie so Zugriff auf die Delta-Variable. Richtig, also ich wollte nur sichergehen , dass Sie wissen, dass Sie sich des spezifischen Verhaltens von Jupiter bewusst sind . Nun, ich möchte hier ein paar Überschriften einfügen, etwas Text. Zum Beispiel möchte ich den Titel dieses ersten Abschnitts angeben, den wir im vorherigen Video gemacht haben Ich möchte das etwas nennen. Also möchte ich eine Zelle über dieser Zelle hinzufügen. Deshalb stelle ich zunächst sicher, dass ich mich nicht in einem bestimmten Modus befinde, also drücke ich dafür die Esc-Taste. Dann drücke ich A auf der Tastatur und die neue Zelle wird hinzugefügt. Dann drücke ich, ohne die Zelle zu betreten. Stellen Sie also sicher, dass Sie ohne Eingabe die Escape-Taste drücken. Ohne die Zelle zu betreten, drücken wir M, und dadurch wird die Zelle in eine Markdown-Zelle umgewandelt, was bedeutet, dass die Zelle jetzt keinen Python-Code erwartet Es erwartet Markdown-Text , der im Grunde eine Art Sprache ist Wenn wir zum Beispiel zwei dieser Hash-Symbole schreiben, haben wir den Datenrahmen genau im Blick Und dann drücken wir Command Enter, das wird in einen Titel, in eine Überschrift umgewandelt . Im Grunde H zur Überschrift. Wenn Sie noch eine hinzufügen, erhalten Sie kleinere Schriften und so weiter. Also zwei sind in Ordnung. Und dann füge ich hier hinzu, also konvertiere das mit Escape in Markdown und wähle dann genau hier Daten aus dem Datenrahmen Und dann B, um die neue Codezelle einzugeben, also das ist eine Codezelle , die eine Markdown-Zelle ist Lassen Sie mich Ihnen zeigen, wie Sie eine Spalte des Datenrahmens auswählen können eine Spalte des Datenrahmens auswählen Entkomme. Wählen Sie eine Spalte aus. Drücken Sie die Eingabetaste. B, Geben Sie die Eingabetaste ein, um eine Spalte auszuwählen Sie können diese Syntax verwenden und dann ausführen. Und das ist eine Spalte. Nun könnten Sie fragen, warum müssen wir eine Spalte auswählen? Welches Interesse steckt dahinter? Nun, die Antwort ist, dass dies der erste Schritt einer weiteren Analyse ist . Wenn Sie beispielsweise den Mittelwert, den Durchschnitt der Bewertungsspalte, extrahieren möchten , müssten wir zuerst die Spalte extrahieren und dann diesen Mittelwert anwenden Die Methode Mittelwert wird ausgeführt, und das gibt Ihnen die durchschnittliche Bewertung aller Kurse für den gesamten Datenrahmen Also die Bewertung aller 45.000 Zeilen. Das ist also ein Beispiel, warum wir eine Spalte auswählen müssten Aber lassen Sie mich jetzt den Mittelwert löschen. So wählt man also eine Spalte aus. Escape B jetzt, Enter. Wählen Sie mehrere Spalten aus. Ausführen, B, Enter. Um mehrere Spalten auszuwählen, würden Sie mehr oder weniger dieselbe Syntax verwenden. Aber anstatt hier eine einzelne Spalte einzufügen , wie wir es bei der Bewertung von Zeichenketten gemacht haben , würden wir in diesem Fall eine Liste mit mehreren Spalten einfügen Nehmen wir an, wir wollen den Kursnamen. Also eine Zeichenfolge, ein Komma neben der Zeichenfolge, eine weitere Zeichenfolge, Bewertung und dann ausführen Dadurch erhalten Sie im Grunde einen Datenrahmen, der nur diese beiden Spalten enthält Nun, es gibt einen grundlegenden Unterschied zwischen dieser und jener Ausgabe. Sie können auch sehen, dass dies mit Linien anders formatiert ist , sodass es wie eine Tabelle aussieht da es sich tatsächlich um einen Datenrahmen handelt Wenn Sie also den Typ dieses Ausdrucks anwenden. Das ist also ein Ausdruck. Wir haben benutzt. Wenn Sie das ausführen, werden Sie feststellen, dass dies ein Datenrahmen-Datenrahmen ist. Aber wenn wir uns den Typ dieses anderen Ausdrucks ansehen, werden Sie feststellen, dass es sich um eine Serie handelt. Eine Serie ist also ein anderer Datentyp von Pandas, genau wie wir Im Datenrahmen haben wir Reihen, und Reihen werden verwendet, um einzelne Spalten darzustellen, wie diese hier. Also nur die Bewertungsspalte. Aber wenn wir mehr als eine Spalte haben, verwendet Pandas einen Datenrahmen wie diesen Das war also nur eine Information, die man sich merken sollte. Es ändert nicht viel daran, wie Sie die Statistiken später erstellen, aber es ist einfach gut zu wissen, wie Pandas funktioniert Mal sehen, wie man ARO auswählt. Bei Zeilen ist das ein bisschen anders. Natürlich müssen Sie zuerst auf die Datenvariable und dann auf I lock verweisen . Und dann brauchst du eckige Klammern. In diese eckigen Klammern sollten Sie den Index der Zeile setzen, auf die Sie zugreifen möchten. Nehmen wir zum Beispiel an, wir wollen diese Zeile hier haben oder lassen Sie uns besser darauf verweisen. Also der Python-Mega-Fluch mit einer Bewertung von fünf , der einen Index von drei hat. Mal sehen, ob wir diese Reihe bekommen. Führt aus. Also ja, es scheint dass das der Python-Megakurs ist und er eine Bewertung von fünf hatte. Der Zeitstempel steht hier, also 333. Sehen wir uns den gesamten Datenrahmen an. Also 333, der hier drin. Diese Reihe ist das. Der Typ dieses Objekts ist wieder eine Serie. Pandas verwendet Serien also auch für Zeilen, für einzelne Zeilen. Lassen Sie mich diesen Typ löschen und erneut ausführen. Das ist die Ausgabe. Als Nächstes. Mehrere Rosen auswählen. B Geben Sie Daten ein. Auch hier verwenden wir iloc. Und dieses Mal wollen wir, da wir mit mehreren Zeilen arbeiten, ein Slice eingeben Nehmen wir an, wir wollen von Index eins zu Index drei, diese Zeilen, und wir erhalten dieses Mal diesen Datenrahmen, der nicht so schwerwiegend ist. Wir haben also die Zeile mit Index eins und die Zeile mit Index zwei weil der obere Index nicht im Slice enthalten ist , wie es bei Python fast immer der Fall ist. Also mal 512, Zeitstempel, 511. 512, fünf, Index eins, Index zwei. Ja. So bekommt man also mehrere Zeilen. Als Nächstes. Auswahl eines Abschnitts. Was ich damit meine, ist im Grunde ein Querschnitt. Spalten und bestimmte Zeilen geben uns also bestimmte Zeilen geben uns im Grunde einen Teil des Datenrahmens. Zum Beispiel möchten wir bestimmte Spalten auswählen. Auch hier verwenden wir dieselbe Syntax wie zuvor. Sie sehen also hier oben, wenn wir mehrere Spalten ausgewählt haben, also die Bewertung des Kursnamens in einer Liste. Kursname Bewertung. Das wird uns also im Grunde das geben. Und dann wenden wir aus diesem Datenrahmen Alok an, wenden wir weil das ein Datenrahmenobjekt ist, oder? Das war auch ein Datenrahmenobjekt. Und da wir Alok auf diesen Datenrahmen anwenden könnten, können wir Ioc auch auf diesen Datenrahmen anwenden Es ist derselbe Objekttyp. Daraus ergibt sich zum Beispiel von Zeile mit Index eins bis Zeile mit Index drei, ohne drei, und wir erhalten diesen Abschnitt des Datenrahmens, wiederum ein Datenrahmen ist, Objekttyp. Also nur die Spalten für Kursname und Bewertung und nur diese beiden Zeilen. Und zuletzt die Auswahl einer Zelle. Wir folgen derselben Syntax, derselben Logik. Nehmen wir an, wir möchten diese Zelle hier auswählen. Also die Zelle, die den Querschnitt der Zeile mit Index zwei und der Zeitstempelspalte darstellt, die da drin, Zeitstempel, Index zwei, richtig Zunächst extrahieren wir die Spalte mit derselben Syntax, mit der wir eine Spalte ausgewählt haben, nämlich diese hier, Delta. Diesmal mit dem Zeitstempel der Bewertungsdaten. Das gibt uns also im Grunde eine Spalte, aber davon ausgehend können wir auch eine Sperre für eine Reihe anwenden Das ist also eine Serie, kein Datenrahmen, aber eine Reihe könnte auch diese Log-Eigenschaft verwenden und dann den Index zwei daraus ziehen, und das gibt uns den Wert , der eine Typzeichenfolge ist. Wenn Sie also stattdessen eine Bewertung wünschen würden, würden Sie einen Float bekommen, weil die Bewertungen Float sind, 4,0, die da drin ist. Und so bekommt man eine Zelle. Nun, diese Methode ist sehr konsistent, da sie dieselbe Syntax wie die anderen Methoden verwendet. Sie ist also konsistent mit den anderen Methoden zur Datenauswahl, aber es gibt eine schnellere Möglichkeit, dasselbe mithilfe von Daten zu tun , nämlich die at-Eigenschaft. Und zuerst übergeben Sie den Index der Zeile und dann nur den Namen der Spalte, zum Beispiel die Bewertung. Und das sollte dir den gleichen Wert geben. Es wird daher empfohlen, dies zu verwenden , wenn Sie eine Zelle auswählen. Das ist also über diese Vorlesung. In der nächsten Vorlesung werden wir weiter auf die Auswahl von Daten eingehen , dabei aber Bedingungen verwenden. Geben Sie mir zum Beispiel alle Bewertungen, die größer als vier sind. Also Filterung basierend auf den Bedingungen im nächsten Video. Siehst du. 134. 133. Den Datensatz filtern: Hallo, willkommen zurück. In diesem Video erfahren Sie, wie Sie Daten aus Ihrem Datenrahmen filtern. Damit meine ich das Extrahieren bestimmter Datengruppen auf der Grundlage verschiedener Bedingungen Nehmen wir zum Beispiel an, wir haben in unserem Datenrahmen unterschiedliche Kurse, obwohl Sie hier nur die Python-Megacurs sehen , weil wir nur die ersten fünf Zeilen sehen Wir haben andere Kurse mit Bewertungen. Wenn du also zum Beispiel nur die durchschnittliche Bewertung für einen bestimmten Kurs wissen möchtest, musst du die Daten filtern , indem du einige Bedingungen anwendest. Durch Filtern können Sie also Analysen eine bestimmte Gruppe Ihrer Daten durchführen. Lass uns das machen. Zuerst weise ich jeder der Hauptüberschriften eine Zahl zu Das war also ein Überblick. In der zweiten Vorlesung ging es um Auswahl, das ist also Nummer zwei. Dieses Mal werden wir bei Nummer drei sein und Daten anhand von Bedingungen filtern. Richtig. Wenden wir zuerst eine Bedingung an. Also werde ich eine Markdown-Zelle erstellen und eine Bedingung angeben Wenden wir eine Bedingung an , die uns den Datenrahmen liefert , bei dem die Bewertungen größer als vier sind Um das zu tun, müssten Sie dieser Syntax folgen. Sie nun zunächst sicher, dass sich Ihre Datenvariable im Namensraum befindet, indem Sie diese erste Zelle ausführen. Drücken Sie die Eingabetaste, um diese Zelle auszuführen. Jetzt sind wir sicher, dass sich die Daten im Namensraum befinden. Dies sind die eckigen Klammern der Syntaxdaten und hier die Bedingung, also haben wir gesagt, dass wir den Datenrahmen wollen, in dem die Bewertung größer als vier ist. Daher sagen wir, dass die Spaltenbewertung höher ist. Lassen wir etwas Platz, mehr als vier. Wenn wir das ausführen, erhalten wir einen Datenrahmen und alle diese Zeilen haben eine Bewertung von 4,5 oder mehr, nicht vier, weil sie größer ist, sie ist nicht größer oder gleich. Wenn es größer oder gleich ist, erhalten wir auch die vier Bewertungen, 4,0. Aber das ist hier nicht der Fall, also bekommen wir das. Sie sehen beispielsweise, dass Zeilen mit dem Index 012 nicht in den Datenrahmen des Ausgabedatenrahmens aufgenommen wurden , und Sie können die Länge dieser Zeilen mithilfe einer Python-Längenfunktion einer Funktion Wir erhalten 29.758 Zeilen einer Bewertung von mehr als vier Eine andere Möglichkeit, wenn Sie keine native Python-Funktion verwenden möchten , ist die Verwendung von count. Das ist also das Datenrahmenobjekt, und die Datenrahmenobjekte haben eine Zählmethode. Und Sie erhalten diese Ausgabe, die im Grunde besagt, dass wir diese Menge an Werten im Kursnamen haben , diese Menge an Werten im Zeitstempel, diese Menge an Bewertungen und Kommentaren Da Kommentare diese Nichtwerte haben, ist das im Grunde genommen ein nicht existierender Wert, er existiert nicht Daher haben wir 4.927 Bewertungen mit Kommentaren, in denen Leute tatsächlich Also der Rest, dieses Minus, das uns eine Reihe von unnützen Kommentaren beschert. Natürlich können Sie jetzt verschiedene Arten von Statistiken darauf anwenden . Das ist zum Beispiel ein Datenrahmen, richtig. Wie extrahieren wir nur die Spalte? Wie wählen wir nur die Spaltenbewertung aus? Nun, Sie könnten hier einen Blick darauf werfen und eine Spalte auswählen. So wählen Sie also eine Datenbewertung für Spalten aus. Nun, das ist der Datenrahmen. Daher wenden Sie eine Bewertung und Sie erhalten Bewertungen mit einem Wert von 4,5 oder mehr. Um das zu verstehen, nehmen wir an, D zwei ist der Datenrahmen, den wir aufgrund dieser Bedingung erhalten. Es ist also ein Datenrahmen. Dieser Datenrahmen hat eine Bewertungsspalte. Das ist es also, was wir bekommen. Das ist das Gleiche , was wir hier gemacht haben, Datenbewertung, D-zu-Rating. Ich hoffe, das ist klar. Damit können Sie auch Funktionen wie Mean anwenden. Sie erhalten den Mittelwert der Bewertungen von mehr als vier. Ich werde es so lassen, wie es war, dann gibt es mehrere Bedingungen. Nehmen wir an, wir möchten den Datenrahmen filtern , in dem die Bewertung größer als vier ist und der Kursname dem vollständigen Python-Kurs entspricht , in dem zehn professionelle OP-Apps erstellt wurden. Richtig. Also dieser Kurs hier. Lassen Sie mich die Zeichenfolge kopieren, damit ich keine Tippfehler mache. So macht man diese Filterung , doppelte Filterung. Damit fängst du an. Und dann, anstatt eine Bedingung zu setzen , wie wir es hier getan haben, würden wir zwei Bedingungen angeben, die in Klammern getrennt wären Klammern getrennt wären Also die erste Bedingung da und die zweite Bedingung da drin Als erste Bedingung würden wir also dasselbe angeben. Also die Delta-Bewertung ist größer als vier. Sie sehen also, dass die Bedingung in der Klammer steht . Das ist die erste Bedingung Die zweite Bedingung ist, dass Delta, wir sagten, der Kursname ist gleich zwei, die Zeichenfolge, der komplette Python-Kurs, Spalte hat zehn professionelle OP-Apps gebaut, richtig, ausführen, und wir erhalten den Datenrahmen basierend auf dieser Filterung. Da dies also ein Datenrahmen ist, dieser Datenrahmen, können wir eine Bewertung daraus extrahieren und dann den Mittelwert der Bewertungsspalte ermitteln, und das ergibt uns diese Zahl. Also die durchschnittliche Bewertung der Bewertungen über vier für diesen Kurs. Und das ist wieder der Filter-Datenrahmen. Und das ist ungefähr diese Vorlesung. In der nächsten Vorlesung werden wir uns mit dem Filtern von Daten nach Zeiten befassen . So können Sie also Teile Ihres Datenrahmens für einen bestimmten Zeitraum extrahieren . Sie sehen also, wir haben hier diese Zeitstempelspalte, und sie reicht von 2018 Sehen wir uns im nächsten Video an, wie Sie das machen. 135. 134. Zeitbasierte Filterung: Hallo, willkommen zurück. Im vorherigen Video haben wir einige Filter auf der Grundlage von Bedingungen durchgeführt. Also haben wir hier eine Bedingung und hier mehrere Bedingungen angewendet , zwei, um genau zu sein. Aber wir können mehr als zwei mit derselben Syntax anwenden. Ordnung, also hier haben wir die Bedingung angewendet, indem wir Zahlen verglichen haben. Also haben wir mit Zahlentypen gearbeitet, die Bewertungsspalte hatte Zahlendatentypen und die Spalte mit dem Kursnamen, in der wir sagten, dass wir nur die Datensätze haben wollen, bei denen der Kursname dieser Zeichenfolge entspricht. Also diese Namensspalten, Zeichenketten-Datentypen. Also Zeichenkettendatentypen, Zahlendatentypen. Aber wie vergleichen wir? Wie filtern wir Daten anhand der Datenzeiten? Es ist nicht so einfach, aber es ist auch nicht schwer. Also lass uns das machen. Lassen Sie uns einen neuen Hauptbereich hinzufügen. Sagen wir also dieses Mal eine zeitbasierte Filterung. Richtig. Lassen Sie uns also die Bewertungen extrahieren, die der zweiten Hälfte des Jahres 2020 hinterlassen wurden. Versuchen wir, dieselbe Syntax wie dort anzuwenden. Also beginnen wir mit dem Datenrahmen und den eckigen Klammern. Diesmal benötigen wir zwei Bedingungen. Warum? Nun, weil wir in der ersten Bedingung Delta sagen würden. Zeitstempel ist größer als der erste Juli 2020 und der andere ist der Delta-Zeitstempel. Ist weniger als der 31. Dezember. Ein Wert größer als der erste Juli bedeutet also den zweiten Juli, den dritten Juli, den vierten Juli usw. Also wollen wir diese Daten für diesen Zeitraum. Wir wollen aber auch die andere Bedingung, dass die Daten nicht höher als der 31. Dezember sein sollten Deshalb verwenden wir diesen Wert für weniger als den 31. Dezember , also den 30. Dezember, den 29. Dezember usw. Aber wie schreiben wir hier den 1. Juli? Nun, dafür benötigen wir ein Datetime-Objekt. Wir können nicht einfach eine Zeichenfolge schreiben, schreiben wie die ersten sieben, 20, 20 Python ist nicht so intelligent. Es ist eine Programmiersprache. Nun, es ist möglich, dass die Python-Entwickler etwas schreiben könnten , um diese Art von Zeichenfolge zu lesen, aber es wäre fehleranfällig. Weißt du, jemand schreibt es anders, jemand schreibt es so. Und so weiter, Sie möchten explizit sein, um unerwünschte Fehler vermeiden zu können. Und mit expliziten Mitteln müssen wir einen richtigen Datetime-Objekttyp verwenden Also werde ich von Daytime importieren, Datetime importieren. Also importieren wir das Tagesobjekt aus der Daytime-Bibliothek Vergessen Sie nicht, diese Zelle auszuführen und hier runterzugehen und das Datetime-Objekt zu verwenden , das wir gerade aus der Tagesbibliothek importiert 2027 wäre also Juli und erster Das würde uns also den 1. Juli im richtigen Datentyp geben. Wir können dasselbe für diese Datumszeit tun, 2020, das wäre 12 für den 31. Dezember Richtig. Nun, ich denke, es ist sinnvoller, mehr oder gleich zu sagen als am ersten Juli und auch weniger oder gleich. Sie kommen also auf die Idee, auch diese Daten in den Zeitraum einzubeziehen . Lassen Sie uns das jetzt ausführen. Und wir bekommen einen Fehler. Gehen wir hier runter, um es zu lesen. Es ist ein Typfehler, was bedeutet, dass irgendwie der falsche Typ verwendet wurde. Aber lasst uns mehr lesen, um zu verstehen, was es ist. Diese Operation, dieser Vergleichsoperator, wird also zwischen den Instanzen von string und datet mit Datum und Uhrzeit nicht unterstützt string und datet mit Datum und Uhrzeit Es scheint also , als ob dieser Operator an diesem Tag zwischen einer Zeichenfolge und einem Tag angewendet wurde . Stimmt das? Also, welche ist die Saite hier? Der erste. Der Datenzeitstempel ist also eine Spalte, die Zeichenketten enthält. Der Zeitstempel enthält also Zeichenketten. Das sind alles Zeichenketten. Sie sehen zwar nach Datum aus, sind aber keine Datteln. Die Idee hier ist also , dass Python Datums- und Uhrzeitangaben nicht mit diesen Zeichenketten vergleichen kann . Daher müssen wir Python anweisen, diese als Datums- und Uhrzeitobjekte als Tagesobjekte zu behandeln , sodass Python dann in der Lage ist, zwei Tagesobjekte zu vergleichen, was aussagekräftiger ist als der Vergleich einer Zeichenfolge am Tag Um Python zu erstellen und diese als Tageszeiten zu lesen, müssen wir zum Anfang unseres Skripts gehen. Und wenn wir den Datenrahmen mit der CSV-Methode lesen, müssen wir ein weiteres Argument hinzufügen, nämlich das Analysedatum Durch dieses Argument teilen wir Python durch die eckigen Klammern , welche Spalten als Datums- und Uhrzeitangaben behandelt werden sollen. Also Zeitstempel, Parsen von Datumsangaben, in eckigen Klammern entsprechen Vergiss nicht, diese Zelle auszuführen und dann hier runter zu gehen, die Zelle erneut auszuführen Diesmal erhalten wir wieder einen Fehler , einen Typfehler. Es heißt, ein Vergleich zwischen dem und dem ist ungültig. Diesmal siehst du also, dass es dafür ist. Also das ist eine Datetime-UTC. Und dieser Tag ist dieser. Python versucht also, diese beiden zu vergleichen , obwohl sie Tagesobjekte sind, beide Tagesobjekte sind. Python ist immer noch nicht in der Lage, sie zu vergleichen weil eines von ihnen, das hier ist, ein naives Tagesobjekt ist, was bedeutet, dass das Tagesobjekt nichts über sein Zeitsystem weiß Deshalb, Python, um auf Nummer sicher zu gehen, sagt es dir: Okay, ich weiß nicht, was ich mit diesen beiden Tageszeiten anfangen soll, weil ich sie nicht vergleichen kann, da ich nicht weiß, um diesen beiden Tageszeiten anfangen soll, weil ich sie nicht vergleichen kann welches Zeitsystem es sich handelt. Auch wenn sie vielleicht so aussehen, als wäre dieses kleiner als das, könnte dieses tatsächlich größer sein als das andere, weil es ein anderes Zeitsystem sein könnte, das wir vergrößern sollten. Um zu verstehen, wie wichtig Explizität bei der Programmierung ist, stellen Sie sich einen Flugsicherungsturm Sie haben diese Anwendung , die Signale von zwei Flugzeugen empfängt , die gleichzeitig an diesem Turm vorbeifliegen Ein Flugzeug kommt aus den USA, ein Flugzeug kommt aus Indonesien Der Antrag muss die von diesen beiden Flugzeugen gesendete Zeit verarbeiten . Und bei diesem Signal muss die Anwendung neben der Uhrzeit auch das Zeitsystem jeder dieser beiden Datums- und Uhrzeitangaben kennen . Andernfalls, wenn in diesen beiden Tälern nur 6:00 Uhr Amerika und 7:00 Uhr Indonesien stehen würden , würde das Programm annehmen, dass es einen Unterschied von 1 Stunde gibt. würde das Programm annehmen, dass es einen Unterschied von 1 Stunde gibt Dann könnte es eine Kette anderer Prozesse durcheinander bringen, und das könnte gefährlich sein Also explizit ist besser. Kurz gesagt, um explizit zu sein, müssen wir ein Zeitsystem für diese Datums- und Uhrzeitangabe deklarieren, genau wie dieses ein Zeitsystem hat , und das können Sie sehen. Fügen wir hier eine weitere Zelle hinzu, und wenn Sie Daten, Zeit, Stempel, Ausführen sagen , erhalten Sie die Serie. Aber auch hier unten siehst du Datum und Uhrzeit 64, es ist UTC, UTC. Also lasst uns Datetime auch als UTC deklarieren. Verwenden Sie dazu TZ Info, dieses Argument, das einen Wert für einen Objekttyp, einen UTC-Objekttyp, erhält , der importiert werden muss Es ist ein bestimmtes Zeitsystemobjekt. Gehen Sie also zu den Importen und sagen Sie von PY TZ Import, UTC, vergessen Sie nicht, diese Zelle auszuführen, gehen Sie hier runter und machen Sie dasselbe für die andere Datenzeit. Also ein anderes Argument Ts, dessen Info UTC entspricht, ausführen. Und dieses Mal haben wir endlich den gefilterten Datenrahmen. Sie sehen die Daten hier. 20 2012, 30. Dezember. Und auch hier unten sehen wir den 1. Juli. Leider mit einer ziemlich niedrigen Bewertung. Wie auch immer, so können Sie Daten anhand von Zeitstempeln filtern Danke fürs Folgen. Ich werde später mit dir reden. 136. 135. Daten in Informationen verwandeln: Hallo und willkommen zu diesem neuen Video, das sich ein bisschen von den anderen unterscheiden wird. In den vorherigen Videos habe ich Ihnen einige Techniken zum Herausfiltern von Daten aus einem Datenrahmen gezeigt . Und das war im Grunde der Zugriff auf Spalten, Zeilen und Zellen sowie Anwenden von Bedingungen beim Zugriff auf diese Spalten, Zeilen oder Zellen eines Datenrahmens. Bisher haben wir jedoch nur Daten aus Daten extrahiert Dies ist immer noch keine Datenanalyse, da das Ziel der Datenanalyse darin besteht, Daten in Informationen umzuwandeln Darum geht es bei der Datenanalyse, aber das sind immer noch keine Informationen. Nehmen wir zum Beispiel an, wir wollen Bewertungen über vier und wir haben diesen Datenrahmen, aber es ist immer noch ein Datenrahmen. Es ist nicht menschenfreundlich. Es sind keine Informationen. Informationen wären, wenn wir stattdessen den Durchschnitt der Bewertungen über vier erhalten würden. Am Ende hätten wir also eine einzige Zahl. Das sind Informationen, weil sie für Menschen lesbar sind. Das sagt uns etwas, oder vielleicht könnten wir ein Diagramm erstellen, ein Diagramm, in dem wir die Bewertungen im Laufe der Zeit sehen könnten. Wir sehen das Diagramm und wir können einen Trend erkennen und aus diesem Diagramm einige Informationen lernen. Daten in Informationen umwandeln Als Nächstes werden wir Daten in Informationen umwandeln, und für dieses spezielle Video werden wir eine Reihe von Fragen beantworten. Mit anderen Worten, wir werden einige Informationen extrahieren, z. B. werden wir die durchschnittliche Bewertung, die durchschnittliche Bewertung für einen bestimmten Kurs usw. ermitteln. Jetzt sollten Sie in der Lage sein, den Code tatsächlich vor mir zu schreiben , weil Sie zum Beispiel bereits wissen, wie man die Bewertungsspalte extrahiert. Und ich habe Ihnen auch einige Hinweise gegeben, dass Sie eine Mittelwertmethode verwenden könnten , um die durchschnittliche Bewertung dieser Spalte Fangen wir also mit den ersten Informationen an. Die durchschnittliche Bewertung für alle Kurse für alle Zeiten. Das wäre die Datenbewertung als Mittelwert. Und das ist die durchschnittliche Bewertung. Also genau wie hier bei der Auswahl einer Spalte, Delta-Bewertung. Das machen wir auch hier. Das gibt uns also eine Spalte und das gibt uns eine Bewertung. Richtig, als nächstes die Durchschnittsbewertung für einen bestimmten Kurs. Diesmal müssen wir eine Bedingung anwenden, die Name des Delta-Kurses identisch ist. Der Operator mit doppelter Zuweisung entspricht also einem der Kurse. Nehmen wir an, der Python-Megakurs hat zehn reale Anwendungen entwickelt. Wenn Sie nun einen einzigen Buchstaben in der Zeichenfolge verpassen, werden Sie nicht das erwartete Ergebnis erzielen. Nehmen wir an, Sie haben statt des Großbuchstabens A ein kleines A geschrieben und Sie erhalten einen leeren Datenrahmen Wenn ich den Kleinbuchstaben A in Großbuchstaben ändere, erhalten wir den gefilterten Datenrahmen, aus dem wir die Bewertungsspalte ziehen wollen Das sind also die Bewertungen für die Python-Mega-Cs, und der Mittelwert ist der Durchschnitt der Python-Megacurs die Durchschnittsbewertung, die etwas höher ist als die Durchschnittsbewertung aller Kurse Richtig, Durchschnittsbewertung für einen bestimmten Zeitraum. Data, ich kopiere das einfach und gebe es hier weiter. Wir haben also diese erste Bedingung, diese zweite Bedingung. Wir sprechen also über diesen Zeitraum. Sie können das für einen anderen Zeitraum ändern, sagen wir, das gesamte Jahr 2020 vom ersten Januar bis zum 31. Dezember Jetzt können Sie diesen Ausdruck aufteilen und trotzdem dieselbe Ausgabe eingeben indem Sie nach dem Operator t die Eingabetaste drücken Und Sie erhalten immer noch den Filter-Datenrahmen , aus dem wir Bewertungen und daraus den Mittelwert erhalten. Das ist der Mittelwert für 2020. Als nächstes die Durchschnittsbewertung für einen bestimmten Zeitraum für einen bestimmten Kurs. Ich kopiere das, indem ich CC drücke und dann hier klicke und V drücke. Und dann, nach dieser Bedingung, also eine Klammer, zwei Klammern, füge ich den Operator end hinzu Und drücken Sie die Eingabetaste, drücken Sie erneut die Eingabetaste. Und hier füge ich die andere Bedingung hinzu , nämlich diese hier. Der Kurs entspricht dieser bestimmten Zeichenfolge, dem Python Mega Core. Ausführen. Wir haben eine Diskrepanz zwischen den Klammern Sie sehen, dass diese eckige Klammer rot hervorgehoben ist. Das heißt, wir sollten es entfernen. Führen Sie es erneut aus und das ist eine Bewertung. Für den Python-Megakurs für 2020. So holen Sie Informationen aus Ihren Daten heraus. Lassen Sie uns mit dem Durchschnitt der unkommentierten Bewertungen weitermachen. Also unkommentierte Bewertungen. Wissen Sie, lassen mich der Einfachheit halber den Kopf des Datenrahmens hier platzieren Einfachheit halber den Kopf des Datenrahmens hier Sie wissen also, dass wir hier eine Kommentarspalte haben, die ein NaN sein könnte, was bedeutet, notieren Sie sich eine Zahl, also ist es ein Nullwert, oder es könnte eine Zeichenfolge sein, etwas, das ein Student als Bewertung für einen bestimmten Kurs geschrieben hat . Wir wollen den Durchschnitt der Bewertungen ermitteln, für die es keine Befehle gibt. zu tun, sagen Sie, Daten, die Bedingung, Datenkommentar, ist Null. Das ist eigentlich eine Methode, und sie gibt uns einen gefilterten Datenrahmen mit nur den Zeilen, die den Kommentarwert NaN haben. Das Gegenteil davon ist nicht Null. Dann bekommst du die Zeilen mit Kommentar. Was wir wollen, ist dieses Mal Null und daraus wollen wir die Bewertungsspalte und den Mittelwert. Das ist der Mittelwert. Das Gegenteil davon wäre natürlich nicht Null. Und wir sehen, dass die durchschnittliche Bewertung für Bewertungen mit Kommentaren höher ist als die durchschnittliche Bewertung ohne Kommentar, was ich für normal halte. Leute, denen der Kurs gefällt, neigen vielleicht dazu, auch etwas zu schreiben, um ihre Dankbarkeit auszudrücken , oder ich weiß nicht, aber das sagt uns etwas. Richtig, Anzahl der unkommentierten Bewertungen. Nun, es ist einfach, kopiere das, füge eine Träne hinzu und statt zu meinen, sagst du zählen Und das ist die Zählung. Das Gegenteil davon wäre nicht Null. Bewertungen mit Kommentar zählen also. Und das zusammen ergibt, da bin ich mir sicher, 45.000, was einer Gesamtzahl von Bewertungsreihen entspricht Also Bewertungen ohne Kommentar, Bewertungen mit Kommentar. Als nächstes die Anzahl der Kommentare , die bestimmte Wörter enthalten. Nehmen wir an, im Datenrahmen des Kommentars sprechen einige Schüler über den Akzent des Dozenten. Was ist der Durchschnitt der Bewertungen, die Akzente enthalten? Beschweren sich die Leute über den Akzent und wie viele Personen beschweren sich über den Akzent des Dozenten Holen wir uns diese Informationen. Auch hier ist die Bedingung, dass der Delta-Kommentar, die Zeichenfolge dieses Kommentars das Wort Akzent enthält. Was wir bekommen, ist ein Fehler. Das Problem ist , dass Python nicht mit einem nicht-booleschen Array maskieren kann , das Nullwerte enthält Python kann also nicht in diesen Nullwerten im Kommentar suchen, kann in diesen Datentypen nicht nach einer Zeichenfolge suchen. Also wollen wir Python über das NA-Argument set to fold mitteilen . In diesem Fall ignoriert Python diese neuen Werte und sucht nur nach Akzenten in den Kommentaren mit einer Zeichenfolge mit einem Wert. Und das ist ein gefilterter Datenrahmen. all diesen Kommentaren wird also tatsächlich das Wort Akzent erwähnt. Wie viele von ihnen? Das sind nur die Bewertungen. Die Anzahl der Bewertungen beträgt 77. Also 77 von insgesamt 45.000, der Durchschnitt wäre natürlich einfach das, aber man würde diese Zahl in einen Mittelwert ändern Und es ist eine niedrige Bewertung, wie ich erwartet hatte. Da die Kurse von Studierenden aus verschiedenen Ländern angeboten werden , kann es sein, dass einige von ihnen den Akzent des Dozenten als unangenehm empfinden. Vielleicht hinterlassen sie also einen negativen Kommentar und eine negative Bewertung zusammen mit dem Kommentar. Und damit ist unser Vortrag hier abgeschlossen. Danke fürs Folgen. In den nächsten Videos werden wir etwas planen, was meiner Meinung nach sehr viel Spaß macht und es ist eine wunderschöne Art, Informationen der Öffentlichkeit gegenüber dem Benutzer darzustellen Informationen der Öffentlichkeit gegenüber dem Benutzer Danke, und ich werde später mit dir sprechen. 137. 136. Durchschnittliche Bewertungen pro Tag aggregieren und aufzeichnen: Hallo. In diesem Video zeige ich Ihnen, wie Sie ein Diagramm mit durchschnittlichen Tagesbewertungen erstellen. Unsere Grafik zeigt also die durchschnittliche Bewertung für jeden Tag. Um das zu tun, werde ich nicht an der vorherigen Jupiter-Datei arbeiten der vorherigen Jupiter-Datei , weil ich die Dinge gerne getrennt halte. Für den Visualisierungsteil werde ich also ein neues Notizbuch erstellen. Ich würde vorschlagen, dass Sie dasselbe tun. Zuallererst müssen wir den Datenrahmen laden. Also kopiere ich einfach die Zelle aus dem vorherigen Notizbuch und kopiere sie dorthin und drucke schnell den Kopf der Daten aus, nur um zu überprüfen, ob alles stimmt. Ja, das ist also das Delta, das rohe Delta. Drücken Sie dann Escape und drücken Sie B auf Ihrer Tastatur, um eine neue Zelle zu erstellen. Drücken Sie die Eingabetaste, um die neue Zelle aufzurufen, und lassen Sie uns das Diagramm erstellen. Aber bevor wir das Diagramm erstellen, müssen wir eine Art Datenaggregation durchführen Richtig, wir verwandeln Daten in Informationen, aber unsere Daten sind ziemlich roh Sie sehen, dass wir für einen Tag mehrere Bewertungen von verschiedenen Schülern abgegeben haben. Zum Beispiel haben wir für die Sekunde einer Prill-Sekunde eines Prills diese Bewertung, wir haben das und das und das und so weiter Wir wollen diese Zahlen zu einer Durchschnittsbewertung zusammenfassen diese Zahlen zu einer Durchschnittsbewertung Wie machen wir das? Das machen wir. Das können wir mit der Pandas-Gruppe-B-Methode tun, die einen neuen Datenrahmen erzeugt Es wird also ein neuer Datenrahmen sein, aber mit aggregierten Also einige neue Daten, die Durchschnittswerte des Rohdatenrahmens sind Durchschnittswerte des Rohdatenrahmens Lassen Sie mich Ihnen zeigen, wie Gruppe B funktioniert. Ich sagte also, dass Gruppe B einen neuen Datenrahmen erzeugt. Deshalb werde ich eine neue Variable erstellen, in der der neue Datenrahmen gespeichert werden soll. Der Tagesdurchschnitt ist also meine neue Variable, und das würde Daten entsprechen. Also die Datenrahmengruppe B. Ich mag diese Methode wirklich. Sie ist sehr intuitiv. Sie gruppieren diese Daten also. Nach was wollen wir gruppieren? Nun, nach Zeitstempel. Mal sehen, was uns das gibt. Also werde ich hier den Durchschnitt ausdrucken, den Kopf des Durchschnitts ausführen und mal sehen, was wir haben. Wir haben im Grunde den gleichen Datenrahmen. Das liegt daran, dass die Gruppe die Daten nicht nach Zeitstempel gruppieren konnte , weil Gruppe B so arbeitet, dass Gruppe B versucht, identische Werte in der angegebenen Spalte zu finden In diesem Fall hat der Zeitstempel keine identischen Werte, da jeder Wert einzigartig ist Sie können sehen, es ist derselbe Tag, aber diese Bewertung wurde zu diesem Zeitpunkt abgegeben Die andere Bewertung wurde zu diesem Zeitpunkt abgegeben und so weiter. Jeder Wert ist also anders. Bevor wir Gruppe B anwenden, müssen wir daher hier einige Bearbeitungen vornehmen. Wir müssen dem Datenrahmen eine neue Spalte hinzufügen. Ich werde diese Spalte D mit Großbuchstaben D benennen . Ich versuche nur, mit den Namen der Spalten konsistent zu sein. Da diese mit Großbuchstaben geschrieben sind, beginnen sie später mit einem Großbuchstaben. Ich werde diese neue Spalte mit einem Großbuchstaben später erstellen. Also der Datentag entspricht dem Datenzeitstempel. Dieses DT DT ist eine Eigenschaft, die uns Zugriff auf eine Reihe von Datenzeitattributen wie Datum, Entschuldigung, Datum, Sie können Monat angeben Und so weiter. Vorerst brauchen wir das Datum. Lassen Sie mich das auskommentieren, also wähle ich sie aus und drücke Strg-Schrägstrich oder Befehls-Schrägstrich, um sie auszukommentieren Und ich werde Ihnen den neuen Datenrahmen zeigen. Das ist also der Datenrahmen. Also, was ich gerade getan habe, ist, dass ich aus diesem Zeitstempel extrahiert habe, ich habe nur das Datum extrahiert Also habe ich für jeden Zeitstempel das Datum bekommen Für diesen Zeitstempel ist es also der zweite April, der zweite April und so weiter Auf diese Weise haben wir also einige identische Daten erhalten. Weißt du, wenn du den Monat haben willst, würdest du die Zahl des Monats bekommen. Also vier, vier, vier und so eins. Aber wir brauchen ein Datum, also werde ich mich dort an das Datum halten. Jetzt können wir das ungewöhnlich machen und lassen uns Data Dot Heat löschen , weil wir es nicht mehr benötigen. Und jetzt können wir es noch einmal mit dieser Gruppe nach Methode versuchen , aber seien Sie vorsichtig. Diesmal brauchen wir einen Tag hier. Wie gesagt, wir wollen nach Tagen gruppieren. Lass uns ausführen und sehen, was wir bekommen. Vielleicht ist es nicht das Ergebnis, auf das wir gewartet haben. Sie sehen also, dass der Tag noch nicht aggregiert ist , weil wir hier einen weiteren Befehl geben müssen Wir müssen Pandas die Methode der Aggregation mitteilen. Willst du also auf der Grundlage des Mittelwerts oder der Anzahl aggregieren In diesem Fall ist es der Mittelwert. Also würden wir sagen, Punkt, Methode, Execute, und dieses Mal haben wir das bekommen. Also das ist nur der Kopf. Aber wenn Sie den gesamten Datenrahmen ausdrucken, sehen Sie, dass das bis zu diesem Datum so funktioniert. also für jede Zeile Wir haben also für jede Zeile einen Tag, ersten Januar, den zweiten Januar, dritten Januar und so weiter. Das ist also die durchschnittliche Bewertung aller Kurse für diesen Tag. Jetzt müssen Sie dieses Produkt verstehen. Das ist, wie ich Ihnen gesagt habe , ein Datenrahmentyp. Also Pandas Datenrahmen, aber dieser hat eine Spalte. Das ist also keine Spalte. Der Tag ist keine Spalte. Tag ist eigentlich der Index. Sie sehen, wenn Sie sagen, dass der Tagesdurchschnitt dieser Spalten die einzige Spalte ist. Und wenn Sie auf die Bewertung zugreifen möchten, gefällt Ihnen das. Bewerte, und du bekommst diese Serie. Also, was ist das? Das ist der Index. Wenn Sie also auf die Tagesspalte zugreifen möchten, tun Sie das nicht so, da dies eine Syntax für den Zugriff auf Spalten ist. Wenn Sie auf diese spezielle Spalte zugreifen möchten, also auf diese Indexspalte, möchten Sie Punktindex sagen. Und dann bekommen wir diese Serie , die vom Typ Index ist. Sie können es aber leicht in eine Liste umwandeln. Zum Beispiel, wenn Sie sie plotten möchten. Genau wie Spaltenindizes, wie dieser, sind auch Indizes listenähnliche Typen Also Datenanordnungen. Lassen Sie uns jetzt das Plotten machen. Für das Plotten benötigen wir die MT Plot Leap Library Also werde ich es hier eingeben. Also importiere MT Plot lib PyPlot. Wir benötigen dieses Modul der Bibliothek, und es ist eine gute Praxis, SPLT zu verwenden Sie werden also im Internet sehen , dass jeder PLT verwendet. Wenn Sie also konsistent mit anderen Programmierern sein möchten, sollten Sie das als PLT importieren Das erleichtert Ihnen auch die Arbeit, weil Sie das nicht abtippen müssen, sondern einfach PLT sagen können, wie wir es hier tun werden PLT-Punktdiagramm ist also die Methode, und diese Methode hat im Grunde zwei Argumente, das X und das Y. Wir erstellen also ein Diagramm mit einer X- und einer Entlang der X-Achse werden wir die Tage haben Das heißt, wir wollen den durchschnittlichen Punktindex. Also das Array da. Und neben Y wollen wir die Spalte mit der durchschnittlichen Bewertung. Ausführen. Ich habe eine Fehlermeldung erhalten, PLT ist nicht definiert, weil ich vergessen habe, diese Zelle auszuführen , damit der Import gültig ist Jetzt kann ich das erneut ausführen, und das ist ein Produkt Entlang der Y-Achse haben wir die Daten, denen ich weiß, dass sie etwas unsichtbar sind, aber das werden wir korrigieren Entlang der Y-Achse haben wir die Bewertungsspalte. Sie sehen, dass sie hier irgendwo bei 3,8 beginnt und bis zu fünf reicht. Jetzt wählt Matplot Leap diesen Bereich automatisch aus, indem es sich die Daten ansieht Wenn Sie sich unsere Bewertungsspalte ansehen, sagen Sie die durchschnittliche Bewertung Wenn Sie den Höchstwert, den Höchstwert, extrahieren , werden Sie feststellen, dass er 5,0 ist. Und wenn Sie den Minimalwert sehen, sehen Sie, dass er bei etwa 3,8 liegt. Eines Tages gaben Schüler eine Durchschnittsbewertung von 5,0 ab, also alle. An einem anderen Tag verließen sie 3,8. Matplot Lip setzt also diese beiden als Grenzen der Y-Achse, anstatt die Achse von Null bis fünf zu beginnen, und das würde den Plot weniger lesbar machen Das ist also eine gute Sache von MT Plot Lip. Das Schlimme ist, wie Sie sehen können, dieses Diagramm nicht interaktiv ist, es ist also nur eine Bilddatei. gibt keine Popup-Funktionen, sodass Sie einige Werte sehen könnten , wenn Sie irgendwo mit der Maus über die Maus fahren. Matplot Lip kann das also nicht. Wir können dies jedoch ein wenig verbessern, indem wir ein Figurobjekt deklarieren und ihm ein Argument mit fester Größe von sagen wir 253 geben Das ist die Breite und das ist die Höhe des Grundstücks Jetzt können Sie sehen, dass wir eine längere X-Achse und eine kürzere Y-Achse haben . Wenn Sie mit dieser Grafik nicht einverstanden sind, wenn Sie der Meinung sind, dass sie immer noch nicht lesbar ist, sagt sie Ihnen nicht viel über den Trend aus. Wenn das Rating also im Laufe der Zeit gestiegen ist oder nicht, dann könnten wir die Daten herunterrechnen Anstatt tägliche Durchschnittswerte zu extrahieren, könnten wir wöchentliche Durchschnittswerte extrahieren, sodass könnten wir wöchentliche Durchschnittswerte extrahieren, wir weniger Punkte auf der X-Achse und eine glattere Linie hätten der X-Achse und eine glattere Meiner Meinung nach sind das also zu viele Daten. Es ist unlesbar, es ist nicht nützlich. Lassen Sie uns sie im nächsten Video mit einer besseren Grafik herunterspielen nächsten Video mit einer besseren Grafik herunterspielen Das haben Sie also in diesem Video gelernt. Sie haben gelernt, Daten zu gruppieren und Sie haben gelernt, sie grafisch darzustellen. Lassen Sie mich nun eine kleine Überarbeitung der Gruppierung nach Methode vornehmen , falls Sie immer noch verwirrt sind. Lassen Sie mich das in einer anderen Zelle hier entfernen und lassen Sie mich den Kopf des aggregierten Datenrahmens ausdrucken den Kopf des aggregierten Datenrahmens ausdrucken Sie sehen also, wir haben hier eine Bewertung und einen Tagesindex. Was ist mit dem Kursnamen passiert? Mit dieser Kolumne? Was ist mit der Kommentarspalte passiert? Was ist mit der Zeitstempelspalte passiert? Nun, sie sind verschwunden, weil diese Mittelwertmethode nur mit Spalten funktioniert, die Zahlenwerte wie Bewertung haben Ich kann keinen Durchschnitt für diese Spalte, diesen Kommentar, den Kursnamen oder den Zeitstempel berechnen Kommentar, den Kursnamen oder den Zeitstempel Daher werden Spalten wie allgemeine Zeitangaben und Kursnamen dieser Methode automatisch gelöscht und nur diese Spalten bleiben erhalten In ähnlicher Weise könnten Sie stattdessen eine Zählung durchführen. In diesem Fall würden Sie einen anderen Datenrahmen erhalten. Sie sehen also, dass wir die Anzahl der Kursnamen haben, was bedeutet, dass für dieses Datum 46 Zeilen erstellt wurden. Mit anderen Worten, 46 Bewertungen. Wir haben also 46 Bewertungen, wie auch immer Sie es nennen möchten. Wir haben hier sieben , weil Pandas Nichtwerte wie diesen und jenen und so weiter nicht berücksichtigt Nichtwerte wie diesen und jenen und so weiter nicht berücksichtigt wie diesen und jenen und so weiter Deshalb könnten wir dieses Zähldiagramm haben. Also zeigen wir, wie viele Bewertungen wir jeden Tag hatten. Und genau das wollte ich dir in diesem Video beibringen. Vielen Dank. Ich rede später mit dir. 138. 137. Downsampling und Plotten von durchschnittlichen Bewertungen pro Woche: Ich komme zurück. Im vorherigen Video haben wir ein Diagramm entwickelt, das die täglichen Durchschnittswerte der Bewertungen, aber auch die tägliche Anzahl der Bewertungen zeigt. In diesem Video wollen wir dieses Diagramm neu erstellen, jedoch auf wöchentlicher Basis. Lass uns das machen. Lassen Sie uns diesen Datenrahmen also ein wenig organisieren. Ich klicke hier, drücke A, Enter, M, Enter und gebe diesem Abschnitt einen Durchschnitt der Titelbewertung pro Tag, da wir sowohl Durchschnittswerte als auch Zählungen erstellt haben. Führe diese Zelle aus. Jetzt brauchen wir hier eine neue Zelle, Durchschnittswert B pro Woche. Stellen Sie auch hier sicher, dass Sie Zugriff auf die Datenvariable haben. Das ist also mein Datenrahmen. Andernfalls müssen Sie zuerst diese Zelle ausführen und dann die nächsten Operationen ausführen. Also das Erste, was wir tun wollen, ist , dass ich diese Zeile kopiere. Und was wir daran ändern wollen, ist zunächst, wir angeben müssen, um eine neue Spalte im Datenrahmen zu erstellen . Nennen wir es also schwach. Und wir extrahieren aus dem Zeitstempel und machen den T-Punkt. Sollte es schwach sein? Lass uns das ausprobieren. Oder drucken Sie einfach den gesamten Datenrahmen aus. In Ordnung Wir bekommen eine Warnung. Ignorieren wir das für eine Weile. Und wir bekommen die Wochenkolumne. Wir sehen also, dass dies die 13. Woche ist. Das ist die erste Woche. Lass uns sehen. Was ist eigentlich das Maximum dieser Spalte. Es ist also 53. Was ist das Minimum? Ich nehme an, es ist einer. Hmm. Das heißt, wir haben nur 53 Wochen. Pandas aggregiert also die Wochen verschiedener Jahre, was bedeutet, dass es die Bewertungen von, bedeutet, dass es sagen wir, der ersten Woche des Jahres 2019 mit den Bewertungen der ersten Woche des Jahres 2019 und den Bewertungen der ersten Woche des Jahres 2020 aggregiert Jahres 2019 mit den Bewertungen der ersten Woche des Jahres 2019 und den Bewertungen der ersten Woche des Jahres 2020 und All diese drei Wochen werden also zu einer zusammengefasst, und das wird Woche eins sein und das wird Dann bekommen wir Woche zwei für die zweite Woche von 2019, 2019 und 2020 und so weiter Insgesamt hatten wir 53 Wochen , denn so viele Wochen hat ein Jahr. Nun, normalerweise hat es 52 Wochen, soweit ich weiß, aber vielleicht ist es eines dieser Jahre, es ist wahrscheinlich ein Schaltjahr, es hat 53 Wochen, schätze ich. Wie dem auch sei, du verstehst die Idee. Das ist nicht das, was wir brauchen. Lass uns versuchen, was die Warnung vorschlägt DT, also Kalender. dieser Woche. Hm. Es scheint, dass das Maximum wieder 53 ist. Wir haben also immer noch aggregierte Wochen. Daher besteht die Lösung hier darin, SDR f time zu verwenden, was eine Zeichenfolge aus der Zeit bedeutet Und das bekommt als Argument einige Datums- und Uhrzeitcodes wie Prozentsatz Y, vielleicht einen Gedankenstrich oder so oder ein Leerzeichen, das liegt ganz bei Ihnen Das ist optional. Aber das ist der Code, den Sie verwenden müssen , wenn Sie das Jahr extrahieren möchten. Und dann extrahieren wir die Wochennummer. Mal sehen, was wir diesmal bekommen. Jetzt reden wir. Also dieses Mal bekommen wir das Jahr und wir bekommen die Woche. Daher können wir zwischen verschiedenen Zeilen unterscheiden. Woche 13 des Jahres 2021 steht jetzt also unter diesem Namen. Es ist nicht nur 13. Daher werden wir wieder 20 haben, 2013, 2019, 13 und so weiter. Wir haben also seit Wochen eindeutige Namen. Und das hat uns geholfen, dieses Datetime-Format zu erstellen Sie könnten andere Codes verwenden. Wenn du also einen Monat willst, würdest du einen niedrigeren nehmen. Und dann würden wir die Zahl des Monats bekommen, April hier und die Woche, die Zahl der Woche. Wie ich dir schon sagte, das ist optional. also anstelle des Bindestrichs Sie könnten also anstelle des Bindestrichs ein Leerzeichen verwenden, und Sie erhalten den Abstand zwischen dem Monat und der Woche. Wo findest du diese Codes? Nun, Sie können einfach Python-Codes für das Datetime-Format googeln und Sie werden eine Liste sehen, eine große Liste dessen, was Sie verwenden können Lassen Sie uns hier also den Bindestrich und die Wochennummer verwenden. Was kommt dann als Nächstes? Nun, als Nächstes werden die Daten gruppiert. Nehmen wir also an, ein schwacher Durchschnitt eines neuen Datenrahmens entspricht dem Datenpunkt Gruppe für Woche. Also diese Spalte. Und daraus wollen wir das Mittel herausholen. Mal sehen, was wir bekommen. Es scheint also zu funktionieren. Siehst du? Nun, okay, Python erwägt die erste Woche, Null, Null, aber das spielt keine Rolle. Ich denke, es ist okay. Und so haben wir den Durchschnitt für jede Woche. Nochmals, vergiss das nicht. Die Wochenspalte ist eigentlich der Index. Das ist also die erste Woche, die zweite Woche und so weiter. Und die Bewertung ist die Kolumne. Lassen Sie uns jetzt die Handlung planen. PLT-Punktdiagramm. Wir müssen also ein X und ein Y angeben. Das X wird diesmal ein schwacher durchschnittlicher Punktindex sein, sodass die Wochenspalte und die Datenbewertung Ich habe diesen Fehler bekommen. X und Y müssen dieselbe erste Dimension haben, aber diese und jene Formen haben. Es scheint also, als würde ich Spalten aus verschiedenen Datenrahmen verwenden. Das ist also ein wöchentlicher durchschnittlicher Datenrahmen 173 Zeilen, und dies ist der andere Datenrahmen mit 45.000 Zeilen Ich meinte also Tag, tut mir leid, Wochendurchschnitt. Warte, und das ist die Grafik. Auch hier gilt: Wenn Sie eine bestimmte Größe anwenden möchten, möchten Sie diese kopieren und hier einfügen. Das verändert im Grunde das Figurobjekt. Und das ist die Grafik. Also durchschnittliche Bewertung pro Woche. Also, Sie sehen, dass die Labels hier miteinander verwechselt sind Und es gibt Möglichkeiten, das zu beheben. Aber ich würde sagen, dass es sich nicht lohnt, das hier mit Matt Plot Lee zu tun , denn wenn Sie Ihre Daten wirklich anderen zeigen wollen, dann sollten Sie eine modernere Plotbibliothek verwenden, wie z. B. High Charts, die wir in den nächsten Videos verwenden werden Hohe Diagramme zeigen jetzt ein intelligenteres Diagramm, das benutzerfreundlich ist und für eine hervorragende Benutzererfahrung sorgt und versucht , die Informationen effizienter darzustellen Ich würde also sagen, dass diese Darstellung für die Verwendung von Matplot Leap im Jupiter-Notizbuch ausreichend ist für die Verwendung von Matplot Leap im Jupiter-Notizbuch ausreichend Verwendung von Matplot Leap im Jupiter-Notizbuch Wir untersuchen also nur Daten. Wir können jetzt einen Trend erkennen, dass die Bewertungen mit der Zeit steigen. Vielleicht war das in der Tagesgrafik nicht sehr gut sichtbar. Sie sehen diese Grafik also hier. Das hat die aktuellen Zählungen, aber wir können das so ändern, dass wir die Zelle erneut ausführen und dann die Zellen erneut zeichnen, und wir können die Tagesmittelwerte hier sehen, die Wochenmittelwerte hier Ich glaube, Sie stimmen mir zu, dass es einfacher ist , den Trend in dieser Grafik zu erkennen als in dieser Grafik Und das ist die Stärke des Downsamplings der Daten. Im nächsten Video werden wir die Daten noch weiter verkleinern und die durchschnittlichen Bewertungen pro Monat anzeigen Wir sehen uns im nächsten Video. 139. 138. Downsampling und Plotten von durchschnittlichen Ratings pro Monat: Hallo. In diesem Video zeige ich Ihnen, wie Sie ein Diagramm erstellen, in dem die durchschnittliche Bewertung pro Monat angezeigt wird . Dies wird ein sehr kurzer Vortrag sein , weil wir bereits wissen, wie das geht. Alles, was wir tun müssen, ist diese Zelle einfach so zu kopieren, oder Sie können sie auch kopieren, indem Sie Escape und dann CC drücken. Drücken Sie zweimal die C-Taste. Dann gehst du hier einfach hin und sagst V, und das wird die Zelle einfügen, sodass du nicht alle Codes so kopieren musst. Aber anstatt die Codes zu kopieren, können Sie die gesamte Zelle kopieren. Und dann müssen wir hier ein paar Änderungen vornehmen , Monat hier, Zeitstempel, dann statt U haben wir M. Statt Woche haben wir Monat Statt Woche haben wir hier Monat. Das ist in Ordnung. Dann aktualisieren wir hier den variablen Monatsdurchschnitt. Monatsdurchschnitt der Ausführung, und das ist der monatliche Durchschnitt. Also ich denke, es wird besser. Sie sehen, dass wir den Unterschied jetzt deutlicher sehen. Und das liegt auch daran, dass sich die Bandbreite in der Grafik geändert hat der Grafik geändert seit wir mehr aggregierte Daten haben, sodass wir jetzt monatliche Durchschnittswerte haben Das heißt, es gibt keine große Amplitude, einen großen Unterschied zwischen dem höchsten Wert. Sie sehen also, dass der höchste Wert jetzt irgendwo bei 4,6 liegt , und dem niedrigsten Wert, irgendwo bei 4,3 oder 4,35 liegt Dadurch werden die Höhen und Spitzen für den Benutzer sichtbarer Stimmt, und das ist ungefähr dieses Video. Im nächsten Video werden wir etwas anderes machen. Wir werden versuchen, mehrere Linien in einem einzigen Diagramm zu erstellen , und jede Zeile wird den monatlichen Durchschnitt der Bewertungen für jeden Kurs darstellen . Bisher hatten wir nur aggregierte Kurse. Lassen Sie uns also im nächsten Video mit Ihnen sprechen. 140. 139. Durchschnittliche Bewertungen pro Kurs pro Monat: Hallo, willkommen zurück. In diesem Video werden wir ein Diagramm mit verschiedenen Linien erstellen , wobei jede Zeile die durchschnittliche Bewertung pro Monat für einen bestimmten Kurs darstellt . Wir haben also mehrere Kurse. Wir werden für jeden Kurs eine Zeile haben . Lass uns das machen. Setzen wir eine Überschrift auf Seite drei. Das wäre die durchschnittliche Bewertung pro Kurs pro Monat. Stimmt. So machen wir das. Zunächst benötigen wir eine Monatsspalte im Datenrahmen. Jetzt weiß ich, dass wir das hier gemacht haben. Wir haben diese Monatsspalte bereits, aber ich möchte den Code getrennt halten, damit es nicht schadet, wenn Sie ihn hier nur aus Konsistenzgründen noch einmal machen . Um zu sagen, dass diese Zelle genau das tut, also ein Diagramm mit mehreren Linien erstellt, und für dieses Diagramm benötigen wir diesen Ausdruck. Es ist also derselbe Ausdruck. Ich kann das einfach kopieren und hier einfügen. Richtig, wir müssen da nichts ändern, also müssen wir nur den Monat extrahieren und das überprüfen wir. Wir haben also den Monat für jede Zeile. Da wir nach Monaten gruppieren, ist es sinnvoll, das zu haben Dann müssen wir die Methode „Gruppieren nach“ verwenden , um einen neuen Datenrahmen zu erstellen , der eine Aggregation wäre Nun, nur damit wir es vergleichen, um es zu vergleichen. Sehen wir uns an, wie der durchschnittliche Datenrahmen des Vormonats aussieht. Also nochmal, das hatten wir. In diesem Datenrahmen fehlen die Informationen zu den Kursen. Es fehlen also die Informationen zum Kursnamen. Sie sehen hier, wir haben diese Spalte. Wir müssen diese Dimension irgendwie in unserem neuen aggregierten Datenrahmen Was wir hier also tun müssen, ist etwas anderes. Auch hier müssen wir eine neue Variable erstellen. Lassen Sie uns das vielleicht als Monatsdurchschnitts-CRS bezeichnen, um zwischen diesem Datenrahmen und dem durchschnittlichen monatlichen CRS zu unterscheiden durchschnittlichen monatlichen CRS Auch dies wird ein Produkt für Produkt dieses Datenrahmens sein , wobei eine Gruppierung nach Methode verwendet Aber lassen Sie mich das in diesem Fall löschen, damit Sie den anderen Code hier sehen können , um den Unterschied zu sehen. In diesem Fall werden wir nicht nur den Monat hier in der Liste der Spalten haben , die für den Aggregationsprozess verwendet werden sollen, sondern wir werden auch, können Sie erraten, welchen Kursnamen wir haben können Sie erraten, welchen Kursnamen Also, von Monat zu Kurs, das ist es, was wir brauchen. Bewerben wir uns jetzt, meine ich, und schauen wir mal, was wir bis jetzt bekommen haben. Das ist also ein Datenrahmen. Und im Grunde hat dieser tatsächlich zwei Indexebenen Es hat den Monat und den Kursnamen. Das können Sie sehen, wenn Sie diesen Index erstellen. Sie sehen also, dass es sich um einen Multiindex handelt. Sie sehen die Monatsspalte und auch einen Kursnamen , der hier nicht angezeigt wird, aber er ist da und so, wie Sie ihn gesehen haben, konnten Sie ihn hier sehen. Sie sehen, dass diese fett gedruckt sind. Diese Werte, das heißt, sie sind Indizes. Und das hier ist eine Kolumne. Die Spalten haben also nur eine Bewertung, nur eine Spalte. Nun, das ist noch nicht sehr nützlich, weil es so aufgebaut ist, dass wir hier eine Zeile haben. Das ist also eine Gruppe von Zeilen. Es beginnt hier. Also der erste Kurs, der zweite Kurs, der dritte, vierte, fünfte. Und es gibt hier auch noch ein paar andere Kurse, die wir tatsächlich sehen können, wenn wir hier ein Stück auftragen. Schauen wir uns also die ersten 20 Datensätze an. Jetzt sehen wir die ersten 20 Datensätze vollständig, den kompletten ersten Tag der Entschuldigung, ersten Monat 2018, zweiten Monat 2018 und so weiter. Dieser Kurs hat die Bewertung für diesen Monat. Dieser Kurs hat die Durchschnittsbewertung für diesen Monat und alle anderen Kurse. Dann wiederholt sich dasselbe Muster, wie dieses hier wie dieses hier, in allen Monaten immer wieder. Um diese Daten in einer besseren Struktur zu haben, würden wir hier die Unstack-Methode anwenden , um diesen Datenrahmen im Grunde zu entstapeln und am Ende diese bessere Struktur zu erhalten Jetzt haben wir sozusagen eine Pivot-Tabelle, wir haben den Monat hier, den ersten Monat, den zweiten Monat, den dritten Monat, und jede Spalte steht jetzt für einen Kurs. Wenn Sie also zum Beispiel die Bewertung des kompletten Python-Kurses wissen möchten , in dem zehn professionelle OOP-Apps für einen bestimmten Monat erstellt wurden, sagen wir, diese, ist es keine, weil der Kurs nicht veröffentlicht wurde noch zu diesem Zeitpunkt. Aber wenn Sie sich das Ende ansehen, sagen wir -20. Dann würden Sie sehen, dass wir ab dem ersten Monat des Jahres 2020 eine Bewertung für diesen Kurs haben, eine Durchschnittsbewertung, richtig? Und so weiter, was können wir jetzt mit diesem Datenrahmen machen ? Nun, wir können es planen. Aber dieses Mal werden wir einen anderen Ansatz verwenden, da wir dieses Punktdiagramm nicht verwenden können , da wir mehrere, mehrere Spalten haben Das erwartet also ein X und ein Y, aber welches ist das X? Das X steht natürlich für Monat. Darüber sind wir uns im Klaren. Aber welches ist das Y? Ist es das oder das oder das? Wir haben also mehrere Spalten. Eine Möglichkeit wäre, diese Plotfunktion mehrmals zu schreiben oder vielleicht eine Schleife zu erstellen, oder vielleicht eine Schleife zu erstellen die durch den Datenrahmen iteriert, aber eine andere, einfachere Möglichkeit besteht darin, einfach auf die durchschnittlichen CRs Dot Plot und Villa zu zeigen , was wir haben Natürlich sieht es chaotisch aus, aber lassen Sie uns es ein bisschen verbessern Da wir die Plotfunktion direkt aus dem Datenrahmen und nicht aus dem PLT verwendet direkt aus dem Datenrahmen haben, können wir hier die Argumente für die Größe der Figur verwenden Sagen wir also 253. Und jetzt sieht es ein bisschen besser aus. Immer noch nicht ideal, vielleicht könnten wir das auf acht erhöhen. Okay. Jetzt funktioniert es. Da haben wir also eine Legende, die die Farbe der einzelnen Golfplätze zeigt. Auch hier bin ich kein Fan von dieser Art von Grafik, aber wenn wir die High Charts-Bibliothek mit der Weboberfläche verwenden , wird das viel besser aussehen. Was ist, wenn wir hier count verwenden? Wir würden das Diagramm korrekt wiedergeben, aber die Legende wäre ein bisschen durcheinander. Das liegt daran, dass wir im CRS-Datenrahmen für den Monatsdurchschnitt CRS-Datenrahmen für den Monatsdurchschnitt nicht nur die Anzahl der Bewertungen haben, sondern auch andere Zeitstempel und Dinge, die wir nicht benötigen Sie sehen, dass zum Beispiel dieser Kurs, 100 Python-Übungen, eine hat den Zeitstempel hier. Sie sehen, es ist eine andere Ebene von Spalten. Das alles gehört also zu Timestamp, oder? Die Anzahl der Zeitstempel. Und dann haben wir die Anzahl der Bewertungen, angefangen von hier bis irgendwo Wir sehen nicht alle Spalten weil Jupiter sie kürzt, aber Sie verstehen schon, Tag und Woche Wie können wir also nur die Bewertung extrahieren? Nun, das ist eigentlich einfach. Ich habe dir gesagt, dass Gruppe B, die hier beginnt und hier endet, Gruppe B einen Datenrahmen zurückgibt. Jetzt extrahieren wir aus diesem Datenrahmen nur die Bewertung. Und das Problem ist gelöst. Jetzt erhalten wir eine übersichtliche Grafik, die die Anzahl der verbleibenden Bewertungen für jeden Monat des Jahres zeigt. Von Anfang 2019 bis 2020 siehst du hier also diese rosafarbene Linie, das ist der neue Kurs, der komplette Python-Kurs. Es beginnt irgendwo im Jahr 2021. Also der erste Monat des Jahres 2021. Und natürlich können Sie auch hier wieder das Mittel herausholen, so wie Sie es zuvor getan haben. Aber mit Mittelwert erhalten wir wieder dieselben Ergebnisse, da die Mean-Methode diese Zeitstempel und diese nicht numerischen Spalten ignoriert diese Zeitstempel und diese nicht numerischen Also wie dem auch sei, sie werden gelöscht. Aber der Graf lässt sie nicht fallen. Es zählt sie hoch und gibt uns so viele Daten. Stimmt, ich hoffe, das war klar, und ich werde später mit dir reden. Wir sehen uns. 141. 140. Welcher Tag der Woche sind die Menschen am glücklichsten: An welchem Wochentag sind die Menschen am glücklichsten? Können wir diese Frage mit Python und den Daten, die wir gerade zur Hand haben, beantworten? Nun, ich denke, ja, das können wir tun, und das ist das Schöne an der Datenanalyse. Wenn Sie ein bisschen kreativ sind, können Sie sehr interessante Fragen zu Ihren Daten beantworten . In diesem Video werden wir also gemeinsam herausfinden, an welchem Wochentag die Menschen am glücklichsten sind ? Wie machen wir das? Nun, indem wir ein Diagramm generieren. Also, wie können wir das machen? Nun, meiner Meinung nach können wir die Logik verwenden, dass wenn die durchschnittliche Bewertung für alle Kurse, sagen wir, mittwochs die höchste der Woche ist, dann können wir sehen, dass die Leute an diesem Tag am Mittwoch vielleicht positiver sind Ich bin mir sicher, dass wir das erkennen können, weil wir so viele Daten haben Tausende von Bewertungen, und statistisch gesehen , gibt uns das meiner Meinung nach großes Vertrauen in das Ergebnis Was wir tun müssen, ist ein Diagramm zu erstellen, das sieben Tage auf der horizontalen Achse, von Montag bis Sonntag, und auf der vertikalen Achse werden wir den Durchschnitt für jeden Tag haben Das bedeutet, dass wir eine Menge Daten aggregieren müssen. Lass uns das machen An welchem Tag sind die Menschen am glücklichsten? Jetzt werden wir wie immer den Datenrahmen verwenden. Also, wo wir diese Bewertungen zu bestimmten Zeitstempeln übrig Also, was müssen wir extrahieren? Also, der Wochentag. Nennen wir es so. Was gleich Data, Timestamp ist. Also ohne Zeitstempel greifen wir auf die DT-Eigenschaft zu, und daraus benötigen wir SDR FT. Und der Wochentag Wenn Sie also Sonntag, Montag oder Dienstag möchten , kann dieser Name des Wochentags mit dem A-Formatcode extrahiert werden . Sie können das bei Google nachschlagen. Das mache ich auch. Es ist unmöglich, sich an alles zu erinnern. Jetzt können wir die Daten wieder ausdrucken und sehen, dass wir einen Wochentag haben. Spalte. Freitag, Freitag, Freitag wiederholen sich also immer wieder, und wir müssen jetzt aggregieren, um den Durchschnitt für jeden Wochentag zu erhalten . Nehmen wir also an, der Wochentagsdurchschnitt für den Datenrahmen , der die aggregierten Daten enthalten wird Auch hier ist Gruppe B unser Sparer. Mm. Was benutzen wir dieses Mal? Nun, Wochentag. Und dann meine ich. Und lassen Sie uns sehen, was wir an Wochentagen durchschnittlich bekommen. Und das war's. Dann müssen wir nur noch, lassen Sie mich das löschen. Alles, was wir tun müssen, ist ein Punktdiagramm. Die X-Achse wäre Woche, der durchschnittliche Punktindex, und die Y-Achse wäre Woche, Durchschnitt, Wochentag, Entschuldigung, Bewertung Handlung, das ist die Antwort. Ich weiß, dass die Reihenfolge nicht so ist, wie Sie es erwarten würden, aber wir können das ändern. In jedem Fall können wir feststellen, dass der Freitag ganz anders ist als die anderen Tage. Freitags geben die Leute also eine durchschnittliche Bewertung von 4,455 auf einer Skala von eins bis Und das macht Sinn. Ich glaube, ich falle auch in diesen Bereich, also bin ich freitags tendenziell glücklicher Ende der Woche und das Wochenende stehen also vor der Tür und es macht Sinn Nun, wie können wir diese Daten bestellen? Also müssen wir die Wochentagsspalte bestellen. Also, das können wir machen. Lassen Sie mich das für eine Weile kommentieren. Der Wochentagsdurchschnitt entspricht dem Durchschnitt des Wochentags. Sortieren Sie die Werte nach Wochentag und drucken Sie sie aus, um zu sehen, was der Wochentagsdurchschnitt ist. Und Sie werden feststellen, dass dies nicht die Reihenfolge ist, die wir erwarten würden. Das passiert natürlich, weil die Indexspalte, diese hier, Zeichenkettenwerte enthält. Also Freitag, Montag, ein Tag sind alles Zeichenketten. Daher ordnet Python sie in alphabetischer Reihenfolge Freitag, Erster Tag, Montag usw. sind also Zeichenketten, weil diese Methode eine Zeichenfolge, also eine Wochentagsspalte, erzeugt Sie sehen eine Zeichenfolge von Time. Zeitstempel war also Zeit, aber wir haben ihn in eine Zeichenfolge umgewandelt Jetzt gibt es möglicherweise verschiedene Problemumgehungen, um dieses Problem zu beheben. Mir fällt ein, dass wir eine Wochentagsnummer hinzufügen könnten eine Wochentagsnummer hinzufügen Oder einfach die Zahl. Zum Datenrahmen, und aus dem heraus verwenden Sie wieder eine Zeichenfolge aus der Zeit, aber dieses Mal verwenden wir den prozentualen Kleinbuchstaben W. Und was uns das geben würde, ist, lassen Sie mich Ihnen zeigen, dass Daten jetzt dieser Datenrahmen sind prozentualen Kleinbuchstaben W. Und was uns das geben würde, ist, lassen Sie mich Ihnen zeigen, dass Daten jetzt und diese Tagesnummer Jetzt haben wir neben dem Namen des Wochentags eine Zahl an jede Zeile angehängt neben dem Namen des Wochentags eine Zahl an jede Zeile Das ermöglicht uns nun, die Werte nach dieser Tagesnummernspalte zu sortieren . Montag ist der erste , Freitag ist der fünfte und so weiter. Lass uns das machen. Ich lösche den Delta-Datenrahmen von dort, das Drucken, das Ungewöhnliche, und ändere das in Tagesnummer. Und hier, Wochendurchschnitt, löschen, ungewöhnlich das, ausführen. Wir haben diese Schlüsselnummer für den Tag des Fehlers. Oh, weil ich vergessen habe , hier die Tagesnummer hinzuzufügen . Auch hier haben wir einen Fehler. Mal sehen, wo der Fehler aufgetreten ist. Das sind also die Fehler tief in den Bibliotheken, Sie in MT plot Lip sehen und das zeigt den Fehler in unserem Code. Es ist also in diesem Liniendiagramm mit Punktdiagramm. Und es heißt, dass der Wert ein Inzest von Zeichenketten oder Bytes sein muss , kein Tupel Versuchen wir also, den Fehler hier zu beheben. Ich werde das auskommentieren und sehen was der Wochentagsdurchschnitt ist Das Problem hier ist also der Wochentagsdurchschnitt , der Index gibt einen doppelten Index zurück, was so aussieht, also ist es ein Multiindex Er enthält den Wochentag und die Tagesnummer. Daher wird die Plotmethode verwirrend sein, sodass sie nicht weiß, welches dieser Arrays entlang der X-Achse geplottet werden muss Wir brauchen also eine Möglichkeit, nur die Spalten zu extrahieren. Also die Namen der Wochentage. Sie können das tun, indem Sie die Get-Level-Werte verwenden. Das ist eine Methode, die ein Argument erwartet. In diesem Fall können wir entweder Null oder Eins eingeben. Null bedeutet, dass wir extrahieren, wir auf die erste Spalte des Multiindex zugreifen und eine Spalte die zweite Spalte wäre Wir brauchen also die erste Spalte. Und das gibt uns diese Tage, also die Namen der Tage. Deshalb können wir das jetzt hier verwenden , um diesen Ausdruck zu kopieren. Das ist das Array, das wir entlang der X-Achse zeichnen wollen . Also haben wir das hier reingetan. Ausführen, und das ist die Ausgabe. Wenn wir das Bild breiter machen wollen, müssen wir die Größe der Zahl plt so einstellen, dass sie einer Liste von 253 entspricht, das funktioniert gut, oder vielleicht ein bisschen Kleiner. Ja, das ist besser. Also musst du ein gutes Verhältnis zwischen der Breite und der Höhe finden . Und wieder sehen wir, dass Freitag der Tag mit der höchsten Durchschnittsbewertung ist . Und das war also über dieses Video. Vielen Dank fürs Folgen. Ich werde in den nächsten Videos mit dir sprechen. Wir sehen uns. 142. 141. Andere Arten von Plots +: Hallo. In diesem Video werde ich Ihnen einige wichtige Informationen über verschiedene Arten von Grundstücken geben . In den vorherigen Videos haben wir mehrere Plots erstellt, und alle hatten etwas gemeinsam. Es waren alles Liniendiagramme. Wie gehen wir also vor, verschiedene Arten von Graphen zu verwenden? Nun, diese Liniendiagramme werden mit der Plotmethode generiert. Aber wenn Sie die Hirschmethode verwenden, um PLT, also PLT, zu erforschen , können Sie sehen, dass Sie auch hier unten etwas eingeben können Sie sehen, dass Sie auch andere Arten von Diagrammen verwenden können. Nicht alle von ihnen sind Graphen. Bei einigen von ihnen handelt es sich um Eigenschaften, die Sie dem Diagramm geben, das Sie erstellen, aber Sie werden sehen, dass sich hier zum Beispiel der Plot irgendwo befindet. Das war also die Handlung, und Sie können sehen, dass wir zum Beispiel einen Balken haben, diesen. Wenn Sie das in Balken ändern, bekommen wir diese Balken innerhalb der Linie. Dies ist jedoch keine sehr gute Darstellung für diese Art von Grafik, da die Unterschiede zwischen den Bewertungen sehr gering sind. Also würde ich mich für eine Handlung entscheiden. Einige dieser Arten von Diagrammen, zum Beispiel Pi, sind für diese Art von Daten nicht geeignet. Wenn Sie also Pi ausprobieren, erhalten Sie eine Fehlermeldung. Denn wenn du Hilfe benutzt, dann sagen wir, hilf PLT Pi einem Kreisdiagramm werden Sie sehen, dass Pi ein X erwartet, aber kein Y. Wie könnten wir also ein Kreisdiagramm mit unseren Daten verwenden Nun, vielleicht, also lassen Sie mich hier einen neuen Eintrag erstellen. Wir könnten vielleicht ein Kreisdiagramm erstellen, sagen wir, Anzahl der Bewertungen pro Kurs, was Sinn machen würde. Das könnten wir also tun. Nehmen wir an, der neue Datenrahmen entspricht den Daten der Gruppe B. Wir möchten nach Kursnamen und Kursen gruppieren und dann die Anzahl anwenden. Und das würde uns diesen neuen Datenrahmen geben. Wir sind also an der Bewertungsspalte interessiert. Wir sehen, wie viele Bewertungen jeder Kurs insgesamt erhalten hat. Wenn wir nun all diese anderen Daten nicht haben wollen, interessiert uns nur die Bewertungsspalte. Zwischen den Zählungen der Gruppen B und D führen wir also eine Bewertung durch, also extrahieren wir die Bewertungsspalte. Dann würden wir das ernst nehmen. Also können wir das nutzen. Lassen Sie mich eine neue Zelle mit PLT Dot Pi erstellen eine neue Zelle mit PLT Dot Pi Also haben wir gesagt, dass Pi ein X als Argument bekommt. Also das wäre die Share-Serie. Das X ist also mindestens eine Reihe, eine Datenrahmenspalte. Also wird jede Art von Array ausgeführt. Und ja, das ist das Pi-Diagramm. Aber es hat keine Beschriftungen, also geben wir ihm ein paar Beschriftungen. War es so? Das Argument. Etiketten? Ja. Derzeit ist es auf None gesetzt, sodass der Standardwert none ist. Wenn Sie also Labels vergeben möchten, würden Sie sagen, teilen Sie den Punktindex. Index ist die Spalte mit den Namen der einzelnen Zeilen. Ausführen. Und ja, dieses Mal bekommen wir diese Etiketten für jedes Stück vom Kuchen. Sie sehen also, dass der Python-Megakurs zum Beispiel die meisten Bewertungen hat. Dann kommt die Python für Anfänger mit Beispielen, die braune Scheibe in ihr und so weiter, auch andere Kurse. Jetzt bekommen wir auch hier eine Menge Metadaten , die diese Methode erzeugt. Aber wie ich schon sagte, Matplot Leap ist nicht die benutzerfreundlichste Plotbibliothek, also eignet sie sich gut für die Datenexploration, aber sie ist nicht sehr gut für Präsentationen vor anderen Zuschauern, vor anderen Lesern, anderen Benutzern, die Ihre Visualisierungen sehen möchten Damit ist dieses Video beendet. Und wie ich dir schon gesagt habe, werden wir all diese Grafiken machen, jedes einzelne davon, das du gesehen hast, einschließlich dieses, lass mich es wieder zur Handlung ändern. Wir werden diese Grafiken reproduzieren, diesmal jedoch mit einer moderneren webbasierten Bibliothek die die Daten in einem Browser darstellt. Sie können ganz einfach eine Web-App erstellen , sodass Sie Benutzern die URL Ihrer Web-App zu Ihrer Website geben können, damit sie diese Grafiken selbst interaktiv erkunden können . Die gute Nachricht ist, dass wir keine weiteren Aggregationen mithilfe von Group by durchführen werden, unsere Daten sind fertig Wir werden diese einfach kopieren und dann die Plotfunktion der neuen Plotbibliothek mit hohen Diagrammen verwenden der neuen Plotbibliothek , die wir in den nächsten Videos verwenden werden Also vielen Dank, dass Sie diese Serie verfolgt haben. Ich werde in der nächsten mit dir sprechen. Wir sehen uns. 143. 142. App 4 (Teil 2): Datenanalyse und Visualisierung mit interaktiven In-Browser Plots: Willkommen zu einer neuen Videoserie. In diesen Videos werden wir lernen, wie man interaktive Diagramme mit Python erstellt. Lassen Sie mich Ihnen die Exo-Charts zeigen, die wir in diesen Videos erstellen werden Dies wird das erste Diagramm sein. Sie sehen, diese sind interaktiv. Wenn wir zum Beispiel mit der Maus über das Diagramm fahren, werden diese Popups angezeigt, die den exakten Wert an der Stelle anzeigen , auf die der Cursor zeigt. Das wird die durchschnittliche Bewertung pro Tag sein. Dann haben wir die Durchschnittsbewertung pro Woche Monat für Kurs, für mehrere Kurse. Dann haben wir diese coole Grafik. Es ist ein Stream-Graph. Auch hier handelt es sich um durchschnittliche Bewertungen pro Kurs pro Monat, jedoch in einem anderen Diagramm dargestellt werden. Dann haben wir die Frage, wann Menschen am glücklichsten sind. Und schließlich haben wir dieses Kreisdiagramm, das wiederum interaktiv ist Und es sieht viel besser aus als die anderen Diagramme, die wir mit Matt Plot Lip erstellt haben. Diese Diagramme sind also mit hohen Diagrammen erstellt. High Charts ist eine JavaScript-Plotbibliothek, aber wir können Highcharts in Python über Just Pi verwenden Und Just Pi ist ein Web-Framework für Python. Es ist ziemlich neu, also besteht die Möglichkeit, dass Sie noch nichts davon gehört haben. Juspi ist also ein Web-Framework wie FAS, aber Juspi hat einen sehr Der Vorteil von Juspi ist, dass Sie kein HTML, JavaScript oder CSS schreiben müssen HTML, JavaScript oder CSS schreiben müssen erstellen Nur mit Jus Pi können Sie komplette Apps und komplette modern aussehende Websites Du wirst also 2 Steine mit einem Vogel abschießen. Ich meine, ein Vogel mit 2 Steinen oder zwei Vögel mit einem Stein. Du verstehst die Idee. Du wirst also sowohl Jpi als auch High Charts lernen. Das habe ich gemeint Und hier ist der Plan. Im nächsten Video zeige ich Ihnen, wie Sie eine einseitige Pi-Website erstellen , die nur einen Titel und einen Absatz mit Text enthält. Also eine einfache Webseite. Im darauffolgenden Video werden wir diese Website erweitern, indem wir der Webseite ein hohes Diagramm hinzufügen. Mit anderen Worten, in den nächsten beiden Videos erfahren Sie, wie Sie eine Just By-Webapp erstellen und wie Sie Justpy WebApp ein Diagramm mit hohen Diagrammen hinzufügen In den Videos nach diesen beiden Videos werden wir dann lernen, wie man andere Diagramme erstellt Also die, die ich Ihnen hier gezeigt habe und welche Diagramme wir erstellt haben und die wir mit Mat Plot Lip auf Jupiter erstellt haben . Also werden wir jeden einzelnen von ihnen erstellen. Also mach dich bereit und ich werde im nächsten Video mit dir sprechen . 144. 143. Eine einfache Web-App erstellen: Hallo. In diesem Video erfahren Sie, wie Sie mit dem Just Spy-Webframework eine einfache Web-App erstellen . Ich werde Visual Studio-Code verwenden, um die Web-App zu schreiben. Also würde Jupiter hier nicht arbeiten. Ich schlage Ihnen daher vor, eine IDE wie Visual Studio-Code oder eine andere IDE oder einen Texteditor zu verwenden Visual Studio-Code oder eine andere IDE oder , den Sie verwenden. Also habe ich Visual Studio-Code hier gestartet. Ich gehe zu File Open. Gehen Sie im Visual Studio-Code zu dem Ordner, in dem meine Bewertungen befinden, und klicken Sie auf Öffnen wird ein neuer Visual Studio-Code und ein neues Projektverzeichnis erstellt, das auf den Ordner verweist, in dem sich die Bewertungen dieser CSV-Datei befinden. Wir müssen diese CSV-Datei vorerst nicht überprüfen, da wir in diesem Video nur die Web-App erstellen werden. Lassen Sie uns also eine Python-Datei erstellen. Ich werde es Zero Simple App Dot PY nennen. Also werde ich mehrere Web-Apps erstellen und verwende jetzt 01234 In den Namen dieser Dateien. Um Juspy verwenden zu können, muss Justpy installiert sein. Also verwende ich jetzt 3.9 Python 3.9 und gehe zum Terminal New Terminal, und hier werde ich PIP 3.9 verwenden, da ich Python 3.9 verwende , Install just PY Ordnung. Das war erfolgreich. Ich habe also keine Fehler bekommen. Ich habe die Meldung erhalten, dass es bereits installiert ist. Aber wie dem auch sei, ich hoffe, du hattest auch Erfolg mit der Installation. Dann müssen wir nur noch importieren. Pi. Es empfiehlt sich, es als JP zu importieren, da Sie sich die Dokumentation von Just Pi ansehen werden und alle Beispiele diesen JP-Namen verwenden. Es ist also eine gute Idee, mit der Dokumentation konsistent zu sein . Jetzt wird jede By-App ein Hauptobjekt haben , das als Quasar-Seite bekannt ist Das ist also im Grunde die Webseite. Und diese Webseite kann verschiedene Elemente enthalten. So kann sie beispielsweise auf Seite eins eine Überschrift oder einen Absatz oder vielleicht eine Tabelle enthalten . All diese Elemente werden also zu dieser Quasar-Seite zur Webseite hinzugefügt dieser Quasar-Seite zur Webseite Warum heißt es Quasar? Nun, weil Jus Pi das Quasar-Framework verwendet, das im Grunde ein Framework ist das nichts mit Python zu tun Es ist ein Framework, das mit JavaScript erstellt wurde, aber Jus Pi verwendet dieses Framework und wir können dieses Framework über Python verwenden . Lassen Sie mich also eine Quasar-Seite erstellen. Zunächst erstellen wir eine App-Funktion. Du kannst sie benennen, wo immer du willst, aber im Grunde ist die Idee, dass diese App diese Quasar-Seite zurückgibt In der Funktion erstellen wir also eine Variable, die der Jp-Quasar-Seite entspricht Also Q, P. Das ist eine Klasse, die wir hier instanziieren Wir erstellen also eine Quasar-Seiteninstanz-Objektinstanz , diese Funktion sollte dann diese zurückgeben Und dazwischen schreiben wir die Elemente, die diese Seite enthalten soll Lassen Sie uns also für jedes Element eine Variable erstellen. Lassen Sie uns eine Überschrift erstellen. Eine Überschrift besteht also im Grunde aus Text, aber mit einer sehr großen Schriftgröße. Und wir machen JP, also zeigen wir auf diesen Punkt QD, also QDV Es ist im Grunde eine Einteilung, wenn Sie sich mit HTML auskennen. Es ist eine Division, aber es ist eine Quasar-Division. Es hat also ein gewisses Styling von Quasar , das es modern aussehen und es Ihnen auch ermöglicht, es sehr einfach zu stylen , wie Sie gleich sehen werden Als erstes Argument sollten wir übergeben, wo es hingehört Natürlich gehört zu WP diese Variable, die ich WP genannt habe, um für Webseite, Webpage zu stehen. Das gehört dazu. Dann sind andere Argumente , die QD bekommt, der Text Welchen Text wollen wir dort anzeigen? Als Zeichenfolge, sagen wir, Analyse von Kursrezensionen. Lassen Sie uns auch einen Absatz hinzufügen. Nennen wir das wieder P eins ist gleich p Punkt QDV. Wir verwenden immer QDV und A, es gehört wieder zu WP. Diesmal der Text Schreiben wir also quasi eine Beschreibung der Webseite, diese Grafiken stellen die Kursübersicht dar. Analyse der Kursbewertung. Das wäre eine sehr minimalistische Web-App. Aber wenn wir jetzt dabei sind, wird nichts passieren weil wir die Funktion erstellen, aber keine Instanz diese Funktion aufruft, also rufen wir sie nirgends auf Lassen Sie uns also etwas tun, das wir diese Funktion nennen. Wir können Pi von JP verwenden. Jus Pi ist also eine Funktion und erwartet als Eingabe eine Funktion, die eine Quasarseite zurückgibt, was hier diese Funktion ist Sie können also einfach eine App schreiben, ohne die App-Funktion aufzurufen Also Pi, diese Funktion kümmert sich um den Aufruf dieser Funktion. Richtig. Wenn wir es jetzt ausführen, sollten Sie hier die Meldung sehen , dass Just By an dieser Adresse mit dieser 8.000-Portnummer startklar ist an dieser Adresse mit dieser 8.000-Portnummer Wenn Sie die Strg-Taste drücken und dann klicken oder die Befehlstaste drücken und dann klicken , sollte Ihr Standardbrowser geöffnet Und das ist die Web-App, also funktioniert sie. Nun, Sie würden erwarten, dass dies in einer größeren Schrift sein würde. Das ist nicht passiert , weil wir keinem dieser Divs einen Stil hinzugefügt haben keinem dieser Divs einen Stil hinzugefügt Diese Unterteilungen sind also nur einfacher Text. Um Elementen Stil zu verleihen, können Sie jedem Q-Div-Element ein Klassenargument hinzufügen, das einer Zeichenfolge entspricht. Wie können wir dieses Div also groß machen? Nun, ich kann es dir natürlich zeigen, aber ich möchte dir zeigen, wie du jede Art von Styling finden kannst , die du mit Pi verwenden kannst. Sie müssen also einfach nach dem Quasar-Stil suchen. Und dann gehe zum ersten Ergebnis. Understyle und Identity, Sie werden die Attribute sehen , die Sie für die Seitenelemente ändern können, wie zum Beispiel das div-Element, das wir jetzt zur Hand haben Wir machen uns also Sorgen um die Topographie. Wenn Sie dort klicken, werden Sie hier Beispiele sehen. Wenn Sie also den Text so groß machen möchten, sollten Sie Text H verwenden. Also lass uns das versuchen. Kopiere es und bearbeite es hier. Schreiben Sie H eins. Wenn Sie Visual Studio-Code verwenden, müssen Sie wissen , dass nichts passiert, wenn Sie den Code mit dieser Schaltfläche erneut ausführen, während der Code ausgeführt wird . Das Programm friert also einfach ein und wenn Sie zum lokalen Host zurückkehren, sehen Sie, dass die alte App immer noch läuft. Sie müssen also hierher gehen und Strg C drücken , um den aktuellen Vorgang zu beenden , und dann zu dieser Taste gehen und ihn erneut ausführen. Dann wirst du sehen, dass die App aktualisiert wird und wir haben jetzt diese großen Telefone. Schauen wir uns also noch einmal Quasar-Stil unter Stil und Wir haben also über Typografie gesprochen. Sie haben hier auch andere Beispiele, was Sie ändern können. Wenn Sie also eine weitere Eigenschaft hinzufügen möchten, sagen wir, Sie möchten diesen Text in den Mittelpunkt stellen, Sie möchten Text zum Schreiben verwenden. Also kopierst du das. Gehen Sie zu Ihrer App, machen Sie ein Leerzeichen und fügen Sie die andere Stileigenschaft ein. Stoppen Sie den Code und führen Sie ihn erneut aus. Laden Sie die Seite neu. Und Sie sehen, dass der Text nach rechts gegangen ist. Ja, also wollte ich es in den Mittelpunkt stellen. Sagen wir also Textzentrum. Hör auf, nochmal zu rennen. Irgendwann erscheint dieses Pop-up mit der Meldung, dass sich die App geändert hat, sodass wir auf Okay klicken können, und die Seite wird neu geladen Das habe ich also erwartet. Wenn Sie einen gewissen Abstand wünschen, also wenn Sie möchten, dass dieser Text nicht so nah am oberen Rand der Webseite liegt, sollten Sie sich die Abstände ansehen Was die Abstände angeht, werden Sie hier unten sehen , dass Ihnen all diese Optionen zur Verfügung stehen Wenn Sie zum Beispiel möchten, dass der Abstand oben besonders klein ist, verwenden Sie diesen Text Wenn Sie möchten, dass der gesamte Text aufgefüllt wird, sollten Sie hier etwas Platz haben, einen Abstand zwischen dem Text und der oberen Grenze und einen Abstand zwischen diesem Text und dem nächsten Element, also sollten Sie hier etwas Platz haben, zwischen dem Text und der oberen Grenze und einen Abstand zwischen diesem Text und dem nächsten Element, diesem hier Dann möchten Sie vielleicht zu einem Textabstand auf allen Medien übergehen, also möchten Sie das kopieren und dort hinzufügen Also mach ein Leerzeichen. Erneut ausführen, neu laden Und du siehst, dass wir jetzt etwas mehr Abstand zwischen dem und dem hatten etwas mehr Abstand zwischen dem und dem Die letzte Änderung, die ich vornehmen möchte, ist , dass ich den Text etwas kleiner machen möchte. Control C, erneut ausführen, hierher gehen, neu laden, und jetzt sieht es besser aus So macht man es einfach mit Webapps. Beachten Sie, dass die Reihenfolge, in der Sie diese Elemente erstellen, wichtig ist. Sie sehen also, dass die Analyse natürlich die Bewertungen an erster Stelle steht. Von dem anderen Element hier. Wenn Sie also weiter unten Elemente hinzufügen möchten, sollten Sie die Reihenfolge einhalten. Sie möchten hier also weitere Elemente hinzufügen und immer vergessen , dass Sie dieses Element immer mit der Webseite verbinden müssen. Nun, so erstellt man eine einfache Webseite. Aber Q DFs sind nicht das einzige Element, das wir verwenden können. Wir können auch ein Highchart-Element verwenden, bei dem es sich um ein Diagramm handelt, das wir unserer Benutzerseite hinzufügen können. Lass uns das im nächsten Video machen. Wir sehen uns. 145. 144. Eine Datenvisualisierungs-Web-App erstellen: Hallo, willkommen zurück. Im vorherigen Video haben wir eine App mit Just Pi erstellt. Diese App enthielt zwei Komponenten, daher werden sie in Jus Pi als Komponenten bezeichnet. Also diese Komponente hier, Q Div und eine weitere Komponente Q Div, beide werden der Hauptkomponente hinzugefügt , der Quasar-Seite In dieser Vorlesung werden wir eine dritte Komponente hinzufügen, sich um ein Diagramm mit hoher Höhe handelt, das immer noch ein Bestandteil von Just Pi ist Lassen Sie uns das Schritt für Schritt machen. Ich werde ein neues Pythople erstellen , in dem ich diese neue App schreiben werde Nennen wir es also durchschnittlichen Bewertungstag. Die durchschnittliche Bewertung pro Tag ist also PY. Ich werde diesen Code einfach kopieren, weil wir ihn brauchen, und ihn hier platzieren. Und jetzt müssen wir nur noch die Komponente High Charts hinzufügen. Lassen Sie uns die Dinge Schritt für Schritt angehen. Der allererste Schritt, den wir machen wollen, ist, das richtige Diagramm zu finden, das wir brauchen. Es gibt eine sehr gute Möglichkeit, das zu tun. Wir können zur Dokumentation mit den hohen Diagrammen gehen und uns die Beispiele in den Grafikbeispielen ansehen die Beispiele in den Grafikbeispielen die sie auf dieser Seite zeigen, und dann können wir eines davon auswählen. Lass uns das machen. Lassen Sie uns ein Diagramm auswählen, das wir benötigen. Gehen Sie zu Ihrem Browser und suchen Sie einfach bei Google nach Dokumenten mit hohen Charts. Auf dieser Seite finden Sie die Dokumentation zu High Charts. High Charts ist also auch eine JavaScript-Bibliothek zur Erstellung von Diagrammen. also genau wie Quasar war also genau wie Quasar eine JavaScript-Bibliothek Sie hat nichts mit hohen Charts zu tun. Und Python bringt diese beiden Bibliotheken, diese beiden Frameworks zusammen, was für uns Python-Programmierer wirklich großartig ist, diese beiden modernen JavaScript-Bibliotheken von Python zu verwenden diese beiden modernen JavaScript-Bibliotheken von Python Hier sind wir also in der Dokumentation zu den Highcharts, und wir wollen zu den Diagramm- und Serientypen übergehen Und hier werden Sie sehen, dass wir verschiedene Arten von Diagrammen haben. In unserem Fall denke ich also, dass ein Spline-Diagramm angemessen wäre Wenn Sie also auf das Spline-Diagramm klicken, werden Sie dieses Beispiel hier sehen Es geht um Temperatur pro Höhe. Es hat diese Temperaturachse horizontal und diese Höhenachse vertikal. Jetzt stellt jedes Diagramm den Code bereit, den JavaScript-Code, der das jeweilige Diagramm erzeugt, und Sie können sehen, dass Sie entweder mit JSFiddle oder mit dem Code-Stift darauf zugreifen können. Dabei handelt es JSFiddle oder mit dem Code-Stift sich im Grunde um zwei Online-Code-Editoren Wenn Sie auf jsFiddle klicken, wird der Code geöffnet, der das Diagramm erzeugt Und jedes Diagramm hat seinen eigenen Code. Wenn Sie also zum Stream-Diagramm gehen, gehen Sie erneut zu JS V. Es wird Ihnen der Code für diesen Stream-Graphen angezeigt. Wie auch immer, lass uns zurückgehen. Das ist also der Graph, der uns interessiert, und hier ist der Code, der diesen Graphen erzeugt. Sie können hier also auch eine Live-Version des Diagramms sehen. Wenn Sie hier etwas ändern, wird das Diagramm erstellt. Aber ich sage nicht, dass du Javascript lernen musst. Alles, was wir tun müssen, ist, dass Sie den Code, der nach dem Koma dieses Containers beginnt, hierher kopieren müssen . Das heißt, Sie müssen es aus dieser geschweiften Klammer auswählen Gehen Sie nach unten, bis Sie diese halbe Spalte und diese runde Klammer sehen , und Sie möchten bis zu dieser geschweiften Klammer kopieren Sie möchten also diese geschweifte Klammer einbeziehen . Drücken Sie also Control C oder gehen Sie dorthin und kopieren Sie es und gehen Sie dann zu Python. Und was wir tun müssen, ist , eine Zeichenfolge zu erstellen. Lassen Sie uns eine Variable erstellen. Nehmen wir an, die Diagrammdefinition entspricht einer Zeichenfolge. Ich werde dreifache Anführungszeichen verwenden. Also sechs Anführungszeichen, und ich werde sie aufteilen. Also drei Zitate hier, drei Zitate hier. Hier drin werde ich den ganzen Code einfügen. Also nochmal, du musst hier sehr vorsichtig sein. Dieser Code beginnt mit dieser geschweiften Klammer, dann wird er in ein Diagramm übertragen und so weiter, und er endet mit dieser geschweiften Bevor ich Ihnen nun erkläre, was ich hier mache, lassen Sie mich zuerst dafür sorgen, dass es schnell funktioniert, und dann komme ich zurück zum Code und erkläre Ihnen, was hier vor sich geht Sobald Sie also die Codedefinition haben, das ist eine, wollen Sie hierher gehen und sagen wir HC für hohe Charts, JP- und C-Charts. Das ist also die Komponente, die wir verwenden wollen. A entspricht WP, also das Standardargument. Und jetzt erwartet diese High-Charts-Komponente ein Optionsargument, das dieser Variablen entspricht, die in meinem Fall das JavaScript-Codediagramm Def enthält Das ist es. Wenn ich nun diesen Code ausführe, siehst du, dass die App läuft, Befehlsklick oder Ctrl-Klick, und das ist die Web-App mit dem Diagramm darin. Dies war also der erste Schritt, den Code aus der kostenpflichtigen Dokumentation zu holen und den Code in Ihr Python-Programm einzufügen den Code in Ihr Python-Programm Lassen Sie mich Ihnen nun den ersten Schritt erklären, was wir gerade getan haben. Wie ich Ihnen erklärt habe, ist High Charts eine JavaScript-Bibliothek. Daher ist das hier JavaScript-Code. Aber in diesem Fall ist das JSN. JavaScript verwendet also JSON und das JSON-Format ist ein vertrautes Format für Python. Es sieht also aus wie ein Wörterbuch. Sie können sehen, dass es mit dieser geschweiften Klammer beginnt, und dann haben Sie diesen Schlüssel Obwohl es eine Zeichenfolge ist, ist es derzeit eine Python-Zeichenfolge. Was passiert, wenn wir das hier tun , ist, dass Juspi in ein Python-Wörterbuch konvertiert Also ein echtes Objekt, das Python lesen und manipulieren kann. Juspi wird dieses Wörterbuch also verarbeiten und es als Diagramm auf der Webseite rendern Ich kann Ihnen beweisen, dass Python diese Zeichenfolge erfolgreich als Wörterbuch gelesen hat diese Zeichenfolge erfolgreich als Wörterbuch gelesen indem ich die HC-Punktoptionen ausdrucke. Also Optionen, weil wir es hier als Argument übergeben haben, wird es ein Attribut von HC und wir können so darauf zugreifen. Dort drucke ich das Wörterbuch aus und hier unten werde ich auch den Typ der HC-Option ausdrucken, sodass Sie sehen können, um welchen Typ es sich handelt, und Konsole C, um die aktuelle Instanz der App zu unterbrechen , erneut ausführen, und jetzt wird nichts passieren, weil ich noch keine Instanz der Seite geladen Wenn ich also auf die Seite gehe und dann hierher zurückgehe, werden Sie sehen, dass etwas ausgedruckt wurde , da beim Laden der Seite diese App-Funktion ausgeführt und daher diese beiden Zeilen ausgeführt werden. Also lass uns sehen. Das ist das Wörterbuch, oder? Es beginnt dort, es endet hier. Es ist dasselbe Wörterbuch, das wir hier als Zeichenfolge einfügen. Beachten Sie auch, dass der Typ nicht gerade ein Wörterbuch ist. Es ist eine andere Art von Wörterbuch als ein Python-Wörterbuch plus. Es ermöglicht uns, mithilfe einer Punktnotation auf die Wörterbuchschlüssel zuzugreifen . Lassen Sie mich Ihnen zum Beispiel zeigen, was das bedeutet. Wenn Sie hier zu HC Dot Options gehen und erneut Punkt sagen, können Sie auf alle Schlüssel dieses Wörterbuchs zugreifen. Nehmen wir zum Beispiel an, wir wollen den Titel dieses Titels hier ändern , richtig? Wir können also mit dem Punkttitel auf diesen Titelschlüssel zugreifen. Und dann hat dieser Titel auch ein eigenes Wörterbuch. Wir können wieder mit der Punktnotation auf den Text des Titels zugreifen . Also lass mich den Titeltext machen, richtig? Der Titeltext ist eine Hierarchie. Lassen Sie mich also die App-Instanz beenden und erneut ausführen. Gehen Sie und laden Sie die Seite neu und sehen Sie, was wir diesmal ausgedruckt bekommen Siehst du, wir hatten Zugriff auf den Wert dieses Textschlüssels , der dieser Titel war Das ermöglicht uns nun, den Titel auf etwas anderes zu ändern , z. B. durchschnittliche Bewertung pro Tag. Lassen Sie mich die Instanz beenden, erneut ausführen und neu laden. Und Sie sehen, dass sich der Titel von Tag zu Tag auf Durchschnittsbewertung geändert hat von Tag zu Tag auf Durchschnittsbewertung geändert Ich versuche, zu erreichen, dass Sie alles von diesem Diagramm aus ändern können, alles, was Sie wollen, alles, was Sie ändern müssen , von diesem Diagramm aus ändern können. Und unser erstes Interesse besteht natürlich darin, die Daten dieses Diagramms zu ändern, denn derzeit sehen Sie, dass das Diagramm diesen wichtigen Schlüssel hat. Und dieser Serienschlüssel hat einen Namen, Temperatur und die Daten. Dies sind die Daten, die in der Grafik dargestellt werden. Sie sehen also eine Null, 15, Zehn -50. Sie sehen also zum Beispiel, 15 ist eine Temperatur, Null ist ein Kilometer Und dann haben wir, wie gesagt, zehn -50. In einer Höhe von 10 Kilometern liegt die Temperatur also bei -50 Also das sind die Daten. Lassen Sie uns diese Daten in etwas anderes ändern. Um das zu tun, benötigen wir Zugriff auf H C but options dot series. Richtig, Serie. Und Serie ist eine Liste. Also musst du hier sehr vorsichtig sein. Sie müssen Python-Datenstrukturen verstehen, und dies ist eine hervorragende, wirklich hervorragende Übung, um Python-Datenstrukturen wie Listen und Wörterbücher wirklich zu verstehen und Ihre Fähigkeiten und Eine Reihe ist also ein Schlüssel und der Wert dieses Schlüssels ist eine Liste. Und diese Liste besteht aus einem Wörterbuch. Es hat also nur einen Artikel. Diese Liste und dieser Artikel sind das Wörterbuch. Dann hat dieses Wörterbuch zwei Schlüssel, einen Namensschlüssel und einen Datenschlüssel. Der Namensschlüssel hat als Wert Temperatur. Der Datenschlüssel hat als Wert diese Liste. Es ist eine Liste mit mehreren Werten als Listen als Elemente. Es ist eine Liste von Listen. Also die zweite Liste, die dritte Liste und so weiter. Und bis jetzt gibt uns das diese Liste, richtig. Und von dieser Liste wollen wir den ersten Punkt. Das wird also ein Element mit Index Null sein, richtig. Also, welches ist das Wörterbuch. Das heißt, bis jetzt haben wir ein Wörterbuch. aus dem Wörterbuch Wir wollen diese Daten aus dem Wörterbuch. Das ist jetzt also diese Liste. Wir haben Zugriff auf diese Liste und können sie ändern. Wir können dieser Liste einen neuen Wert, eine neue Liste hinzufügen. Lassen Sie mich zum Beispiel einige Dummy-Daten erstellen, drei, vier, sechs, 789 Wir haben also drei Punkte. Lassen Sie mich die App beenden und erneut ausführen. R laden, und das ist ein neues Diagramm. Also nochmal, die Daten waren drei, vier, sechs, sieben, acht, neun, drei, vier, also drei ist das X. Also das ist eigentlich ein umgekehrter Graph. Also drei ist Y, vier ist das X. Wenn Sie dieses Diagramm umkehren möchten, wenn Sie sich damit nicht wohl fühlen, können Sie hier hingehen und es auf Stürze umstellen. Und Sie könnten diese Daten auch direkt hier ändern, ohne sie hier im Wörterbuch ändern zu müssen. Aber später werden wir Datenrahmen einfügen, also Spalten aus Datenrahmen Und das ist ein geeigneter Weg, das zu tun. Also dieses hier, weil es uns ermöglicht, mit einem Wörterbuch zu arbeiten , anstatt mit einer Zeichenfolge zu arbeiten. Und die Zeichenfolge ist keine Datenstruktur, die dafür konzipiert ist, Daten darin zu speichern. Aber wie dem auch sei, für solche einfachen Dinge können Sie die Werte einfach direkt hier ändern. Also umgekehrt, ich setze es auf Folds und Stop und Run, Reload Und jetzt ist die Grafik anders. Sie sehen also, dass die Höhe hier unten ist. Die Temperatur ist jetzt auf der Y-Achse. Ordnung, also ich tippe hier manuell einige Daten ein, aber so sieht das echte Leben nicht aus. Im wirklichen Leben werden Sie also keine Daten in diesem Format haben. Normalerweise haben Sie sie in einem Datenrahmen in einer CSV-Datei, genau wie wir sie in unserer App haben. Wir haben also die Daten in den Bewertungen dieser CSV-Datei. Und so wird das Format etwas anders sein. Normalerweise haben wir so etwas wie ein X-Array für die X-Achse, wir sollten, sagen wir, drei, sechs und acht suchen , und dann haben wir Y gleich vier, sieben und neun. Also nicht so. Daher ist es unser Ziel, diese beiden Listen in diese Liste umzuwandeln. Wie machen wir das? Wir machen das mit dem ZIP-Objekt, das im Grunde eine solche Liste erzeugt . Also in den Formaten mit Listenpaaren. Das erwartet X und Y. Also zwei Listen Dies ist jedoch noch keine Liste. Dies ist ein ZIP-Objekt. Ich kann dir das in einer Python-Shell zeigen. Nehmen wir an, wir haben diese Liste und wir haben diese Liste. Und Zp XY wird immer noch ein ZIP-Objekt sein. Sie möchten dieses ZIP-Objekt mithilfe der Listenfunktion in eine Liste konvertieren mithilfe der Listenfunktion in eine Liste Also X und Y. Jetzt bekommen wir die Liste, die wir erwartet hatten Daher können wir diese Liste abrufen und dort verwenden. Wenn ich jetzt hier zum anderen Terminal gehe, stoppe ich die App und starte sie erneut. Laden Sie neu und wir erhalten immer noch das gleiche Diagramm mit diesen Daten. Was ist nun, wenn diese aus einem Datenrahmen stammen ? Das bringt uns zu unserer App mit unseren Bewertungsdaten. Lassen Sie mich also zu dem Code übergehen , an dem wir auf Jupiter gearbeitet haben. Welches ist das hier drin. Also laden wir den Datenrahmen mit diesem Code. Ich werde das kopieren und nach dem Import von Jus Pi hier oben einfügen , oder? Wir haben jetzt diesen Datenrahmen. Und was mussten wir noch tun , um die Durchschnittsbewertung zu berechnen? Ja, wir hatten diesen durchschnittlichen Datenrahmen für diesen Tag , der eine aggregierte Version des Datenrahmens war Also werde ich diese beiden Zeilen kopieren und sie hier einfügen Tagesdurchschnitt ist also der Datenrahmen, an dem wir interessiert sind, und er hat einen Index, der das Datum sein wird, und eine Bewertungsspalte, die die durchschnittlichen Bewertungen für jeden Tag enthält . Sie können also nur Ihr Gedächtnis auffrischen, es sieht so aus. Richtig. Jetzt hätten wir statt X den D-Durchschnitt, den Punktindex des Datenrahmens. Das wird also als X-Achse verwendet. Und dann hätten wir für Y eine Tagesdurchschnittsbewertung. Also diese Kolumne. Diese werden also nach PLZ und PLZ als zwei Listen behandelt . Dann paaren wir sie zusammen, sodass ein Paar aus Datum und Bewertung entsteht. So wird es zum Beispiel im Hintergrund wie eine Liste von Listen aussehen, wie ich Ihnen erklärt habe. Das erste Datum wäre also 2020 133, und die Bewertung 4,51, sagen wir, beantworten Sie eins, das nächste Datum und Sie haben die Idee Also lass uns das ausprobieren. Es wird nicht funktionieren und ich sage dir warum. Also, wie ich dir gesagt habe, wir erhalten ein leeres Diagramm und keine Fehler. Der Grund, warum das nicht funktioniert, ist, dass hohe Charts das Datum berücksichtigen. Solche Daten werden also als Kategorien, Datentypen und nicht als Zahlen betrachtet . Und in diesem Fall müssen Sie diese Daten auf andere Weise bereitstellen. Das geschieht über Optionen, X-Achse, Punktkategorien. Also was ist das? Nun, die X-Achse ist tatsächlich hier. Und wir machen Punktkategorien auf der X-Achse. Nun, Sie sehen hier keinen Schlüssel, aber wir erstellen diesen Schlüssel. Das entspricht der Auflistung des durchschnittlichen Punktindexes. Also konvertieren wir das in eine Liste und stellen diese Liste diesen Kategorien zur Verfügung. Dies ist eine Liste von Daten. Und dann müssen wir für Delta nur noch die Bewertungsspalte in eine Liste umwandeln . Lassen Sie mich das Drehbuch beenden und sehen, was wir dieses Mal bekommen werden. Refresh und bumm, wir bekommen das Diagramm, das wir erwartet haben. Das Diagramm ist interaktiv, aber Sie sehen, dass wir hier einige Beschriftungen und einige Titel für die Achse haben , die aus dem alten Beispiel stammen, also Höhe und Temperatur, aber wir können sie ändern. Ich würde also vorschlagen, dass Sie sie direkt im JavaScript-Code ändern können . Sie können also den Text des Titels von hier aus ändern. Von dort aus können Sie den Untertitel ändern. Ich glaube also, dass das im Code einfach zu machen ist. Nur um Ihnen eine kurze Zusammenfassung zu geben : Wir haben den Datenrahmen, den wir benötigen, hierher geladen. Der Tagesdurchschnitt ist also der Datenrahmen, der unsere Daten enthält. Dann haben wir hier den JavaScript-Code für hohe Charts. Dann haben wir die Funktion , die die Webseite rendert. Wir haben die Webseitenkomponente. Wir haben diese beiden Komponenten, normale Komponenten, Text, QD Und dann haben wir die Komponente High Charts, die jetzt dieses Diagramm D JSON als Wörterbuch enthält Wir können also über Optionen auf dieses Wörterbuch zugreifen, da es in Optionen gespeichert ist. HC-Optionen sind jetzt also das Wörterbuch, und deshalb können wir dann auf Eigenschaften aus diesem Wörterbuch zugreifen Eigenschaften aus diesem Wörterbuch und sie nach Belieben ändern. Und die wichtigste Verwendung davon ist das Einstellen der Daten. Sie haben also gesehen, dass Sie für Daten, die Kategorien und keine Zahlen enthalten, diese X-Achse verwenden und die Eigenschaft dieser Kategorie auf eine Liste festlegen können , bei der es sich um eine Liste von Daten handelt. Und dann entsprechen Daten einer einfachen Liste von Bewertungen. Das ist die App. Danke fürs Folgen. Und das war ein langes Video, aber die nächsten Apps werden viel weniger Zeit in Anspruch nehmen , weil Sie den Prozess jetzt kennen und mit etwas Übung in der Lage sein werden, jedes beliebige Diagramm zu erstellen. Danke. 146. 145. Grafikbeschriftungen in der Web-App ändern: Hallo, willkommen zurück. Im vorherigen Video haben wir dieses Zeitreihendiagramm mit durchschnittlichen Bewertungen erstellt , die auf täglicher Basis angezeigt werden. Jetzt sehen Sie, dass wir hier einige unerwünschte Beschriftungen haben, wie zum Beispiel Temperatur, wir haben Kilometer als Ende der Beschriftungen der X-Achse. Also werde ich das schnell in meinem Code ändern. Nun, Sie können das entweder über Python tun, indem Sie diese Wörterbuch-Punktnotation verwenden, oder für diese Dinge würde ich vorschlagen, dass Sie einfach den JavaScript-Code direkt durchgehen . Wir sprechen zum Beispiel von der X-Achse, und hier haben wir die Höhe. Die X-Achse sollte also eigentlich das Datum und das Datum sein. Dann haben wir diese Beschriftungen, das Format der X-Achsenbeschriftungen. Es hat also dieses Kilometerende, das Sie hier im Kilometer sehen. Wenn du etwas anderes willst, schreib es einfach hier auf. Ansonsten lösche es einfach und lasse den Wert so wie er ist. Löschen Sie diese Art von Javascript-Platzhaltern nicht. Sie können auch die Bereichsbeschreibung ändern, auch wenn diese nirgends angezeigt Also werde ich mit der Temperatur weitermachen. Deshalb Achse, wo wir die durchschnittliche Bewertung haben. Wo sonst haben wir dieses Celsius-Grad-Symbol hier. Ich werde das löschen und wir haben hier diesen Temperaturnamen , der eigentlich der Name ist, den wir hier im Popup-Fenster bekommen. Also Temperatur, die dem entspricht. Also können Sie hier noch einmal sagen, durchschnittliche Bewertung, und dann C kontrollieren, erneut ausführen. Und sehen wir uns die Änderungen an. Also neu laden. Ja, durchschnittliche Bewertung hier, Daten hier, durchschnittliche Bewertung dort Wir sehen diesen Kilometer immer noch im Pop-up. Sie sehen 506 Kilometer. Das steht hier im Tooltip. Also willst du das löschen und das auch löschen. Der Tooltip hat dieses Header-Format, das ist ein Serienname, also die Temperatur, und vorher war es Temperatur, jetzt ist es Durchschnittswert. Das ist also der Punktname der Serie. Und wir haben auch Punkt X. Es wird also der X-Wert angezeigt. In unserem Fall ist das die Zahl, also die Indexspalte, die eine Zahl von Null bis zu einer beliebigen Zahl ist. Also die Nummer der Zeile, und das ist die durchschnittliche Bewertung, die Sie dort sehen. Also laufen wir wieder und dieses Mal sollte alles in Ordnung sein. Und damit ist dieses Video beendet. Ich werde im nächsten mit dir sprechen. 147. 146. Hinzufügen eines Zeitreihendiagramms zur Web-App: Hallo, willkommen zurück. In den vorherigen Videos haben wir dieses tägliche Diagramm der durchschnittlichen Bewertungen erstellt. In diesem Video werden wir dasselbe Diagramm erstellen , jedoch auf wöchentlicher Basis. Nun, das wird ein kurzes Video sein , weil ich den Code nicht erklären werde , weil ich ihn bereits gemacht habe, sodass Sie leicht verstehen können, was ich mache. Lassen Sie mich also zum Visual Studio-Code zurückkehren und eine neue Datei erstellen. Ich nenne das F für Durchschnitt Terrett für Bewertung und Woche Das ist also Nummer zwei. Und was ich normalerweise mache, wenn ich diese Graphen erstelle , ist , dass ich zu dieser Spy-Vorlage gehe und sie hier einfüge , und dann hier drinnen , dann erstelle ich eine neue High-Charts-Komponente die zu WP gehört, und als Option hat sie dieses Diagramm de Variable, das hier eine Variable sein wird. Es wird eine mehrzeilige Zeichenfolge sein, die in Anführungszeichen eingeschlossen ist. Also hier werde ich jetzt ein Beispiel aus High Charts finden. Also werde ich für dieses Wochendiagramm wieder Spline verwenden , weil ich denke, dass dies der geeignetste Diagrammtyp für diese Art von Analyse für diese Art von Visualisierungen ist der geeignetste Diagrammtyp für diese Art von Analyse für diese Art von Visualisierungen Also werde ich zu JS Fiddle rüberklicken und das wird mir den JavaScript-Code zeigen , der hier ist Ich kann das alles kopieren und zu Python gehen und es dort einfügen und dann diesen Teil natürlich löschen. Es beginnt mit der ersten geschweiften Klammer vor dem Diagramm und endet dann mit einer geschweiften Klammer, also lösche ich die halbe Spalte und die Klammer. Options zeigt auf diese Dokumentzeichenfolge. Bevor ich meine eigenen Daten anwende, probiere ich zuerst diesen Code aus, um zu sehen, ob er funktioniert, aber zuerst muss ich den aktuellen Prozess mit Control C beenden und Go to buy reload ausführen Ja, es funktioniert. Als Nächstes möchte ich Pandas importieren. Da ich die Analyse bereits auf Jupiter gemacht habe, kann ich diese Zeilen einfach kopieren und einfügen Füge sie dort ein. Wir brauchen Mt Lips nicht. Ich kann das löschen. Das ist unser Datenrahmen. Jetzt müssen wir einige Analysen dieser Daten durchführen. Also geh zurück zu Jupiter und finde die wöchentliche Analyse, also die da drin. Der Wochendurchschnitt ist der Datenwert, den wir benötigen. Fügen Sie sie also unter den ursprünglichen Datenrahmen und wir sollten jetzt den Durchschnitt dieser Woche haben. Jetzt wird der Wochendurchschnitt die Wochen als Indexspalte haben. Also hier und die Woche, in der das Wochendurchschnitt sein wird , Punktindex. Und im Datenrahmen für den Wochendurchschnitt wird es auch eine Bewertungsspalte geben . Lassen Sie uns also diese beiden Spalten verwenden, um die Daten grafisch darzustellen. Wir sollten also für kategoriale Daten wie Datum auf Hc-Punktoptionen, Punkt X-Achsen-Kategorien zugreifen Hc-Punktoptionen , Punkt X-Achsen-Kategorien für kategoriale Daten wie Datum auf Hc-Punktoptionen, Punkt X-Achsen-Kategorien Das wäre also ein schwacher durchschnittlicher Punktindex, aber in Form einer Liste Also müssen wir es in eine Liste umwandeln , nur um es zu erkennen. Und dann HC Options, das ist ernst. Diese Daten. Das heißt, Serie Null gibt uns dieses erste Objekt, das ein Wörterbuch ist. Wir haben also das Wörterbuch hier, und dann greifen wir auf den Datenschlüssel aus diesem Wörterbuch zu. Das gibt uns also tatsächlich den Wert dieses Schlüssels , der diese Liste ist. Und wir ersetzen diese Liste durch eine andere Liste, was eine schwache Durchschnittsbewertung darstellt. Das sollte reichen. Also stoppe die Steuerung C, starte erneut, lade neu Das ist unsere Grafik. Es sieht komisch aus, weil wir es umkehren müssen. Eigentlich ist es ursprünglich umgekehrt. Wir sollten also sagen, dass der Wert von invertiertem Control C fällt und erneut ausgeführt wird. Erneut laden Und ja, das ist es. Ich werde deine Zeit nicht verschwenden und all diese Labels ändern , wie ich es im vorherigen Video getan habe. Also habe ich das schon gemacht. reicht das für dieses Video. Danke fürs Folgen. Ich erzähle es dir später. 148. 147. Mehrere Zeitreihen-Plots: Hi, willkommen zurück. In diesem Video werden wir ein Diagramm mit einer durchschnittlichen Bewertung pro Monat und Kurs erstellen . Wie Sie vielleicht wissen, haben wir das Diagramm erstellt, das Sie bereits mit Jupiter und Matplot Lib gekauft haben . Es sah also so aus Die Idee ist, dass wir den Monat auf der horizontalen Achse und Durchschnittswerte auf der vertikalen Achse haben der horizontalen Achse und Durchschnittswerte werden, und wir werden mehrere Grafiken in diesem Zeichnungsbereich haben , von denen jedes einen Kurs in unserem Datensatz darstellt Und wie Sie vielleicht schon wissen, erstellen ist die Website higchart.com eine gute Möglichkeit, Grafiken mit B- und Highcharts zu Sie gehen also unter Diagramme und Reihentypen und wir finden eine Grafik, die unsere Daten gut repräsentiert Also habe ich mir diese Beispiele angesehen und festgestellt , dass ich ein Area-Spline-Diagramm verwenden möchte , das so aussieht Sie sehen, dass es mehrere Linien hat, also in diesem Fall zwei, und es hat diese X-Achse mit kategorialen Daten Es sind also keine Zahlen, es ist Montag, Dienstag, Mittwoch und so weiter Und wir haben diese Zahl Y-Achse, also Fruchteinheiten. Und das entspricht dem durchschnittlichen Fruchtkonsum John und Jane während einer Woche . In unserem Fall werden wir dieses Diagramm ändern und sechs oder sieben Linien haben. Ich bin mir nicht sicher, wie viele Kurse es gibt. Also eine Zeile für jeden Kurs, die die durchschnittlichen Bewertungen über einen längeren Zeitraum im Laufe der Monate zeigt . Bevor wir die Codes kopieren, bereiten wir zunächst die Umgebung vor. Erstellen Sie das Skript und erstellen Sie das nach der App und so weiter. Ich nenne diese vier Durchschnittswerte. Das wäre, sagen wir, ein Kursmonat. Also durchschnittliche Bewertung pro Kurs pro Monat, PY. Sie sehen, das unterscheidet sich von der durchschnittlichen Bewertung pro Monat. Dies ist die durchschnittliche Bewertung pro Kurs pro Monat. Dann werde ich diese Vorlage von J Pi kopieren. Kopiere dort. HC wird die High-Charts-Komponente sein, die zu WP gehört, und Options wird normalerweise eine Chartdefinition sein, die hier irgendwo eine Variable sein muss. Entspricht einer Zeichenfolge, einer mehrzeiligen Zeichenfolge. Lassen Sie uns also diesen JavaScript-Code kopieren. Also diesen hier drin, ich werde das alles kopieren dort einfügen, und dann, kurz vor dem Diagramm, und dann, kurz vor dem Diagramm, lassen wir die geschweifte Klammer vor dem Diagramm hier Wir belassen das und löschen die halbe Spalte und die Klammer Und jetzt sind wir bereit, die Daten durch unsere Daten zu ersetzen. Aber ich schlage vor, dass Sie zuerst dieses Beispiel ausprobieren, um zu sehen ob es gerade funktioniert ohne die Daten mit Ihren eigenen Daten zu ändern. Was ich jetzt tun möchte, ist zu versuchen, dies auszuführen und dann die URL aufzurufen, und Sie werden einen Fehler sehen. Also Jason Decode-Fehler, hohe Charts mit unbekanntem Identifier Das passiert wegen dieser Zeile. Python kann diesen Ausdruck hier nicht erkennen , da es sich um JavaScript handelt. Sie möchten das also löschen und nur diese Zeichenfolge hier belassen, die Farbe der Hintergrundfarbe. Und jetzt, wenn ich das Skript stoppe und es erneut starte und die Seite neu lade, sollten wir das Beispiel so sehen, wie wir es von der Website von High Chart bekommen haben Nun, diese beiden Graphen sind Flächen-Splines. Aber wenn Sie sie in Spline ändern möchten, sollten Sie zu Ihrem Code übergehen und diesen Bereichs-Spline in Spline ändern , das Skript beenden und erneut ausführen. Und neu laden. Und das ist die Ausgabe. Jetzt sind wir bereit, unsere eigenen Daten in die Daten einzufügen. Dafür wollen wir also zum Jupiter gehen, wo wir unsere Analyse fertig haben Kopieren Sie den Code, fügen Sie ihn dort ein, und wir müssen auch die Aggregationen durchführen , die für das Extrahieren des Monats erforderlich sind, die Kurse pro Monat Das ist dieser Code hier, und das gibt uns diesen Datenrahmen Lassen Sie uns nun unseren Speicher auffrischen, wie der Datenrahmen aussah Sie können sie also entweder hier ausdrucken und das Skript ausführen, die Seite neu laden und sehen, was Sie im Terminal ausgedruckt haben, oder Sie können sich die Ausgabe von Jupiter ansehen Also, was auch immer Sie bevorzugen, ich führe das Skript einfach hier Und so bekommen wir den Datenrahmen ausgedruckt, noch bevor wir die Web-App laden , weil er ausgedruckt wird, weil sich die Web-App innerhalb der Funktion befindet, also ist er nur im globalen Namespace, im globalen Gültigkeitsbereich Wenn das Skript ausgeführt wird, werden diese also ausgeführt. Wenn das hier in der Funktion wäre, würde es nur ausgeführt werden, wenn wir die Seite laden. Und das ist der Datenrahmen. Es hat also diesen Monatsindex und verschiedene Spalten. Das ist also die erste Spalte. Dann haben wir mehr Spalten, die wir hier nicht sehen. Und dann ist die letzte Spalte diese und die Werte jeder Spalte. Also der Name einer Spalte, die Werte dieser Spalte, das sind die durchschnittlichen Bewertungen. Und wir haben einen Monat für jede Zeile. Das ist also Juli 2019, August 2019, Januar 2021. Indexieren Sie also Spalten. Lassen Sie uns jetzt sehen, wie wir diese Daten in diese Daten einfügen Wir sehen also, dass XXIs diese Kategorien mit diesen Wochentagen hat diese Kategorien mit diesen Wochentagen Also können wir jetzt dasselbe tun. Hier unten sagen wir HC Dot Options Dot XXI. XXs ist also der Schlüssel zum Hauptwörterbuch. Es ist also direkt in der ersten Ebene verfügbar. Also Diagrammtitel, Legendenachse. Und dann haben wir die zweite Ebene. Die Kategorie ist also Teil der Achse. Daher können wir wie folgt darauf zugreifen sodass Kategorien eine Liste sind, wie Sie hier sehen können. Daher müssen wir es durch eine Liste ersetzen , in der die durchschnittlichen CRS pro Monat Das ist also unser Datenrahmen-Punktindex. Also die Spalte da drin, 20185, 20186 und so Richtig. Das war der einfache Teil. Jetzt kommen die Daten. Was Sie also tun müssen, ist die Struktur der Daten zu verstehen. Das ist der sehr wichtige erste Schritt. Die Serie ist also ein Schlüssel der ersten Ebene. Daher können wir sagen, Hc-Optionen, das ist Serie, richtig. Das wird uns also diese Liste geben. Dann hat diese Liste, wie viele Artikel hat sie? Ich sehe ein Wörterbuch von dort bis hier. Das ist ein Wörterbuch mit dem Namen John , einem Paar aus Schlüssel und Wert. Der Name ist also der Schlüssel, John ist der Wert. Dann haben wir diese anderen Schlüsseldaten und eine Liste, und das Wörterbuch endet dort. Und dann haben wir das andere Wörterbuch. Es ist also Jane How und das sind die Daten für Jane. Die Liste besteht aus einem Wörterbuch, und jedes Wörterbuch stellt eine Linie im Diagramm dar. Also das ist für Jane und das ist für John. Also, was wir tun müssen, ist, dass wir sie hier haben müssen. Das wäre also der Name eines Kurses. Nehmen wir an, der erste Kurs würde aus 100 Python-Übungen bestehen und so weiter, der gesamte Titel. Und dann würden die Daten eine Liste mit durchschnittlichen Bewertungen für diesen bestimmten Kurs enthalten . Also dieser, dieser, dieser und so weiter. Und dann müssten wir diesen Vorgang für jeden der sechs oder sieben Kurse wiederholen der sechs oder sieben Kurse , die wir hier haben. Wie machen wir das? Nun, das könntest du manuell machen. Vielleicht könntest du so etwas aus der Serie einbauen, du würdest sagen, die erste Handlung, damit du das erste Wörterbuch bekommst Dieser Ausdruck ist das erste Wörterbuch. Dann könnten wir auf den Namen zugreifen und ihn durch die CRS-Punktspalten im Monatsdurchschnitt ersetzen CRS-Punktspalten im Monatsdurchschnitt Das wäre also die erste Spalte und so weiter. Das wäre okay, aber es ist kein automatischer Prozess. Wenn Sie also manuell arbeiten, ist das ein Zeichen dafür, dass Sie nicht richtig programmieren . Was wir stattdessen tun müssen, ist, dass wir die gesamte Liste dynamisch erstellen müssen. Und das ist jetzt ein sehr, sehr wichtiger Punkt bei der Verwendung von hohen Diagrammen, aber auch beim Wissen, wie man Datenstrukturen in Python manipuliert. Das ist also eine hervorragende Praxis. Ich bin sehr froh, dass das rausgekommen ist. Das ist eine tolle Übung für dich. Lassen Sie mich Ihnen zeigen, wie Sie diese Liste aus diesem Datenrahmen erstellen können . Bevor wir das tun, bevor wir die Liste zuweisen, wollen wir die Liste erstellen. Lassen Sie uns diesen HC-Unterstrich Delta nennen. Und das entspricht. Also müssen wir eine Liste erstellen. Das ist also eine Liste. Deshalb schreiben wir eckige Klammern. Die Liste besteht aus Wörterbüchern. Deshalb schreiben wir geschweifte Klammern. Und dann haben wir in jedem Wörterbuch einen Namensschlüssel Wir haben immer diesen Namensschlüssel und eine Variable für diesen Namensschlüssel. Warum sage ich variabel? Nun, weil Name immer Name ist, also ist es eine Konstante. Deshalb kodiere ich so hart, dass wir immer einen Namen dort haben sollten. Aber der Wert des Namens ist eine Variable, also ändert er sich jedes Mal. Und was dann noch? Wir haben dieses Paar, okay. Im Wörterbuch, in diesem Wörterbuch. Dieses Wörterbuch hat also ein anderes Paar. Also Daten und die Liste. Also lass uns das schreiben. Como Data, die Zeichenfolge, eine Spalte und wir haben eine Liste. Diese Liste ist im Grunde repräsentativ für jedes der Grundstücke, jedes der sieben Grundstücke, die wir für jeden Kurs haben werden. Das bedeutet, dass diese Liste aus diesen Bewertungen bestehen wird. Zum Beispiel werden wir die erste Liste als erste Spalte haben , zum Beispiel für Python-Übungen eine für diesen Kurs, diese Spalte als Liste da drin und dann die andere Spalte. Nach diesem Kurs der nächste und der nächste und der nächste. Also eine Spalte für jeden Kurs und V eine wird durch den Titel der Spalte ersetzt. Bevor ich also den Ausdruck in diese Liste schreibe, möchte ich zuerst das Verständnis der oberen Liste beenden das Verständnis der oberen Liste weil wir hier zwei Listenverständnisse haben Wir haben die erste Ebene, also nennen wir sie die obere Hier erstellen wir Wörterbücher. Es ist also eine Liste von Wörterbüchern das heißt, wir sollten hier für V eine durchschnittliche CRS-Tat-Spalte pro Monat angeben Das ist also eine Liste mit sieben Zeichenketten, eine Zeichenfolge für jeden Es wird also eine Liste mit 100 Python-Übungen sein , eine, um deine Fähigkeiten zu bewerten und zu verbessern, dann der andere Titel des anderen Kurses und so weiter, es ist eine Liste dieser Titel. Wir fügen hier einen Titel ein, den ersten Titel dieser Liste in der ersten Iteration und dann den nächsten Titel der durchschnittlichen CRS-Spaltenliste für diesen Monat in der durchschnittlichen CRS-Spaltenliste für diesen Monat in der Also erstens werden wir sieben oder sechs Iterationen haben, unabhängig von der Anzahl der Kurse, die Aber dann, hier drinnen, haben wir eine verschachtelte Iteration, ein Verständnis verschachtelter Listen, tut mir leid, und das ist das Und das ist wieder so, lassen Sie uns eine weitere Variable schreiben, Beispiel V zwei für V zwei im durchschnittlichen CRS Hm. Also, was wird das sein? Nun, es muss diese Kolumne sein, oder? Also, welche ist diese Kolumne? Wie lautet der Name dieser Kolumne? Nun, für diesen Kurs ist das der Name der Spalte. Also hier müssen wir den Namen der Spalte aufschreiben. Siehst du, das ist eine Pandas-Syntax. Sie schreiben also den Namen der Spalte, aber wir haben unterschiedliche Spaltennamen Also was wir hier eingeben ist V eins. Weil V eins der aktuelle Titel im Listenverständnis der oberen Ebene sein wird der aktuelle Titel im Listenverständnis der oberen Ebene Im Grunde wird Python also, während es den ersten Titel iteriert, in der ersten Iteration der oberen Ebene aufhören, und es wird durch diese bestimmte Spalte iterieren, indem es diese Bewertungen für die ersten 100 Python-Übungen durchläuft 100 Python-Übungen durchläuft 100 Python-Übungen Und es wird diese Liste erstellen, sobald es mit all diesen Zahlen fertig ist, es erstellt diese Liste geht dann zur zweiten Iteration in der ersten Iteration In der zweiten Iteration der anderen Spalten, was der nächste Kurs sein wird Und so weiter, ich hoffe, es ist klar. Richtig, also was wir noch tun müssen , ist, diese neue Liste zuzuweisen, also sie in unsere Daten einzufügen, weil wir sie erstellt haben, aber wir haben sie nicht mit HC verbunden Es ist also nur eine Variable, die in unserem Skript schwebt, keine Verbindungen zu den anderen Teilen Also müssen wir sagen, dass diese, Liste diese Liste ist. Also müssen wir es der Serie zuordnen, oder? Ct-Optionen stehen auf Serie, was HC-Daten entspricht. Richtig. Jetzt werde ich das Skript beenden und die App ausführen und besuchen. Und das ist die Ausgabe. Hier ist die X-Achse mit dem Monat, und das ist unsere Bewertung von 2,5 bis 5,5. Das Maximum ist irgendwo hier drin. Du kannst also mit der Maus drüber fahren und dir die Bewertungen für jeden Kurs ansehen, richtig? Die Legende hier schwebt. Wenn Sie das ändern möchten, können Sie zu Ihrem Code zurückkehren und die Legenden hier suchen. Sie haben hier also einige Parameter, mit denen Sie experimentieren können. Aber wenn ich Floating auf Falls setze, sollte das die Ansicht des Graphen ändern. Also ich denke, das ist klarer. Nun, ich würde nicht zustimmen, dass diese Art von Diagramm die beste Darstellung für diese Art von Daten ist die beste Darstellung für diese Art , weil wir hier mehrere Linien haben, aber so nahe beieinander liegen. Es gibt also keine großen Unterschiede zwischen einem Kurs und dem anderen. Ich denke, diese Splines wären repräsentativer , wenn wir anstelle von Durchschnittswerten die Anzahl der die verbleibenden Bewertungen für jeden Kurs hätten, was bedeutet, dass wir zum Bearbeitungsbereich gehen und hier sagen müssen, zählen statt Mittelwert Und lassen Sie mich das versuchen. Hmm. Also ja, es sieht besser aus, glaube ich Wir haben mehr Abwechslung, mehr Unterschied zwischen dieser Handlung und den anderen. Obwohl die anderen immer noch nicht so gut sichtbar sind, da dieses Diagramm hier einen Großteil des Bereichs der Y-Achse einnimmt . Deshalb werde ich im nächsten Video als Nächstes eine andere Art von Grafik verwenden , um dieselben Daten darzustellen . Durchschnittliche Bewertungen pro Kurs, pro Monat, jedoch unter Verwendung eines Stream-Diagramms. Ich werde im nächsten Video mit dir sprechen. 149. 148. Mehrere Zeitreihen-Streamgraphen erstellen: Hallo, willkommen zurück. In diesem Video werden wir dieses Stream-Diagramm erstellen. Sie finden es also auf der Website hichart.com unter Diagramm - und Serientypen Gehen Sie also runter zum Stream-Diagramm. In diesem Beispiel haben wir auf der X-Achse dieses Diagramms die Jahre, haben wir auf der X-Achse dieses Diagramms die Jahre, es handelt sich also um kategoriale Zeitdaten auf der X-Achse Auf der Y-Achse wird die Anzahl der Medaillen angezeigt, die von Sportlern gewonnen wurden, und jede Farbe steht für ein Land Jedes Land hatte also eine bestimmte Anzahl von Medaillen, die seine Athleten in einem bestimmten Jahr gewonnen haben. Jetzt haben wir dieselbe Grafik, Sie verstehen die Idee. Wir haben die Monate entlang der X-Achse und jede Farbe, die wir repräsentieren, einen Kurs. Dann können wir entweder die durchschnittlichen Bewertungen oder die Anzahl der Bewertungen auf der Y-Achse haben . Bevor wir den JavaScript-Code dieses Diagramms kopieren, bereiten wir unsere Umgebung vor. Ich werde das duplizieren, indem ich es kopiere und einfach Strg V drücke, um es einzufügen. Ich dupliziere es und benenne es in etwas anderes um. Nennen wir es Stream. Richtig. Gehen Sie dann zu der Datei , die wir gerade erstellt haben. Und alles, was wir von hier aus ändern müssen ist diese Diagrammdefinition, löschen und hier alles auswählen, Control A, Control C, kopieren, hier hin, Ctrl V, um es einzufügen, und vergessen Sie nicht, das nicht benötigte Zeichen zu entfernen, also die Semikolonne die Klammer, und hier oben brauchen wir Diagramme und wir brauchen die geschweifte Klammer hier oben brauchen wir Diagramme und wir brauchen Diagrammen Also alles vor dieser geschweiften Klammer wird gelöscht, einfach so. Schauen wir uns jetzt diese Daten an. Ja, wie die Daten aufgebaut sind. Eine Serie ist also eine Liste. Es ist eine große Liste mit mehreren Wörterbüchern. Das ist zum Beispiel das erste Wörterbuch. Es beginnt hier. Es endet hier. Und es besteht aus diesem Schlüssel- und Wertepaar und dem Namen und dem Namen des Landes, das durch den Namen eines Kurses ersetzt wird. Und wir haben Daten, das ist diese Liste. Und so werden diese Wörterbücher dann wieder mit unterschiedlichen Daten wiederholt Das heißt, wir müssen unseren Code hier unten nicht ändern. Also hatten wir diesen Code. Wir haben ihn bereits im vorherigen Video gebaut. Das sollte also in Ordnung sein. Lass uns versuchen, es auszuführen. Wir bekommen einen Fehler und wir werden ihn beheben. Stoppen Sie also den aktuellen Prozess falls ein Prozess läuft. Stellen Sie sicher, dass Sie die neue Datei ausführen, die wir erstellt haben. Drücken Sie also auf Ausführen. Also das ist der Fehler. Und wenn Sie diesen Jason-Dekodierungsfehler erhalten, bedeutet das, dass es um den JavaScript-Code geht, den wir haben Wir wollen also zu den Codes gehen und Sie sehen, dass es um Farben und unbekannte Identifikatoren geht , weil wir hier diese Farben haben, und wir müssen sie löschen Und Sie können die gesamten Farben löschen. Also von dort nach hier, einschließlich des Kommas, weil Python diese Farben nicht verwenden kann Also lösche das, und das wird die Ausgabe nicht ändern Und lass es mich dir zeigen. Wir haben noch einen, Peto. Ja, es ist also hier. Wir haben also diese Art von JavaScript-Syntax, die Python nicht erkennen kann. Sie könnten also, da wir das sowieso ersetzen, leider alle Werte der Kategorienliste löschen und die Kategorien leer lassen. Also genau wie diese Kategorien. Kategorien werden also, wie Sie wissen, hier unten durch diesen Ausdruck ersetzt . Lass mich nochmal anhalten und rennen. Diesmal scheint es zu funktionieren. Dies ist also die Anzahl der verbleibenden Bewertungen für jeden Kurs, sodass Sie den Unterschied zwischen diesem Kurs, dem Python-Megakurs und den anderen Kursen sehen können. Und das ist hier etwas Interessantes. Sie sehen also, dieser neue Kurs wurde vor nicht allzu langer Zeit, irgendwann am 20. und 21. Januar, gestartet Der komplette Python-Kurs hat also zehn professionelle OP-Apps erstellt, und High Charts ist sehr intelligent, um es in diesem Stream-Diagramm anzupassen. Jetzt möchten Sie diese Beschriftungen vielleicht ändern , damit Sie sie leicht finden können. Sie können sie hier finden , wo sie sich befinden, damit ich eine Suche in Deutschland durchführen kann Das ist dieser Text hier. Es ist also Teil der Anmerkungen. Sie sehen, man könnte zum Beispiel sagen, dass Kurs gestartet wurde oder Python populär wurde. Richtig. Wenn ich es stoppe und wieder renne. Wir sollten sehen, dass diese Labels aktualisiert werden. Sie können ihren Standort auch aktualisieren. Sie sehen also, dass die erste Anmerkung bei X 5.5, y 30 steht. Also X 5.5. Also Null hier, eins, zwei, drei, vier, fünf, sechs, also sind es 5-6. 5,5 30 entlang der Y-Achse. 30 sollte also irgendwo hier drin sein. Also hast du die Idee. Damit ist dieses Video und ich werde in den nächsten Videos mit Ihnen sprechen. 150. 149. Ein Kreisdiagramm zur Web-App hinzufügen +: Hallo. In diesem Video werden wir ein Kreisdiagramm erstellen, genau wie das, das Sie sich gerade ansehen. Sie können es also auf pchart.com finden Gehen Sie zu Diagramm- und Serientypen und dann zu Dieser hier zeigt den Prozentsatz der Benutzer für die wichtigsten Zum Beispiel hat Chrome die Mehrheit. Sie sehen diese großen Teile hier und jedes Segment ist mit dem Prozentsatz verknüpft. In unserem Fall werden wir diese Analyse früher durchgeführt haben , also haben wir diese Daten. Für jeden Kurs haben wir noch eine Reihe von Bewertungen für diesen Kurs übrig. Deshalb werden wir am Ende so etwas haben, aber interaktiv, wie Sie hier sehen können. Gehen wir und bereiten unsere Umgebung vor. Also werde ich natürlich eine neue Dateibewertung erstellen. Es ist ein Pi. Und wie üblich verwende ich diese Vorlage, diese Pi-Vorlage und füge dann eine Highchart-Komponente hinzu , die zu WP gehörte und rendere diesen JavaScript-Code , den wir hier einfügen müssen. Also hier drin ist der Code für dieses Diagramm. Also der da drin. Steuerung A, kopiere es und füge es dort ein, und vergiss nicht, die halbe Spalte und die Klammer zu löschen und hier oben alles zu löschen, was vor dieser geschweiften Klammer steht Ich möchte den Code ausprobieren, bevor ich Änderungen vornehme. Aber ich habe diesen Fehler hier. Es gibt vier Codes. Ich muss einen entfernen und dann ausführen, damit wir das Kreisdiagramm korrekt visualisieren Als Nächstes möchte ich den Code hier oben einfügen. Außerdem wollen wir diese Aggregation des Datenrahmens haben , bei der wir im Grunde zählen, wie viele Bewertungen es für jeden Kurs gibt Also Bewertung des Kursnamens. Zähle das. Stimmt. Dann müssen wir uns als Nächstes die Struktur der Daten ansehen. Wie Sie sehen können, ist dies eine große Liste mit Wörterbüchern. Also hier ist das erste Wörterbuch, aber seien Sie vorsichtig hier. Soweit ich sehe, haben wir hier ein Wörterbuch, das diesen Schlüssel und Wert, diesen Schlüssel und Wert und dann diesen Schlüssel und diesen Wert hat diesen Schlüssel und Wert und , was eine Liste ist. Es endet also hier. Deshalb müssen wir dieses Mal auf HC Dot Options Dot Serious Dot-Daten zugreifen. Im Gegensatz zu den anderen Zeiten , als wir HC-Options-Punktserien verwendet haben, weil die Daten direkt hinter der Serie standen. Serie war die Liste. Aber dieses Mal hat Series einen Datenschlüssel, und dieser Datenschlüssel enthält die eigentlichen Daten, die aus Wörterbüchern bestehen Also das erste Wörterbuch mit Name und Y, das zweite Wörterbuch mit Namen und warum nochmal Das erste Wörterbuch hat auch diese anderen Eigenschaften, wie z. B. durchgeschnitten und ausgewählt, was darauf hindeutet, dass diesem Chrom um Slice handelt Siehst du, es ist durch die anderen Teile des Kuchens getrennt. Das ist also für Chrome. Die anderen haben diese Eigenschaften nicht , was in Ordnung ist. Also werde ich es einfach so lassen. Aber jeder von ihnen hat einen Namen und ein Y. Deshalb wird das etwas bedeuten, und dieses Etwas müssen wir jetzt konstruieren HC-Daten werden also sein , dass das eine Liste ist. Es ist eine Liste von Wörterbüchern, richtig. Eine Liste von Wörterbüchern , deren Namen „ Lass uns einen Namen für eine Variable V finden“ entspricht Lass uns einen Namen für eine Variable V finden Also Name und Y, die Bezeichnung des anderen Werts ist Y. Nehmen wir die Variable V zwei Da diese also immer Opera hier ändern, QQ hier, also geh dort in den Explorer, das heißt, wir brauchen eine Variable nach dem Namen und auch eine Variable nach Y, da sich diese Werte auch Und was wir tun, ist ein Listenverständnis zu erstellen Also für V eins und V zwei rein. Also, wo bekommen wir das her? Im Grunde brauchen wir für V eins die Namen für jeden Kurs, die Titel der Kurse. Und für V zwei benötigen wir die Anzahl der Bewertungen für den Kurs. Schauen wir uns also den Datenrahmen an, wie er aussieht, teilen. Ich denke also, der Index hat den Kursnamen. Lass mich tatsächlich zeigen, dass du. Ich führe diese Zelle aus und führe sie auch aus. Wir bekommen das, teilen uns aber, dass Index im Grunde ein listenartiges Objekt ist, das alle Namen der Kurse enthält. Und share actually list share enthält die Anzahl der Bewertungen. Was wir tun werden, ist für V eins, V zwei im Zip Share Dot Index, share print V eins, V zwei. Und was hier passiert , ist, dass in der ersten Iteration V eins, der Titel des ersten Kurses und die Anzahl der verbleibenden Bewertungen für diesen Kurs ausgedruckt der Titel des ersten Kurses und die Anzahl der verbleibenden Bewertungen für diesen Kurs Also v1v2 dann v1v2 wieder und wieder und wieder. Das brauchen wir hier. Also für v1v2 in Zip share sorry, share index und share Also werden diese Werte hier und hier in dieses Wörterbuch eingefügt hier und hier in dieses Und dann weisen wir das dem zu, und dann beenden wir das Skript und führen es erneut aus, um zu sehen, wo wir uns befinden. Also bekommen wir einen Fehler. Das Attributlistenobjekt hat keine Attributdaten. Schauen wir uns also an, wo der Fehler aufgetreten ist, Zeile 84, die sich hier befindet. Und es heißt, das List-Objekt hat keine Attributdaten, was bedeutet, dass dies das letzte Objekt ist und dies das Datenattribut ist. Da es sich um eine Liste handelt, hat sie dieses Datenattribut natürlich nicht, hat sie dieses Datenattribut natürlich nicht weil wir dachten, es handele sich um ein Wörterbuch. Irgendwie dachte ich, dass du es vielleicht nicht getan hast. So ernst. Hmm. Serie ist wirklich eine Liste Das war also ein Logikfehler meinerseits, aber genau darum geht es bei Fehlern. Also erklären sie dir, was vor sich geht. Du liest das und behebst das Problem. Da es sich bei einer Reihe also um eine Liste handelt, bedeutet das, dass sie Elemente enthält , und in diesem Fall hat sie nur ein Element. Es ist also das große Wörterbuch , das diesen Schlüssel und Wert, diesen Schlüssel und Wert und diesen Schlüsselwert hat. Die Serienliste enthält also nur einen Artikel. Daher müssen wir auf diesen einen Artikel zugreifen. Aus einer Serie, also der Eintrag mit dem Index Null , der uns dann dieses Wörterbuch geben wird. Und aus diesem Wörterbuch extrahieren wir den Datenschlüssel dieses Wörterbuchs. also Daten durch Zugriff auf den Datenschlüssel extrahieren, erhalten wir die Liste des Datenschlüssels Jetzt sollte es uns also gut gehen. Hey, es sieht gut aus. Und damit ist auch dieses Video beendet, und das war eine Reihe von Grafiken, die wir in diesen Abschnitten entwickelt haben. Ich möchte mich bei Ihnen für das Folgen bedanken und werde in den nächsten Videos mit Ihnen sprechen. Wir sehen uns. 151. 150. Demo von App 5: Web-Entwicklung mit Flask: Aufbau einer persönlichen Website: Hallo und willkommen zu diesem neuen Abschnitt des Kurses. Und dies ist die allererste Vorlesung, in der ich Ihnen zeigen werde, was Sie in diesem Abschnitt entwickeln werden. Das ist also einer der Abschnitte des Kurses, in denen Sie eine Anwendung erstellen werden . Diese spezielle Anwendung ist eine Website mit Python. Python kann Websites erstellen, genau wie andere Programmiersprachen. Natürlich benötigen Sie HTML und möglicherweise auch CSS und JavaScript , damit die Client-Site die Webseite im Browser rendern Aber im Backend verwenden Sie Python, genau wie Sie es mit PHP und anderen Programmiersprachen tun . Ja, die Website , die Sie erstellen werden, ist die, die Sie hier sehen. Ich meine, sie ist momentan ziemlich leer, sie hat keinen Inhalt, aber du kannst sie mit Inhalten füllen und sie als Schaufenster für deine Arbeit, als Portfolio oder so verwenden . Sobald Sie diesen Punkt erreicht haben, können Sie ihn mit Easy verbessern. sollten auch wissen, dass diese Website jetzt live ist Deshalb werde ich Ihnen beibringen, wie Sie eine Website auf einem Live-Server bereitstellen , damit jeder Ihre Website durchsuchen und besuchen kann. Es ist also ein vollständiges Tutorial, um die Website von Grund auf neu zu erstellen und online zum Laufen zu bringen. Und jetzt ist das eine statische Website. Aber später im Kurs haben wir andere Anwendungen, mit denen Sie dynamischere Websites mit einer Datenbank im Backend und einigen dynamischen Funktionen erstellen werden dynamischere Websites mit einer . Aber das ist ein guter Anfang. Ich hoffe, Ihnen gefällt dieser Abschnitt, und wenn Sie Fragen haben, können Sie sie gerne stellen. Und ja, ich werde in der nächsten Vorlesung mit dir sprechen. 152. 151. Deine erste Flask-Website mit Server-Warnung hinzugefügt: Hallo. Und in diesem Vortrag werden Sie Ihre erste Website mit FLASK erstellen , falls Sie dies noch nicht getan FLASK ist ein Python-Framework , das alle Tools, Vorlagen und Funktionen Sie Websites mit Python erstellen Und bevor ich tiefer in FAS eingehe und Ihnen erkläre, wie FLASK wahrscheinlich zum Erstellen von Python-Web-Apps verwendet wird, möchte ich Sie bitten , 3 Minuten damit zu verbringen, eine sehr einfache Website mit FLASK zu erstellen Und das mit nur mehreren Zeilen Python-Code. Also das werden wir jetzt tun. Um eine Web-App mit FLASK zu erstellen, muss Flask PIP install Flask sollte also Flask in Ihrer Python-Umgebung installieren In Ordnung. Das wurde erfolgreich installiert. Und lassen Sie uns jetzt unsere Website erstellen. Was Sie benötigen, ist eine Python-Datei. Also erstelle ich hier eine. Sagen wir, Drehbuch eins, kein Kuchen. Und dann schreiben Sie hier den Code, mit dem Ihre Web-App erstellt wird, und alles beginnt mit dem Import von Flask Und tatsächlich importieren Sie nicht das Flask-Framework, sondern Sie importieren die Flask-Klasse aus einem Flask-Framework Also aus Flask importieren Sie Flask. Und FLASK ist eine Klasse dieser Bibliothek, und sie enthält alle Prototypen, die Sie benötigen , um Web-Apps mit Python zu erstellen Das wird also Anfragen für Sie bearbeiten. Sie müssen Anfragen nicht selbst einrichten. Aber konzentrieren wir uns vorerst auf dieses Beispiel. Sobald Sie das getan haben, müssen Sie eine Variable erstellen, in der Sie FLASK-Objektinstanz, Ihre FLASK-Anwendung, speichern Das würde der FLASK-Klasse entsprechen. Und du übergibst dort die Namensvariable, mach dir darüber jetzt keine Sorgen Dann brauchst du einen Dekorateur, root, und hier ist eine URL, über die du deine Website aufrufen Dieser Schrägstrich hier bedeutet also die Homepage. Und gleich danach müssen Sie die Funktion schreiben , die Python-Funktion. Und diese Funktion definiert , was Ihre Webseite tun wird. In diesem Fall geben wir eine Zeichenfolge zurück. Sagen wir hier Zeichenfolge. Der Inhalt der Website wird hier angezeigt. Kurz danach benötigen Sie zwei weitere Codezeilen, und das ist eine bedingte Anweisung. Wenn der Name der Zeichenfolge entspricht, muss die Haupt-App ausgeführt werden. Debug ist gleich True. Das ist es. Mach dir darüber jetzt keine Sorgen. Klicken Sie einfach auf Speichern, öffnen Sie das Terminal und führen Sie das Skript mit dem ersten Python-Skript, Python, Und es sieht so aus, als ob Ihre Web-App jetzt läuft. Öffnen Sie also den Browser Und Ihre Website sollte auf Ihrem lokalen Host live sein. Das ist es. Nichts Beeindruckendes, aber Sie sehen wie einfach es ist, eine Website mit Python zu erstellen. Und in diesem Fall geben wir nur ein Zahnrad an die Website zurück . Da ist also nichts Besonderes drin. Aber später werde ich Ihnen erklären, wie Sie HTML-Seiten zurückgeben können , anstatt Python-Strings auf Ihrer Website abzuspielen. diese Weise können Sie tatsächlich verschiedene Formate Schriftarten für Ihren Text verwenden, und dann können Sie auch den CSS-Stil auf Ihren HTML-Code anwenden, sodass Sie eine vollständige Website mit modernen Funktionen erhalten. Lassen Sie uns zunächst sicherstellen, dass Sie diese sieben Codezeilen verstehen . Ja, es sind sieben Zeilen. Wie gesagt, in der ersten Zeile importieren Sie das FAS-Klassenobjekt aus der FAS-Bibliothek Dann in der nächsten Zeile, sobald Sie die Flask-Klasse, das Flask-Objekt, importiert haben, mit anderen Worten, instanziieren Sie diese Klasse, instanziieren Sie Dies ist eine spezielle Variable, die den Namen des Python-Skripts als Wert erhält . Wenn Sie nun eine Python-Datei, ein Python-Skript, ausführen weist Python der Datei den Namen main this string zu Wenn Sie ein Skript in ein anderes Skript importieren, z. B. wenn wir dieses Skript aus einem anderen Skript importieren, erhält dieses Skript dem Skript einen Punkt Py-Namen Aber wenn Sie dieses Skript ausführen, weist Python den Namen underscore underscore, main score underscore main Was passiert also, ist das? In dieser Zeile sagen wir, dass der Name gleich Main ist, dann rund um die App Das ist wahr, wenn wir das Skript so ausführen, wie wir es hier getan haben. Aber wenn wir dieses Skript aus einem anderen Skript importieren würden, würde diese Zeile hier nicht ausgeführt werden. Das ermöglicht uns also, die Kontrolle über dieses Skript zu haben , indem wir diese Zeile hier verwenden. Dann haben wir diese beiden Zeilen. Das ist ein Dekorateur. Jetzt wird die Ausgabe , die diese Funktion erzeugt, dieser URL zugeordnet Wenn Sie möchten, können Sie diese URL so ändern, dass Sie beispielsweise das Skript speichern Klar, du brauchst hier eine URL. Speichern Sie das Skript, führen Sie es aus und gehen Sie zum lokalen Host, laden Sie es neu. Und dieses Mal bekommst du eine Fehlermeldung. Python konnte diese Seite nicht finden, aber es kann die About-Seite finden. Ja, das ist es. Wenn du immer noch eine Homepage haben möchtest, fügst du direkt nach dem Dekorateur einen weiteren Dekorateur und eine weitere Funktion Also geh einfach mit dieser Homepage weg und sag einfach Homepage. Hier. Speichern. Auch hier haben wir einen Fehler, weil wir keine Funktionen mit demselben Namen haben können. Also können wir das in einen Bot ändern. Der Name spielt keine Rolle. Das muss bei diesem also nicht dasselbe sein. Klicken Sie im Skript erneut auf Speichern. Und gehe auf die Website. Das funktioniert. Probieren Sie das Internet auf der Homepage aus. Das funktioniert auch. Wenn du etwas ändern willst, sagen wir mal, was den Inhalt angeht , dann speicherst du das Script. Und die Web-App wird von selbst neu gestartet, sodass Sie die Web-App nicht schließen und das Skript erneut ausführen müssen die Web-App nicht schließen und das , wie ich es zuvor getan habe. Wenn Sie eine Fehlermeldung erhalten, wie ich sie zuvor hatte, wird das Skript beendet. Aber wenn alles in Ordnung ist, werden Sie keinen Fehler bekommen, also versuchen Sie es erneut. Die Homepage ist in Ordnung. Die About-Seite ist auch in Ordnung, und mit dem neuen Inhalt. Das war's also auch schon. In der nächsten Vorlesung lernen Sie, wie Sie eine HTML-Template, eine HTML-Datei, mithilfe Ihrer Python-Funktionen zurückgeben . Das gibt Ihnen die volle Möglichkeit alles , was Sie wollen, auf Ihrer Website zu veröffentlichen und nicht nur Saiten zu spielen, wie wir es in dieser Vorlesung getan haben. Wir sehen uns also in der nächsten Vorlesung. 153. 152. HTML-Vorlagen vorbereiten +: Nochmals willkommen. In dieser Vorlesung lernen Sie, wie Sie HTML-Seiten mit Ihrer Python-Web-App generieren . In der vorherigen Lektion geben wir einfach einige einfache Zeichenketten zurück, wie Sie hier sehen, also geben wir eine Zeichenfolge zurück. Jetzt werden wir hier eine HTML-Vorlage zurückgeben. Dazu müssen wir die Render-Template-Methode der Flask-Bibliothek verwenden Render-Template-Methode der Flask-Bibliothek Und die Rendervorlage greift auf eine HTML-Datei zu, die irgendwo in unserer Python-Anwendung in unseren Python-Dateien gespeichert ist irgendwo in unserer Python-Anwendung in unseren Python-Dateien gespeichert , und zeigt dann diesen HTML-Code alle Anfragen unter der URL an Also müssen wir das durch den Namen einer HDML-Seite ersetzen, sagen wir Home Dot Und dieser Name hier, dieser Dateiname muss einer echten HTML-Datei entsprechen, die in einem Ordner gespeichert werden muss, wiederum Templates heißen muss Stellen Sie also sicher, dass Sie diese Namen verwenden , wenn Sie einen Ordner erstellen. Innerhalb des Ordners müssen Sie dann eine HTML-Datei, Home Dot HTML, erstellen . Und der Name muss den Namen widerspiegeln, den Sie hier in der Eder-Vorlagenmethode zurückgeben. Das ist es. Und hier schreibst du jetzt den HTML-Code Wenn Sie HTML bereits kennen, sollte das so einfach wie das Atmen sein Wenn Sie es nicht wissen, sollte es leicht zu erlernen sein. Wenn Sie jetzt ein bisschen Python kennen, was Sie sollten, ist das Erlernen von HTML ein Kinderspiel. Also mach einfach weiter und lerne etwas HTML. So einfach ist das. Aber wie dem auch sei, ich werde hier eine HTML-Datei erstellen. Alles beginnt mit einer Deklaration des Dokumenttyps HTML. Dann haben Sie die HTML-Tags. Es gab ein öffnendes Tag, und Sie haben auch ein schließendes Tag. Das ist es. Du hast Körpermarken. Einfach so, und hier ist der Inhalt Ihrer Webseite drin . Nehmen wir an, ich möchte eine Überschrift wie diese. Und hier drinnen kannst du etwas Text eintragen. Meine Homepage zum Beispiel. Und hier ist eine andere Art von Tag, nämlich ein Absatz-Tag, und sagen wir, das ist eine Test-Website. Clicksaf und, ja, du solltest startklar sein. Gehen Sie zu Ihrem Skript und stellen Sie sicher, dass Sie es gespeichert haben. Und das Web wird neu gestartet, und ich gehe jetzt und besuche meine Homepage Das ist die Bot-Seite. Das sollte die Homepage sein, wie. Ich glaube, ich habe hier einen kleinen Tippfehler. Ja, das sollte Seite eins als Eröffnungs-Tag sein. Klicken Sie auf Speichern und Sie müssen das Python-Skript nicht lesen. Gehen Sie einfach hierher, laden Sie die Seite neu. Und das ist jetzt ein normaler Text. Das ist also ein Absatz, und das ist die Überschrift Großartig. Wir können also auch eine weitere Seite für die Info-Seite haben. Wenn du das einfach schnell duplizieren willst, sag über meine About-Seite. Hier, das ist eine Test-Website. Auch hier gehst du einfach zu deinem ersten Skript und änderst es in eine Rendervorlage, und dort übergibst du etwa Punkt-HTML. Klicken Sie auf Speichern, gehen Sie zum lokalen Host. Dies sollte die Homepage sein. Sie haben die Seite Über uns. Ja, meine About-Seite. Das ist wieder diese Website. Also, das ist es. So übergeben Sie HE Mel-Vorlagen an Ihre Python-Web-App und ordnen sie Ihren URLs zu. Lass uns weitermachen, dann zur nächsten Vorlesung. 154. 153. Ein Website-Navigationsmenü hinzufügen: Okay, in dieser Vorlesung werde ich weiter an der Website arbeiten. Und speziell werde ich ein Navigationsmenü hinzufügen , damit der Benutzer einfach durch die Seiten navigieren kann. Lassen Sie mich zunächst die Idee veranschaulichen. Zunächst möchte ich das umsetzen, was wir bisher haben. Also Python-Skript eins. Die Anwendung läuft also. Und wenn Sie zu Ihrem Browser, dem lokalen Host, gehen ist der Standardport 5.000, und das ist die Website. Und wir haben hier auch zwei Seiten. Über die Seite. Gut. Also über Seite und Homepage. Also, was ich in diesem Vortrag aufbauen werde , ist dieses Ding hier. Ich habe einen Screenshot. Also die Homepage, die About-Seite, Homepage, die About-Seite. Wir haben hier also ein Navigationsmenü. Wenn Sie hier auf einen dieser Texte klicken, gelangen Sie zu der entsprechenden Seite. Und wir haben auch eine Überschrift und etwas, das Sie jetzt beachten sollten . Es ist wichtig zu beachten, dass dieser Teil hier auf beiden Seiten derselbe ist. Das heißt, wir werden diesen Teil hier hinzufügen, den Code dieses Teils auf der HTML-Seite Wie klingt das? Nun, für mich klingt das nicht sehr klug. Eine intelligentere Methode, dies zu tun, wäre, hier eine separate HTML-Seite für diesen Teil zu erstellen hier eine separate HTML-Seite für diesen Teil und dann die A-Seite und die Homepage mit dieser Seite zu verknüpfen Das werden wir also in dieser Vorlesung tun. Also brauchen wir den HTML-Code für diesen Header und das Navigationsmenü. Und ich habe diesen Code bereits, also werde ich nicht den ganzen HTML-Code abtippen. Hier. In Ordnung. Aber ich erkläre dir, was der HTML-Code macht. Zuallererst möchte ich darauf doppelklicken und es einfach lokal anzeigen. Wir führen das also nicht auf einem Server aus, sondern haben es doppelt angeklickt. Wir haben hier also die Kopfzeile und das Navigationsmenü. Wenn Sie darauf klicken, Sie nirgendwohin, weil wir das Layout, die HTML-Seite mit A und die Startseite noch nicht verknüpft das Layout, die HTML-Seite mit A und die Startseite Und wie Sie sehen können, habe ich das in den Vorlagenordner gelegt . Jede HTML-Seite wird also in den Vorlagenordner verschoben. Was wir hier haben, ist die Dokumentdeklaration und wir haben hier die HTML-Tags zum Abschluss. Dann haben wir ein Header-Element, das hier DF enthält. Und wir werden diesen Klassennamen später verwenden , um auf unseren CSS-Code zu verweisen. Dann haben wir hier eine Funktion, die URL vier sagt. Und das bewirkt, dass dadurch die Home-Funktion, die Python-Funktion, ausgelöst wird . Was wir hier haben. Also dieser hier, diese Funktion wird ausgelöst, wenn der Benutzer auf den Home-Link klickt Also dieser hier. Und das Gleiche gilt für den Bauchmuskel. Wenn der Benutzer also auf about klickt, wird die Python-Funktion ausgeführt und die HTML-Datei über die Render-Template-Methode gerendert . Ich hoffe also, dass das klar ist. Wenn Sie faul sind wie ich, möchten Sie nicht jede Zeile dieser Datei eingeben Sie finden diese Datei im Ressourcenbereich, der sich rechts auf dem Bildschirm befindet. Jetzt müssen wir einen Weg finden , diese Layout-HTML-Datei mit der Startseite und den obigen HTML-Seiten zu verknüpfen diese Layout-HTML-Datei mit . Ich werde schnell darauf zurückkommen, wie die Seite aussieht. Und wie Sie hier sehen, haben wir die Kopfzeile, und gleich unten in der Kopfzeile haben wir die A-HTML-Seite. Also einfach hier. Das heißt, wir geben direkt unter der Kopfzeile einen Code ein, der auf die Home-Dot-HTML-Seite oder die A-Punkt-HTML-Seite verweist je nachdem, worauf der Benutzer klickt. Also haben wir hier eine Abteilung, die geschlossen wird. Und ich gebe ihr einen Klassennamen , damit ich später auf den CSS-Code verweisen kann. Dann hast du geschweifte Klammern. Das ist also eine Syntax, und Sie müssen dort auch das Prozentzeichen verwenden Dann schreibst du das Block-Tag und dann gibst du dem Block einen Namen. Und was wir hier machen, ist eigentlich die Vererbung von Vorlagen. Die HTML-Seite mit Layout-Punkten, die wir gerade ändern, ist also die wir gerade ändern, eine Basisvorlage Die untergeordnete Vorlage wird die Home-Dot-HTML-Seite oder die About-Punkt-HTML-Seite Und diese untergeordnete Vorlage wird diesen Block hier ausfüllen. In geschweiften Klammern und Prozentzeichen befindet sich eine weitere Linie . Das ist das Schlüsselwort end block, das das Ende des Blocks angibt Und wir sind fertig mit der Layout-HTML-Seite. Was ich hier tun werde, ist zu Panes zu gehen und das Fenster nach rechts zu teilen Also habe ich die Layout-Punkt-HTML-Seite hier, schließe sie hier. Und ich gehe jetzt zum Home Dot HML. Und weil das eine untergeordnete Vorlage sein wird, brauche ich die Deklaration hier und das HTML-Tag nicht, und ich brauche nicht einmal das Body-Tag Ich werde das durch ein DIV ersetzen. Und nehmen wir an, Klasse ist gleich Home, schließe es hier und lösche diese beiden Und was Sie jetzt tun müssen, ist die Templating-Syntax wieder so zu verwenden und das Schlüsselwort extends zu verwenden Und dann deklarieren Sie , was Sie erweitern möchten. Lege die HML-Datei aus. Dann brauchst du auch eine weitere Zeile. Und hier müssen Sie den Namen des Blocks angeben. Das muss also diesem hier entsprechen. Also, was ist hier los? Nun, gehen wir zum Skript zum Python-Skript. Was passiert ist, dass Python, wenn der Benutzer diese URL besucht, also die Homepage oder diese , sagen wir diese, also die Homepage oder diese , sagen wir diese, die Home-Funktion ausführt weil die Home-Funktion dieser URL zugeordnet ist, und die Home-Funktion die Home-Punkt-HTML-Vorlage rendert Python geht also zur Home-Dot-HTML-Seite und sieht, dass die Home-Dot-HTML-Seite das Layout-Punkt-HTML erweitert. Also dieser hier. Also, es wird diesen Code in diesem Block hier reinschicken, und dann wird diese Seite in der Home-URL gerendert. So einfach ist das, der Benutzer sieht das Layout dieser HTML-Seite mit ihren untergeordneten Inhalten Das ist also die Basisvorlage, das ist die untergeordnete Vorlage. Und in diesem Fall haben wir auch ein anderes Kind, bei dem es um dieses HML geht Also lass mich das hierher bringen. Und ich kopiere das einfach ich stelle das hier hin, und das auch. Steuere C und yo. Stellen Sie sicher, dass Sie alle Dateien und diese gespeichert haben. Ja. Und schauen wir uns an, ob die App läuft Ja, es sieht live aus. Und ich gehe auf die Homepage. Ja, es sieht gut aus. Ja, wir haben Zuhause und Zuhause. Gehen wir zum Thema Tinte über. Jep. Wir scheinen hier den Überblick verloren zu haben. Das Format dieser Zeile, schauen wir uns die AB-Seite an. Ja, ich habe vergessen, das Div hier zu schließen, erneut zu speichern, zum Browser zu gehen, neu zu laden und es ist in Ordnung Also das war es auch schon. Ich hoffe, die Dinge funktionieren auf deiner Seite. Wenn nicht, zögern Sie nicht, eine Frage zu stellen, oder Sie können sogar meine Dateien überprüfen, die ich im Ressourcenbereich auf der rechten Seite Ihres Bildschirms einfüge. Und ja, ich denke, unsere Bewerbung ist bereit für mehr. Also lass uns weitermachen und dich in der nächsten Vorlesung sehen. 155. 154. Das Website-Frontend mit CSS ++ verbessern: Großartig. Wir sind ziemlich weit fortgeschritten Wir haben ein Python-Skript, das Flashcap generiert, und wir haben zwei Funktionen Und jede von ihnen ordnet zwei HTML-Seiten zwei verschiedenen URLs zu Und das ist unsere Website mit zwei Webseiten. In diesem Vortrag werden wir dieser Website etwas CSS-Styling hinzufügen , sodass wie jede andere moderne Website aussieht, sie wie jede andere moderne Website aussieht, visuell ansprechend ist und nicht wie in den 80ern aussieht. In Ordnung. Um das zu tun, müssen wir im Grunde zwei Dinge tun. Als erstes müssen wir eine CSS-Datei erstellen und den CSS-Code darin schreiben. Und die zweite Sache ist, sobald wir diesen CSS-Code geschrieben haben, sobald wir die CSS-Datei haben, müssen wir von unserer Layout-Punkt-HTML-Datei aus darauf verlinken. CSS ist ein CCS-HTML. Wenn Sie es also nicht wissen, schlage ich vor, dass Sie sich einige Tutorials ansehen, und ich bin mir sicher, dass Sie sich sehr schnell an CSS gewöhnen werden Ich habe bereits eine CSS-Datei , die meine Website stilisieren wird. Ich schneide das aus und lege es in einen Ordner, den ich statisch nenne Hier erstelle ich einen weiteren Ordner und nenne ihn CSS, und ich füge die CSS-Datei hier ein. Also lass mich das schließen. Wie Sie sehen, wurden der Ordner, den ich erstellt habe, und die Datei in der Baumstruktur hier in Atom wiedergegeben. Die Idee ist also, dass Python im statischen Ordner nach statischen Dateien sucht . Hier im statischen Ordner können Sie also verschiedene Dateien ablegen. Wenn Sie beispielsweise ein Bild zu Ihrer Website hinzufügen möchten, erstellen Sie hier einen Ordner mit dem Namen Images und legen dann Bilder in diesen Ordner. Anschließend können Sie diese statischen Dateien von Ihrer Layout-HTML-Seite oder von beliebigen anderen Seiten aus verknüpfen . Bevor ich die CSS-Datei öffne und sie kurz durchgehe, möchte ich Ihnen zeigen, wie Sie auf die CSS-Datei verlinken können. Denken Sie nun daran, dass sich der sichtbare Teil eines HTML-Codes innerhalb des Haupttextes befindet, während Links wie Links zu JavaScript-Dateien oder Links zu CSS-Dateien außerhalb des Textkörpers während Links wie Links zu JavaScript-Dateien oder Links zu CSS-Dateien liegen. Und diese sollten in Head-Tags eingefügt werden. Also geh hierher und geh dorthin. Und dann haben wir ein Link-Tag. Und das L dort bedeutet die Beziehung. Die Beziehung zu der Datei, auf die wir verlinken , ist also ein Stylesheet Wir deklarieren also quasi den Typ der Datei, auf die wir Es ist also ein CSS-Stylesheet, und dann haben wir hier die Referenz, die URL-Vier-Funktion entspricht, die als Argument den Ordnernamen, in dem sich die Datei befindet, und den Dateinamenparameter verwendet, dem CSS-Hauptpunkt-CSS entspricht Was wir hier haben, ist den Typ der Datei zu deklarieren, auf die wir verlinken, und dann fügen wir den Link der Datei ein und dann fügen wir den Link der Und das sollte in Anführungszeichen stehen. Also das alles. Und ich möchte auch einen Titel für die Website hinzufügen, sagen wir, Flask-App Das ist es. Das spare ich mir. Und ich werde die Website ausprobieren. Whoa. Kannst du den Unterschied erkennen Ja. Wir haben die Speisekarte hier sehr gut. Über die Seite, die Homepage und den Titel haben wir gleich hier. Und dann kommt der Inhalt der Webseite hierher. Nun, all diese Balken hier, die Hintergrundfarbe, die Abstände, all das wurde mit CSS definiert Lassen Sie uns also weitermachen und uns den CSS-Code ansehen. Das ist es. Ich glaube, das ist ziemlich selbsterklärend. Aber wie dem auch sei, was wir haben, ist im Grunde ein HTML-Element, also ist der Körper hier. Und sobald wir das HTML-Element in das CSS-Skript geschrieben haben, verwenden wir geschweifte Klammern, und dann definieren wir innerhalb der geschweiften Klammern diese Attribute Also der Rand, das Bild und die Schriftfamilie für den Text und die Farbe des Wenn Sie dies ändern möchten, sagen wir 999, speichern und zur Webseite neu laden möchten, werden Sie feststellen, dass der Text eine andere Farbe hat Das ist also ziemlich klasse. Das bedeutet also, dass sich dieses Attribut hier auf den Hauptteil der Website auswirkt. Ich setze das wieder auf vier für vier. Dann hast du hier das Header-Element, das für diesen Header verantwortlich ist. Also ganz oben. Wenn Sie dann einen bestimmten Teil Ihrer Webseite stilisieren möchten , sagen wir, nur das Logo, dieses hier, müssten Sie den Header und dann auf das Agon-Element verweisen zuerst auf den Header und dann auf das Agon-Element verweisen, und dann verweisen Sie auf die Logo-Klasse Das ist also ein Klassenname genau hier. Und so weiter und so fort, ich glaube, Sie können sich diesen Code in Ihrem eigenen Tempo ansehen. Die Logik ist also dieselbe. Großartig. Und jetzt sind wir bereit, diese Website online in der Cloud bereitzustellen . Also werden wir das in den nächsten Vorlesungen tun. Wir sehen uns. 156. 155. Eine virtuelle Python-Umgebung erstellen: Wir haben also eine laufende Website, die ziemlich gut aussieht. Das Problem ist, dass dies in unserem lokalen Host ist. Also die einzige Person, die das sieht, sind , ja, Sie oder jemand, der Zugriff auf Ihren Computer hat. Stattdessen möchten wir diese Website auf einem Webserver oder in der Cloud bereitstellen , wie wir es in diesem Kurs tun werden. Und wir werden die Hogu Cloud verwenden. Heroku ist ein Dienst , mit dem Sie Python-Anwendungen in ihrer Cloud bereitstellen können Python-Anwendungen in ihrer Cloud bereitstellen Eine gute Nachricht ist, dass Sie eine Anwendung kostenlos bereitstellen können und dass Sie auch Ihre öffentliche Domain kostenlos nutzen Sie benötigen jedoch eine Subdomain von Heroko, also sagen wir zum Beispiel ardit.heroko.com sagen wir zum Beispiel ardit.heroko.com Wenn Ihre Website jedoch später viel Traffic haben wird, sollten Sie Ihr Abonnement tatsächlich aktualisieren und mehr Bandbreite aktualisieren Die Bereitstellung auf Heroko ist relativ einfach. Sie müssen nicht nachdenken und keine Verwaltungsarbeit erledigen, sodass Heroko viel Zeit und Mühe spart, sodass Sie sich auf die Programmierung statt auf die Serverteile konzentrieren können Vor der Bereitstellung auf Heroku müssen wir jedoch etwas tun Es gibt etwas, das wir seit Beginn dieses Abschnitts hätten tun sollen seit Beginn dieses Abschnitts Bevor Sie also eine Datei hier schreiben , sollten Sie eine virtuelle Umgebung erstellen, die von Ihren anderen Dateien und Ihrer Python-Hauptinstallation isoliert ist von Ihren anderen Dateien und Ihrer Python-Hauptinstallation isoliert . Um unsere Anwendung auszuführen, verwenden wir Python, das aus unserer Hauptinstallation stammt. Also dieser hier, die, die ich hier habe. Das ist keine gute Praxis. Eine gute Vorgehensweise ist eine Neuinstallation von Python, die nur für Ihre Anwendung verwendet wird. Bei dieser Installation möchten Sie also nicht, dass Bibliotheken Bibliotheken installieren , die Sie nicht für die Erstellung von FLASK-Anwendungen benötigen für die Erstellung von FLASK-Anwendungen Daher müssen wir eine virtuelle Umgebung erstellen. Und hier zeige ich Ihnen, wie Sie das tun können. Um eine virtuelle Umgebung zu erstellen, müssen Sie eine Virtual F-Python-Bibliothek verwenden. Und um die Virtual Python-Bibliothek zu verwenden, müssen Sie Virtual F installieren. PIP installiert also Virtual NV, also verwenden wir hier die Python-Hauptinstallation , um Virtual ENV zu installieren Großartig. Das wurde erfolgreich installiert, und jetzt werden wir eine virtuelle Umgebung erstellen. Die virtuelle Umgebung sollte auf derselben Ebene wie der Hauptordner erstellt werden derselben Ebene wie der , der die Anwendungsdateien enthält. Wenn wir also in unser Verzeichnis gehen, genau hier befinden sich die Dateien. Und ich werde hier einen Hauptordner erstellen und ihn meine Site nennen. Und ich werde Atom für eine Weile schließen. Und das würde da reinkommen. Also einfach hier. Und jetzt können Sie Atom in diesem Verzeichnis öffnen , denn hier werden wir die virtuelle Umgebung erstellen. Lassen Sie uns jetzt die Befehlszeile öffnen und wir sind bereit, eine virtuelle Umgebung zu erstellen. Und um das zu tun, sollten Sie eine Visual M-Bibliothek verwenden , indem Sie Python sagen. Das Argument, dann haben Sie Vn, was der Name der Bibliothek des Moduls ist. Und hier ist ein Argument , das es Python ermöglicht , Module für die Ausführung als Skripte zu finden. Dann müssen Sie einen Namen für den Ordner angeben, in dem die Dateien der virtuellen Umgebung gespeichert werden , damit das funktionieren sollte. Mal sehen, dass der virtuelle Ordner erstellt wurde. Und die Umgebung wurde erfolgreich erstellt. Was wir hier haben, ist eine isolierte Installation von Python, und in Skripten werden Sie sehen, dass Sie Python dort haben. Hier ist es. Okay, mach dir darüber keine Sorgen. Und hier ist auch PIP. Also Pip Dot. Und das bedeutet, dass Sie diese Python verwenden können, wenn Sie möchten. Lass es mich ausprobieren. Wir befinden uns jetzt also im Mside-Verzeichnis Das heißt, wir müssen uns auf virtuelle Krypten und Python beziehen. Und das wird unser neues Python in der Konsole auslösen. Wir sind jedoch nicht daran interessiert, Python tatsächlich von der Stange aus auszuführen. Also werde ich das einfach beenden. Und was uns stattdessen interessiert, ist, die FLASK-Anwendung tatsächlich mit der Neuinstallation von Python auszuführen die FLASK-Anwendung tatsächlich mit der Neuinstallation von Python Aber bevor wir das tun, müssen wir Flask tatsächlich in unserem Visual Python installieren, wenn Sie möchten Und dazu müssen Sie die PIP-Bibliothek Ihres isolierten Python verwenden die PIP-Bibliothek Ihres isolierten Python Sie müssen also auf den virtuellen Ordner verweisen, dann auf den Skriptordner und dann auf PIP, um Flask zu installieren Also wird FASC installiert und es hat auch seine Abhängigkeiten installiert Und wir sollten jetzt startklar sein. Lassen Sie uns also unsere Webapp mit unserer neuen Python-Installation ausführen mit unserer neuen Python-Installation Um das zu tun, musst du auf das neue Python zeigen und das auf die Demo, weil wir jetzt auf meiner Seite sind, wie du hier siehst, also Demo-Backslash-Skript mit einem Punkt Das sollte funktionieren. Großartig. Und wenn Sie jetzt auf die Website gehen, werden Sie feststellen, dass sie einwandfrei funktioniert. Das ist es. Jetzt sind Sie mehr als bereit, Ihre FASC-Anwendung in der Cloud bereitzustellen, und genau das werden wir in der nächsten Vorlesung tun Und ich möchte es noch einmal erwähnen , dass Sie bitte bedenken sollten, dass Sie immer eine virtuelle Umgebung erstellen sollten bevor Sie Ihre FLASK-Anwendung erstellen Bevor Sie also Code schreiben, sollten Sie eine Neuinstallation von Python verwenden. 157. 156. So verwendest du den PythonAnywhere-Service: Hallo, willkommen zu einer neuen Vorlesung darüber, wie Ihre Flask-Web-App auf einem Live-Server bereitstellen, was bedeutet, dass Sie Ihren eigenen Domainnamen haben , Sie jedem geben können, und er kann Ihre Web-App verwenden Und wir werden Python Anywhere verwenden. Gehen Sie also zu Python Ware.com. Python Anywhere bietet einen kostenlosen Dienst dem Sie Ihre FLASK-Anwendungen hosten können Das werden wir also tun, und es ist relativ einfach, es überall auf Python zu implementieren. Also das ist natürlich ein aktualisiertes Video. Davor haben wir Heroku benutzt. Heroku und Python Nware können Sie FLASK-Anwendungen jetzt kostenlos hosten oder bereitstellen Der Unterschied besteht darin , dass Python Aware tendenziell benutzerfreundlicher ist. Und Heroku macht es dagegen schwieriger. Daher schlage ich normalerweise vor , dass Sie sich als Programmierer auf Ihre Codes konzentrieren möchten, anstatt mit Problemen der Serveradministration zu befassen Ich möchte aber auch sagen, dass sowohl Hiroko als auch Python-Ware relativ einfach sind , verglichen mit , eigenen Server, auf dem Sie alles erledigen müssten Dennoch machen Hoco und Python Aware die Dinge einfacher. Um Ihre FAS-Web-App überall auf Python bereitstellen zu können, müssen Sie sich für ein Konto anmelden Gehen Sie also zu Preise und melden Sie sich an. Sie möchten den Abschnitt finden, in dem Sie ein Anfängerkonto erstellen können, da das kostenlos ist Und sie haben auch andere Pläne bezahlt. Wenn Sie also mehr Besucher haben, müssten Sie auf ein kostenpflichtiges Konto umsteigen. Also werde ich ein neues Konto erstellen. In Ordnung, also habe ich mich angemeldet und mein Benutzername ist Ardit 12345. Das ist mein Nutzername und das ist ein Dashboard. Auf Python Anywhere können Sie jetzt neben der Bereitstellung von Web-Apps neben der Bereitstellung von Web-Apps auch einige andere Dinge tun. Bevor wir die Web-App bereitstellen, möchte ich Ihnen einen kurzen Überblick über Python Anywhere geben. Im Grunde sollten Sie hier das Dashboard-Menü sehen können , und dann haben wir Konsolen. Wenn Sie in Konsolen zu Konsolen wechseln, können Sie grundsätzlich eine Bash-Konsole erstellen Dadurch haben Sie Zugriff auf Ihren eigenen Server, auf dem Sie Ihre Web-App bereitstellen, und Sie können auch andere Dinge tun , z. B. Python Three starten. Und es startet diese Version von Python. Es ist also ein interaktives Python du kannst hier sogar einige Bibliotheken importieren, Pandas ist also bereits installiert, du kannst es verwenden Der Nachteil dabei ist , dass Sie keine grafische Benutzeroberfläche haben Wenn Sie also zeigen möchten, um einige Graphen zu generieren, und Sie sie sehen möchten, ist das auf Python nirgends möglich , weil Sie nur diese Shell haben. Also die Python-Shell, und du gehst zurück zum Terminal. Und mit PWD können Sie beispielsweise sehen, wo Sie sich gerade befinden Das ist also dein Standort auf dem Server. Sie sind also zu Hause, dann in der 20 2345, also in dem Ordner des Home-Ordners Hier können Sie auch Python-Dateien erstellen, zum Beispiel Nano-Beispiel Punkt PY. Nano ist ein Texteditor , den Sie in dieser Art von Befehlszeilenschnittstellen verwenden können . Dadurch wird eine neue Datei erstellt, und hier können Sie Python-Code wie print schreiben. Hallo. Klammer. Um diese Datei zu speichern , möchten Sie nun diesen Befehlen folgen . Also beende es. Sie möchten den Vorgang mit Control X beenden Drücken Sie also Control X. Sie werden diese Meldung sehen. Es heißt, den modifizierten Puffer speichern, was bedeutet, dass Sie diese Datei speichern möchten? Y für Ja oder N für Nein. Also werde ich Y drücken und dann werden Sie erneut gefragt, und dann werden Sie erneut gefragt welchen Namen Sie Ihrer Datei geben möchten. Beispiel Punkt PY S ist es, ja. Drücken Sie also einfach die Eingabetaste. Geben Sie ein und die Datei ist gespeichert. Um es auszuführen. Du machst Python 3.9. Beispiel Punkt PY, ausführen und Sie erhalten die Ausgabe. Das ist es also, was du mit der Konsole machen kannst. Wenn du zurückgehst, dann hast du diese Dateien. Und hier können Sie jetzt das Beispiel PY sehen, das wir zuvor erstellt haben. Und Sie sehen das aktuelle Verzeichnis, also ein Home-Rit eins, zwei, drei, vier, fünf, das ist ein Verzeichnis. Wir waren in der Befehlszeilenschnittstelle. Das ist also eine weitere Möglichkeit, Dateien zu erstellen. Wenn Sie also hier eine Datei erstellen möchten, geben Sie hier einen Namen ein. Nehmen wir zum Beispiel zwei PY an und gehen Sie zu Neue Datei. Und sagen wir, hier bin ich gedruckt. Hallo nochmal. Und jetzt können Sie diese Datei auch ausführen, speichern und von hier aus ausführen. Speichern Sie es also zuerst und klicken Sie auf die Schaltfläche Ausführen. Und du solltest die Ausgabe hier unten sehen. Dies ist etwas langsamer als die vorherige Methode Anwendung zum Ausführen von Python-Dateien auszuführen. Aber wie dem auch sei, das ist die Ausgabe. Das ist also eine weitere Möglichkeit, Python-Dateien auszuführen. Wenn du jetzt zurück willst, kannst du hier reindrücken. Also das ist eine Dateien-Seite, und dann haben wir Web. Hier werden wir eine neue Web-App erstellen, aber in der nächsten Vorlesung. Dann haben wir Aufgaben mit Aufgaben. Sie könnten hier den Pfad einer Ihrer Python-Anywhere-Python-Dateien eingeben . Wenn ich zum Beispiel den Pfad von Beispiel PY angeben möchte, sage ich home.r1, zwei, drei, vier, fünf, das Verzeichnis und das Und dann definiere eine Zeit. Ich stelle hier eine Zeit im UTC-Zeitsystem ein. Dieses Skript würde dann jeden Tag zu dieser Zeit ausgeführt werden. Dies könnte für Dinge wie Web-Scraping nützlich sein , wenn Sie jeden Tag zu einer bestimmten Zeit etwas schreiben möchten jeden Tag zu einer bestimmten Zeit etwas Sie können das auch auf Python überall tun Schließlich haben wir Datenbanken. In diesem Menü können Sie eine Datenbank erstellen. Wenn Ihre Web-App also über eine Datenbank verfügt , in der die Daten gespeichert werden, möchten Sie hier eine neue Datenbank und dann eine Tabelle für diese Datenbank erstellen. Auch das können Sie in dieser Oberfläche hier in Datenbanken tun , und dann kann Ihre Web-App mit dieser Datenbank interagieren. Das war also eine Einführung in Python Anywhere. Im nächsten Video werden wir unsere Python-App bereitstellen, also unser Flashap auf Python Anywhere. Wir sehen uns. 158. 157. Bereitstellen der Flask-App auf PythonAnywhere +: Willkommen zurück. Ich freue mich, Ihnen jetzt zeigen zu können, wie Ihre Web-App auf Python Anywhere bereitstellen. Das ist also mein Python Anywhere-Konto, und ich bin gerade im Dashboard-Bereich. Sie möchten ins Internet gehen und dort eine neue Web-App erstellen und Sie erhalten diese Nachricht hier. Python Anywhere teilt Ihnen mit, dass Sie keinen benutzerdefinierten Domainnamen haben können, sagen wir, ardit.com, da dies ein kostenloses Konto ist Wenn Sie einen benutzerdefinierten Domainnamen wünschen, möchten Sie bezahlen, um eines der kostenpflichtigen Konten zu erhalten Zunächst möchten Sie jedoch einen Domain-Anbieter finden , um einen Domainnamen zu kaufen. Wenn Sie also beispielsweise den Domainnamen example.com kaufen möchten, sollten Sie vielleicht zu Name-Chip gehen Name-Chip ist meiner Meinung nach der beste, um Domainnamen zu bekommen. Also nenne chip.com, und sobald du dort einen Domainnamen gekauft hast, dann gibt dir Name Chip einige DNS-Namen, und diese Namen musst du hier irgendwo in einer Python eingeben , um sie mit deinem Web zu verbinden, aber das machen wir jetzt nicht Für unseren Zweck ist es ausreichend, einen solchen Domainnamen zu haben , der in meinem Fall dieser hier ist Also Rs eins, zwei, drei, vier, fünf, Punkt Python Anywhere, Punkt com. Das ist also eine Subdomain von Python aware.com . Drücken Sie auf Weiter. Und Sie haben mehrere Möglichkeiten. Wir wollen FLASK, damit Sie überall verschiedene Arten von Web-Apps auf Python bereitstellen können überall verschiedene Arten von Web-Apps auf Python Wir drücken auf FLASK und Python 3.9 ist startklar. Also drück dort weiter Und das ist jetzt der Einstiegspunkt der Flask-App. Mit Einstiegspunkt meine ich die Datei, die Sie ausführen, um die FLASK-App zu starten In unserem Fall ist es also das Skript mit einem Punkt PY. Das ist eine Datei, die wir mit dem Python-Skript PY ausführen. Also ändere das nicht, lass es so wie es ist. Also drücken Sie vorerst auf Weiter. Und die App ist erstellt, aber wir müssen unsere Dateien zu unserer App hinzufügen. Dafür möchten Sie also zum Dateimenü gehen. Und jetzt hier auf der linken Seite können Sie meine Seite sehen. Wenn Sie dort klicken, sehen Sie die Datei , die Python Anywhere erstellt hat. Das ist also der Einstiegspunkt , über den ich gesprochen habe, Flask Underscore-App, die PY ist Sie möchten dort klicken und diesen Code löschen und einfügen, Ihren eigenen Code kopieren und Ihren Code dort einfügen und auf Speichern klicken Sie können jetzt also sehen, dass wir uns in diesem Verzeichnis befinden. Also schneide O R eins, zwei, drei, 45. Also dein Nutzername MySite, fA FAS Unterstreiche App, dass PY Wenn Sie also auf meine Site klicken, kehren Sie zum Stammverzeichnis Ihres Projekts zurück Das ist also das Stammverzeichnis von Python Anywhere, und das ist das Stammverzeichnis unseres lokalen Projekts. Also ein Skript, dass PY da ist, und dann hat es einen statischen Ordner und einen Vorlagenordner im selben Stammverzeichnis. Deshalb wollen wir in diesem Mist-Stammverzeichnis einen Vorlagenordner erstellen. Schreiben Sie dort also Vorlagen und klicken Sie auf neues Verzeichnis. Dadurch wird ein neuer Vorlagenordner erstellt. Sie sehen jetzt, dass es in diesen Ordner geändert wurde. Wenn Sie also zu meiner Seite zurückkehren, sehen Sie, dass Vorlagen hinzugefügt wurden Die Flask-Underscore-App befindet sich ebenfalls im selben Ordner, meiner Site Und wir wollen auch einen leeren statischen Ordner erstellen. Neues Verzeichnis, drücken Sie auf diese Schaltfläche und es sollte ein statischer Ordner erstellt werden. Also geh zurück auf meine Seite. Sie sehen Statik und Vorlagen sind jetzt da. Also müssen wir unsere statischen Dateien hinzufügen. Drücken Sie also auf Statisch. Du bist jetzt auf static inside static und möchtest main hochladen, das ist CSS, aber warte, das ist in einem anderen Ordner. CSS ist der Ordner, also möchtest du Inside Static erstellen. Sie möchten ein CSS-Verzeichnis erstellen. Drücken Sie auf neues Verzeichnis. Stellen Sie sicher, dass Sie sich in diesem Verzeichnis befinden, damit meine Website den statischen Schrägstrich Und hier wollen wir jetzt die Datei hochladen. Und diese Datei ist dieses Haupt-CSS. Also hier bin ich Das ist das Projektverzeichnis mit unseren lokalen Dateien. Unter Static unter CSS haben wir Main Dot Css. Doppelklicken Sie und es wird innerhalb von CSS hochgeladen. Gehen Sie dann zurück zu meiner Website, gehen Sie zu Vorlagen und laden Sie sie hoch. Die Dateien, die sich innerhalb von Templates befinden , wo es um Home Dot HTML geht, und die dritte, Layout Dot HTML. Diese drei befinden sich in Vorlagen. Stellen Sie also sicher, dass sie sich in Vorlagen befinden. Dann geh zurück zu meiner Seite und schau einfach mal , ob alles gut aussieht. Für mich sieht es gut aus. Eine Änderung, die Sie auch vornehmen möchten , ist, dass Sie zu Ihrer App wechseln möchten, und wenn Ihre App in Produktion ist, möchten Sie dies auf „Falsch“ ändern. Sie möchten Besuchern also keine Python-Fehler anzeigen , da Ihre App dadurch anfällig für Hackerangriffe werden könnte Weil Leute oder Hacker die Fehler Ihrer App sehen werden Sie verstehen möglicherweise, wie Ihre Web-App strukturiert ist , und Sie können auch Daten offenlegen, die Sie nicht in den von Flask angezeigten Debug-Fehlermeldungen offenlegen möchten Flask angezeigten Debug-Fehlermeldungen Also falsch und sicher und jetzt sind wir bereit, unsere App zu sehen, aber nachdem wir die App mit dieser Schaltfläche neu geladen haben Sie also im Web-Bereich Drücken Sie also im Web-Bereich diese Schaltfläche und laden Sie sie erneut, um die neueste Version der von Python überall bereitgestellten Dateien zu erhalten die neueste Version der von Python überall bereitgestellten Dateien Und dann willst du auf diese URL klicken. Das ist also die URL meiner App, drück dort und meine Seite ist online. Es funktioniert also einfach super. Ich hoffe, deins funktioniert auch. Wenn nicht, möchten Sie zum Webbereich zurückkehren und nach unten scrollen und diese Fehlerprotokolle suchen. Wenn Sie dort drücken, werden die neuesten Fehler angezeigt , die Sie von Ihrer Web-App erhalten haben. Das sind also Python-Fehler und versuche sie zu lesen, um zu verstehen, was vor sich geht. Wenn Sie sie nicht verstehen, gerne eine Frage in den Fragen und Antworten stellen. Achten Sie jedoch darauf, diese Fehler und auch den Code Ihrer Web-App dort zu kopieren und einzufügen und auch den Code Ihrer Web-App dort . Wir helfen Ihnen gerne weiter Vielen Dank. Ich werde in den nächsten Videos mit dir sprechen. 159. 158. Einführung in die Tktier-Bibliothek: Hallo und willkommen zu diesem neuen Abschnitt des Kurses. In diesem Abschnitt erfahren Sie , wie Sie grafische Benutzeroberflächen mit Python erstellen. Und speziell werden wir dafür die Tkinter-Bibliothek verwenden die Tkinter-Bibliothek In diesem Abschnitt werden Sie also kein Programm für die reale Welt erstellen Ich werde Ihnen die Tkinter-Bibliothek vorstellen und natürlich eine grafische Benutzeroberfläche erstellen, ein kleines Programm, das Ihnen den Einstieg in Tkinter eine grafische Benutzeroberfläche erstellen, ein kleines Programm, erleichtern kann Dann im nächsten Abschnitt, also sobald wir mit diesem Abschnitt im nächsten Abschnitt fertig sind, werden Sie lernen, wie Sie mit Datenbanken mit Python interagieren. Wir werden Python also als Wrapper für SQL-Code verwenden , damit wir Daten in einer Datenbank speichern, Daten abfragen, löschen und so weiter und so fort können Daten in einer Datenbank speichern, Daten abfragen, löschen und so weiter und so fort Das war also ein Abschnitt nach diesem. Und dann, im ersten Abschnitt nach diesen beiden Abschnitten, werden wir ein Programm für die reale Welt erstellen. Und dieses Programm ist dieses hier. Also habe ich es Buchhandlung genannt, und das macht es möglich, Buchinformationen in einer Datenbank zu speichern Das ist eine grafische Benutzeroberfläche. Dieses Programm besteht also aus zwei Teilen. Sie haben eine grafische Benutzeroberfläche, bei der es sich um die Schaltflächen handelt, die als Widgets bezeichnet werden Und das wurde mit Tkinter gebaut. Und dann haben Sie das Backend, das aus Code besteht , der mit der Datenbank kommuniziert Wenn wir also zum Beispiel die Ansichtstaste drücken, erwerben wir die Datenbank, um alle Bücher für uns zu laden Oh, wir haben den Titel. Wenn du also auf einen davon drückst, bekommst du hier den Titel, den Autor und das Jahr des Buches. Und auch die Buch-Identifikationsnummer, die ISBN heißt Sie können auch nach einem Eintrag suchen. Wenn Sie also nach einem Autor suchen möchten, geben Sie den Autorennamen Ni ein und drücken auf Suchen. Und wenn Sie einen Eintrag hinzufügen möchten, geben Sie ihn einfach ein. Und ja, so etwas in der Art. Eintrag hinzufügen. Und wenn Sie sie erneut laden, sollte Ihr Eintrag hier sein. Das ist also ein Programm. Wir werden zwei Abschnitte nach diesem bauen. Lassen Sie mich diesen hier schließen, und in der nächsten Vorlesung werde ich Ihnen die Tinder-Bibliothek vorstellen Also werden wir einige einfache Benutzeroberflächen mit einigen Widgets erstellen Wir sehen uns in der nächsten Vorlesung. 160. 159. Ein GUI-Fenster erstellen und Widgets hinzufügen: Also los geht's. Ich habe Atom hier geöffnet, also werde ich Atom verwenden, um sozusagen das Buchhandlungsprogramm zu bauen, das Kinder und Aquia Light Three als Bibliotheken verwendet Also werde ich hier eine neue Python-Datei erstellen. Welches Drehbuch. Hat Kuchen gewonnen. Um grafische Benutzeroberflächen mit Kiner zu erstellen, benötigen Sie die Inter-Bibliothek, und Sie müssen sie nicht installieren da Tkinter eine eingebaute Python-Bibliothek ist Alles was Sie tun müssen, ist also weiterzumachen und Tkinter zu importieren. Wenn Sie Python zwei verwenden, wäre das bei T. In Python drei ist es einfach so Tkinter Eine gute Praxis ist jedoch, tatsächlich alles aus Tkinter zu importieren Also alles von Skiner importieren Warum machen wir das? Wir tun das, weil wir viele Tkinter-Objekte in unseren Skripten verwenden viele Tkinter-Objekte in unseren Es ist also sinnvoll, sie einfach alle zu laden, anstatt sie beispielsweise mit der Tkinter-Punkttaste zu referenzieren Anstatt das zu tun, können wir einfach Button sagen und dann die Parameter eingeben und Lassen Sie mich also eine grafische Benutzeroberfläche erstellen. Bei Kinter besteht das Programm nun hauptsächlich aus zwei Dingen. Sie haben das Fenster und Sie haben die Widgets. Das Fenster ist zum Beispiel all das Programm, das Sie hier sehen, und dann haben Sie Schaltflächen und solche Dinge, die Widgets genannt werden. Zuallererst müssen Sie also das Fenster erstellen. Und ich nenne mein variables Fenster gerne, und das wäre gleichbedeutend mit Zerfall. Das ist es. Das würde ein leeres Fenster für uns schaffen, aber wir müssen hier etwas mehr tun. Wir sagen Fenster, die Hauptschleife. Das ist immer notwendig. Also öffnen wir ein Fenster, wir erstellen ein Fenster und dann bewegt sich alles zwischen diesen beiden Zeilen. Sie erstellen also Widgets zwischen diesen beiden. Und das ist notwendig, denn wenn Sie das nicht haben, wird Ihr Programm geöffnet und im Bruchteil einer Sekunde geschlossen Im Grunde können Sie auf diese Weise die Taste in der Ecke Ihres Fensters drücken und das Programm schließen. Das sollte also immer am Ende deines Codes stehen. Ich werde dieses Skript speichern und ausführen. Und wir haben einen Fehler bekommen, der besagt, dass TK nicht definiert ist, also erkennt Python diese Funktion hier nicht , weil sie T sein sollte. Und führen Sie es erneut aus. Und das ist das Fenster, und da ist nichts drin, also lasst uns weitermachen und eine Schaltfläche hinzufügen. Also speichern wir das Hauptfenster in einer Variablen, und wir werden dieselben vier Widgets verwenden. Also werden wir Variablen erstellen. Nehmen wir an, B eins entspricht einer Taste. Die Schaltfläche ist also eine Funktion, die ein Button-Widget generiert Die untere Funktion benötigt einige Argumente. Wenn Sie eine vollständige Liste der Argumente erhalten möchten, sollten Sie eine Code-Introspektion durchführen Sagen wir hier IPython. Und vom Skin bis zum Import. Ziehen Sie, und dann sagen wir, Knopf und ein Fragezeichen. Und hier können Sie sehen, welche Parameter Sie an die untere Funktion übergeben können. Der allererste Parameter, den Sie zum Widget hinzufügen möchten, ist die Variable des Fensters des Hauptfensters. Sie müssen also Ihrem Widget, dem Fenster, mitteilen , dass das Widget auch gepackt werden muss. Also Fenster und dann kannst du Parameter übergeben wie den , den du hier siehst. Nehmen wir an, einer der Hauptparameter wäre Text. Text entspricht also, sagen wir, der Zeichenfolge execute Das ist also der Text, das Etikett , das über dem unteren Rand angezeigt wird Wenn wir jetzt versuchen, dieses Skript auszuführen, werden Sie feststellen, dass wir noch keine Schaltfläche haben, und das liegt daran, dass wir nicht angegeben haben , wo der Boden platziert werden soll. Dazu müssen Sie die Pack-Methode verwenden, bei der es sich um eine Widget-Methode handelt, und sie dann erneut ausführen. Und jetzt siehst du den Boden. Es gibt jedoch eine andere Möglichkeit, Ihr Widget tatsächlich in Ihrem Fenster zu platzieren. Das ist eine Grid-Methode. Raster. Und oft ist es eine Frage der Präferenz, ob Pack oder Grid verwendet werden soll. Die Idee von Grid ist jedoch, dass Sie mit der Grid-Methode mehr Kontrolle über die Position Ihrer Schaltflächen oder Ihrer Widgets im Allgemeinen haben , da Sie hier die Zeile und die Spalte angeben , in der Sie Ihren unteren Teil platzieren möchten. Also fängt alles bei Null an. Also hat die erste Zeile einen Index von Null, und die erste Spalte hat einen Index von Null und so weiter. Ich habe dafür tatsächlich eine Illustration gefunden. Das ist also ein Kinderprogramm, und wir haben hier zwei Zeilen. Wir haben also diese erste Zeile, die einen Index von Null haben sollte, und Sie haben die zweite Zeile, die einen Index von eins haben sollte . Und Sie haben Spalten, also Null, Eins, Zwei, Drei und so weiter. Nehmen wir an, die OK-Schaltfläche, die hier ist, hätte eine Zeile mit Null, Eins, Zwei, also zwei für die Zeile und dann Null, Eins, Zwei, Drei, Drei für die Spalte. Dann könnten Sie auch Widgets haben , die sich über mehr als eine Zeile oder Spalte erstrecken. In diesem Fall würden Sie hier einen weiteren Parameter namens rowspan hinzufügen Und das würde einer Zahl entsprechen. Nehmen wir an, wenn Sie den Button drücken, würde er sich über zwei Reihen erstrecken. In unserem Fall ist das eigentlich nicht notwendig, weil wir nicht viele Widgets haben . Wir haben nur einen Knopf. Lassen Sie mich dieses Skript jetzt ausführen und sehen, was wir bekommen. Wir bekommen also eine Taste, die eigentlich nichts bewirkt, weil wir nicht spezifiziert haben , welche Aktion ausgeführt werden soll , wenn Sie die Taste drücken. Und das werde ich in der nächsten Vorlesung erklären. Aber vorerst fügen wir hier noch einige weitere Widgets hinzu, nur damit Sie sich mit Widgets besser vertraut machen können. Lassen Sie uns also ein Eintrags-Widget hinzufügen. Und sagen wir E E eins dafür. Also Eintrag eins entspricht Eintrag, und dann raten Sie, was der erste Parameter ist Und das ist der Fensterparameter. Und wir können es vorerst so lassen. Und sagen wir, ein E, eine Klasse. Und lassen Sie es uns in derselben Zeile und in Spalte eins behalten. Speichern und ausführen. Und hier haben wir einen Eintrag. Also, was ist ein Eintrag. Ein Eintrag ist wie ein Bereich, in den Sie einen Wert eingeben können, dann können Sie mit diesem Wert in Ihrem Skript interagieren. Nehmen wir an, Sie geben hier Kilometer ein und möchten eine Schaltfläche haben, die diese Kilometer in Meilen umrechnet. Die Schaltfläche würde also den Wert dieses Bereichs hier abrufen und ihn in einem anderen Widget anzeigen, bei dem es sich um ein Text-Widget handeln könnte. Lassen Sie uns also ein Text-Widget hinzufügen. Nehmen wir an, T one entspricht natürlich einem Textfenster. Und sagen wir T eins, Rasterzeile Null, Spalte zwei Das ist es. Hinrichten. Wir haben ein sehr großes Text-Widget, weil die Standardgröße, die Standardhöhe und -breite eigentlich eine ziemlich große Zahl sind. Wir müssen also zwei Parameter für das Text-Widget angeben. Wir müssten die Höhe angeben. Sagen wir eine Zelle und die Breite. Sagen wir 20. Das ist also der Widget-Bereich. Und das ist der Eintrag, und das ist der Boden. Und das war's für diesen Vortrag. In der nächsten Vorlesung zeige ich dir, wie du diese Widgets so zum Leben erweckst, dass sie tatsächlich etwas bewirken können. Wir sehen uns in der nächsten Vorlesung. 161. 160. GUI-Widgets mit Funktionen ++ verbinden: Hallo, nochmal, in der vorherigen Vorlesung haben wir diese grafische Benutzeroberfläche mit Kiner erstellt Und das Problem ist, dass das vorerst nichts bewirkt, also drücken wir darauf, aber es tut nichts Also, was ich hier machen möchte, die endgültige Ausgabe, die ich haben möchte ist, wenn ich diesen unteren Teil ausführe, also haben wir hier einen Eintrag. Wir können einen Wert eingeben, und ich möchte diese Schaltfläche ausführen und Meilen hier im Textbereich sammeln. Meilen sind also wie eine Kilometereinheit, die 1 Meile mal 1,6 entspricht Wenn ich das also ausführe, möchte ich, dass hier so etwas wie 16 generiert wird Also ein sehr einfaches Programm. Beachten Sie, dass dies nicht eines der echten Programme ist , die ich in diesem Kurs zu erstellen versprochen habe . Das ist also nur, um dich mit Kindern zum Laufen zu bringen. Also lass uns das jetzt schließen. Und damit eine Schaltfläche etwas tut, müssen wir hier einen Befehlsparameter hinzufügen. Der Befehlsparameter verwendet hier also eine Funktion als Argument, als Wert. Und wenn Sie dann diese Taste drücken, die Ausführungstaste, wird in diesem Fall die Funktion, die Sie hier haben, ausgeführt. Nehmen wir an, wir haben hier eine Funktion , die Kilometer in Meilen umwandelt. Nehmen wir für den Moment an, diese Funktion druckt nur etwas Text aus. Nehmen wir zum Beispiel Erfolg an, weil Sie wissen, es ist gut, bevor Sie Ihr eigentliches Programm schreiben, es ist gut, Print-Anweisungen zu verwenden, um Dinge auszuprobieren. Auf diese Weise können Sie Ihre Probleme isolieren. Wenn hier etwas passiert, wissen Sie, dass Sie mit einer Print-Anweisung kein Problem haben können , aber wenn Sie hier einen komplizierteren Ausdruck hätten, wird es schwieriger zu wissen, ob das Problem darin , dass Sie nicht auf die richtige Funktion zeigen, oder ob Sie ein Problem mit Ihrer Anweisung haben. Es ist also gut, zuerst einfache Anweisungen zu verwenden , wie z. B. die gedruckte Anweisung. Also, du würdest hierher fahren und 2 Meilen Kilometer zurücklegen, das ist die Funktion. Und eine Sache, die du beachten solltest , ist, dass du hier die Klammern nicht übergibst. Das ist also kein üblicher Funktionsaufruf. Sie verweisen hier nur auf die Funktion und lassen Python den Rest erledigen Also der Funktionsname steht hier und lassen Sie uns das ausprobieren. Führen Sie es aus und Sie sehen , dass der Erfolg hier abgedruckt ist. Drücken Sie erneut, Erfolg, Erfolg, Erfolg. Es funktioniert also. Wir müssen den Erfolg jedoch nicht in der Befehlszeile ausdrucken. Wir wollen einen Wert im Textbereich ausdrucken. Jetzt müssen wir uns das Eingabe-Widget ansehen. B hier erhalten wir den Wert, also gibt der Benutzer einen Wert in das Eingabe-Widget ein, und dann holen wir uns diesen Wert und verwenden ihn dann in unserer Funktion. Und dafür gibt es einen Parameter namens Textvariable. Und das würde einem String-Var-Objekt entsprechen , das wir hier weiter oben deklarieren müssen. Nehmen wir an, Sie wollen einen Wert, also das ist variabel, und das würde der String-Var-Funktion entsprechen . Und dann zeigen wir auf E, eine Wertvariable, die wir gerade erstellt haben. Diese Variable erhält also den Wert, je nachdem , was der Benutzer in das Eingabe-Widget eingibt. Dann können wir diesen Wert verwenden, was immer wir wollen. Nehmen wir an, wir wollen das als Wert ausdrucken, und wir müssen hier noch etwas extra hinzufügen, nämlich eine Get-Methode des String-Objekts. Das ist also ein besonderes Objekt. Es ist keine Saite, eine Python-Spielsaite. Um eine tatsächliche Zeichenfolge aus diesem Objekt zu erhalten, müssen wir die G-Methode anwenden. Also speichere das und probiere das Skript aus. Sagen wir, zehn hier, ausführen und wir bekommen zehn auf dem Terminal ausgedruckt. Wir haben diese Zeichenfolge hier also noch nicht mit einem Text-Widget verbunden . Also lass uns genau das hier machen. Die Idee hier ist, dass wir einen Wert in das Text-Widget einfügen müssen . Und um das zu tun, hat das Text-Widget eine Methode namens insert. Sie müssen sich also auf das gewünschte Text-Widget beziehen. T one ist also unser Textobjekt, und wenden Sie dann die Insert-Methode an. Und die Methode erhält zuerst ein Argument, das ist eine Stelle, an der Sie den Text einfügen möchten. Nehmen wir an, wir möchten am Ende des Text-Widgets einfügen . Nehmen wir zum Beispiel an, Sie fügen viele Textzeilen in Ihr Widget ein und müssten die Ausführung dieser Methode mehrmals beantragen Und jedes Mal, wenn Sie eingeben, geben Sie den neuen Text am Ende des vorhandenen Textes Sie sagen also, setzen Sie diesen Text ans Ende. Sie möchten den Wertpunkt G. Also die Zeichenfolge Wert, den der Benutzer in das Eingabe-Widget eingibt. Schauen wir uns also an, wie das läuft. Führe die Funktion aus und füge hier etwas Text ein. Sie können auch alles dort platzieren, ausführen und Sie bekommen die Zeichenfolge im Text-Widget ausgedruckt. Ordnung, aber wir wollen diesen Wert nicht einfach nehmen und in den Text einfügen. Wir wollen zuerst etwas mit diesem Wert machen und dann das Produkt, die Ausgabe, in das Text-Widget einfügen . Nehmen wir an, wir nehmen den On-Wert Dot Get und multiplizieren ihn mit 1,6. Und das wären Meilen. Meilen entsprechen also dem Wert, den der Benutzer eingibt, mal 1,6 Sie bitten den Benutzer also, Kilometer einzugeben, und 1 Meile entspricht 1 Kilometer mal 1,6, ist tatsächlich etwa 1,6 oder sechs Ich kann mich nicht an den genauen Wert erinnern, aber Sie verstehen die Idee. Und zu guter Letzt würdest du hier Meilen sammeln wollen. Sie möchten also den Ausgabewert sicher in das Widget einfügen . Und ausführen. Und ich erwarte hier einen Fehler. Sagen wir zehn. Ja, wir haben einen Fehler. Wenn Sie also Fehler erhalten, versuchen Sie nicht einfach, diesen Fehler zu kopieren und in Google einzufügen , um zu sehen, was andere Leute sagen. Sie können viel Zeit verschwenden. Investieren Sie stattdessen etwas Zeit und versuchen Sie, diesen Fehler zu verstehen. Was das heißt, es heißt Typfehler. Die Sequenz kann nicht mit einer Ganzzahl vom Typ Float multipliziert werden. Eine Sequenz kann also eine Liste sein, kann eine Zeichenfolge, ein Tupel usw. sein. Python versucht, eine Sequenz mit einer Nicht-Ganzzahl zu multiplizieren, die ein Float ist. Float hier ist also die Zahl 1,6, und Python versucht hier 1,6 mit einer Sequenz zu multiplizieren . Das ist also keine Zahl , weil die G-Methode tatsächlich eine Zeichenfolge aus einem String-Objekt herausnimmt Und eine Zeichenfolge kann nicht mit einer Flussnummer multipliziert werden. Wenn das zwei wären, wäre es möglich zu multiplizieren. Wenn Sie zum Beispiel M, die Zeichenfolge M mit zwei, multiplizieren , würden Sie Mimi erhalten Also, aber du kannst mich nicht mit 1,6 multiplizieren , weil das keinen Sinn ergibt Wie dem auch sei, die Lösung dafür ist, dass Sie den Wert, den der Benutzer eingibt, in einen Float umwandeln möchten , und das tun Sie, indem Sie die Float-Funktion hinzufügen. Achten Sie also auf die Klammern. Sie sehen, dass sich unter der Klammer eine Unterstreichung befindet und Sie haben hier eine Unterstreichung Das bedeutet also, dass diese Klammer hier geschlossen wird. Also alles sieht gut aus, sicher und nochmal ausführen, dann und dann ausführen. Und wir erhalten die erwartete Leistung. Sie können die Druckfunktion löschen. Wir brauchen es nicht mehr. Ich glaube, das war ein guter Anfang mit der Kiner-Bibliothek, und Sie sollten jetzt in der Lage sein fortgeschrittenere Schnittstellen zu erstellen Wir werden jedoch mit Kiner eine wirklich fortschrittliche grafische Benutzeroberfläche entwickeln, die mit der Datenbank interagiert, sodass es sich um ein echtes Programm handelt. Und vorerst gebe ich dir in der nächsten Vorlesung einfach eine Übung , damit du Kiner ein bisschen üben kannst Und du lernst auch einige weitere kosmetische Aspekte kennen. Sie werden also das Programm , das wir in dieser Vorlesung entwickelt haben, optisch ansprechender gestalten und dafür sorgen, dass Sie sich mit Kindern ein bisschen die Hände schmutzig machen. Ich werde später mit dir reden. 162. 161. Wie Python mit Datenbanken interagiert: Hallo, und ich freue mich, Ihnen diesen neuen Abschnitt des Kurses vorstellen zu können In diesem Abschnitt erfahren Sie , wie Sie über Python mit Datenbanken interagieren. Und das bedeutet, dass Sie bestimmte Python-Bibliotheken verwenden und eine Datenbank von Python aus mit Python betreiben werden. Sie werden Operationen wie das Einfügen von Daten in Datenbanktabellen Sie können Daten aktualisieren, löschen und Daten aus der Datenbank abfragen Dann können Sie diese Daten in Ihrem Python-Programm verwenden . Python kann mit vielen Datenbanken wie MySQL, Post GracuLocle oder SQLite usw. interagieren vielen Datenbanken wie MySQL, Post GracuLocle oder SQLite In diesem Abschnitt erfahren Sie, wie Sie mit einer SQL Light-Datenbank und einer Post-SQL-Datenbank interagieren einer SQL Light-Datenbank und einer Post-SQL-Datenbank SQL Lite und PostGrasul unterscheiden sich darin. SQLite ist keine Client-Server-Datenbank. Stattdessen ist es in das Endprogramm eingebettet. Also, was bedeutet das? Nun, schauen wir uns dieses Programm an. Wenn Sie dem vorherigen Abschnitt folgen, wissen Sie, dass wir dieses Programm im nächsten Abschnitt erstellen werden. Wenn Sie hier auf eine Schaltfläche klicken, werden einige Daten angezeigt, und diese Daten werden in der SQL Lite-Datenbank gespeichert. Im Gegensatz zu anderen Datenbanken wie Postgradual-SQL basiert SQLite auf einer Datei All diese Daten hier werden also in einer Punkt-DBFle-Datenbankdatei gespeichert in einer Punkt-DBFle-Datenbankdatei Das heißt, Sie können dieses Programm einfach einer anderen Person geben dieses Programm einfach einer anderen Person , die SQLite nicht installiert hat, und sie können dieses Programm verwenden, sodass sie hier weitere Daten hinzufügen, Daten aktualisieren und löschen können und so weiter Aber wenn Sie dieses Programm in der Postgraduierten-SQL-Datenbank haben, der Benutzer, dem Sie das Programm geben müsste der Benutzer, dem Sie das Programm geben, PostgreSQL auf seinem Computer installiert haben , um die Daten verarbeiten zu können Denken Sie also an SQLite, eine kleine Datenbank, und Sie können sie portabel nennen, aber sie ist sehr beliebt und Post-GrascUL wäre besser für die Verwendung in einer Webanwendung geeignet Nehmen wir an, Sie haben einige Formulare, Sie erhalten einige Daten vom Benutzer auf Ihrer Website und speichern Ihre Daten in einer Post-GrascUL-Datenbank auf Ihrem einer Post-GrascUL-Datenbank Python ist ein Programm, das die Daten aus Ihren Formularen auf dem Client im Browser abruft dem Client im Browser und diese Daten in Ihre Datenbank sendet. Um mit diesen Datenbanken interagieren zu können, benötigen Sie zwei Bibliotheken, und diese Bibliotheken dienen als Schnittstellen, und diese Bibliotheken dienen als Schnittstellen um tatsächlich SQL-Code an die Datenbank zu senden, und die Bibliothek zur Interaktion mit einer SQLite-Datenbank heißt SQLite Three, und die Bibliothek für die Arbeit mit einer Postgradual-SQL-Datenbank ist Psycho In diesem Abschnitt und in der nächsten Vorlesung werde ich Ihnen zeigen, wie man mit SQLite 3 arbeitet, und dann springen wir zu Psychopg zwei. Lassen Sie uns also weitermachen. 163. 162. Verbindung mit einer SQLite-Datenbank mit Python: Ordnung. In dieser Vorlesung werden Sie lernen, wie man SQLite Three benutzt Acul Three ist also eine Python-Bibliothek zur Interaktion mit SQL Lite-Datenbanken Stellen Sie sich das also als Python-Wrapper für SQL-Code vor. Sie können also mit Ascoli Three tatsächlich SQL-Code in Python schreiben mit Ascoli Three tatsächlich SQL-Code in Python Sie müssen Scull Three nicht installieren, da SQLite Three eine integrierte Python-Bibliothek ist Sie müssen also nur Kult Drei importieren. Lass es mich testen. Drehbuch eins. Ja, es funktioniert. Nun, der Standardprozess der Interaktion mit einer Datenbank würde aus fünf Schritten bestehen. Zuerst stellen Sie eine Verbindung zur Datenbank her. Zweitens erstellen Sie ein Cursorobjekt, und das Cursorobjekt ist wie ein Zeiger, um tatsächlich auf Zeilen aus einer Tabelle einer Datenbank zuzugreifen. Dann wenden Sie im ersten Schritt eine SQL-Abfrage an, sodass Sie möglicherweise Daten in die Datenbank einfügen oder Daten aus der Tabelle auswählen möchten usw. Und dann besteht der vierte Schritt darin , Ihre Änderungen in die Datenbank zu und dann die Verbindung zu schließen. Lassen Sie uns also weitermachen und ein Beispiel mit all diesen fünf Schritten schreiben , die ich gerade erwähnt habe. Als Erstes müssen Sie also eine Verbindung herstellen und dieses Verbindungsobjekt in einer Variablen speichern . Sagen wir also C. Das wäre gleichbedeutend mit Kult Three Dot Connect. Und was Sie hier übergeben, ist die Datenbankdatei. Also sagen wir es Punkt DB. Und wenn Sie noch keine Datenbankdatei haben , wird Ihre Datenbank mit dieser Codezeile erstellt und die Verbindung wird hergestellt. Wenn Sie eine Datenbank haben, wird so einfach eine Verbindung zu Ihrer vorhandenen Datenbank hergestellt . Dann müssen Sie ein Cursor-Objekt erstellen, also die Variable ausschneiden, und Sie müssen auf Ihre Verbindung und dann auf die Cursormethode verweisen , die eine Methode des Verbindungsobjekts ist So weit so gut, dann kommt hier der eigentliche SQL-Code. Sie möchten auf Ihr Cursor-Objekt zeigen und dann die Execute-Methode verwenden. Und dann geben Sie in Klammern Ihren SQL-Code ein. Denken Sie daran, dass Ihr SQL-Code immer innerhalb des Codes steht. Sie übergeben also SQL-Code als Zeichenfolge an die Ausführungsmethode des Cursorobjekts der SQL Lite-Bibliothek Three. Wenn Sie also mit SQL vertraut sind, sollte Ihnen das leicht fallen. Wenn Sie mit SQL nicht vertraut sind, ist SQL ziemlich einfach, sodass Sie es ziemlich schnell lernen können. Derzeit haben wir eine Datenbank, aber wir haben keine Tabellen in der Datenbank, weil eine Datenbank aus Tabellen besteht und Tabellen Zeilen und Spalten haben. Sie möchten also zunächst eine Tabelle erstellen. Und es hat sich bewährt, Großbuchstaben für die SQL-Schlüsselwörter zu verwenden . Create ist also ein ASCL-Schlüsselwort. Table ist ebenfalls ein ASCUL-Schlüsselwort. Und dann möchten Sie den Namen angeben, den Sie der Tabelle geben möchten. Sagen wir Laden. So ordnen Sie Python vasQul an, um eine Tabelle zu erstellen, aber dann müssen Sie angeben, welche Spalten Sie möchten, welche Felder Sie in Ihrer Tabelle haben möchten Nehmen wir also an, wir erstellen eine Tabelle. Wir haben ein Geschäft, wir haben ein Geschäft und wir wollen unsere Produkte in einer SQL-Datenbanktabelle speichern. Also würden wir den Artikel haben wollen. Das wäre also der Artikelname. Und das Element wäre ein Textdatentyp. Text ist also wie Zeichenketten in Python, und dann möchten Sie eine Menge haben. Und das wäre eine Ganzzahl. Also, wie viele von diesem Artikel Sie in Ihrem Geschäft haben und auch den Preis. Und sagen wir mal real für den Preis , der in Python ein Float sein sollte. Also eine Dezimalzahl. Das ist es. Hier schließt der Code des SL-Codes, und hier ist die letzte Klammer der Execute-Methode. Dann müssen Sie diese Änderungen in die Datenbank übernehmen. Sie verweisen also auf die Verbindung und bestätigen dann, und dann möchten Sie die Verbindung schließen. Das ist es also. Du speicherst das und gehst und führst es aus. Qlite ist natürlich nicht definiert, weil ich hier bei Typo einen Fehler gemacht habe Und wieder, und wie Sie sehen, wurde eine Datenbank erstellt Wenn Sie jetzt wieder im Programm sind, erhalten Sie eine Fehlermeldung, da die Tabelle bereits in der Datenbank vorhanden ist. Was Sie hier also tun könnten, ist ein einfacher Trick. Sie müssen Ihrer SQL-Zeile etwas Code hinzufügen. Sie sagen, erstellen Sie eine Tabelle, falls sie nicht existiert. So sicher. Und wenn Sie Ihren Code jetzt erneut bearbeiten, wird nichts passieren, denn Python stellt Verbindung zur Datenbank her und erstellt dann einen Cursor. Und wenn es dann eine Tabelle namens store gibt, tut sie nichts und geht zur nächsten Zeile über. Wenn es keine Tabelle gäbe, würde sie eine Tabelle erstellen. Es ist also gut, diese einfache Bedingung hier im SQL-Code zu haben . Wie wäre es, ein paar Daten zu unserer leeren Tabelle hinzuzufügen? Lass uns das versuchen. C ausführen. Also führen wir wieder etwas SQL-Code aus, und das Schlüsselwort, das Daten in die Datenbank einfügt, ist insert. Dann möchten Sie angeben , wo Sie die Daten einfügen möchten. Also in den Speicher einfügen. Und welche Werte Sie in Ihre Speichertabelle einfügen möchten. Also Werte, dann öffnest du Klammern und innerhalb der Klammern gibst du die Werte in der richtigen Reihenfolge ein. Also in der Reihenfolge, in der Sie Ihre Spalten definiert haben, also haben Sie die Artikelmenge und den Preis, sagen wir Weinglas. Nun, das ist eine Zeichenfolge, also sollte sie in Anführungszeichen stehen. Und Sie sollten hier einfache Anführungszeichen verwenden, da Sie doppelte Anführungszeichen für den äußeren Ausdruck verwenden. Wenn Sie hier also doppelte Anführungszeichen verwenden, werden Sie Python verwirren und Sie werden weitermachen , also einfache Anführungszeichen verwenden Aus diesem Grund haben wir verschiedene Arten von Anführungszeichen, um Zeichenketten zu umschließen Also haben wir das Weinglas mit der Kette, und nehmen wir an, wir haben eine Menge von acht und den Preis von Speichern Sie das und fahren Sie fort und führen Sie es aus. Wir haben keinen Fehler erhalten, das war also erfolgreich. Was ist nun, wenn wir eine weitere Zeile einfügen wollen? Nun, wir könnten diese Zeile hier darunter hinzufügen. Aber wenn wir dann den Code ausführen, würden wir auch diese Zeile ausführen lassen. Wir hätten also ein Duplikat dieser Zeile. Daher könnten wir in diesem Fall eine Funktion verwenden , um unsere separaten SQL-Anweisungen zu umschließen. Sie können diesen Codeblock also einrücken, wenn Sie möchten, Sie können zum Bearbeiten von Zeilen einrücken gehen oder Sie können eine Tastenkombination verwenden, die in Ihrer Tastatur spezifisch sein kann Suchen Sie einfach hier nach Ihrer Tastenkombination, und dann können Sie sie einfach verwenden Der Grund, warum ich den Codeblock beabsichtige , ist , dass ich hier eine Funktion erstellen möchte Sagen wir, Funktion, Tabelle erstellen. Vergiss die Spalte dort nicht. Und dann möchte ich eine separate Funktion. Für eingefügte Daten. Das wäre also die SQL-Anweisung für die Insert-Funktion, aber Sie können den Unterschied zwischen dieser Funktion und dieser Funktion erkennen . Hier stellen wir keine Verbindung zur Datenbank her, was falsch ist. Also würdest du diese Zeilen hier einfügen wollen. Damit Sie eine Verbindung mit der Datenbank herstellen. Und dann schließen Sie diese Verbindung korrekt. Sie wissen jetzt also, wie man Python-Funktionen benutzt. Und natürlich müssen Sie hier Parameter an Ihre Funktion übergeben. Du willst also Artikel sagen, also nur ein paar Variablen und Menge. Preis. Und dann würden Sie diese Parameter hier , sodass Sie jedes Mal, wenn Sie die Funktion aufrufen, einige Argumente einfügen und diese Werte in Ihre Tabelle eingefügt werden. Jetzt können Sie Zeichenkettenplatzhalter und Python-Zeichenkettenplatzhalter verwenden, um diese Werte durch die Werte zu ersetzen , die der Benutzer beim Aufrufen der Funktion übergibt Dies ist jedoch keine gute Vorgehensweise, da Ihr Code anfällig für SQL-Injections von Hooks wäre , und das gilt natürlich, wenn Ihre Webanwendung im Internet ist auch sei, es ist eine gute Praxis hier Fragezeichen zu setzen Und dann, nach der SQL-Anweisung, nach dem Doppelcode, möchten Sie die Variablen übergeben , durch die diese Fragezeichen ersetzt werden könnten. Sie würden also Artikel wollen, also in der richtigen Bestellmenge und zum richtigen Preis. Also lass uns das alles jetzt versuchen. Ich möchte die Einfügefunktion ausführen, die ich gerade mit einigen neuen Elementen erstellt habe. Nehmen wir an, Wasser, Glas, wir haben zehn davon, und das wäre günstiger. Speichern Sie das und gehen Sie und führen Sie es aus. Ich habe hier einen schrecklichen Fehler gemacht. Ich habe alle Argumente mit Code verpackt. Also sollte Wasserglas in der Nähe sein, und das sind Zahlen. Also speichern Sie noch einmal und versuchen Sie es erneut. Und Ihre Daten sollten in der Datenbank bekannt sein. Also noch einmal, und sagen wir Kaffeetasse. Sicher nochmal ausführen. Ich bin mir sicher, dass Sie jetzt die Daten sehen möchten , mit denen Sie Ihre Datenbank in Ihre Tabelle eingefügt haben Ihre Datenbank in Ihre Tabelle eingefügt Lassen Sie uns also eine Funktion erstellen , die genau das tut. Sagen wir Tiefenansicht. Und Sie möchten eine Verbindung mit der Datenbank herstellen. Also lass uns das kopieren. Fügen Sie es hier ein und hier ist der SQL-Code, also führen Sie ihn aus Wir verwenden also immer die Execute-Methode , um SQL-Code an die Datenbank zu senden Und dann haben wir Zitate. Nehmen wir an, wir möchten die Daten aller Spalten der Speichertabelle auswählen . Wählen Sie also ein Sternchen aus, was bedeutet, dass alles aus dem Speicher stammt Ordnung. Also haben wir sie ausgewählt, aber wie holen wir uns diese Daten eigentlich , damit wir sie in Python verwenden können Nun, der Weg, sie abzurufen besteht darin, die Methode „Alle abrufen“ zu verwenden Und wir möchten auswählen, ob diese Zeilen in Variablen gespeichert werden sollen. Nehmen wir an, Zeilen rufen alles ab. Und dann müssen wir die Verbindung schließen. Im Gegensatz zu den anderen Methoden, bei denen wir Daten in die Tabelle geschrieben haben, wählen wir hier nur Daten aus, sodass wir nicht die Commit-Methode verwenden müssen. Und wir wollen die Variable Rose zurückgeben. Und ich drucke einfach gerne die Ausgabe der Funktion aus. Die Ausgabe der Funktion ist also variabel. Also lasse ich mir den Rosenwert auf der Kommandozeile ausdrucken. Speichern Sie das Skript, führen Sie es aus. Natürlich habe ich hier einen Tippfehler und sollte zurückgegeben werden. Versuche es erneut. Und hier sind unsere Daten. Wir haben also ein Glaswasserglas und zwei Reihen Kaffeetassen. Das liegt daran, dass wir die Funktion früher ausgeführt haben , die Insert-Funktion, und jetzt, wo ich das Skript erneut ausgeführt habe um die View-Funktion auszuführen, wurde die Insert-Funktion auch zum zweiten Mal ausgeführt . Also wurde die Kaffeetasse zweimal in die Tabelle gesteckt. Also gut, das ist für diesen Vortrag. Und in der nächsten Vorlesung werde ich Ihnen einige weitere Operationen zeigen, werde ich Ihnen einige weitere Operationen zeigen Sie mit der Datenbank durchführen können. Also werde ich später mit dir sprechen. 164. 163. SQLite: Auswählen, Einfügen, Löschen und Aktualisieren von SQL-Datensätzen: In der vorherigen Vorlesung habe ich Ihnen die SQLite-Drei-Bibliothek vorgestellt und Ihnen gezeigt, wie Sie eine Tabelle in Ihrer SQL-Datenbank erstellen in Ihrer SQL-Datenbank und wie Sie Daten in Ihre Datenbank einfügen und wie Sie Daten auswählen und sie in Python anzeigen Wir haben also diese vier Zeilen, vier Zeilen in unserer Datenbanktabelle Und in dieser Vorlesung werde ich Ihnen schnell zeigen, wie Sie Daten aus Ihrer Tabelle löschen und aktualisieren können. Also noch einmal, ich werde eine Funktion erstellen, also lass mich diese kopieren. Wir müssen immer noch eine Verbindung zur Datenbank herstellen und ein Cursor-Objekt erstellen. Dann müssen wir die Execute-Methode verwenden. Und in diesem Fall möchte ich die Zeile löschen, in der sich das Weinglas befindet. Also würden wir innerhalb von Execute schreiben, aus dem Speicher löschen, wo Element gleich ist, ich würde hier gerne den Fragezeichen-Platzhalter verwenden Also markiere und in Klammern, wir würden den Parameter wollen , den wir durch unsere Funktion übergeben würden Also dieses Element hier ist das, was wir hier hineinlegen, item, und lassen Sie mich den Namen unserer Funktion ändern. Also das ist dieser. Verwechsle es nicht damit. Dies ist die Spalte unserer Tabelle, und dies war die Zeile aus der vorherigen Funktion. Lösche das auch. Und Sie möchten die Änderungen auch in Ihre Datenbank übernehmen. Also verpflichten Sie sich. Also das ist es. Und ich möchte das auskommentieren , damit ich die Insert-Funktion nicht noch einmal ausführen möchte. Und ich möchte, dass die View-Funktion ausgeführt wird, nachdem wir die Zeile gelöscht haben . Also lösche. Also Artikel, welchen Artikel würdest du löschen wollen? Also der Artikel Weinglas. Und mal sehen, was passieren wird. Wir haben einen Fehler und bitten Sie um drei Fehler, falsche Anzahl der gelieferten Bindungen. Zeile 28, ich kann sehen, ja, es gibt etwas, das ich oft vergesse. Du musst hier ein Koma hinzufügen. werden Sie sehen, wenn ich Ihnen beibringe, wie man eine Verbindung zu einer Postgrascule-Datenbank herstellt und wie man Daten aus der Postgrascule-Datenbank abfragt Daten aus Der Code ist ziemlich ähnlich, enthält aber einige wichtige Änderungen wie diese hier Es kann also verwirrend sein , wenn Sie mit verschiedenen Arten von Datenbanken arbeiten . Lass uns das noch einmal ausprobieren. Und es scheint jetzt zu funktionieren. Wineglass ist nicht hier. So löscht man also eine Zeile. Lassen Sie uns jetzt eine weitere Funktion hinzufügen. Zur Aktualisierung der Datenaktualisierung. In diesem Fall möchte ich die Anzahl der Fotobrillen aktualisieren . Also möchte ich das 10-11 ändern. Auch hier stellen Sie Ihre Verbindung zur Datenbank her, erstellen ein Cursor-Objekt, und dann führen Sie es aus, und hier geben Sie den Befehl Update SQL Aktualisieren Sie also, was Sie aktualisieren möchten, ist die Speichertabelle. Und welche Spalte möchten Sie aus der Speichertabelle aktualisieren? Sie möchten also den Namen der Spalte festlegen, was in diesem Fall Menge wäre. Und das wäre gleichbedeutend mit was? Ratet mal was? Fragezeichen. Und dann sagst du, wo? Oder lassen Sie mich Ihnen zeigen, wie Sie mehr als eine Spalte aktualisieren können. Wenn Sie also mehr als eine Spalte haben möchten, würden Sie ein Komma verwenden und dann sagen, dass der Preis einem anderen Fragezeichen entspricht Ordnung, also sagen wir aktualisieren, speichern und Menge und Preis darauf festlegen, aber welche Zeile? Also musst du hier „ Conditional“ angeben. Also wir Artikel entsprechen Weinglas. Oder Sie können dies auch auf ein Fragezeichen setzen. Sie haben hier also drei Platzhalter, und dann haben Sie das Zitat, um Ihre cL-Aussage zu schließen, und dann möchten Sie in Klammern die Parameter Menge übergeben, und Sie haben einen zweiten, der Preis und Artikel ist. Wenn Sie hier mehr als einen Parameter haben, setzen Sie kein Komma ans Ende, also endet das Ganze so Sie möchten diese Parameter hier auch übergeben , damit sie Ihre Funktionseingabe widerspiegeln Was wir hier haben, ist also wir die Speichertabelle aktualisieren und den Wert der Mengenspalte und der Preisspalte auf diese Werte setzen , aber nur für die Zeilen, in denen der Artikel einem bestimmten Wert entspricht. Also geben wir diesem hier diesen Wert und diesen die ersten beiden. Du verstehst die Idee. Speichern Sie das Skript und Sie müssen es hier aufrufen. Lassen Sie mich das kommentieren und aktualisieren. Also, welche Menge möchtest du weitergeben? 11, sagen wir. Und der Preis war fünf. Nehmen wir an, es würden bis zu sechs sein, und welchen Artikel möchtest du aktualisieren? Wasserglas? Das ist es. Speichere dein Script und probiere es aus. Und wir haben diese Werte wie erwartet aktualisiert. Und das wollte ich dir in dieser Vorlesung beibringen. Es könnte praktischer sein, hier tatsächlich einen Ausweis zu haben. Wir sagen also Menge und Preis, wobei die ID einer Zahl entspricht, damit wir nicht den gesamten Namen weitergeben müssen was verwirrend sein kann oder zu anfälligen Trägern führt In diesem Fall würden wir die Tabelle hier ändern wollen, und wir würden einen Primärschlüssel hinzufügen wollen , der alle inkrementiert Aber wie das geht, lernst du im nächsten Abschnitt des Kurses Dort werde ich Ihnen zeigen, wie man ein Programm für die reale Welt macht, und wir werden das in diesem Programm implementieren. Das waren also einige triviale Beispiele, und im nächsten Abschnitt bekommen Sie eine viel bessere Vorstellung Als Nächstes werden wir zu Postgradual-SQL springen und mit der Cycle PG Two-Bibliothek arbeiten . Wir sprechen später mit dir 165. 164. PostgreSQL-Datenbank mit Python: Willkommen zu dieser Vorlesung. Wir sind mit SQLite 3 fertig, also hoffe ich, dass Sie dieses Skript erstellen konnten , das ich Ihnen in den vorherigen Vorlesungen gezeigt habe Ihnen in den vorherigen Vorlesungen Denn in dieser Vorlesung werden wir dieses Skript verwenden, aber ich werde es so modifizieren, dass es mit der Interaktion mit Postgrade-SQL-Datenbanken kompatibel ist Interaktion mit Postgrade-SQL-Datenbanken kompatibel Postgrade-SQL-Datenbanken Zum Glück ist der größte Teil des Codes derselbe, mit einigen geringfügigen Änderungen. Natürlich bräuchten wir eine weitere Bibliothek namens Psycho PG Two Und dann werden wir uns Methoden aus dieser Bibliothek holen. Und im Gegensatz zu SQLite Three muss psycopg two installiert werden, es handelt sich also um eine Bibliothek eines Drittanbieters Es ist keine eingebaute Python-Bibliothek. Sie müssen also Psychopg Two installiert haben, und Sie müssen auch Postgradual-QL auf Ihrem Computer installiert haben In diesem Vortrag möchte ich Ihnen zeigen, wie Sie auch PostgraQL und Psychopg Two installieren PostgraQL und In Ordnung. Dies ist die offizielle Webseite von PostgrasQL und Sie können hier unten einfach zu den Downloads gehen Und dann willst du dein Betriebssystem finden. PostGraqul funktioniert also auf Mac, Linux und Windows, auch unter Solaris Also bin ich auf Windows. Ich klicke einfach auf Windows, und wenn Sie PostGrasul installieren, installieren Sie auch PG Admin Three, ein grafisches Tool, ein grafisches Tool dem Sie Ihre Datenbanken sehen können Sie kennen sich mit MySQL aus, PG-Admin entspricht PHB Madmin Post Grad QL wird auch mit einem Stack Builder geliefert , einem Paket, mit dem Sie andere Post-Grad-SQL-Erweiterungen herunterladen und installieren können andere Post-Grad-SQL-Erweiterungen herunterladen und installieren Nehmen wir an, Sie möchten eine Erweiterung für räumliche Daten, also um räumliche Daten in PostQL zu speichern , damit Sie sie für JS-Anwendungen verwenden können Dafür gibt es also eine Erweiterung namens Post GS. Wie dem auch sei, ich zeige dir, wie man Erweiterungen installiert. Zuerst müssen Sie PostgreSQL herunterladen und ich bin auf Windows, also werde ich darauf klicken Und ich werde eine Weile warten, bis mein Download abgeschlossen ist. Also werde ich schnell den Installationsprozess durchgehen. Ich werde also nur gefragt, wo ich Post Grass QL installieren möchte Post Grass QL installieren möchte und wo meine Daten gespeichert werden. Und hier sollten Sie vorsichtig mit diesen Zugangsdaten sein. Also Ihr Superuser, der die meisten Rechte für Ihre Datenbanken hat, und Ihr Superuser-Name ist Postgres, und ich würde eigentlich gerne eine einfache Datei erstellen Eine Textdatei, nur um meine Anmeldeinformationen zu speichern . Ich möchte auch das Passwort sagen. Eins, zwei, drei. Ordnung, also gebe ich Postgress eins, zwei, drei als Passwort ein Als Nächstes ist dies ein Port Ihres Servers Ihres Datenbankservers Also würde ich das auch zur Kenntnis nehmen wollen. Es geht um Ihre lokale Einstellung, also belasse ich diese Standardeinstellung. Und Sie müssen nur eine Weile warten, bis die Installation abgeschlossen ist. In Ordnung, das war erfolgreich. Nun, wenn Sie Stock Builder starten möchten, um Erweiterungen für die Datenbank der Klassenstufen zu installieren, sollten Sie das vielleicht überprüfen lassen also das ist mein Datenbankserver Und hier haben Sie eine Reihe von Erweiterungen , die Sie vielleicht installieren möchten, zum Beispiel räumliche Erweiterungen, und Sie haben Post gs für 32 Bit und Post Gs für 60 für Bit. Wenn ich auf Weiter klicke, sagt mir das, dass sie mindestens ein Paket benötigen , um installiert zu werden. Lass mich einfach Post gs installieren. Ordnung, stimmen Sie der Poss-Lizenz zu und fahren Sie dann einfach als Nächstes fort werde nach DEL gefragt , einer weiteren Schnittstelle für GIS-Daten Okay, es war schwierig, externe Erweiterungen zu installieren. Wenn Sie später zu Stack Builder zurückkehren möchten, sollte Ihr Stack Builder hier sein oder Sie können einfach zu Postgres SQL gehen, und hier haben wir auch den PG-Administrator, und hier ist das Anwendungs-Tag Ordnung, aber wenn Sie mit Python arbeiten möchten, möchten Sie über Python auf die PostGraqul-Datenbanken zugreifen , sodass Sie hier nicht mit diesen Anwendungen interagieren müssen mit diesen Die Möglichkeit, mit PostgrasQul mit Python zu interagieren , besteht darin, Psycho PG Two zu installieren, und Sie können Psychopg Two mit PIP installieren Sie können jedoch auf Probleme stoßen, da Cyclopedia Two in C geschrieben ist Sie müssen also einen C-Compiler Ihrem System unter Windows installieren. Zumindest haben Sie dieses Problem nicht auf einem Mac und Linux, . Sie müssen also einen C-Compiler auf Ihrem System unter Windows installieren. Zumindest haben Sie dieses Problem nicht auf einem Mac und Linux, da bin ich mir ziemlich sicher. Die Lösung dafür, eigentlich gibt es ein paar Lösungen. Eine der Lösungen ist , dass Sie vielleicht ein Visual Studio auf Ihrem Windows-Computer installieren möchten , aber das ist ein ziemlich großes Programm und ich würde es nicht installieren wollen. Die zweite Lösung, die ich am meisten bevorzuge, ist die Verwendung vorkompilierter Python-Bibliotheken. Und Sie können fast alle Python-Bibliotheken finden , die einen C-Compiler benötigen Sie finden diese Bibliotheken dieser Seite, die von Christoph Goldke bereitgestellt wird Wir suchen also nach einem SIP-Anruf. PG zwei. Hier haben Sie die Raddateien. Eine Raddatei ist also eine Datei, die mit PIP installiert werden kann. Was machst du also, wenn du etwas mit PIP installierst ? PIP installiere Psycho PIP lädt die Web-Datei von einem Remote-Server herunter und installiert sie dann Also hier kannst du nach deiner Version suchen. Das wäre die Datei für mein System. Also hol das einfach von hier und füge es hier ein, damit ich über die Atom-Befehlszeile darauf zugreifen kann . Also hier ist die Datei , die ich gerade heruntergeladen habe. Also mach einfach weiter und pip install, und dann musst du auf die Well-Datei zeigen Also das wird Oliged. Und das wurde erfolgreich installiert. Ich kann schnell überprüfen, ob das verfügbar ist. Und es scheint zu funktionieren. Sie können auch die Version Ihrer Bibliothek überprüfen , wenn Sie möchten. Es ist also 2.6 0.1. Ordnung, in der nächsten Vorlesung werden wir uns mit der Datenbank und der Post-Gradsqll-Datenbank verbinden , und dann werden wir Tabellen erstellen und Daten einfügen, sie anzeigen, löschen Lassen Sie uns also weitermachen. 166. 165. PostGreSQL: Auswählen, Einfügen, Löschen und Aktualisieren von SQL-Datensätzen: Sehr gut. In dieser Vorlesung lernen Sie, wie Sie eine Verbindung zu einer Post-GradesCL-Datenbank herstellen und wie Sie Tabellen in einer Post-Gradescule-Datenbank erstellen, Daten speichern, Daten anzeigen löschen und aktualisieren Das Skript, das Sie sich jetzt ansehen, ist ein Skript, das Sie in den vorherigen Vorlesungen mithilfe der SQLi-Datenbank erstellt haben der Wenn Sie diese Vorlesungen also nicht gesehen haben, empfehle ich Ihnen dringend, sie zuerst durchzugehen und dann hierher zu kommen. Denn in dieser Vorlesung werde ich einfach diesen Code durchgehen und nur ein paar Zeilen ersetzen. Das deutet darauf hin, dass der Code, den Sie für die Q Three-Bibliothek verwenden, dem Code, den wir für Psycopg Two verwenden werden, einer Bibliothek, die Sie verwenden, um eine Verbindung zu Postgrascue-Datenbanken herzustellen, sehr ähnlich ist Verbindung zu Postgrascue-Datenbanken Der Hauptunterschied besteht darin, dass Ihre Datenbank keine DB-Datei sein wird , die in Ihrem Dateisystem gespeichert Es wird eine Datenbank sein, die in Ihre Post-Grascule-Installation eingebettet in Ihre Post-Grascule-Installation Die erste Anforderung ist also, dass Sie eine bestehende Datenbank auf Ihrem Datenbankserver haben müssen eine bestehende Datenbank auf Ihrem Datenbankserver Post Grass SQul wird mit einer Standarddatenbank geliefert. Sobald Sie PostgreSQL installiert haben, haben Sie eine Datenbank namens PostGres, sodass Sie die Datenbank einfach hier übergeben können, oder wenn Sie möchten, können Sie Ihre eigene Sie müssen also nur zu Ihrer PostgreSQL-Installation gehen und können über PG Admin eine Datenbank erstellen Also hier sind deine Datenbankserver, und das ist ein Standardserver Sie müssen zuerst eine Verbindung zu Ihrem Datenbankserver herstellen. Dass dies das Passwort wäre , das Sie bei der Installation von Postgress erstellt PostGress 123 gehörte mir. Ordnung. Also ich wurde erfolgreich verbunden und ich habe drei Datenbanken. Das ist also die Standarddatenbank , über die ich gesprochen habe, und dies sind zwei weitere Datenbanken, die ich erstellt habe. Um eine neue Datenbank zu erstellen, klicken Sie einfach mit der rechten Maustaste auf die Datenbanken und die neue Datenbank. Sagen wir Datenbank eins, und Sie müssen den Besitzer angeben, also den Benutzer Ihrer Datenbank. PostgresST habe ich angegeben, als ich Postgres UL installiert habe. Das sollte ausreichen In Ordnung, jetzt hast du hier eine Datenbank. Wenn Sie darauf klicken, stellen Sie eine Verbindung her. Jetzt kannst du das einfach schließen und zu Python zurückkehren. Okay, lassen Sie mich zuerst diese Zeilen auskommentieren , damit diese Funktionsinstanzen nicht aufgerufen werden, wenn ich das Skript ausführe. Wir haben also eine leere Datenbank. Also das erste, was wir tun möchten, ist eine Tabelle zu erstellen. Aber zunächst möchte ich das auch ändern. Psychopharmakon zwei. Und natürlich möchte ich SQ L drei chargenweise ersetzen es durch PG zwei ersetzen Deshalb möchte ich, dass all diese Bibliotheksnamen hier durch Pycopg Two ersetzt werden Also ersetze alles und drücke einfach Escape. Das geht weg. Zum Glück ist dieser Code derselbe wie die SQLite-Drei-Bibliothek. Also haben wir connect und dann haben wir das Cursor-Objekt, dann haben wir die Execute-Methode commit und close Wir müssen hier nur die Parameter ändern. Und hier möchten wir den Datenbanknamen, den Benutzernamen, den Host, das Passwort und die Portnummer Ihres Datenbankservers übergeben den Datenbanknamen, den Benutzernamen, den Host, das Passwort . Und das alles steht in Anführungszeichen. Es wird also als Zeichenfolge an die Connect-Methode übergeben. Zuerst haben wir einen Datenbanknamen. Also der Parameter dbname und das wird einem Wert entsprechen Sie müssen den Wert also in einfache Anführungszeichen einfügen. Das ist also Datenbank. Nun, der Name der Datenbank. Dann haben Sie einen Benutzer und seien Sie sich bewusst, dass Sie hier keine Kommas verwenden müssen Das alles geht also als Zeichenfolge und wird von der Connect-Methode als Zeichenfolge gelesen Der Benutzer setzt also Anführungszeichen, Post Grass, dann haben wir das Passwort, Post Grass, eins, zwei, drei, dann haben Sie den Hostnamen, also den Host-Parameter. Das sollte der lokale Host sein. Ordnung. Lokaler Host sollte also dein Hostname sein und so ist es immer. Und schließlich haben wir die Portnummer, und die steht auch in Anführungszeichen. Also 532 Das sind also die Parameter, die Sie an Ihre Connect-Methode oder die Cycle-PG-2-Bibliothek übergeben Ihre Connect-Methode oder die Cycle-PG-2-Bibliothek Dann versuchen wir, diese Funktion aufzurufen. Tabelle erstellen ist also eine Funktion, und ich werde das Skript speichern. Also lass mich sichergehen, dass du weißt, was hier passiert. Also stellen wir eine Verbindung zur Datenbank und dann haben wir dieselben Methoden für die Cycle PG Two-Bibliothek. Wir erstellen also einen Tabellennamenspeicher und dann haben wir drei Spalten für diese Tabelle. Und wir übernehmen diese Änderungen und schließen die Verbindung. Also speichere das Skript. Control S. Alan, ruf das Drehbuch auf. Und das sieht erfolgreich aus. Wenn du möchtest, kannst du einfach zu PG at Mean gehen. Und hier siehst du die Tabelle , die du gerade erstellt hast. Geben Sie einfach das Passwort und Sie müssen zu Ihrer Datenbank gehen. Also Datenbank eins, erweitere das. Dann müssen Sie zu Schemas und öffentlichen Tabellen gehen. Und das ist unser Tabellenname. Wir haben also die Lagertabelle und Sie haben drei Spalten, Artikelmenge und Preis. Ordnung. Wir haben eine leere Tabelle, also lassen Sie uns weitermachen und einige Daten in diese Tabelle einfügen. Ich kopiere einfach diese Verbindungszeichenfolge und füge sie ein. Hier drin. Denken Sie dann daran, dass wir beim Einfügen von Werten für ganze drei Fragezeichen verwenden. Wenn Sie möchten, können Sie Platzhalter zur Zeichenkettenformatierung verwenden Also eins für den Artikel, eins für die Menge und noch eins für den Preis Lassen Sie mich das nach dem Komma hinauszögern. Nach dem Zitat übergeben Sie leider den Prozentsatz, sodass Sie die Zeichenkettenformatierung bereits kennen, und dann geben Sie das Tupel der Variablen an, in die Sie einfügen möchten Also Artikelmenge und Preis. Sie können das also verwenden, aber das wäre anfällig für SQL-Injections von Tuckers Also ist es keine gute Idee. Ich kann das tatsächlich ausführen , nur um zu sehen, was passiert. Sagen wir also April und zehn und 15. für den Preis. Und lassen Sie mich das ausführen. Es sieht also so aus, als ob es funktioniert hat, und wir können es in der Tabelle hier überprüfen. Sie können also einfach zu Ihrer Datenbank gehen, die Datenbank eins ist. Und hier können Sie eine einfache SQL-Abfrage ausführen, alles aus dem Store auswählen, alles aus dem Store auswählen auf Ausführen gehen und Sie sehen, dass Apple zur Tabelle hinzugefügt wurde. Es funktioniert also, aber es ist riskant, die Python-String-Formatierung zu verwenden. Was Sie also tun möchten, ist, dass ich es einfach für eine Weile stehen lasse, damit Sie die Dinge vergleichen und um Schädelinjektionen zu vermeiden, sollten Sie Ihre Variablen tatsächlich als zweiten Parameter an die Execute-Methode übergeben als zweiten Parameter an die Execute-Methode Das bedeutet also, dass Sie keine Oden verwenden müssen, also geben Sie einfach den Prozentsatz S weiter, einfach so Dann setzen Sie hier ein Komma, das bedeutet, dass diese Zeichenfolge hier in doppelten Anführungszeichen ein Argument ist, und dann ist diese hier das andere Dann übergibst du deine Variablen, das sollte jetzt funktionieren Ich bin mir sicher, dass Sie den Unterschied zwischen diesem und dem erkennen können . Und ich werde das einfach auskommentieren, damit es nicht ausgeführt wird. Und sagen wir Orange. Ausführung zu gleichem Preis und gleicher Menge. Und lass uns bei PG Mad Man einchecken. Lassen Sie mich die Abfrage erneut ausführen. Und Sie sehen, dass Orangen der Tabelle als Neuro hinzugefügt wurden. Das ist also der richtige Weg und ich werde das löschen. Ordnung. Schauen wir uns nun die View-Funktion an. Die View-Funktion stellt also eine Verbindung zur Datenbank her und wählt alle Zeilen aus der Speichertabelle aus. Dann speichern wir diese Zeilen mit der fatalen Methode in der Zeilenvariablen. Dann geben wir diese Zeilen als Funktionsausgabe zurück. Alles, was Sie hier ändern müssen, ist das Argument der Connect-Methode. Also leg sie einfach hierher. Und es sollte startklar sein. Lassen Sie mich die Funktion ansehen, aufrufen und ausführen. Und ja, wir müssen es ausdrucken. Hab es vergessen. Ja. Also, wir haben April und wir haben jetzt drei Orangen , weil ich gerade, als ich das Skript hier ausgeführt habe, die Insert-Funktion erneut ausgeführt habe, also haben wir zwei Orangen und eine weitere, wenn Sie Platzhalter zur Zeichenkettenformatierung verwenden Also verstehst du die Idee. Schauen wir uns die Löschung an. Funktion. Auch hier müssen wir Argumente von Psychopg Two Connection übergeben Dann müssen wir den Artikel aus dem Store löschen, auch hier können wir kein Fragezeichen verwenden, also müssen wir Prozentsätze verwenden Und dann übergeben wir als zweites Argument die Artikelvariable Es ist also dasselbe wie Feld Drei, aber wir verwenden hier Prozentsätze Und lass mich Löschen nennen. Ich werde das hier auskommentieren und löschen. Was Sie also löschen möchten, ist der Artikel, welcher Artikel? Nehmen wir an, wir möchten Zeilen löschen , in denen das Element Orange entspricht. Schauen wir uns also an, wie das geht. Ja, der Artikel wurde gelöscht. Die Zeilen mit dem orangen Element wurden gelöscht und wir haben die View-Funktion ausgeführt, also haben wir jetzt eine Zeile. Unsere Tabelle hat nur eine Zeile. Ein kurzer Blick auf die Aktualisierungsmethode. Einfach so. Und hier aktualisieren wir die Lagertabelle, und da stellen wir ein, also aktualisieren wir die Menge auf diesen Wert und den Preis auch auf diesen Wert, bei dem der Artikel diesem Wert entspricht. Ordnung, wir haben also einen, zwei, drei Werte und wir übergeben hier nach dem Komma drei Variablen Also als zweites Argument der Execute-Methode, und die Update-Methode erhält drei Argumente Lassen Sie mich das kommentieren und aktualisieren, wir haben nur eine Zeile. Also möchte ich die Menge der Äpfel auf sagen wir 20 setzen. Und den Preis, lassen wir den Preis gleich bleiben. Und für den Artikel Apple einfach so und fertig. Und wir haben die Menge auf 20 geändert. Das war es also. Ich glaube , das war ganz einfach. Wenn du also schon einmal S wie drei gelernt hast, war das für dich ziemlich einfach. Und wenn Sie Fragen haben, können Sie diese gerne im Diskussionsbereich stellen. Ich antworte gerne. Wir sehen uns in der nächsten Vorlesung. 167. 166. App 6: App zur Buchbestandsaufnahme: Willkommen in diesem neuen Bereich. Und in diesem Abschnitt erfahren Sie , wie Sie ein echtes Programm erstellen , das es dem Benutzer ermöglicht, Informationen über Bücher zu speichern. Ich habe dieses Programm also bereits erstellt und werde Ihnen Schritt für Schritt zeigen, wie Sie dasselbe tun können. Ich habe das Programm hier und es ist eine ausführbare Datei. lernen also nicht nur, wie man das Dot Pi-Programm erstellt, Sie lernen also nicht nur, wie man das Dot Pi-Programm erstellt, sondern auch, wie man ausführbare Dateien erstellt, die unter Windows ausgeführt werden , und Punkt-App-Dateien, die auf einem Mac laufen. Sie können Ihr Programm also grundsätzlich jedem geben und dieser muss Python nicht auf seinem Computer installiert haben . Also nenne ich das Programm Bookstore. Und das wurde hauptsächlich mit Kinte, einer grafischen Benutzeroberflächenbibliothek , und der ASQ Light Three-Bibliothek, einer Bibliothek zur Interaktion mit der ASQE Light-Datenbank, einer Bibliothek zur Interaktion mit der ASQE Wir haben hier also vier Einträge, in die Sie einen neuen Buchdatensatz eingeben können Nehmen wir an, Sie haben ein neues Buch in Ihrem Geschäft und möchten es zu Ihrer Datenbank hinzufügen. Und hier können Sie alle Bücher sehen , die dem Programm hinzugefügt wurden. Sie können schnell ein neues Buch hinzufügen, sagen wir Pythons für den Titel rdt Sie haben die ISBN-Nummer, eindeutige Identifikationsnummer für Bücher ist die eine eindeutige Identifikationsnummer für Bücher ist. Sie ist ziemlich lang Nehmen wir an, Sie fügen einen Eintrag hinzu, und dann sehen Sie sich alles noch einmal an und Sie werden sehen , dass der neue Eintrag zur Datenbank hinzugefügt wurde. Jeder Datensatz, den Sie hier sehen, wird also tatsächlich in einer Tabelle in dieser Light One-Datenbank gespeichert. Dann haben Sie hier einige andere Schaltflächen. Wenn Sie möchten, können Sie also tatsächlich nach einem Eintrag für einen Datensatz suchen, einen Sucheintrag, und dann wird der Eintrag angezeigt , den Sie suchen. Wenn Sie auf den Eintrag klicken, werden hier alle Felder in den einzelnen Textbüchern angezeigt Löse dich alle noch einmal, und du kannst auch Datensätze aktualisieren und löschen Und schließlich können Sie das Fenster schließen. Es ist also keine großartige Benutzeroberfläche. Ich bin kein großartiger Benutzeroberflächendesigner, aber Sie lernen eine Menge, wenn Sie dieses Programm erstellen. Es ist also ziemlich lang, aber es wird sich auszahlen . Also lass uns anfangen. 168. 167. Die Benutzeroberfläche entwerfen: Hallo zusammen. Und in diesem Vortrag werden Sie damit beginnen , unser Buchhandlungsprogramm aufzubauen Konkret werden wir an der grafischen Benutzeroberfläche arbeiten , weil dieses Programm sozusagen aus zwei Teilen besteht Es hat also ein Backend und es hat ein Frontend. Das Backend ist der Sculi-3-Datenbankcode. Also der Code, der mit der Datenbank interagiert. Und das Frontend ist der Code der Tkinter-Bibliothek. Also der Code, der all diese Schaltflächen, diese Einträge, diesen Text und dieses Listenfeld und diese Bildlaufleiste zusammensetzt Einträge, diesen Text und dieses Listenfeld und diese Bildlaufleiste Normalerweise müssten Sie also wählen, ob Sie zuerst am Back-End-Code arbeiten möchten oder ob Sie der Erstellung des Frontend-Codes beginnen möchten. Zuallererst möchten Sie jedoch zunächst einige Anforderungen definieren. Sie möchten also sagen, was Ihr Programm tun wird. Nehmen wir an, Sie möchten, dass Ihr Programm eine Liste der aktuellen Datensätze anzeigt. Wenn Sie also VO drücken, sehen Sie hier die Liste der Datensätze. Und dann möchten Sie, dass Ihr Programm nach einem aktuellen Eintrag sucht, und dann möchten Sie Andrea hinzufügen und Daten aktualisieren und auswählen. Und dann möchten Sie, dass das Programm das Fenster schließt. Das sind also im Grunde unsere Anforderungen, und jetzt können Sie wählen, ob Sie mit dem Schreiben des Beck-Endes beginnen möchten, also könnten Sie eine Funktion schreiben, die alle Daten aus der Datenbank auswählt. Dann könnten Sie diese Daten als Text zurückgeben. Sie können sie also vorerst einfach ausdrucken, wenn Sie zuerst das Backend schreiben möchten , weil Sie das Frontend nicht haben, Sie haben die grafische Benutzeroberfläche noch nicht erstellt. Sie können also einfach Funktionen des Backends schreiben und dann die Ausgabe ausdrucken. Oder Sie können zuerst mit dem Schreiben des Frontends beginnen. Sie erstellen also diese grafische Benutzeroberfläche. Aber wenn Sie auf diese Schaltflächen klicken, passiert nichts. Also im Grunde zeichnest du dieses Ding einfach mit Python. Und wenn Sie das getan haben, fangen Sie an, das Backend zu erstellen, und dann verbinden Sie alle Widgets und alle Befehle dieser Schaltflächen mit Ihren Backend-Funktionen. Es ist also eine Frage der Präferenz, ob Sie zuerst mit dem Backend oder dem Frontend arbeiten möchten. In diesem Kurs, in diesem Abschnitt, werden wir zuerst das Frontend erstellen. Wir werden also eine grafische Benutzeroberfläche erstellen , die eine Zeit lang nichts tut , bis wir sie mit dem Backend verbinden. Dann alles klar. Ich möchte zuerst diesen senkrechten Balken hier entfernen , weil ich hier die grafische Benutzeroberfläche zeichnen werde . Also werde ich eine Skizze machen, die du dir ansehen kannst, und die Skizze immer hier haben. Um diese Leiste zu entfernen, können Sie, wenn Sie neugierig sind, einfach zu den Einstellungen gehen. Dann gibt es noch ein Paket , das tatsächlich diese Leiste anzeigt , die Rap-Guide genannt wird, und Sie möchten alle Anzeigen im Editor um eine Zeile mit dem achten Zeichen verschieben alle Anzeigen im Editor um eine Zeile mit dem achten Zeichen Und das kann dir helfen, wenn du willst, vielleicht hilft es dir, ein bestimmtes Muster beizubehalten Sie möchten also nicht mehr als 80 Zeichen in Ihrem Code haben . Diese Leiste hilft dir also, diese Regel einzuhalten. Also, das wollen wir nicht, also habe ich es einfach entfernt. Und ich werde nur ein paar Notizen in die Dokumentzeichenfolge schreiben . Sie wissen also, dass eine Dokumentzeichenfolge wie eine Kommentarzeile ist. Wenn Sie also etwas in diese Dreifachcodes einfügen, wird dies von Pathon nicht als Code gelesen sondern es ist einfach wie eine Dokumentationszeichenfolge Also nur für Menschen zum Lesen. Also sagen wir, ich möchte ein Programm. Darin werden diese Buchinformationen gespeichert. Also Titel und Autor und ISBN. Also die Identifikationsnummer für Bücher. Und der Benutzer kann alle Datensätze einsehen. Sie können einen Eintrag suchen und einen Eintrag hinzufügen, einen Eintrag aktualisieren, löschen und das Programm schließen, wenn sie möchten. Schliessen. Acht. Wenn Sie also anfangen, darüber nachzudenken, möchten Sie jetzt eine grafische Benutzeroberfläche mit all diesen Schaltflächen haben , sodass der Benutzer diese Aktionen über einige Schaltflächen ausführen kann. Und dann überlegst du, wie sie Datensätze einsehen können. Und Sie wissen, dass Tkinter das Listenfeld hat, ein Widget, mit dem Sie Text als Liste anzeigen können . Also Zeile für Zeile Und dann möchten Sie, dass der Benutzer einen Eintrag bei einem Eintrag zum Aktualisieren eines Eintrags sucht . Sie benötigen also einige Widgets für Einträge. Und dann benötigen Sie natürlich einige Beschriftungen, aus denen hervorgeht, worum es bei jedem Eintrag geht. Das wäre also ein Label-Widget. Und vielleicht möchten Sie auch eine Bildlaufleiste, damit Ihre Liste scrollbar ist. Wenn es also viele Datensätze gibt, kann der Benutzer durch sie blättern und die Datensätze unter der Liste sehen. Und so haben wir eine Skizze. Dies erfordert natürlich etwas Fantasie und vielleicht etwas Erfahrung mit der Gestaltung von Benutzeroberflächen. Aber es ist sehr wichtig , dass Sie eine Skizze haben. Also werde ich diese Skizze auf dem Bildschirm behalten , während ich das Programm kodiere. Normalerweise möchtest du im echten Leben zeichnen, vielleicht auf echtem Papier oder einfach nur auf einem digitalen Bildschirm. Aber es ist wichtig, es zu haben, und jetzt, wo wir es haben, wollen wir in der nächsten Vorlesung damit beginnen, es zu bauen. 169. 168. Die Frontend-Schnittstelle programmieren: Großartig. Jetzt haben wir also eine Skizze unserer grafischen Benutzeroberfläche, und das sollte die Dinge einfacher machen. Jetzt können Sie einfach weitermachen und Ihre grafische Benutzeroberfläche in Python mithilfe der Kiner-Funktionen codieren Ihre grafische Benutzeroberfläche in Python mithilfe der Kiner-Funktionen Salt Kiner ist eine Bibliothek, die wir verwenden werden , um diese Oberfläche zu erstellen Und ich nehme an, Sie kennen Kinder bereits, weil ich das in einem der vorherigen Abschnitte erklärt habe das in einem der vorherigen Abschnitte erklärt Wenn Sie Kinder also nicht kennen, gehen Sie bitte vorher zwei Abschnitte zurück, dann werden Sie verstehen, wovon ich hier spreche. Also behalte ich die Skizze auf der rechten Seite. Und jetzt wissen Sie, dass Sie zur Erstellung einer grafischen Benutzeroberfläche mit Kiner entweder die Pack-Methoden verwenden können, entweder die Pack-Methoden verwenden können um Ihr Widget zu packen, oder die Grid-Methode Wir werden die Grid-Methode verwenden, daher könnte es eine gute Idee sein, tatsächlich ein Raster auf Ihrer Skizze zu erstellen Wenn Sie also Ihre Widgets erstellen, sagen wir, Sie erstellen eine Unterseite, möchten Sie die Nummer der Zeile und die Nummer der Spalte übergeben . Ein solches Raster wird die Dinge also einfacher machen. In Ordnung. Und ich möchte diese Dokumentzeichenfolge einfach löschen. Wir brauchen es nicht und es spart mir Platz , sodass Sie hier einen saubereren Arbeitsbereich sehen können. Ordnung. Von Skinerimport. Alles. Also erkläre ich den Code jetzt nicht , weil du diese Dinge bereits weißt. Wenn es etwas Neues gibt, werde ich es durchgehen. Window entspricht TK, der TK-Methode, die ein Fensterobjekt erstellt, und dann möchten Sie die Main-Loop-Methode anwenden, die im Grunde eine Möglichkeit ist, alle Widgets zusammenzufassen , die Sie jetzt in diesen Bereich eingeben werden In Ordnung, wir haben hier also vier Labels. Also haben wir hier den Labeltitel und den Autor und die ISBN. Also werde ich einfach Fobels mit vier Label-Objekten erstellen. Also nenne ich meine Objekte, meine Variablen von L eins bis L vier und wir verwenden dafür die Objektbeschriftungsmethode Fenster ist das übergeordnete Fenster, und der Text sollte der Titel sein. Drücken Sie also die Eingabetaste, Sie können zur nächsten Zeile wechseln, egal wo Sie sich in der vorherigen Zeile befinden. Sie müssen also nicht einfach wechseln, hierher gehen und dann die Eingabetaste drücken, Sie drücken einfach die Eingabetaste und schon gehen Sie zur nächsten Zeile. Erstens wenden Sie die Grid-Methode an. Das erste Label ist also Zeile Null, Spalte Null ebenfalls. Dann kannst du das einfach kopieren und noch dreimal einfügen. Das wären also L zwei, L drei und L vier. Und Sie möchten auch den Text Ihres Labels ändern. Hier und ISBN. Autor wäre Spalte zwei, wie Sie der Skizze entnehmen können Also 02, dann haben wir hier Eins, Null und dann 12 für das letzte Label. Also lass uns sehen, was wir haben. Ich möchte nur mein Drehbuch aufrufen. In Ordnung, es sieht vielversprechend aus. Fügen wir nun die Einträge hinzu. Das waren also statische Widgets. Jetzt müssen wir einige Einträge hinzufügen. Eine Eins wäre also ein Eintrag. Und entry erhält das Fenster als ersten Parameter, genau wie jedes andere Widget. Und auch ein Textvariablenparameter. Dieser Textvariablenparameter erwartet als Argument den Wert , den der Benutzer in das Eingabe-Widget eingibt. Das ist ein räumlicher Datentyp. Sie müssen hier also zuerst tatsächlich einen Datentyp erstellen, ein Objekt dieses Datentyps. Nennen wir es also. Wir erstellen den Eintrag für den Titel, sagen wir den Titeltext, der der Zeichenfolge vary entspricht. Das ist also die Funktion, die dieses räumliche Objekt erzeugt. Das würde dem Titel Geschlecht entsprechen. Das ist es also. Und Sie müssen dieses Eingabe-Widget auch so rastern. Und die ersten Widgets des Titel-Widgets entsprechen Zeile Null und Spalte eins. Das ist es also. Ich kann das hier schnell multiplizieren und hier Text und ISBN-Text verfassen hier Text und ISBN-Text Sie müssen auch einfach so die Zahlen oder weniger Variablen ändern einfach so die Zahlen oder weniger Variablen Und natürlich müssen Sie die Benutzereingaben hier weitergeben . Also das sollte so sein und diese beiden. In Ordnung. Und schließlich möchten Sie auch die Zeilen und Spalten für die Einträge angeben . Es wäre also Null, Drei, und dann haben wir das Text-Widget, eins, eins. In Ordnung. Und der letzte Eintrag. Eins. Drei. In Ordnung. Lass es uns überprüfen. Ja. Sieht gut aus. Großartig. Und jetzt ist die Leasingbox an der Reihe. Nennen wir es also Liste eins. Warum nicht? Das würde dem Listenfeld-Fenster entsprechen. Und dann möchten Sie die Höhe Ihres letzten Felds und auch die Breite angeben . Also habe ich darüber nachgedacht, sechs und 35 zu addieren. Es wäre eine gute Höhe und Breite. Sie können verschiedene Höhen und Breiten probieren und sehen, was besser wird. Und dann würde ich das gerne bewerten. Raster. Das würde also bei Zeile Nummer zwei und Spalte Null beginnen. Wenn wir es jedoch so belassen, werden die Dinge nicht so laufen, wie wir es erwarten. Eigentlich können wir das versuchen. Wie Sie sehen können, belegte das Listenfeld nur die erste Zelle. Also die erste Zelle der ersten Spalte in Zeile Null, eins, zwei, also Zeile zwei, Spalte Null. Stattdessen wollen wir, dass sich dieses Listenfeld auch auf die anderen Spalten und die anderen Zeilen erstreckt auch auf die anderen Spalten und , weil wir hier später Schaltflächen haben werden, also wollen wir das überspannen. Und Sie können die Skizze hier sehen. Wir können also einen Zeilenspannenparameter hinzufügen, und das würde auch einer Spanne von sechs Spalten entsprechen. Das wären also zwei. In Ordnung. Also das wäre ein Listenfeld. Wir müssen dort jedoch auch eine Bildlaufleiste hinzufügen, damit die Liste gescrollt werden kann wenn die Liste viele Daten enthält, viele Datensätze, um der Liste eine Bildlaufleiste hinzuzufügen Die Logik hier funktioniert so. Sie erstellen Ihre Bildlaufleiste teilen Ihrer Bildlaufleiste dann die Liste mit, in der die Bildlaufleiste scrollen muss Und dann sagst du deiner Liste auch, wer ihre Scrollleiste Lassen Sie uns also zunächst die Scrollleiste als eigenständige Bildlaufleiste erstellen die Scrollleiste als eigenständige Bildlaufleiste Sagen wir also SB One. Scrollbar-Methode. Das wird durch das Fenster berührt. Und dann wenden Sie die grüne Methode an. Die Bildlaufleiste würde sich also in einer dritten Spalte befinden. Und nachdem Sie diese beiden Objekte erstellt haben, möchten Sie eine Konfigurationsmethode auf die Lease-Box und eine Konfigurationsmethode anwenden . Zum Scrollbar-Objekt. Und diese Konfigurationsmethoden erhalten Argumente. Das wäre also ein Scroll-Befehl, Satz von einem Punkt entspricht. Das ist es heißt, dass die vertikale Bildlaufleiste entlang der Y-Achse auf diese Bildlaufleiste eingestellt wird und Sie dann zur Bildlaufleistenmethode wechseln. Entschuldigung, das muss konfiguriert werden, dann übergeben Sie den Befehl equals, um eine Y-Ansicht aufzulisten Das sollte also funktionieren. Sie übergeben hier einen Befehlsparameter, was bedeutet, dass sich beim Scrollen der Leiste die vertikale Ansicht des letzten Balkens ändert. Schauen wir uns also an, wie das läuft. Und es scheint, als hätte ich hier etwas vermasselt. Ich glaube, ich habe die Position der Bildlaufleiste in Zeile eins und in Spalte drei Die Bildlaufleiste sollte also eigentlich Zeile zwei Spalte zwei sein. Lassen Sie uns das noch einmal überprüfen. Ja, scheint zu funktionieren. Allerdings sieht es nicht sehr zentriert , weil wir es durch die gleichen Reihen ziehen müssen , wie wir es hier in der Box getan haben Also müssen wir hier einen Rowspan-Parameter hinzufügen und ihn auf sechs weitere Scrollbalken setzen, die zentriert aussehen Ordnung, jetzt müssen wir nur noch diese Button-Widgets hier hinzufügen Großartig. Wir haben also sechs Knöpfe. Fangen wir mit dem ersten an. Wir haben die Button-Methode. Fenster und Text, also Schaltflächen haben Text. A ist der erste. Und dann dachte ich daran , eine Breite von 12 anzugeben. Also sei weg, fertig. Das wäre Zeile zwei Spalte drei. Und wir haben fünf weitere Knöpfe. Also werde ich diese sechs einfügen, glaube ich. Also b2b3, vier, sechs Natürlich haben diese Schaltflächen jetzt keinen Befehlsparameter, weil wir später hier einen Befehlsparameter hinzufügen werden, und das wird entscheiden, was die Schaltflächen Aber im Moment ist das in Ordnung. Diese Schaltflächen werden also alle in Spalte drei angeordnet, und jeder hat einen anderen Zeilenwert. Und sechs. Großartig. Schauen wir mal, was wir haben. Und bumm. Ich habe vergessen, eine Zeilennummer für den geschlossenen Boden anzugeben. Sieben. Und jetzt sieht es besser aus. So erstellt man also eine grafische Benutzeroberfläche. Natürlich machen diese Knöpfe vorerst nichts. In der nächsten Vorlesung werde ich Ihnen zeigen, wie Sie Aktionen an diese grafische Benutzeroberfläche anhängen können. Wir werden also am Backend arbeiten und SQLite 3 verwenden um mit der Datenbank zu interagieren und diese Daten in dieser grafischen Benutzeroberfläche abzurufen Ich hoffe also, dass meine Routinen und meine Praktiken Ihnen helfen werden, grafische Benutzeroberflächen mit EZ zu erstellen , und wir sehen uns in der 170. 169. Das Backend der App programmieren: Hallo, willkommen zu dieser neuen Vorlesung. Und hier bauen wir unser Buchhandlungsprogramm weiter aus , das Buchaufzeichnungen speichert und aus einer Datenbank abruft Soweit Sie wissen, haben wir die grafische Benutzeroberfläche mit Kindern erstellt Das ist also unser Skript. Also im Grunde haben wir das Frontend unseres Programms. Und jetzt, das ist unsere grafische Benutzeroberfläche. Und im Grunde müssen wir jetzt all diesen Tasten einige Funktionen hinzufügen. Nehmen wir zum Beispiel an, wenn wir die Schaltfläche Alle anzeigen drücken, wird eine Funktion ausgelöst, die Daten aus einer SQL Lite-Datenbank auswählt und diese Daten dann abruft und sie hier in dieses Listenfeld einfügt. Das heißt, wir müssen eine Datenbank erstellen, eine SQLite-Datenbank mit SQLite drei Wir müssen auch zuerst eine Tabelle erstellen. Wir könnten das also im Skript machen, aber ich ziehe es vor, tatsächlich ein anderes Skript zu erstellen und dieses Skript dann hier zu importieren. Also Import, lass uns das neue Skript-Backend aufrufen. Also müssen wir ein Backend für das Pi-Skript erstellen . In Ordnung. Und jetzt möchte ich den Namen meines Frontend-Skripts ändern meines Frontend-Skripts , damit wir das gleiche Muster beibehalten. Sagen wir also Frontend. Ordnung. Also sind wir jetzt im Frontend-Skript und hier sind wir im Backend-Skript. Das bedeutet also, nehmen wir Sie erstellen eine View-Funktion, die Daten aus der Datenbank auswählt , und Sie erstellen diese Funktion hier, und dann gehen Sie zur Schaltfläche „Alle anzeigen und dann zum Befehlsparameter hier, und das wäre identisch. Sagen wir Befehl, nur um Ihnen eine Vorstellung zu geben, Befehl entspricht dem Backend und dem Namen der Funktion Also so etwas. Ordnung. Ich hoffe, das ergibt Sinn. Vorerst wäre es jedoch großartig, wenn wir dieses Drehbuch vergessen würden. Wir müssen also die grafische Benutzeroberfläche berücksichtigen, aber es ist gut, vorerst nicht mit diesen Widgets zu interagieren. Stattdessen drucken wir die Ausgaben von Funktionen aus, die Funktionen, die wir hier als Zeichenketten in der Befehlszeile erstellt haben . Wir werfen diese Daten also nicht in das kleinste Feld, sondern in das Terminal hier. Ordnung. Lass uns anfangen zu programmieren. Importiere SQLite drei. Das ist das Erste , was Sie tun möchten. Und ich werde hier ein Bild der grafischen Benutzeroberfläche behalten , damit Sie sich leicht darauf beziehen können. Also müssen wir eine View-Funktion erstellen. Aber vorher möchte ich eine Datenbank erstellen, also eine Verbindung zur Datenbank. Und das möchte ich in die Funktion einfügen. Sagen wir also Function Connect. Und wir haben ein Verbindungsobjekt. Das wäre also ein Scul Three Connect. Und nennen wir die Datenbankbücher Punkt dB. In Ordnung. Also stellen wir eine Verbindung zur Datenbank her. Dann definieren wir ein solches Cursor-Objekt. Und als Nächstes müssen wir die SQL-Anweisung ausführen. Also Cursor-Objekt, ausführen und in doppelte Anführungszeichen setzen, wir geben die SQL-Anweisung ein. Wir haben also eine Datenbank, und wir benötigen auch eine Tabelle in der Datenbank, in der wir unsere Buchinformationen speichern können. Denken Sie jetzt darüber nach. Benutzer: Wenn Sie dem Benutzer dieses Programm geben, wird er das Programm ausführen. Und jedes Mal, wenn sie das Programm ausführen, muss Ihr Skript überprüfen, ob es eine bestehende Tabelle in der Datenbank des Buches gibt. Wenn es also eine Tabelle gibt, sagen Sie, erstellen Sie die Tabelle nicht. Wenn es keine Tabelle gibt, möchten Sie die Tabelle erstellen. Erstellen Sie also eine Tabelle, falls sie nicht existiert. Und nennen wir ein Tabellenbuch, nur um es vom Datenbanknamen zu unterscheiden. Und dann möchten Sie einige Parameter übergeben. Der erste Parameter, den ich übergeben möchte, ist die ID. Verwechseln Sie das also nicht mit der ISBN-Nummer. Die Buchidentifikation, das ist nur eine Zahl, die bei Null beginnt, und sie wird automatisch um eins erhöht, sodass wir die Kontrolle darüber haben, wie viele Datensätze wir in der Datenbank haben Es ist also eine gute Idee, diese ID hier zu haben, das wäre eine Ganzzahl, und Sie müssen sie auf den Primärschlüssel setzen Das ist also eine obligatorische Spalte in Ihrer Tabelle. Dann haben Sie Titel als Text, Autor, hier als Text als Ganzzahl, und ISBN, auch das ist eine Ganzzahl Ordnung, das ist es. Sie möchten die Änderungen übernehmen und dann die Verbindung schließen. In Ordnung, also haben wir eine Verbindungsfunktion erstellt. Später, wenn wir dieses Skript ausführen, also das Frontend-Skript, und dann importieren Sie das Backend, dieses Skript, das Skript des Backends. Der Code des Backends wird also von Python gelesen. Wenn Sie diese Funktion jedoch nicht aufgerufen haben, wird dieser Code nicht ausgeführt. Was Sie stattdessen tun möchten, ist diese Funktion zu haben. Wird jedes Mal ausgeführt, wenn Sie diese Funktion ausführen. Sie führen also das Frontend aus und das importiert das Backend, sodass der gesamte Code ausgeführt wird Und diese Zeile hier wird ausgeführt. Die Funktion wird also immer dann ausgeführt , wenn Sie das Frontend ausführen. Ordnung. Ich hoffe , das ergibt Sinn. Oder lassen Sie mich das schnell besser erklären. Wir haben also ein A-Pi-Skript und wir haben ein B-Pi-Skript. Und im A-Pi-Skript importieren wir das B-Skript. Und was wir im B-Skript haben, ist eine Funktion PU, die etwas auf dem Bildschirm ausdruckt. Hey, und speichere das und speichere das auch. Wenn Sie also einen Punkt Pi ausführen, passiert vorerst nichts, weil Sie gerade Ihr Skript definiert haben. Aber wenn Sie das Skript hier, richtig, food, safe aufrufen und A erneut ausführen, erhalten Sie diesmal die Ausgabe der Funktion. Das ist also die Idee. Danke. Und zurück zu unserem Drehbuch aus der realen Welt. In Ordnung. Jetzt haben wir die Connect-Funktion. Beginnen wir mit der Erstellung einer Funktion zum Einfügen, die einige Daten in die Datenbank einfügt. Also fange ich mit der Insert-Funktion an , weil das eine einfachere Funktion ist als die andere. Also möchte ich zuerst mit den einfachen Dingen beginnen. Beilage des Entwicklers. So nenne ich meine Funktion. Und denken Sie darüber nach, dass Sie dort vier Einträge haben. Sie erwarten also vom Benutzer, dass er Titel, Autor, Jahr und ISBN-Nummer eingibt Titel, Autor, Jahr und ISBN-Nummer Sie möchten hier also vier Parameter und ISBN übergeben. Ordnung. Und dann müssen Sie natürlich eine Verbindung zur Datenbank herstellen. Da diese Funktion hier ist, wird sie nur vorübergehend eine Verbindung zur Datenbank herstellen und prüfen, ob eine Tabelle vorhanden ist , und die Verbindung wird geschlossen. Sie haben hier also eine geschlossene Verbindung Wenn Sie die Einfügetaste drücken, wenn Sie die Eingabe-Taste drücken, müssen Sie eine neue Verbindung zur Datenbank herstellen. Und lassen Sie mich weitermachen und auch diese beiden Zeilen besorgen , denn wir brauchen sie auch, richtig. Und hier führen wir unsere spezifische SQL-Anweisung in Anführungszeichen aus. Mit der Adentry-Schaltfläche wird also eingefügt. In das Buch, also die Werte des Tabellenbuches. Und hier ist jetzt ein Trick. Wir haben hier eine ID, das ist also ein Wert, der automatisch erhöht wird, sodass wir ihn nicht manuell übergeben müssen Und was wir stattdessen tun können, ist hier einen neuen Wert zu übergeben. Und Python versteht das und erstellt die ID automatisch. Und dann haben wir vier Fragezeichen, eines für jeden unserer Werte. Dann müssen Sie Ihre Parameter als zweiten Parameter der Ausführungsfunktion übergeben . Also als Tupel hier, Titel hier und ISBN Ordnung, lassen Sie mich eine weitere Funktion schreiben, und dann führen wir das Skript um es auszuprobieren und zu sehen, wie es läuft Also auf jeden Fall, sagen wir die View-Funktion. Dadurch werden also alle Datenzeilen aus der Tabelle abgerufen. Also kopieren wir das und legen sie hier ab. Also stellen wir eine Verbindung zur Datenbank her, erstellen ein Cursor-Objekt und führen dann eine SQL-Anweisung aus. Und weil es sich dabei um eine Select-Anweisung handelt, werden wir keine Änderungen an der Datenbank vornehmen, sodass wir hier keine Commit-Methode benötigen. Und das ist eigentlich ganz einfach. Wählen Sie alles aus dem Buch aus. Sie müssen Ihre Auswahl also tatsächlich als Umkipp zurückgeben Dann schnappst du dir diese Auswahl und fügst sie in das Listenfeld Sie möchten also, dass die View-Funktion einen Umschwung zurückgibt. Sagen wir also, rose, entspricht cur fetch all und dann können Sie die Verbindung schließen, aber Ihre Daten bleiben in der Variablen Rose gespeichert, sodass Sie hier einfach Zeilen zurückgeben können. In Ordnung. Also lass uns das Drehbuch jetzt ausprobieren. Und die Art, es auszuprobieren, wäre, eine gedruckte Anweisung zu verwenden. Wir würden also Insert aufrufen wollen und dann einige Daten manuell eingeben. Im echten Programm wird diese Einfügefunktion also wird diese Einfügefunktion irgendwo im Anzeigeneintrag ausgeführt. Taste. Aber vorerst müssen wir die Dinge einfach halten und unser Ziel Schritt für Schritt erreichen. Fügen Sie ein, lassen Sie uns hier einige Werte übergeben. Titel. Sagen wir das C und dann das Tablet des Autors John. In Ordnung. Und hier ist eine Ganzzahl, also müssen Sie nur eine Zahl übergeben und ISBL ist also eine Ganzzahl Sie müssen sie also nicht in Anführungszeichen setzen. Und dann möchten Sie auch die Ausgabe der View-Funktion ausdrucken Ausgabe der View-Funktion ausdrucken Großartig. Mal sehen, wie das läuft. Das wäre das Backend-Skript. Toll. Also wurde der Datensatz in die Datenbank eingefügt und die View-Funktion ausgedruckt. Wenn Sie das Skript erneut ausführen, erhalten Sie zwei Datensätze, da die Einfügefunktion zweimal ausgeführt wurde. Ordnung. Scheint gut zu laufen. Also, was haben wir sonst noch? Wir haben eine Suchfunktion. Und wir würden eine Or-Suche implementieren. Das bedeutet also, dass der Benutzer einen Titel oder einen Autorennamen oder das Jahr oder die ISBN-Nummer eingibt, oder er kann sich dafür entscheiden, alle gleichzeitig einzugeben Nehmen wir jedoch an, er gibt nur das Jahr ein, erhält er alle Zeilen, die diesem Jahr entsprechen Also müssen wir hier auch vier Parameter übergeben. Ben, alles klar. Und dann brauchen wir diese Codezeilen, also stellen Sie eine Verbindung zur Datenbank her, zum Cursor-Objekt und führen Sie es dann aus. Also lass uns eine Weile hier bleiben. Wir möchten alles aus Büchern auswählen, bei denen der Titel gleich etwas ist oder der Autor gleich etwas ist oder das Jahr gleich etwas ist oder die ISBN Und dann wäre der zweite Parameter das Tupel der Argumente, PhtalesBN Dann müssen wir alle Zeilen abrufen, die von dieser Abfrage zurückgegeben werden, und sie in dieser Zeilenvariablen speichern, die Verbindung schließen und erneut Zeilen die Verbindung schließen und erneut zurückgeben Alles klar. Ein Problem, auf das wir hier stoßen können, ist jedoch , dass der Benutzer, sagen wir, den Namen des Autors nur an die Einträge weitergeben möchte sagen wir, den Namen des Autors nur an die Einträge Diese Funktion ruft also nur die Argumente für den Autorenparameter ab. Diese anderen Parameter bleiben ohne Wert. Und dann erhalten Sie eine Fehlermeldung, weil Ihre Funktion so konzipiert ist , dass sie vier Parameter hat. In diesem Fall möchten Sie einige leere Zeichenketten als Standardwerte übergeben . Ordnung. Und diese beiden. Wenn der Benutzer also einen Autorennamen übergibt, sagen wir John Smith, sucht diese SQL-Anweisung nach einem leeren Titel oder nach dem Autorennamen John Smith oder nach einem leeren Ohr und einer leeren ISBN und so weiter Und es werden alle Zeilen mit John Smith als Autorennamen zurückgegeben mit John Smith als Autorennamen Ordnung. Also lass uns das sagen und es ausprobieren Also müssen wir verbinden, die Druckansicht einfügen. Sagen wir die Erde. Ich füge hier einen weiteren Datensatz ein John Smith. In Ordnung. Und dann, sagen wir, Suche drucken und Sie möchten einige Argumente übergeben. Zum Beispiel ist Autor gleich John Smith. In Ordnung. Ohne ein Zitat hier. Und mal sehen, wie das geht. Also haben wir hier diese Liste von Zeilen aus der View-Funktion , weil wir hier auch die View-Funktion haben. Und dann gibt die Suchfunktion diese Zeile für uns zurück. Also die Zeile mit ID drei und mit John Smith als Autor. Also das funktioniert gut. Lassen Sie uns weitermachen und eine Verdünnungsfunktion erstellen. Lassen Sie uns also darüber nachdenken, wie der Benutzer einen Datensatz löschen möchte. Wahrscheinlich würden sie also einige Datensätze in der zugehörigen Box sehen wollen . Dann würden sie einen der Datensätze auswählen wollen. Nehmen wir den Rekord für ID Three, die Erde, John Smith usw. an. Also würden sie das auswählen und dann die Löschtaste drücken Das heißt, wir wollen zuerst die Listenauswahl übernehmen, also die Auswahl aus dem Listenfeld, wir würden das als Tupel aufnehmen, aber darüber werden wir später nachdenken Also nehmen wir das als Tupel. Dieses Tupel hat eindeutige Identifikationsnummern oder die ID. Wir möchten also auf diese ID verweisen und dann zu unserer Datenbanktabelle gehen und die Zeile mit dieser ID löschen Hoffe also, dass das bei der Löschfunktion nicht sehr verwirrend ist , also würden wir die ID des Tupels erwarten , das der Benutzer auswählen wird Und dann würden wir diesen Code haben wollen und von dort aus beginnen Stellen Sie also eine Verbindung zur Datenbank her, Cursor-Objekt, führen Sie eine Anweisung aus. Ordnung. Mal sehen, wie das läuft. Also wollen wir aus dem Buch löschen , in dem ID etwas bedeutet. Großartig. Und dann ist dieses Etwas der ID-Parameter. Also das Argument dieses Parameters hier, und das ist der Spaltenname. Verwechseln Sie das also nicht mit diesem Funktionsparameter für den Spaltennamen Vergiss das Komma hier nicht. Und ja, das ist es im Grunde. Speichern wir dieses Skript jetzt und führen wir es aus. Wir fügen dort einige Daten ein. Sagen wir diesmal die Sonne. Und so hätten wir das C, wieder das C, die Erde und die Sonne, also würde ich die Erde gerne löschen. Und ich würde sie hier reinstellen, löschen wollen. Die Erde hat also eine Vorstellung von drei. Also würden wir hier drei bestehen wollen. Dann würden wir uns alle aktuellen Datensätze ansehen sobald wir sie gelöscht haben. In Ordnung. Also hier sind unsere Aufzeichnungen und die Erde ist verschwunden. Also funktioniert es super. Wie gesagt, diese ID wird wieder aus der Tabelle extrahiert. Das Tupel wird also die ID als erstes Element haben. Also werden wir im Grunde genommen von Tuple das Element mit dem Index Null abrufen und das erste Element an diese Löschfunktion übergeben Großartig. Die Funktion wäre ein Update. Aktualisieren. Und noch einmal, wie möchten Sie Datensätze aktualisieren? Wie würde der Benutzer also einen Datensatz aktualisieren wollen? Nun, auch hier könnten sie erwarten, dass sie eine Zeile aus dem Listenfeld von Tinder auswählen eine Zeile aus dem Listenfeld von Tinder und die Werte dieser Zeile in den Eingabe-Widgets angezeigt Von dort aus möchte der Benutzer möglicherweise eine dieser Zellen dieser Einträge ändern und unten auf „Aktualisieren“ klicken Also wieder holen wir uns die Auswahl aus dem Listenfeld, dann würden wir uns auf die Idee beziehen. Also ID hier als ersten Parameter, aber wir möchten auch die neuen Werte, die der Benutzer aus diesen Einträgen haben möchte, abrufen die neuen Werte, die der . Nehmen wir an, der Benutzer möchte den Titel von Sonne zu Mond ändern, sagen wir, und Sie würden diesen Titel bekommen. Der Titel wird also im Eingabefeld angezeigt und hier übergeben. Das Gleiche gilt für den Autor hier und die ISBN. In Ordnung. Und dann möchten Sie Ihre Tabelle aktualisieren. Aktualisieren Sie also die Tabelle, in der die ID dieser entspricht. Aktualisieren Sie die Tabelle mit diesen neuen Werten, wobei ID diesem Wert entspricht. Zuallererst müssen wir jedoch all diese Zeilen abrufen. Ordnung. Also aktualisiere , buche und du sagst fertig. Der Titel des Keyword-Sets entspricht also einem Fragezeichen. hier gilt: Fragezeichen Auch hier gilt: Fragezeichen und ISBN bedeuten Fragezeichen Aktualisieren Sie also das Buch und legen Sie diese Werte , dass ID einem anderen Fragezeichen entspricht Also dann bestehen wir hier ein Triple. Also ID, Titel, Autor und ISBN. Also sieht es gut aus. Wir übernehmen die Änderungen und schließen die Verbindung. Und mal sehen, wie das läuft. Derzeit haben wir also die Zeilen in der Tabelle, das C, wieder das C, die Sonne. Ja, diese drei Zeilen. Und lass uns die Sonne auf den neuesten Stand bringen. Also möchte ich das zuerst kommentieren und auch löschen. Konzentrieren wir uns also auf die Update-Funktion und das Update. Sie möchten also die Idee der Zeile weitergeben , damit Sie sie aktualisieren möchten. Und dann möchten Sie die Werte in der richtigen Reihenfolge übergeben . Also, was du für den neuen Titel willst, sagen wir, der Mond. Und wenn der Benutzer dann in der realen Oberfläche in der grafischen Benutzeroberfläche nur den Titel ändern möchte, lässt er die anderen Werte unverändert. Diese Werte werden also durch die vorhandenen Werte ersetzt. Also John Smith und Jahr 1919 die ISBN-Nummer. Aber in diesem Fall befinden wir uns nur in einem Geschmacksmodus, sodass wir diese Werte übergeben können Glatt. In Ordnung. Und eine Zahl. Also lass uns sehen, wie das jetzt läuft. Und es scheint, dass es nicht funktioniert hat. Die Sonne ist immer noch da. Also lass uns sehen, was wir hier haben. Aktualisiere den Titelautor hier, ISBN, wo IDs. Die ID sollte hier also am Ende des Sturzes stehen. Hmm. B, weißt du, wir haben sie in die richtige Reihenfolge gebracht , die wir hier festgelegt haben Also lass uns das nochmal ausprobieren. Hm. Jetzt funktioniert es. Also wurde die ID Vier durch Mond, John Smooth und die anderen Werte ersetzt . Großartig. Also ich denke, wir haben das Ben-Skript fertig. Und jetzt müssen wir all diese Funktionen an unsere Tasten anhängen . Wir haben also noch viel zu tun, und das werden wir in der nächsten Vorlesung tun. 171. 170. Das Frontend mit dem Backend verbinden, Teil 1: Hey, willkommen nochmal. Und das ist der letzte Schub , den wir unserer Bewerbung geben werden. Am Ende dieser Vorlesung werden Sie also über ein voll funktionsfähiges Programm verfügen, das Buchaufzeichnungen in einer ASQE Lit-Datenbank speichern und abrufen kann Buchaufzeichnungen in einer ASQE Lit-Datenbank speichern und abrufen Also, wie Sie wissen, haben wir zwei Skripte. Wir haben Front- und Punkt-Py und wir haben das Backend-Pi-Skript. Wir sind mit dem Bend Dot Pi-Skript komplett fertig. Deshalb haben wir all unsere Funktionen entwickelt, die eine Verbindung zur Datenbank herstellen und Daten drittens anzeigen, suchen, löschen und aktualisieren. Und jetzt müssen wir zum Frontend-Skript gehen , weil wir es ein wenig anpassen müssen , sodass das Front-End-Skript Daten aus dem Backend-Skript abrufen kann , oder genauer gesagt, die Funktionsausgaben abrufen kann, bei denen es sich im Grunde um Datentupel handelt Und fügen Sie dann diese Datentabellen in das Listenfeld ein. Im Grunde drückt der Benutzer also eine Taste, und dann werden diese Funktionen ausgelöst und die Daten werden in das Listenfeld eingefügt. Fangen wir also mit den einfachsten Dingen an. Das erste, was ich implementieren möchte, ist, die Datensätze im Listenfeld abzurufen , wenn der Benutzer die Ansicht oder die Schaltfläche drückt. Zuallererst müssen Sie, wie ich bereits erwähnt habe , das Ben-Skript hier importieren , damit Sie Ihre Funktionen später als Backend-Punktansicht bezeichnen können , zum Beispiel für die Datenbankansichtsfunktion Nein, ich habe erwähnt dass Sie, um eine Funktion an einen Boden anzuhängen, dorthin gehen müssen, wo Sie diesen Boden definiert haben Also zur unteren Funktion, und dann fügen Sie hier einen Befehl hinzu. Also Befehl und dann geht hier die Funktion rein. Wenn wir nun einfach die View-Funktion des Bend-Skripts aufrufen . Wenn wir also die Bent View-Ansicht ausführen, führen wir lediglich die View-Funktion aus, sodass wir keine Daten in das Listenfeld einfügen Wir wollen also eine andere Funktion haben und diese Funktion haben, die Daten aus der View-Funktion abrufen und diese Daten in das Listenfeld einfügen Nennen wir diese Funktion zum Beispiel den Befehl View. Einfach so. Denken Sie daran, dass Sie hier keine Klammern übergeben , denn wenn Sie das Skript ausführen, diese Funktion hier, wenn Sie das so machen, wird diese Funktion ausgeführt, wenn Python Ihr Skript liest, aber das wollen Sie nicht. Das willst du, wenn du die Taste drückst , wenn der Benutzer die Taste drückt. Diese Funktion wird ausgeführt. Also Tkinter weiß das und wenn du das einfach so weitergibst, Python Tkinter es aus, wenn die Taste gedrückt wird es aus, wenn die Also Befehl anzeigen, und jetzt brauchst du eine Also lass uns unsere Funktionen einfach hier schreiben. Der View-Befehl. Denken Sie also jetzt über die Ausgabe nach. Die Ausgabe, die wir erhalten, ist ein Tupel. Also werde ich hier die View-Funktion ausführen, also die Ansicht drucken, nur um zu sehen, was wir haben, falls Sie es vergessen haben Also Python Band Punkt Pi. Also haben wir tatsächlich eine Liste von Tupeln. Also Stürze in der Liste. Und was wir jetzt tun wollen, ist jedes dieser Tupel einzufügen Also jede dieser Datenbankzeilen als neue Zeile in der Liste innerhalb des Listenfeldes Wir können also durch dieses Tupel iterieren. Das wäre also, sagen wir, für eine Zeile in der Backend-Punktansicht Also das ist eigentlich diese Liste hier. Das ist also eigentlich ein Objekt und ein Listenobjekt. Und dann, Liste eins, glaube ich, so ist unser Listenfeld codiert. Ja, es ist also Liste eins. Das ist eine Variable, in der unser Leasingfeld mit dem Punkt Einfügen steht. Und dann erhält die Insert-Methode zwei Argumente. Das erste Argument ist der Index, in Sie Ihre Werte einfügen möchten. Sie haben also ein Listenfeld, und dieses Listenfeld hat mehrere Stellen. Es hat also den ersten Platz und dann den zweiten, dritten usw. Wenn Sie es also an die erste Stelle setzen möchten , geben Sie Null ein. Wenn Sie es an die zweite Stelle setzen möchten, würden Sie hier einen Index von eins eingeben und so weiter. Aber denk mal drüber nach. Wir arbeiten uns durch diese Tuben. Also gehen wir zum ersten Tupel, und dann würden wir es einfügen wollen, und wir würden dieses Tupel als ersten Punkt der Liste platzieren wollen dieses Tupel als ersten Punkt der Liste Und dann würden wir wollen, dass das zweite als zweites Element eingefügt wird , und so weiter In solchen Fällen hat die Insert-Methode also auch einen speziellen Index, der End genannt wird , und dann übergeben Sie die Zeile. Das bedeutet also, dass die neuen Zeilen am Ende des Felds stehen. Sie haben also diese Zeile und das ist die erste Zeile, und dann wird sie an das Ende der vorhandenen Zeilen gesetzt. Dadurch wird sichergestellt , dass jede neue Zeile am Ende des Listenfeldes eingefügt wird. Ich hoffe also, dass das klar ist. Und ich würde das Skript eigentlich gerne ausführen. Jetzt haben wir also das Frontend. Kein Kuchen. Ich habe hier einen Fehler gemacht. Also eigentlich möchte ich das Backend hier so importieren . Führen Sie es erneut aus. Und wir haben die Schnittstelle. Schauen wir uns also an, was VO hat. Der Name Backhand ist in Zeile fünf nicht definiert. Also ja, natürlich, es ist nicht definiert, weil ich hier einen Tippfehler habe Biegen Sie sich. In Ordnung. Lass es uns nochmal versuchen. Schließ es. Lass uns sehen. Großartig. Also haben wir die Zeilen in der IS-Box angezeigt bekommen. Wenn Sie es jedoch immer wieder und wieder drücken , werden diese Zeilen an die vorhandenen angehängt Wir müssen uns also überlegen, wie wir tatsächlich ein leeres Listenfeld haben können , wenn wir auf den unteren Rand drücken Das ist eigentlich sehr einfach zu machen. Wir müssen hier sicherstellen , dass bei der Ausführung dieser Zeilen das Listenfeld bereits leer ist. Wir können also eins auflisten, löschen und Null stellt sicher, dass Sie alles vom Index Null aus der Zeile mit dem Index Null bis zum Ende der letzten Zeile löschen . Schauen wir uns also an, wie das läuft. Ve, und wenn Sie die Vegan-Ansicht erneut drücken, erhalten Sie immer alle Zeilen , die Sie in der Datenbank haben, in der Tabelle Großartig. Lassen Sie uns nun weitermachen und eine ähnliche Funktion für den Sucheintrag unten definieren . Die Schaltfläche ist also diese hier, Sucheintrag. Und wieder möchten wir, dass der Benutzer mindestens einen Wert in die Einträge in den Eingabefeldern eingibt, und dann drückt er die Sucheingabe-Schaltfläche und erwartet dann, dass das Programm die Zeilen zurückgibt, die den Eintrag enthalten, den der Benutzer in das Eingabefeld eingegeben hat. Also nochmal, Sie möchten Daten in das Feld einfügen. Also auch hier können Sie einfach die Suchfunktion oder das Ben-Skript in here aufrufen . Sie benötigen also eine Wrapper-Funktion. Sagen wir also Suchbefehl. Ein weiterer guter Grund , warum Sie diese Wrapper-Funktionen sozusagen verwenden möchten , ist, dass Sie in einigen Fällen wie diesem hier einige Parameter an die Funktion übergeben Wenn Sie sich also das Backend ansehen und die View-Funktion keine Parameter hatte, aber die Suchfunktion hat einige Parameter Das bedeutet, dass Sie hier keine Klammern setzen dürfen, also müssen Sie eine andere Funktion verwenden, bei der Sie Ihre Haupt-Backend-Suchfunktion mit Parametern aufrufen . Und das werden wir jetzt tun. Also def search, command. Und wieder der Suchbefehl, was wir tatsächlich als Argument erhalten , ist ein Titel , dass der Benutzer einen Autorennamen und hier eine ISBN-Nummer eingibt Nun werden wir diese Parameter über die Eingabe-Widgets abrufen Eingabe-Widgets Also, wo ist der Eintrag für den Eintrag? Hier sind die Eingabe-Widgets, und Sie sollten sich daran erinnern, dass wir hier dieses String-Var-Objekt haben . Diese Variable, die den Datentyp Zeichenfolge hat , wird als Wert, als Text oder als Zahl angegeben , die der Benutzer in das Eingabe-Widget eingibt. Behalte das also im Hinterkopf. Lassen Sie uns hier weitermachen und das erste, was Sie tun möchten , ist, einen Punkt aufzulisten und zu löschen. Sie möchten also die Liste leeren. Ordnung. Und dann müssen Sie Ausgabe der Backend-Liste durchgehen, weil, wissen Sie, in diesem Fall lassen Sie uns das schnell ausführen, also das Backend-Skript Also suchen wir nach dem Autorennamen John Smith, Backend-Punkt Ordnung, wir haben im Moment keinen John Smith, also suchen wir nach John Smooth Also haben wir dort eine leere Liste. Speichern Sie noch einmal und Sie werden sehen , dass wir eine Liste mit Stürzen haben. In diesem Fall haben wir also nur ein Tupel, aber Sie verstehen schon, was ich meine Das heißt, wir müssen im Backend, Punkt, Suche erneut durch vier Zeilen iterieren im Backend, Punkt, Suche erneut durch vier Zeilen Und hier musst du vorsichtig sein. Die Suchfunktion hat also Parameter, und der erste Parameter wird der Titeltext sein. Also der Text, den der Benutzer in das Eingabe-Widget eingibt, das Texteingabe-Widget Wir sind jedoch noch nicht fertig, da der Titeltext eigentlich ein String-Objekt ist, also keine einfache Zeichenfolge Und was wir tun müssen, ist hier tatsächlich eine Get-Methode anzuhängen, und das wird ein String-Objekt ausgeben Wenn der Benutzer also John Smooth-Tarif in das Widget eingibt, wird eine einfache John-Smooth-Zeichenfolge erzeugt Also hoffe ich, dass das Sinn macht. Nochmals Text verfassen, Methode abrufen. Dann haben wir Jahr Text Punkt Get und zuletzt ISBN Text Punkt Get Für ein Objekt in der Liste gibt die Suchfunktion für uns also gibt die Suchfunktion für aus, wenn sie die Datenbank durchsucht, wir wollen einfach neue Werte am Ende der Liste einfügen , einfach so Ich kann sehen, dass die Syntaxhervorhebung hier nicht funktioniert, also habe ich wahrscheinlich einen Tippfehler Mir fehlt hier eine Spalte. Jetzt waren vier und mehr lila gefärbt. Okay, also lass uns das Frontend-Skript ausprobieren. Und lassen Sie uns nach dem Autor John Smooth suchen. Nun, natürlich drücke ich den Knopf zum Sichtloch, damit ich alles hier habe. Sie möchten also die Suchtaste drücken. In Ordnung. Suche Suche. Und es zeigt immer John Smooth. Wenn du „Loch ansehen“ sagst, zeigt es alles. Es scheint also zu funktionieren. Und als nächstes ist der Eintrag ganz unten. Der Benutzer drückt also am unteren Rand des Eintrags. Sie erwarten, dass die Daten, die sie in die vier Eingabe-Widgets eingegeben haben , irgendwo gespeichert werden. Sie wissen nicht wo, aber sie werden irgendwo gespeichert und sie werden sie abrufen können. Das bedeutet, dass Sie die Insert-Funktion hier im Bend-Skript aufrufen müssen. Diese Funktion erhält also diese vier Argumente. Also der Wert rund um die Eingabe-Widgets, und es wird sie in der Buchtabelle platzieren. So einfach ist das. Als Erstes möchten wir vielleicht zum Ende des Hinzufügens gehen. Also hier, und dann füge hier eine Wrapper-Funktion hinzu. Auf Befehl. Und dann erstellen wir eine Befehlsfunktion zum Hinzufügen. Und das ist eigentlich ganz einfach. Sie sagen einfach Backend Dot Insert und hier übergeben Sie diese Werte. Also kopiere ich das einfach und zahle hier etwas. Also lass uns das ausprobieren. Lassen Sie uns versuchen, einige Einträge hinzuzufügen. Sagen wir Bäume und Gras. Nehmen wir an, Sand, Jahr 1917, und geben Sie dort einfach ein O für die ISBN ein und fügen Sie einen Eintrag hinzu Der Eintrag wurde also wahrscheinlich zur Datenbank hinzugefügt, aber wir haben nichts gesehen, und Sie können ihn wahrscheinlich mit einer VL-Funktion sehen Wenn ich also VL drücke , sehe ich Bäume und Gras. Aber es wäre gut, wenn wir einen Eintrag hinzufügen, dieser Eintrag, der neue Eintrag hier angezeigt wird, damit der Benutzer weiß , dass der Eintrag erfolgreich zur Datenbank hinzugefügt wurde. Also hier sind Bäume und Gras. Lassen Sie uns also etwas tun, damit der Eintrag im Listenfeld angezeigt wird, wenn der Benutzer auf Eingabe drückt. Und was wir tun können, ist zunächst sicherzustellen, dass die Liste leer ist. Löschen Sie also Null, um die Liste zu beenden. Das gibt uns eine leere Liste. Dann fügen wir neue Werte am Ende der Liste ein. Also welche Werte? Nun, ist einer. Also die Werte, die der Benutzer eingeben wird, einfach so. Also lass uns sehen, wie das läuft. Sagen wir Grasland. Nehmen wir an, Kirk hat das Jahr 1910 getroffen und dort eine Nummer. Und das ist eigentlich nicht ganz das, was wir erwartet hatten. Und das haben wir bekommen , weil wir hier wirklich viele Werte einfügen Also sagen wir Python, das alles in einen neuen Wert einzufügen , diesen in einen neuen, und auch das und so weiter und so fort. Die Lösung hier ist also einfach. Setze es einfach als einen einzigen Wert ein. Also als Triple und starte das Programm erneut. Ein Fehler hier, also brauchen wir noch eine Klammer weil diese Klammer hier hier geschlossen wird. Also einfach so, probiere es nochmal aus. Sagen wir warm und Elena Gomez, 1944, und eine Zahl hier. Eintrag hinzufügen Und jetzt haben wir die Zeile in einer einzigen Zeile. Treibstoff, und Wonder Lens ist da. Grass Lens ist auch da. Also lass uns weitermachen. 172. 171. Frontend mit Backend verbinden, Teil 2 ++: Okay, wir haben noch etwas Code vor uns. Wir haben die Ansicht, die Suche und die Anzeigenschaltflächen definiert . Jetzt haben wir also das Update und den geschlossenen Boden. Und ich möchte mit der Schaltfläche Löschen fortfahren, da die Schaltfläche Löschen einfacher zu implementieren ist als die Schaltfläche zum Aktualisieren. Lassen Sie mich das Interface also noch einmal aufrufen. Und noch einmal, denke an den Benutzer. Der Benutzer könnte erwarten, dass er möglicherweise eine der Zeilen löschen möchte, sagen wir, diese Zeile. Sie erwarten also, diese Zeile auszuwählen und dann die Schaltfläche Ausgewählte löschen zu drücken, und diese Zeile wird aus der Datenbank verschwinden. Und wenn sie eine Zeile auswählen, möchten sie vielleicht auch die Daten in diesen Einträgen sehen, und wir werden uns auch darum kümmern. Wir werden diese Einträge also mit den entsprechenden Werten füllen , wenn der Benutzer hier auf eine der Zeilen klickt. Ordnung. Das ergibt Sinn, glaube ich. Und jetzt schauen wir uns die Löschfunktion im Backend-Skript Delete erwartet also eine ID, die Idee der Zeile, und dann sucht diese SQL-Anweisung nach dieser ID und löscht die gesamte Zeile der Buchtabelle, in der das D dem hier angegebenen D entspricht also Wenn der Benutzer also eine der Zeilen im Listenfeld auswählt, müssen wir die ID dieser Zeile abrufen und diese ID dann an die Löschfunktion des Backend-Skripts senden die Löschfunktion des Backend-Skripts Und dann kümmert sich die Löschfunktion um die Zeile. Oh, gut. Und auch in diesem Fall möchten Sie hier, am unteren Rand des Löschvorgangs, eine Art Löschbefehlsfunktion anhängen am unteren Rand des Löschvorgangs, eine Art Löschbefehlsfunktion anhängen Aber in diesem Fall würde ich eigentlich gerne einen Bottom-up-Ansatz verfolgen Lassen Sie uns also zunächst darüber nachdenken , wie wir die Rolle vom Benutzer auswählen können. Lassen Sie uns also zuerst darüber nachdenken. Und Sie kennen das Problem nicht, aber es gibt eine Methode namens bind der Kinder-Bibliothek, und bind wird verwendet, um eine Funktion an ein Widget-Ereignis zu binden. Lassen Sie mich also diese Bind-Methode schreiben , damit Sie die Dinge besser verstehen. Also binden wir hier eine Methode an das Listbox-Widget. Es ist also sinnvoll, diese Methode zu schreiben, nachdem wir die Liste definiert haben. Widget. Also definieren wir hier das Listen-Widget, und wir konfigurieren es und listen dann eine Bindung auf. Und die Bond-Methode benötigt zwei Argumente. Es benötigt also einen Ereignistyp und auch eine Funktion, die Sie an den Ereignistyp binden möchten. Der Ereignistyp gehört eigentlich zu diesen Zeichen und heißt List Box Select. Und dann möchten Sie hier eine Funktion angeben , die ein Listenobjekt mit einer Auswahl zurückgibt. Also so etwas. Eigentlich erwarten wir in diesem Fall ein Tupel, ein Tupel mit der ID, dem Titel, dem Autor und dem Jahr und der ISBN-Nummer Rufen wir also diese Funktion auf und holen uns die ausgewählte Zeile. Dann machen wir weiter und definieren diese Funktion. Definieren wir es hier ganz am Anfang. Also auf jeden Fall die ausgewählte Zeile abrufen. Und diese Funktion jetzt, weil wir sie als Ereignis an ein Widget-Ereignis gebunden haben, erhält diese Funktion einen speziellen Parameter namens Event Und der Event-Parameter enthält Informationen über den Typ des Ereignisses. Python weiß also, dass, wenn Sie dies an die Bind-Methode übergeben, erwartet, dass die Funktion diesen Ereignisparameter hat. Und dann. Also auch hier kehrt diese Funktion zum ausgewählten Tupel Aber zuallererst funktioniert das so, dass wir zuerst den Index der Liste aus dem Listenfeld abrufen müssen den Index der Liste aus dem Listenfeld abrufen Die Liste kann, sagen wir, zehn Zeilen haben, und die erste Zeile hat einen Index von Null, die zweite einen Index von eins usw., bis zu neun, wenn wir zehn Zeilen haben. Um also den Index der ausgewählten Zeile des Listenfeldes zu ermitteln, verweisen wir auf das Listenfeld und dann auf die Cur-Auswahlmethode des Listenfeldes In Ordnung. Und ich möchte den Index hier nur vorübergehend zurückgeben , damit Sie sehen, was dieses Objekt ist und wie es aussieht. Hoffen wir also, dass das funktioniert. Es sollte funktionieren. Python. Frontend, ja. Also hätten wir den Index eigentlich hier ausdrucken sollen. Wir geben es nur zurück, also Index drucken. Lass uns das nochmal ausprobieren. Ich gehe also davon aus, dass ich den Index hier ausdrucken werde, ja. Das ist also der Index einer ausgewählten Zeile. Das ist also Null, Eins, tut mir leid, Null innerhalb von Null , eins, zwei und so weiter. Wie Sie sehen, ist dies jedoch keine einfache Zahl. Das ist eigentlich ein Tupel, ein Tupel mit einem Element Was wir also tun müssen, ist ein sehr einfacher Trick, und wir nehmen einfach das Element mit dem Index Null des Tupels, was in diesem Fall Nummer zwei ist, in diesem Fall Null und so Und dann könnten wir es noch einmal versuchen, alles ansehen, und jetzt erhalten wir einzelne Zahlen. Großartig. Wir sind also sehr nah dran, aber noch nicht da, weil wir das tatsächliche Tupel mit allen Werten der Zeile ermitteln müssen das tatsächliche Tupel mit allen Werten der Zeile Und um das zu erreichen, müssen Sie eine andere Methode namens get anwenden , also sagen wir das ausgewählte Tupel Das tatsächliche Tupel , das wir wollen, die tatsächliche Zeile, die wir wollen, entspricht also die tatsächliche Zeile, die wir wollen, entspricht mindestens einem, das den Index erhält Sie können es also von der kleinsten Box aus lesen, das Tupel mit dem Index X erhalten. Und dann können wir das ausprobieren Also, was bekommen wir hier? Lass dich nicht mit dieser Reihe verwechseln. Das wird ausgedruckt, weil im Ben-Skript tatsächlich eine Suchfunktion ausgedruckt wird. Das ist also das Drucken der Ausgabe der Suchfunktion. Diese Funktion sagt also, gib mir die Zeile mit John Smith als Autorennamen, und das nächste Mal wird das nicht ausgeführt. Also zurück, was wir tun wollen, ist eine Zeile auszuwählen und wir bekommen die Zeile dort als Tupel ausgedruckt Also das ist großartig. Also, was kommt als Nächstes? Nun, als Nächstes müssen wir die ID des ausgewählten Tupels an die Löschfunktion des Backend-Skripts übergeben ausgewählten Tupels an die Löschfunktion des Backend-Skripts Wir gehen zur ausgewählten Schaltfläche. Befehl entspricht Löschbefehl. So werde ich das Skript nennen , und das sollte hier stehen. D Befehl löschen. Und was wir hier haben, ist Backend Dot Delete. Auch hier erhält die Methode delete als Argument die ID. Wir haben also ein Tupel namens get selected row, also müssen wir das gewählte Tupel zurückgeben Wenn wir also die Funktion jetzt aufrufen, wird die ausgewählte Zeile ausgewählt Und wir benötigen das Element mit dem Index Null aus Get Selected Row. Speichern Sie das Skript und wir haben einen Fehler in Zeile 24. Ich habe die Kolumne nicht hier. Versuch es nochmal. Schau es dir an und lass uns versuchen, den Mond zu löschen. Löschen. Und Python sagt, dass get selected row ein erforderliches Positionsargument fehlt Das ist das Event-Argument. Python hat also recht , denn hier haben wir einen Event-Parameter, also müssen wir ihn als Argument übergeben. Aber hier rufen wir die Funktion ohne Argument auf. Wir bekommen also einen Fehler. Andererseits können wir dieses Ereignis nicht entfernen, da diese Funktion auch von der Bind-Methode ausgeführt wird. In diesem Fall wäre der Held des Tages hier also eine globale Variable. Vielleicht wissen Sie bereits, dass lokale Variablen, wie das ausgewählte Tupel, eine lokale Variable sind, weil sie innerhalb einer Funktion definiert Wenn Sie also dieses Tupel drucken, wählen Sie außerhalb der Funktion das Sie werden eine Fehlermeldung erhalten, weil Python sagen wird: Oh, tut mir leid, ich erkenne das nicht. Dies ist ein undefiniertes Objekt , da lokale Variablen nur innerhalb der Funktion Sinn machen nur innerhalb der Funktion Sinn In diesem Fall können wir also globale Variablen verwenden Und um eine globale Variable zu erstellen verwenden Sie das globale Schlüsselwort und deklarieren dann den Namen der Variablen, die Sie erstellen möchten Wenn Sie also in diesem Fall das ausgewählte Tupel außerhalb der Funktion ausdrucken , erhalten Sie den Wert des ausgewählten Tupels, und der Wert des ausgewählten Tupels wäre in diesem Fall das Tupel mit den Werten der Zeile In diesem Fall müssen wir das ausgewählte Tupel also nicht zurückgeben, da wir einfach auf die ausgewählte Tupelvariable zeigen können in diesem Fall einfach auf die ausgewählte Tupelvariable zeigen können und wir unsere verzögerte Funktion hier korrigieren müssen Wir wollen also das ausgewählte Tupel und wir wollen das Element mit dem Index Null aus dem Also lass uns nochmal ausführen. Und alles ansehen und den Mond löschen. Ausgewählte löschen. Alles ansehen und der Mond ist weg. Es scheint also zu funktionieren. Jetzt möchte ich die Einträge mit einem ausgewählten Tupel oder einer ausgewählten Zeile füllen , wenn Sie möchten Also müssen wir die Insert-Funktion des Enter-Widgets verwenden , und wir könnten diese Methoden tatsächlich in die Funktion Get Selected Row schreiben diese Methoden tatsächlich in die Funktion Get Selected Row Weil Sie wissen, wenn der Benutzer auf eine der Zeilen klickt und eine der Zeilen auswählt, möchten wir diese Einträge sofort mit Werten füllen. Und das erste wäre das Titelende und wir wollen sicherstellen, dass der Eintrag leer ist. Also lösche Null bis zum Ende. Lösche alles aus dem Eintrag, wenn es etwas gibt. Und dann E eins, einfügen. Also, was wir in den Autoreneintrag einfügen wollen. Nun, das wäre das ausgewählte Tupel mit einem Index von eins. Die ID hat also einen Index von Null. Der dritte Titel hat einen Index von eins, und das wäre auch für die anderen Einträge der Fall. Wir haben also E eins, zwei, E drei und E vier. Und dann wollen wir uns hier den Namen des Autors schnappen. Hier wollen wir das E und die ISBN-Nummer drin haben. Großartig. Ich hoffe also, dass das funktioniert. Es sollte funktionieren. Also alles anzeigen, etwas auswählen, und bei der Insert-Methode fehlt ein erforderliches Argument. Ich glaube, ich habe vergessen anzugeben, wo ich die neuen Werte einfügen möchte. Also brauchen wir hier, hier, hier und hier. Also lass uns nochmal sehen, alles ansehen und jetzt scheint es zu funktionieren. Also Bäume und Gras und Kurven und so weiter. Und lass mich versuchen, das zu löschen, löschen und der Eintrag ist weg Großartig. Also lass uns jetzt weitermachen. Lassen Sie uns ohne Zeitverschwendung die Update-Funktion implementieren Also zurück zu unserem Backend-Skript. Die Aktualisierungsfunktion erhält eine ID und einen Titel, einen Autor und Im Gegensatz zur Löschfunktion , die nur ein Element hat, dieser Funktion vier Elemente abgerufen, tatsächlich fünf Elemente In der Befehlsfunktion Löschen übergeben wir also das ausgewählte Tupel mit einem Index von Null Jetzt wird die Aktualisierungsfunktion eine ähnliche Struktur haben, aber dann werden wir hier mehrere Argumente haben Wir haben also ID Tile Author und ISBN. Also ein Tupel mit einem Index von eins, ausgewähltes Tupel mit einem Index von zwei, ein ausgewähltes Tupel mit einem Index von drei und ein ausgewähltes Tupel mit Und dann müssen wir diese Funktion zur Unterseite des Updates hinzufügen Also aktualisiere den Befehl. Ordnung. Und ich habe vergessen , das zu ändern Befehl aktualisieren. Das sollte funktionieren. Also lass uns sehen. Ich habe vergessen, den Namen des Parameters hier zu übergeben. Befehl entspricht also Befehl aktualisieren, speichern und erneut ausführen. Versuchen wir, diese Zeile zu aktualisieren. Sagen wir also neun. Ein Presse-Update wurde ausgewählt. Und noch ein Fehler: Hab keine Angst vor Fehlern. Je mehr Fehler Sie sehen, desto vertrauter werden Sie mit Python. Es ist wichtig, dass Sie sich auf den Fehler konzentrieren, herausfinden, in welcher Zeile Sie den Fehler erhalten, und versuchen , die Art des Fehlers und die Meldung, die Sie erhalten, zu verstehen . In diesem Fall benötigt delete also ein Positionsargument, aber es wurden fünf angegeben Wir haben hier keine Löschfunktion ausgeführt. Wir haben die Aktualisierungsschaltfläche ausgeführt , die eine Aktualisierungsbefehlsfunktion erhält, und Sie gehen zum Aktualisierungsbefehl. Also den Aktualisierungsbefehl B und Delete. Deshalb bekommen wir diesen Fehler. Der Befehl update führt tatsächlich die Methode delete des Bend-Skripts aus, also wollen wir aktualisieren statt löschen. Und speichern Sie das Skript und führen Sie es erneut aus. Alles ansehen. Ich möchte diese Nummer hier wirklich aktualisieren. Also neun Updates ausgewählt, alle anzeigen, und es funktioniert nicht. Und in diesem Fall erhalten wir hier nicht einmal eine Fehlermeldung, sodass Sie sich im Moment möglicherweise verloren fühlen. In diesem Fall könnten Sie also überprüfen was Sie in Ihrer Aktualisierungsbefehlsfunktion zurückgeben. Sie wissen also, dass Sie Probleme isolieren können, indem Sie Print-Anweisungen verwenden. Nehmen wir an, Sie möchten überprüfen, was Sie an die Aktualisierungsfunktion senden. Ich kenne das Problem hier, aber nur um Ihnen zu zeigen , wie Sie Probleme beheben können. Also drucke das aus und führe es erneut aus. Wir haben alle die Grasland-Updates ausgewählt. Und Sie sehen, dass die Tabelle so ausgedruckt wird, wie sie ist. Diese Zahl ändert sich also nicht. Eigentlich habe ich es nicht geändert. Also lass mich das nochmal ändern. Sagen wir 24 und das Update ist ausgewählt. Sie sehen also, dass die Zahl 24 hier nicht ausgedruckt wird. Das heißt, wir senden an die Datenbank. Nochmals dieser Datensatz, also senden wir den aktualisierten Datensatz nicht . Also warum ist das so? Wenn Sie es bereits von früher gefunden haben als ich diese Funktion geschrieben habe, ist das sehr großartig. Falls nicht, nun ja, der Grund ist, dass wir das ausgewählte Tupel an die Aktualisierungsmethode senden ausgewählte Tupel an die Aktualisierungsmethode Und die Auswahltabelle ist die, die der Benutzer ausgewählt hat Es sind also nicht die tatsächlichen Einträge, die der Benutzer an den Aktualisierungsbefehl sendet In diesem Fall wollen wir also tatsächlich diese Werte versenden, also die aktuellen Werte der Einträge. Also kopiere ich das und füge es hier ein. Okay. Und das erste ausgewählte Objekt ist die ID, also wollen wir die D der ausgewählten Zeile behalten , weil der Benutzer die anderen Werte ändert, nicht die ID Und das sieht gut aus. Die Klammer schließt sich hier. Sicher. Also lösche diesen, sicher, führe ihn erneut aus. Wir gehen dazu und sagen wir drei, Update ausgewählt, V und drei ist da. Löschen, alles ansehen, es geht weg. Sie können es erneut hinzufügen, weil Sie es in Ihren Einträgen haben, im Eintrag, und es wurde erneut hinzugefügt, und Sie können es hier sehen. Also alles funktioniert super. Und wir wollen dieses Programm schließen, aber wir haben die Schaltfläche geschlossen, es funktioniert im Moment nicht, also lasst uns weitermachen und das auch implementieren. Und das ist sehr einfach. Geh einfach her und befehlige Eagle Two. Du willst also das Fenster zerstören, oder? Also Fenster nicht zerstören. Das ist es. Speichere das Drehbuch. Und probiere es aus. Sie funktionieren also wie gewohnt, schließen und das Fenster schließt sich. Und vielleicht möchten Sie Ihrem Fenster auch einen Titel geben und die WM-Titelmethode des Fensterobjekts verwenden . Titel. Sagen wir Buch, Geschäft. Und du solltest diesen Namen in der Titelleiste sehen. Endlich sind wir mit diesem Programm fertig, und ich weiß, dass es noch Verbesserungsbedarf gibt, und ich freue mich über alle Vorschläge von Ihnen, damit wir das Programm verbessern können. Programme haben Versionen davon, das ist Version Null, könnte man sagen. Und ich hoffe, Sie fanden das sehr nützlich und haben viel daraus gelernt. Also werde ich später mit dir sprechen. 173. 172. Executables mit EXE- und App-Dateien aus dem Python-Skript erstellen: Hallo nochmal. Wir haben also dieses großartige Programm , das sehr gut funktioniert. Und es besteht aus drei Dateien. Also zwei Python-Dateien und eine Dot-DB-Datei, in der die Daten gespeichert werden. Das ist gut. Wir können die Skripte so ausführen. Also wenn wir Python benutzen, bekommen wir das Programm angezeigt. Aber ich denke, wenn du dein Programm jemand anderem geben willst dein Programm jemand anderem geben , kannst du ihnen einfach sagen: Oh, installiere Python und du kannst das Programm ausführen indem du zum Terminal gehst und Python und das Skript aufrufst Das kann also für Benutzer, die keine Erfahrung mit Programmieren haben, furchtbar schwierig werden In diesem Fall möchten Sie also ein eigenständiges ausführbares Programm erstellen ein eigenständiges ausführbares Programm , das Sie einfach an jeden senden können kann dann einfach darauf doppelklicken und Daten einfügen und Daten abrufen und so weiter und Daten einfügen und Daten abrufen und so weiter In diesem Vortrag werde ich Ihnen zeigen, wie Sie eine ausführbare Datei erstellen, und Sie erstellen diese Datei, egal ob Sie auf einem Mac, Windows oder Linux arbeiten. Der Code ist also derselbe. Es gibt eine großartige Bibliothek , um eigenständige ausführbare Dateien zu erstellen Das ist der Pi-Installer. Sie können den Pi Installer also mit PIP installieren . Und jetzt ist es furchtbar einfach, aus Ihrem Python-Skript eine eigenständige ausführbare Datei zu erstellen aus Ihrem Python-Skript eine eigenständige ausführbare Datei Alles was Sie tun müssen, ist Pi Installer aufzurufen und dann auf Ihr Skript zu zeigen In diesem Fall ist unser Hauptskript also front and dot py. Das ist also ein Skript, das den gesamten Code enthält und das auch das Backend-Skript importiert. Also wollen wir auf diese Datei verweisen. Und wenn Sie es so lassen, erhalten Sie eine Punkt-X-Datei, wenn Sie Windows verwenden, eine Datei, wenn Sie einen Mac verwenden Und zusammen mit diesen Dateien erhalten Sie auch eine Reihe anderer Dateien, die mit Ihrem Programm verknüpft sind Das hat den Vorteil, dass es einfacher wird , etwaige Fehler zu beheben. Sie haben also viele Dateien und dann können Sie zu diesen Dateien gehen und den Fehler finden und so weiter. Aber wenn Sie praktisch sein wollen, sollten Sie hier einen Parameter übergeben. Hat eine Datei aufgerufen. Dadurch wird eine einzige ausführbare Datei für Sie erstellt. Und in diesem Formular wird Ihnen auch die Terminal-Befehlszeile im Hintergrund Ihrer grafischen Benutzeroberfläche angezeigt . Wenn Sie das also nicht möchten, können Sie einen anderen Parameter namens windowed so angeben und ausführen Und du wirst eine Weile warten müssen. Und meine ausführbare Datei wurde erstellt. Wenn Sie also auf einem Mac wären, wäre das eine Datei. Also meins ist hier im Disc-Ordner. Also in diesem Ordner kann ich hier nachschauen. Also Frontend-Punkt x. Wenn Sie das ausführen, erhalten Sie das Fenster. Und wie Sie sehen, haben Sie auch die Bücher, die die DB-Datei generiert hat. Standardmäßig wird dadurch nur eine ausführbare Datei erstellt. Wenn Sie das Programm dann zum ersten Mal ausführen, denken Sie daran, dass wir im Backend-Skript eine Verbindungsfunktion hatten im Backend-Skript Diese Funktion erstellt also eine Datenbank. Also genau das hat das getan. Und wenn Sie sich jetzt alles ansehen, haben Sie keine Zeilen, also keine Daten, weil von Grund auf neu erstellt wurde. Falls Sie also die bestehende Datenbank haben möchten, sollten Sie Ihrem Benutzer sowohl die ausführbare Datei als auch die bestehende Datenbank, die Sie haben, geben sowohl die ausführbare Datei als auch die . Nehmen wir zum Beispiel an, dass das nicht existiert, und ich kann zu meiner vorhandenen Datenbank gehen, und wenn ich sie hier ablege, weiß Python, wo es nach der Datenbank suchen muss. Wenn Sie sich jetzt alle ansehen, erhalten Sie die Daten aus der vorhandenen Datenbank. Und wir können einen schnellen Test machen. Fügen wir ein Buch hinzu, den großartigen Kurzfilm D Taylor aus dem Jahr 1913 und setzen dort eine Zahl ein. Am Eintrag, und der Eintrag wird der Datenbank hinzugefügt. Und du kannst das Programm schließen und das war's. Hoffe dir gefällt das. Wir sehen uns in der nächsten Vorlesung. 174. 173. Was ist Object Oriented Programming (OOP): Hallo, und willkommen in diesem neuen Abschnitt, in dem Sie etwas über objektorientierte Programmierung, oft kurz OOP genannt, lernen . Wenn Sie Erfahrung mit der Programmierung haben, ist Ihnen das Konzept wahrscheinlich vertraut da OOP in den meisten Sprachen verwendet wird. Aber ich gehe davon aus, dass Sie nichts über objektorientierte Programmierung wissen , also werde ich das Konzept von Anfang an erklären. Nun, es gibt verschiedene Definitionen von OP, und einige werden sehr knifflig. Aber ich glaube, das Beste, was man wissen sollte, ist, dass objektorientierte Programmierung nur eine Möglichkeit ist , Ihren Code zu organisieren. Das heißt, OOP ist kein Muss. Sie können also einfach Funktionen verwenden, um eine Anwendung zu erstellen , wie wir es hier mit unserer Buchhandlungsanwendung getan haben , und viele Programmierer entscheiden sich dafür, ihren Code nicht objektorientiert zu organisieren, also verwenden sie nicht die OOP-Methode, um ihren Code zu schreiben, mit anderen Worten Es ist jedoch allgemein anerkannt, dass, wenn Sie mehr als zwei Funktionen haben , Operationen auf dasselbe Objekt anwenden Zum Beispiel ein Programm, das Operationen auf eine Kiner-Schnittstelle anwendet Operationen auf eine Kiner-Schnittstelle Sie haben also diese Callback-Funktionen. Deshalb sollten Sie diese Funktionen in einer sogenannten Klasse organisieren diese Funktionen in einer sogenannten Klasse Da objektorientierte Programmierung ein komplexes Konzept ist, habe ich das zu Beginn dieses Kurses nicht berücksichtigt. Ich wollte also, dass Sie zunächst einige Anwendungen mithilfe von Funktionen erstellen , was intuitiver ist, dann zur objektorientierten Programmierung übergehen. Also zurück zu unserer Anwendung mit grafischer Benutzeroberfläche. Also das Objekt hier, ich spreche von Objekten, und das Objekt hier ist das gesamte Fenster mit Schaltflächen und anderen Widgets. Jetzt können wir alle Attribute , die dieses Objekt definieren, also dieses Fenster, wie den Titel der Schaltflächen, die Beschriftungen und auch die an dieses Objekt angehängten Callback-Funktionen, in eine Klasse einfügen dieses Objekt definieren, also dieses Fenster, wie den Titel der Schaltflächen, die Beschriftungen und auch die an dieses Objekt angehängten Callback-Funktionen, und auch die an dieses Objekt angehängten Callback-Funktionen in eine Klasse In unserer Anwendung haben wir also keine Klassen verwendet, wir verwenden Funktionen Dieses Skript hier gilt also nicht für objektorientierte Programmierung, und dieses Objekt innerhalb einer Klasse zu platzieren bedeutet, dass wir den Code in einer Klasse organisieren, wodurch ein Objekt erzeugt wird Deshalb nennen wir es objektorientierte Programmierung. Und die Verwendung von Klassen zur Organisation Ihres Codes wird als objektorientierte Programmierung bezeichnet. Und was ich als Nächstes tun werde, ist in meinem Backend-Skript, in dem ich die Datenbankoperationen habe. Ich werde dieses Skript transformieren indem ich es in eine Klasse einfüge. Und danach können Sie dasselbe für die Frontend-Schnittstelle tun , sodass Sie objektorientierte Programmierung üben können . Nun, mein Ziel hier ist es nicht , Ihnen beizubringen , wie man Klassen schreibt. Zunächst möchte ich, dass Sie den Unterricht verstehen, und viele Lernressourcen erklären objektorientiertes Programmieren indem sie etwa sagen, wir erstellen eine Klasse, die ein Hundeobjekt erzeugt, und ein Hund kann heizen und bellen und so weiter. Das ist ein gutes Beispiel, um zu lernen, wie man die Syntax einer Klasse lernt. Aber hey, was ist ein Hund beim Programmieren? Ich meine, Sie können sich den ganzen Tag am Kopf kratzen und versuchen, sich ein Szenario auszudenken, in dem Sie einen Hund als Objekt in Ihrer Anwendung haben würden . Das ist immer noch ein gutes Beispiel, aber nur, wenn Sie einige Jahre Erfahrung in der Programmierung haben Erfahrung in der Programmierung und Sie sich anhand solcher Beispiele schnell überlegen können, wo und wann Sie Klassen verwenden sollten. Ich gehe davon aus, dass Sie nicht über diese jahrelange Erfahrung verfügen, also werde ich in diesem Abschnitt reale Programmierobjekte verwenden , um ein so kniffliges Konzept wie objektorientierte Programmierung zu erklären . Der beste Weg, OP zu verstehen, besteht also darin, zuerst ein Programm mit einem bekannten objektorientierten Programmieransatz zu erstellen einem bekannten objektorientierten , also Funktionen zu verwenden, und wenn Sie das Programm einmal gut kennen, dann erstellen Sie das Programm erneut, mit OP, und dann verstehen Sie automatisch, was OP ist, wenn Sie sich ansehen, wie sich die Dinge unterscheiden. Lassen Sie mich diesen Code jetzt mithilfe von Klassen organisieren und später werden wir ein einfacheres Programm von Grund auf neu erstellen, bei dem wir ein Bankkontoobjekt mit Python und Funktionen auf dieses Objekt anwenden , z. B. Einzahlung abheben und so weiter. Oh, das ist großartig. Und ja, das ist ungefähr diese Einführung. Und lass uns mit der nächsten Vorlesung weitermachen und ein paar Kurse schreiben. 175. 174. OOP in einem Programm verwenden, Teil 1: Gut. Jetzt werde ich weitermachen und dieses Skript in einen objektorientierten Programmierstil umwandeln. Mit anderen Worten, ich werde diese Funktionen effizienter organisieren . Und nur um Ihr Gedächtnis aufzufrischen, was dieses Skript macht, also haben wir ein Backend - und ein Frontend-Skript, und das Frontend, was es macht ist, die grafische Benutzeroberfläche zu konstruieren , also wissen Sie das Und wir haben diese Buch-DB-Datenbankdatei, und da sind einige Daten Und Sie können nach Einträgen für Zeilen in der Datenbank unter Neu usw. suchen. Und dieser Punkt Pi im Frontend erstellt die grafische Benutzeroberfläche, und dieses Backend ist für die Datenbankinteraktion verantwortlich Bei objektorientierter Programmierung geht es also darum, Funktionen innerhalb einer Klasse zu kapseln , also Klasse und nennen wir diese Datenbank Und ja, das ist es im Grunde. Wir haben noch viel zu tun, aber lassen Sie uns darüber nachdenken, was diese Datenbankklasse ist. Nun, wann immer Sie sich für objektorientierte Programmierung entscheiden , müssen Sie zuerst über das Objekt nachdenken , das Sie verwenden möchten, nämlich das Objekt, auf das Sie diese Methoden anwenden möchten. Und in unserem Fall wäre das die Datenbank. Und dann fügen wir Daten in die Tabellen dieser Datenbank ein und sehen uns Daten an und so weiter. Von diesem Objekt, diesem Objekt, müssen Sie zuerst ein Minimalobjekt erstellen , wenn Sie die Klasse aufrufen. Und ich werde dir in einer Minute zeigen, wie du eine Klasse aufrufst. Aber jetzt konzentrieren wir uns darauf, den Bauplan des Objekts zu erstellen den Bauplan des Objekts Sie erstellen also den Blueprint des Objekts, der hier ist, und dann erstellen Sie Objektinstanzen mit diesem und dann erstellen Sie Objektinstanzen Blueprint, und das tun Sie, indem Sie die Klasse aufrufen Wenn Sie nun die Klasse aufrufen, möchten Sie dieses minimale Objekt haben In diesem Fall würde das also bedeuten, eine Verbindung zu dieser Datenbank herzustellen. Und dann erstellen Sie ein Cursor-Objekt und suchen Sie vielleicht nach einer Tabelle, sodass Sie sicherstellen , dass Ihre Datenbank über eine Tabelle verfügt, sodass Sie später Methoden auf diese Datenbanktabelle anwenden können. Andernfalls wäre die Datenbank nutzlos. Es braucht also eine Tabelle und eine etablierte Verbindung. Das heißt, Sie müssen einen Weg finden , dass beim Aufruf der Klasse diese Zeilen hier ausgeführt werden. Und Python hat dafür eine spezielle Syntax reserviert. Die erste Funktion Ihres Skripts müssen Sie also mit einem doppelten Unterstrich vorne und hinten aufrufen doppelten Unterstrich vorne und hinten Das ist also eine Init-Funktion, was bedeutet, ein Objekt zu initialisieren In anderen Programmiersprachen wird das Konstruktor genannt, also konstruiert es das Objekt Wenn Sie also eine Klasse aufrufen, wird diese Funktion ausgeführt, aber nicht die anderen werden ausgeführt, wenn Sie auf sie verweisen, in diesem Fall wäre das so etwas wie Punkteinfügung in eine Datenbank, und dann übergeben Sie dort die Parameter, die Argumente. Jetzt müssen wir hier im Skript einige Dinge hinzufügen, damit das funktioniert. Aber ich würde es vorziehen, dies auf Trial-and-Error-Basis zu tun. Wir führen es aus, um zu sehen, welchen Fehler wir bekommen , damit Sie verstehen, wie die Dinge dort funktionieren. Was ich tun werde, ich werde diesen Kurs so nennen, wie er jetzt ist. Wir brauchen diese Funktion also nicht. Diese Funktion ist jetzt weg , weil ich sie durch sie ersetze. Sie rufen also keine Funktionen mehr auf, wie wir es hier getan haben. Also rufen wir hier zum Beispiel Funktionen aus dem Backend-Modul auf, das wie ein Modul ist, Sie importieren es als Modul Und in diesem Fall importieren wir aus dem Backend die Datenbank Also importieren wir die Datenbankklasse aus dem Becan-Skript. Das macht uns also die Datenbankklasse verfügbar. Also der Datenbank-Blueprint. Das ist also nur eine Blaupause. Jetzt müssen wir aus diesem Bauplan ein Objekt erstellen. Nennen wir das also Objektdatenbank. Das entspricht einer Datenbank. Also die Klasse und vorerst, lassen Sie uns dort keine Argumente übergeben Dann müssen wir diese Referenzen ersetzen , damit wir kein Backend mehr machen Wir machen eine Datenbank mit dieser Ansicht. Wir beziehen uns also auf die View-Funktion des Datenbankobjekts, das eine Instanz dieser Klasse ist. Großartig. Also werde ich weitermachen und diese anderen durch Datenbank ersetzen . Also zurück und ersetze das, ersetze, ersetze. Ja, das ist es. Das ist der Name des Skripts und er sollte auch so sein. Entkomme hier. Großartig. Jetzt mache ich weiter und führe das aus. Erwarte also nicht, dass das funktioniert, aber wir müssen uns den Fehler genau ansehen und versuchen zu verstehen, was darin steht. Also verfolgen Sie die Datei-Fronten-Punkt-Pi-Zeile vier zurück. Hier. Es werden keine Positionsargumente benötigt, aber eines wurde angegeben. Und was hier jetzt passiert , ist , dass, wenn Sie die Klasse aufrufen, diese Klasse eine Objektinstanz erstellt und sie in dieser Variablen speichert Und dann sendet sie diese Objektinstanz an diese Funktion. Lassen Sie mich das also auf der rechten Seite aufteilen , sodass wir beide Skripte hier haben. Also das Frontend und das Backend. Also im Grunde wird diese Datenbankobjektinstanz an dieses Innit-Objekt gesendet Auch wenn das eine leere Klammer ist. Das ist dort also wie eine versteckte Syntax. Und um das zu beheben, müssen Sie hier einen Trick ausführen. Es heißt also, dass es keine Positionsargumente braucht , weil es hier tatsächlich eine leere Klammer hat Es ist also wie bei einer normalen Funktion und funktioniert, wenn Sie dort keinen Parameter angeben, aber dann einen Parameter übergeben, wenn Sie ihn aufrufen Die Funktion wird sagen, dass ich keine Positionsargumente oder obligatorische Argumente akzeptiere Aber mir wurde ein Argument gegeben, also gebe ich einen Fehler Um das zu beheben, müssen Sie dort einen Parameter übergeben. Und da geht jeder an sich selbst vorbei. Sie können also jedes Wort weitergeben , das noch funktioniert. Aber als Konvention , damit Ihr Code von anderen Leuten gelesen werden kann, müssen Sie self übergeben. Jetzt benötigt Ihre Init-Funktion also einen Parameter, und wenn Sie diese Klasse aufrufen, sendet diese Klasse die Objektinstanz, und diese Objektinstanz wird in diesen Parameter aufgenommen Dieser Parameter wird also durch das Objektinstanzargument ersetzt . Großartig. Wenn du das immer noch nicht verstehst, bin ich mir sicher, dass du es später tun wirst, wenn du mehr Kurse schreibst. Gut. Gut, ich speichere das und das und probiere das Script nochmal aus. Und großartig. Das bedeutet, dass die Klasse erfolgreich initialisiert wurde und eine Objektinstanz für uns erstellt hat Lassen Sie mich das jetzt schließen und vielleicht dort etwas hinzufügen. Das ist nicht notwendig, sondern nur, um Ihnen zu zeigen, dass Sie, wenn Sie Ihrer Init-Funktion weitere Parameter hinzufügen möchten, so etwas wie DB tun und dies dann durch Dib ersetzen und dann hier das Argument übergeben, das an diesen DB-Parameter übergeben wird an diesen DB-Parameter übergeben Das wäre also books dot db der Dateipfad zu unserer Großartig. Und wenn Sie das erneut ausführen, erhalten Sie dasselbe Ergebnis. Was hier passiert , ist, dass Python dazu dient, die Datenbankobjektinstanz an den Self-Parameter zu senden , die Datenbankobjektinstanz an den Self-Parameter zu und dann den Pfad der Datei an den DB-Parameter zu senden, und dass DB-Parameter diesen Pfad an den DB-Parameter der Connect-Methode sendet . Großartig. Lassen Sie uns nun sehen, wie diese Methoden funktionieren werden. Wir haben also die View-Schaltfläche Wenn wir sie drücken , wird die View-Funktion der Datenbankklasse ausgeführt, tatsächlich wird die View-Methode der Datenbankklasse ausgeführt. Also dieser hier, mal sehen, ob wir ihn bekommen können. Nun, Arn-Fehler, lass mich das schließen. Es heißt also, dass View t null Positionsargumente hat, aber eins wurde angegeben Das wiederum deutet darauf hin, dass, wenn Sie eine Klassenmethode aufrufen, die Klasse auch die Objektinstanz an diese Methode sendet , genau wie dies bei der Init-Funktion Das heißt, wir müssen den Trick noch einmal machen. Übergeben Sie el dort und versuchen Sie es erneut, um zu sehen, welchen Fehler wir diesmal bekommen. Nun, kein Fehler. Die Dinge funktionieren offensichtlich. Das ist also großartig. Wenn Sie jetzt jedoch die anderen Methoden wie Einfügen ausprobieren, erhalten Sie wahrscheinlich eine Fehlermeldung. Also lass mich das versuchen. Also, wenn Sie alle, es funktioniert gut, aber wenn wir etwas einfügen, sagen wir Hallo und ja, bei der Eingabe. Insert benötigt also vier Positionsargumente, aber fünf wurden angegeben. Also einfügen Und diese Werte werden an diese Parameter übergeben, aber wir übergeben auch die Objektinstanz. Lassen Sie uns also selbst weitermachen, und ich werde dasselbe auch für die Suche tun. Löschen und aktualisieren. Ja, das haben wir. Sieht gut aus. Lass es uns nochmal versuchen. Also alles ansehen und Eintrag hinzufügen. Ja, das scheint zu funktionieren. Alle ansehen und hier haben wir entweder Schließen. So konnten wir eine Klasse erstellen und alle Funktionen innerhalb der Klasse platzieren. Wir haben jetzt also ein organisiertes Programm. Das ist also objektorientierte Programmierung, aber bei objektorientierter Programmierung geht es nicht einfach darum, einige Funktionen innerhalb der Klasse zu platzieren. Bei objektorientierter Programmierung geht es um gutes Design. Dieses Skript ist also wahrscheinlich nicht das beste Design, das wir uns einfallen lassen können. Das liegt daran, dass wir die wirklichen Vorteile, die wir durch die Verwendung von Klassen haben, nicht nutzen. Ich meine also, dass wir hier diese Methoden erstellen, und in jeder Methode wir einige ähnliche Funktionen aus und stellen auch eine Verbindung in jeder der Methoden her. Wir können diesen Code also weiter reduzieren indem wir die wiederholten Aktionen entfernen. In einer Klasse müssen Sie also zunächst über eine Möglichkeit nachdenken , eine Möglichkeit etwas zu konstruieren, und zwar in der Init-Funktion Und dann bezieht man sich in den anderen Funktionen der anderen Methoden auf dieses Etwas den anderen Funktionen der anderen Methoden auf Wir sprechen hier also über Methoden. Also, obwohl unser Skript gut funktioniert , werden wir in der nächsten Vorlesung weitermachen und das Design verbessern . Also werde ich dich dort sehen. 176. 175. OOP in einem Programm verwenden, Teil 2: Gut. Wir waren in der Lage, unser Skript, das mit Funktionen erstellt wurde, zu transformieren , und wir haben eine Klasse erstellt und diese Funktionen in diese Klasse eingefügt. Deshalb werden sie jetzt Methoden genannt. Und obwohl dies eine Verwendung einer Klasse ist, es immer noch nicht die beste Verwendung des objektorientierten Programmierparadigmas Weil wir hier eine Datenbank haben, ein Datenbankobjekt, das gerade erstellt wird, aber wir behandeln es nicht als festes Objekt, also öffnen und schließen wir es in jeder Methode Ich denke also, wir stellen eine Verbindung her , wenn wir die Klasse aufrufen. Wenn diese Funktion ausgeführt wird, stellen wir dort eine Verbindung her und wir halten diese Verbindung geöffnet. Also füge ich diese Methode zum Schließen nicht hinzu, aber ich lasse die Commit-Methode stehen, falls es keine Tabelle gibt, und es wird eine Tabelle erstellt, und die Änderungen werden in die offene Verbindung übernommen. Nun, da wir dort eine Verbindung geöffnet haben, müssen wir nicht für jede Methode eine neue Verbindung einrichten. Und wir müssen nicht einmal ein Cursor-Objekt erstellen , weil das Cursor-Objekt hier erstellt wird. Also werden wir diese beiden Zeilen in jeder einzelnen Methode los. Wir haben also ein Cursor-Objekt im Blick, wenn wir hierher gehen, und dann führen wir diese Anweisung für dieses Cursor-Objekt aus. Das ist also gut. Dann gehen wir hier runter, diese beiden auch. Und für die Löschmethode. Ebenfalls ein Update. Großartig. Nun, lass uns sehen, wie das läuft. Lassen Sie mich das näher erläutern. Also rufen wir das Frontend-Skript auf, in dem wir eine Instanz unseres Objekts erstellen. So weit so gut. Alles ansehen. Und es heißt, dass in Zeile 17 keine Namenskurve definiert ist. Also haben wir die View-Methode ausgeführt. Und die View-Methode versucht, eine als Variable deklarierte Variable innerhalb der Funktion zu finden . Die Kurvenvariable findet sie nicht, dann sucht sie, ob es eine Variable außerhalb der Funktion gibt und sie findet sie nicht. Tatsächlich gibt es eine Variable, die in dieser Init-Funktion deklariert wurde , aber das ist eine lokale Variable Dies hat nur innerhalb dieser Funktion einen Wert. Sie können außerhalb der Init-Funktion nicht darauf zugreifen. Aber wenn wir uns auf das Argument self beziehen, das das Datenbankobjekt ist und sehen, was wir bekommen. Lassen Sie mich das schließen. Speichern Sie das und sehen Sie sich alles an, und jetzt erhalten wir eine andere Art von Fehler. Und es heißt Attributfehler. Also lass mich das schließen. Schauen Sie hier genau hin und es heißt, dass das Datenbankobjekt keine Attributkurve hat. Das ist in Zeile 17, also dieser hier. Das Datenbankobjekt, das ist dieses hier. Also wurde self durch database ersetzt, das ist das Objekt, das von dieser Klasse erzeugt wurde. Dies ist ein Attribut dieses Objekts. Und um das zu beheben, müssen wir dort ein Attribut erstellen. Also sagen wir Self Dot Cur, Eagles Connection Dot Also die Cursormethode des Verbindungsobjekts der QSt Wenn wir nun den Code erneut versuchen, heißt es, dass die Namenskurve in Zeile acht nicht definiert ist Jetzt haben wir ein Attribut erstellt. Dies versucht, die Variablenkurve zu finden, die lokale Variablenkurve, die nicht in dieser Funktion enthalten ist, da dies jetzt ein Attribut der Klasse ist. Das heißt, wir müssen uns auch hier auf Selbst beziehen, auf das Objekt und dann auf Curve Execute und so weiter. Wenn wir das jetzt versuchen, erhalten wir eine weitere Linie, die in Zeile 18 nicht definiert ist. Also hier bedeutet das, dass Sie dasselbe tun müssen und wir haben keine Kurvenvariable mehr. Wir haben das cur-Attribut. Wenn ich das jetzt noch einmal ausführe, erhalte ich dieses Mal wahrscheinlich eine Fehlermeldung bezüglich der Verbindung , der con-Variablen Wir alle sind in Zeile 19 nicht definiert. Also nochmal, diese View-Funktion versucht Verbindung mit der Variablen zu finden, also übergebe ich mich dort und auch hier selbst. Also deklarieren Sie das Attribut dort und dort übernehmen Sie die Änderungen hier unten. Und die Selbstverbindung wird geschlossen. Also das sieht jetzt gut aus. Eine Rose entspricht dem. Rose ist also nur eine lokale Variable, die hier erstellt wird, und dann geben wir die abgerufene Rose aus diesem Ausdruck zurück Diese Methode gibt das also zurück, wenn sie in diesem Skript aufgerufen wird , genau hier. Gut. Und ja, lass mich versuchen, was wir derzeit haben. Mm, Zeile 7, Name C ist nicht definiert. Oh ja, wir müssen das Gleiche für die beiden tun, und jetzt sieht alles gut aus. Also lass es uns nochmal versuchen. Ja, alles ansehen, und jetzt haben wir die Daten da. Aber wenn ich es zum zweiten Mal drücke, bekommen wir noch einen Fehler. Und so heißt es, dass mit einer geschlossenen Datenbank nicht gearbeitet werden kann. Also warum ist das so? Nun, ich habe einmal die View-Taste gedrückt und diese Methode wurde ausgeführt. Also konnte das Cursor-Objekt diese Daten abrufen, und dann haben wir die Verbindung geschlossen Ich habe die Zeilen zurückgegeben. Wir konnten also diese drei Reihen dort platzieren. Aber wenn ich dann zum zweiten Mal die View-Schaltfläche drücke, die Verbindung bei der View-Methode geschlossen. Aus diesem Grund erhalten Sie, dass dies bei einer geschlossenen Datenbank nicht funktionieren kann . Also und sehen Sie, was wir bekommen. Also alles ansehen, es funktioniert gut. Jep Das heißt, wir können weitermachen und die anderen Methoden modifizieren. Also Selbstcursor und Selbstverbindung und dann das Schließen entfernen. Denken wir später darüber nach, die Verbindung zu schließen. Konzentrieren Sie sich jetzt also nicht darauf. Versuche einfach, diese Methoden zum Laufen zu bringen, ich hier, ich selbst da und da. Auch hier gilt für die Dalit-Methode, Sie die Verbindung entfernen und schließen Und zu diesem Zeitpunkt sollte alles gut funktionieren. Also mal sehen, ob wir das alles funktionieren. Lass uns nach etwas suchen. Lass uns den Eintrag sehen und suchen. Oh, wir haben da einen Cursor. Curr ist also in der Suche nicht definiert. Oh ja Tut mir leid. Okay, nochmal, wir alle wollen uns den Sucheintrag ansehen. Und noch ein Namensfehler. Der Name Rose ist nicht definiert. Also habe ich versehentlich diese lokale Variable in ein Attribut umgewandelt. Also stieg er hier, stieg dort. Okay, noch einmal. Wir alle und jetzt scheint es zu funktionieren. Lassen Sie uns also einige Daten hinzufügen. Fügen Sie dort einen Eintrag hinzu und können nicht mit einer geschlossenen Datenbank arbeiten. Oh, warum? Mm. Weil wir bei der Suchmethode eine geschlossene Datenbank haben, schließen wir die Datenbank dort. Und das übersehe ich, also haben wir dort keine geschlossenen Methoden mehr, nein Dann versuchen wir es noch einmal . Das tut mir leid. Eintrag hinzugefügt, und jetzt scheint es gut zu funktionieren. Großartig. Also alles sieht gut aus, außer dass wir die geschlossene Methode nicht mehr haben , weil wir diese Methode nicht in den Methoden unserer Klasse behalten können , weil Sie das gesehen haben, als wir diese Methode dort haben und wir am Ende diesen Fehler haben. Oder Sie können den Code ohne geschlossene Methode belassen. Später würden Sie jedoch einige Probleme denn wenn Sie einige Methoden haben , die noch nicht festgeschrieben wurden, , wenn ein anderes Programm eine Verbindung zu Ihrer Datenbank herstellt werden diese Daten festgeschrieben, wenn ein anderes Programm eine Verbindung zu Ihrer Datenbank herstellt. Bei der nächsten Operation. Also bringt es manchmal manche Dinge durcheinander Also in der Regel sollten Sie die Verbindung schließen. Und dafür gibt es eine weitere spezielle Methode, die Sie Ihrer Klasse hinzufügen können , wie diese hier, aber diese andere dient dazu, Ihr Objekt zu zerstören Das nennt man Deal. Also für delete, und das bekommt auch die Objektinstanz als Parameter. Diese Methode wird also angewendet, wird ausgeführt, wenn Sie eine Instanz der Klasse aufrufen , wie wir es im Frontend-Skript gerade hier tun , während diese hier ausgeführt wird, wenn diese Instanz aus dem Skript gelöscht wird, was zufällig der Fall ist, wenn das Skript beendet wird Bevor das Skript beendet wird, wird diese Methode also ausgeführt Und was wir hier tun wollen, ist Self Dot Connection Dot Close Das sollte also funktionieren. Wenn wir das jetzt ausprobieren, sollten wir die gleichen Ergebnisse erzielen. Also habe ich das versehentlich hinzugefügt, aber trotzdem, also werden wir sehen, dass Sie danach suchen können und Sie die Rose mit diesem bestimmten Wert erhalten . Das ist also meine Lösung, und es gibt keine Standardmethode, um ein Skript zu schreiben. Es gibt also möglicherweise andere Alternativen, um dieses Problem zu lösen, um diese Anwendung zu erstellen. Sie können sich also auch dafür entscheiden, dort oder hier in der grafischen Benutzeroberfläche eine Methode hinzuzufügen . Sie könnten also beispielsweise eine Schaltfläche hinzufügen, z. B. die Schaltfläche Commit, und dann hier eine weitere Methode namens Commit hinzufügen. Und dann entfernst du wahrscheinlich all diese Commit-Methoden aus diesen Methoden aus den Methoden deiner Escult-Operationen Und dann setzt du diese Methode ein. Also eine Methode Commit innerhalb der Commit-Methode deiner Klasse. Wenn also die Benutzertaste festgeschrieben ist, die Änderungen in die Datenbank übernommen. Das wäre also eine andere Lösung, aber genau das haben wir uns in diesem speziellen Fall ausgedacht . Ich hoffe, Sie verstehen jetzt ein paar Dinge, und das wird selten verwendet. Also normalerweise musst du nur darin und dann die anderen Methoden verwenden. Dies ist jedoch angemessen , wenn Sie kurz vor dem Beenden des Programms etwas anwenden möchten kurz vor dem Beenden des Programms etwas . Das ist also großartig Und in der nächsten Vorlesung werde ich einen weiteren Kurs schreiben. Also werden wir darüber nachdenken, wie wir ein Problem modellieren können, bei dem es darum geht, eine Art Bankkontoobjekt zu erstellen , mit dem wir das Geldgleichgewicht wiederherstellen. Und dann heben wir Geld ab und zahlen es auf dieses Guthaben ein. Als Übung können Sie nun dieses Skript, den alten Skiner-Teil des Programms, das Frontend, in eine objektorientierte Form umwandeln Skiner-Teil des Programms, das Frontend, in eine objektorientierte Form Also fügst du das in eine Klasse ein und versuchst, eine gute Lösung zu Ich werde Ihnen auch eine Lösung dafür anbieten. Aber vorher möchte ich, dass Sie es selbst ausprobieren damit Sie ein wenig objektorientiertes Programmieren üben. Ja, das passt gut dazu. Ja, wir sehen uns in der nächsten Vorlesung. 177. 180. Erstellen einer Benutzer-Anmeldeseite: Hallo. In diesem Vortrag zeige ich Ihnen, wie Sie mit Python und seiner Kivi-Bibliothek eine minimalistische mobile App erstellen eine minimalistische mobile App mit Python und seiner Kivi-Bibliothek Was wir erstellen werden, ist diese einseitige App , die Sie hier sehen Wie ich Ihnen im vorherigen Video gezeigt habe, handelt es sich bei dieser App tatsächlich um eine Mehrbildschirm-App. Wenn Sie also auf Anmelden klicken, wechseln Sie zu einem anderen Bildschirm und melden sich dann auf einem anderen Bildschirm an und so weiter. Aber in diesem Vortrag werde ich dir nur die Minimal-App zeigen, und das ist wie eine Vorlage, mit der du beliebige andere Apps schreiben kannst, egal ob sie nur einen Bildschirm oder mehrere Bildschirme haben . Also werde ich diesen Screenshot hier auf dem Bildschirm behalten. Denn das ist notwendig, wenn Sie die Oberfläche erstellen, die grafische Oberfläche, damit Sie anhand Ihres Designs programmieren können. Dies könnte auch auf einem Blatt Papier sein, auf dem Sie eine Skizze gezeichnet haben, wie die Benutzeroberfläche aussieht. Was Sie also benötigen, ist eine Python-Datei. So fängt alles an. Und ich werde meine Datei Main Dot Pi nennen. Sie müssen sie nicht Main Dot Pi nennen, aber es ist eine gute Praxis, denn wenn wir später unsere App bereitstellen, wenn Sie Ihre App in eine ausführbare mobile App konvertieren eine ausführbare mobile App die auf einem echten Handy läuft, müssen Sie Ihrer Datei den Namen Main Punkt Pi geben. Es ist also eine gute Idee, sie sofort zu benennen, damit Sie sie später nicht umbenennen müssen, oder vielleicht vergessen Sie es später und erhalten einige Fehler. Also Hauptpunkt Pi. Dieser Hauptpunkt Pi ist der Ort, an dem die Logik des Programms in Python-Sprache geschrieben wird. Und es gibt noch eine weitere Datei, die du erstellen musst. Du kannst es nennen, wie du willst, aber ich werde es Design KV nennen. Sie müssen also die KV-Erweiterung verwenden und den Bildschirm trennen. Ich werde das hier reinstellen. Ich nehme den Kuchen hier drin und ich werde dir auch dieses Bild hier unten zeigen , damit es dort bleibt. Und ich meine, der Kuchen sollte hier bleiben. Ordnung. Also, was ist dieser KV? Also, nichts worüber man sich Sorgen machen müsste. Es ist eigentlich eine gute Sache. Es gibt zwei Möglichkeiten, eine mobile App mit Python und der Kivi-Bibliothek zu erstellen eine mobile App mit Python und der Kivi-Bibliothek Die erste Möglichkeit besteht darin, alles in Python zu schreiben, was die Logik des Programms bedeutet. Die Verarbeitung und alles, was im Hintergrund mit den von Ihnen verarbeiteten Daten passiert, sind also Hintergrund mit den von Ihnen verarbeiteten Daten die Benutzeranmeldungen, Abrufen von Wetterbeobachtungsdaten oder was auch immer Ihre App tut Und der andere Teil des Programms ist die grafische Benutzeroberfläche, das ist dieses Ding hier Also irgendeine Art von Sprache, man braucht eine Sprache, um zu sagen: Oh, ein Etikett mit dieser Schriftgröße und dieser Schriftfamilie und diesem Lehrbuch und so weiter Und das können Sie in Python tun, aber das ist keine gute Praxis. Es ist eine gute Idee , diese grafische Oberfläche in einer Punkt-KV-Datei in der Kiwi-Sprache zu schreiben in einer Punkt-KV-Datei in der Kiwi-Sprache Aber die Kiwi-Sprache ist sehr, sehr einfach. Du wirst es an einem Tag lernen. Ich werde dir also nicht zeigen, wie man beides macht. Ich werde Ihnen also nicht zeigen, wie Sie eine App mit beiden Methoden erstellen können, also mit der Methode , alles in der Punkt-Py-Datei zu haben und mit der Methode , die Logik in der Punkt-Py-Datei und die grafische Oberfläche in der KV-Datei zu haben. Ich werde Ihnen nur den richtigen Weg zeigen, nämlich Python für die Logik und KV für die Grafik zu verwenden. Das ist es, was jeder Profi verwendet. Also bitte lerne auf diese Weise. Und wir beginnen mit der Python-Datei. Der erste Schritt besteht darin, alle erforderlichen Objekte aus KV zu importieren . Aus der QV Dot App Import App. Dies ist das Hauptobjekt. Es symbolisiert die App von KV Lang Import. Wenn Sie sich gefragt haben, wie Sie die Python-Datei mit der KV-Datei verbinden, ist die Antwort dieses Builder-Objekt, das ich Ihnen in nur einer Minute zeigen werde , nachdem ich ein weiteres Objekt aus dem qv dot UIX-Bildschirmmanager, Import, Bildschirmmanager und Bildschirm Und das ist es. Und dann verwenden Sie den Builder, der die Dateilademethode verwendet, und dort laden Sie das Design dieser KV-Datei. So wird dieses Skript also über die KV-Datei Bescheid wissen. Stellen Sie sicher, dass sich diese beiden Dateien im selben Verzeichnis befinden, Main Dot Pi Design Dot KV. Und dann gehst du zu deiner KV-Datei. Die Funktionsweise der KV-Sprache erfolgt auf Hierarchieebene. Es ist also eine Hierarchie von Objekten. Das ist also ein Bildschirm und dieser Bildschirm enthält Widgets. Wenn Sie also nur einen Bildschirm haben, werden Sie schreiben. Geben Sie dem Bildschirm einfach einen Namen und verwenden Sie diese Symbole und dann eine Spalte dort. Also nenne ich diesen Bildschirm den Anmeldebildschirm. Und wenn Sie dann einen anderen Bildschirm haben, sagen wir, wenn Sie auf diese Schaltfläche klicken, der Anmeldebildschirm angezeigt. Dann möchten Sie einen weiteren Bildschirm wie einen Anmeldebildschirm schreiben . Auf die gleiche Weise. Aber vorerst werden wir nur einen Bildschirm haben. Und falls du dich fragst, wie ich zu dieser schönen lila Farbe gekommen bin? Nun, das ist Syntaxhervorhebung für die Sprache Kiwi, und Sie können eine Erweiterung verwenden, die Kiwi-Erweiterung Suchen Sie also einfach nach Kiwi und verwenden Sie diese Erweiterung. Also installiere es und aktiviere es dann. Und Sie werden Syntaxhervorhebungen im Visual Studio-Code erhalten , was eine gute Sache ist. Also dann hat der Anmeldebildschirm Widgets, sagte ich. Und sobald Sie die Eingabetaste gedrückt haben, möchten Sie mit einem Tabulator oder vier Leerzeichen einrücken, genau wie in Python Das erste Widget ist also das erste Widget ist ein Label. Aber anstatt das zu tun, möchten Sie ein weiteres Widget über dem Etikett hinzufügen. Es ist ein unsichtbares Widget, aber es ist immer noch ein Widget. Es ist ein Rasterlayout. Sie verwenden diese Symbole nicht mehr. Du benutzt es einfach für den Bildschirm. Ein Rasterlayout, was es ist, ist im Grunde die Art von Bereich , der alle anderen Widgets enthalten wird. Also hier unten werden wir die anderen Widgets hinzufügen, und das ist eine Möglichkeit, den Bereich zu trennen. Also der Bildschirm. Und ich denke, ich denke darüber nach meinen Bildschirm zu trennen, um meinen Bildschirm zu organisieren , indem ein Hauptraster-Layout habe, das alles enthält, und dann wird dieses Rasterlayout zwei weitere Rasterlayouts enthalten. Das Rasterlayout für diesen Bereich finden Sie hier. Und dieses spezielle Rasterlayout wird eine Spalte und eine undefinierte Anzahl von Zeilen haben eine Spalte und eine undefinierte Anzahl von Zeilen Sie können diesem Rasterlayout also so viele Zeilen wie möglich hinzufügen diesem Rasterlayout Ich meine also ein Rasterlayout und dann noch ein Raster. Grundriss. Das erste Rasterlayout ist also das gesamte Raster, das nur aus einer Spalte bestehen wird. Und dieses Rasterlayout besteht aus zwei Rasterlayouts. Dieser hier drin und dieser hier drin. Also dieser ist es und das ist es. Der Grund, warum ich das so mache, ist, dass dieser Bereich Widgets hat, die auf die gleiche Weise organisiert sind, was bedeutet, dass wir hier nur eine Spalte haben Und hier haben wir zwei Spalten. In diesem zweiten Rasterlayout werde ich also den zweiten Kult, das Attribut, deklarieren. Und hier haben diese Rasterlayouts standardmäßig nur eine Spalte. Also werde ich es bei einer Spalte belassen. Und dann ist das, was Sie hier hinzufügen, beschriftet. Das ist das erste Widget, das wir hier haben. Geben Sie die Eingabetaste ein und dann die Tabulatortaste, sodass alles eingerückt ist Der Text des Etiketts steht in Anführungszeichen, Benutzeranmeldung. Was wir dann unter dem Etikett haben, ist eine Texteingabe. Der Text der Texteingabe. Das wollen wir hier nicht. Was wir hier wollen, ist ein Hinweistext. Der Benutzername , den Sie im Textbuch sehen, ist also wie ein Hinweis für den Benutzer Nutzername. Deshalb fügen wir hier Widgets als Zeilen für dieses Rasterlayout hinzu. Dann haben wir eine weitere Texteingabe mit Hinweistext. Passwort. Und dann haben wir eine Schaltfläche mit Text-Login. Und dann gehen wir zum anderen Rasterlayout. Wir haben hier zwei Knöpfe. Der erste hat einen Text, Passwort vergessen, und der andere hat einen Text, melden Sie sich an, und das war's. Und das ist alles, was Sie vorerst für den Anmeldebildschirm tun müssen. Nun, hier gibt es noch etwas anderes, das du tun musst. Gehen Sie also zur ersten Einrückungsebene, genau wie beim Anmeldebildschirm. Das siehst du hier. Gerade da, und Sie möchten eine weitere Regel hinzufügen. Also in der Kiwi-Sprache sind diese Dinge hier, in den Symbolen in diesen Symbolen Regeln Diese andere Regel ist das Root-Widget. Es ist also im Grunde ein unsichtbares Widget, das alle Bildschirme der App aufzeichnet. Und in diesem Fall haben wir nur einen Anmeldebildschirm. Und dieser Anmeldebildschirm muss einen Namen haben. Sagen wir also den Anmeldebildschirm in Anführungszeichen. Sie werden später sehen, dass wir diesen Namen benötigen, wenn wir in der Python-Datei auf den Anmeldebildschirm verweisen den Anmeldebildschirm , weil die Logik in Python geschrieben wird, wo Sie sagen, dass, wenn der Benutzer diese Taste drückt, wir so etwas wie Bildschirm, der aktuell dem Anmeldebildschirm entspricht , sagen werden. Also geben wir den Namen des Bildschirms an, den Python anzeigen wird, wenn der Benutzer diese Taste drückt. Und das ist alles, was wir in der KV-Datei tun müssen. Stellen Sie sicher, dass Sie keine Zuweisungsoperatoren anstelle von Spalten verwenden . Verwenden Sie also Spalten. Ich habe diesen Fehler gemacht, als ich die Sprache QV gelernt habe , weil Sie an Python gewöhnt sind , wo Sie häufig Zuweisungsoperatoren verwenden, Ihre Datei ansehen und dann zu Python wechseln Und was wir jetzt in Python tun müssen, wir müssen einige leere Klassen erstellen , die den gleichen Namen wie diese Regeln hier haben. Was Klasse bedeutet. Auf dem Anmeldebildschirm wird dieselbe Groß- und Kleinschreibung verwendet. Also verwende ich hier L und S, genauso wie hier. Also muss es genau dieselbe Zeichenfolge sein. Und diese Zeichenfolge muss vom Bildschirmobjekt erben. Es wird also ein Bildschirmobjekt sein. Lassen Sie uns vorerst sagen, einfach bestehen. Und dann müssen Sie eine weitere Klasse erstellen, die, Sie haben es erraten, das Root-Widget ist Jede Regel hier muss durch eine Klasse in Python repräsentiert werden . Das Root-Widget muss vom Screenmanager erben. Machen Sie sich also keine Sorgen, wenn dieser Code vorerst etwas starr ist. Sie haben also einige Regeln, die wie eine Blackbox aussehen. Aber betrachte es nur als eine Vorlage. Sie werden diese Vorlage für jede App verwenden, also ist es gut, dass Sie das auch zulassen. Und zu guter Letzt ist das das Letzte, versprochen. Sie benötigen auch die Haupt-App der Klasse. Es geht also um das App-Objekt , das wir noch nicht verwendet haben. Das muss also von der App erben. Das ist eine und diese benötigt eine Methode namens Build. Selbst. Jede Methode benötigt also einen Selbstparameter. Diese Build-Methode ist also eigentlich eine App-Methode. Sie können das sehen, wenn Sie es hier verwenden. Also habe ich diese Zeile und die liebe App ausgeführt. Sie werden sehen, dass build zu diesen Objekten gehört, diesen Methoden dort, build. In Ordnung. Also wird diese erstellte Methode das Root-Widget zurückgeben Aber stellen Sie sicher, dass dies das Objekt und nicht die Klasse ist. Also initialisieren wir hier das Root-Widget. Sie können sehen, dass ich die runden Klammern verwende. Und das allerletzte ist, falls und sobald wir das gemacht haben, ist das jetzt die App. Wir sind bereit zur Ausführung. Aber wie Sie hier in der Python-Datei sehen, rufen wir keine Klasse auf. Das allerletzte, was wir tun müssen, ist natürlich, die Haupt-App-Klasse aufzurufen. Eine gute Vorgehensweise ist die Verwendung, wenn der Name gleich zwei ist. Wichtigste. Dann erstellen Sie eine Instanz der Haupt-App und verwenden dann die Run-Methode der Haupt-App , bei der es sich übrigens um eine App-Methode handelt. Sie können also auch hier einen Lauf sehen, nur dort. Speichern Sie das Skript, und ich werde jetzt die Datei ausführen und sehen, was wir bekommen. Ich erwarte natürlich einige Fehler , weil ich glaube , ich habe nicht alles zu 100% gemacht. Ja, ich habe keine Fehlermeldung erhalten. Terminal ist alles in Ordnung, aber die Oberfläche sieht nicht so aus, wie ich es erwartet hatte. Also habe ich dort einige Fehler gemacht. Manchmal wird also kein Fehler im Terminal angezeigt, was die Behebung des Problems erschwert. Und wenn Sie keinen Fehler erhalten, sollte er im Code in Ihrer Q-Datei suchen. In diesem speziellen Fall sieht es also so aus, als ob das Rasterlayout nicht so funktioniert, wie es sein sollte. Und der Grund dafür ist, dass ich nicht angegeben habe wie viele Spalten das Rasterlayout haben sollte, das Hauptraster-Layout, sondern auch die andere , das untergeordnete Element dieses übergeordneten Rasterlayouts. Bevor Sie also eine Änderung vornehmen, müssen Sie dieses Fenster schließen. Ich werde hierher gehen. Ich werde also ein Kultattribut bestehen , genau wie ich es mit diesem Rasterlayout getan habe. Lassen Sie mich es einfach zuerst mit dem übergeordneten Rasterlayout testen . Also das bekommen wir. Wie Sie sehen können, sehen wir im Vergleich dazu nicht die ersten Rasterlayoutelemente, nämlich eine Bezeichnung, den Benutzernamen, das Passwort und das untere. Weil diese Widgets tatsächlich Unterseite des vergessenen Passworts versteckt sind. Sie sind also irgendwo hier drin. In der Ecke. Wenn Sie also diese Spalten nicht angeben , wie viele Spalten Sie haben, platziert Kiwi einfach alle Widgets in der unteren linken Ecke Wenn wir das jetzt schließen und auch ein Call-Attribut hinzufügen, das einem entspricht, und wenn ich es nicht speichere und es erneut ausführe, sehe ich dieselbe Ausgabe Also muss ich das Skript, Control S, speichern und es dann erneut ausführen. Und dieses Mal sehen wir mehr oder weniger, was wir erwartet hatten. Nun, wir müssen noch etwas Abstand und Abstand zwischen den Widgets hinzufügen Abstand zwischen den Widgets , damit es so aussieht wie hier. Aber das ist es, was wir bisher erreicht haben, und ich finde es gut. Also werde ich das jetzt schließen und diesen Code als erledigt betrachten. Aber bevor ich das Video schließe, werde ich sicherstellen, dass Sie verstehen, was hier vor sich geht. Also diese Kiv-Datei, all diese Dinge, die Sie hier sehen, Rasterlayout, Anmeldebildschirm, Texteingabe-Schaltfläche, sind eigentlich Python-Objekte Einige von ihnen, wie Anmeldebildschirm und Root-Widgets sind Objekte, die durch Klassen repräsentiert werden, die wir in der Python-Datei, dem Anmeldebildschirm und dem Root-Widget erstellt haben . Die anderen sind Klassen, die Sie aus Kiv importieren. Wenn wir also nur in Python codieren würden, nicht in der Sprache Kiv, müssten wir so etwas wie von Kv dot UixGridAout aus tun und das Grid-Layout importieren Das ist also dieselbe Klasse wie diese hier drin. Die KV-Datei importiert diese Objekte jedoch implizit. Sie werden also entweder aus Ihrer Python-Datei wie dem Anmeldebildschirm und dem Root-Widget oder aus der Kivi-Bibliothek importiert wie dem Anmeldebildschirm und dem Root-Widget oder aus der Kivi-Bibliothek In diesem Fall importieren wir hier also kein Rasterlayout. Oder das Gleiche wäre mit der Taste. Also von KV, UIX diese Schaltfläche Import-Taste. Das Gleiche gilt für das Text-Widget. Wir importieren diese Objekte also nicht hier rein. Es geht also um die Objekte. All das sind Objekte, und dann haben Sie diese Attribute dieser Objekte. Wenn Sie also eine Python-Shell öffnen und dieses Grid-Layoutobjekt importieren , wie ich es hier gezeigt habe, und dann das Grid-Layout in runden Klammern erstellen, werden Sie feststellen, dass CLS eines der Attribute des Grid-Layoutobjekts ist Attribute des Grid-Layoutobjekts Das ist also über die Objekte. Nun zur Hierarchie einer KV-App, sie funktioniert so. In der Hierarchie steht die App an oberster Stelle. Also dieses App-Objekt hier drin. Dann kommt der Screenmanager, tatsächlich durch das Root-Widget dargestellt wird. Das Root-Widget folgt also der App, und dann haben wir den Bildschirm , der durch den Anmeldebildschirm dargestellt wird. Dieser Anmeldebildschirm ist also nur ein Kind des Bildschirms. Er verhält sich genauso wie ein Bildschirm. Übrigens, wir hätten hier auch etwas anderes machen können, was ich Ihnen gerade zeigen werde Sie könnten den Anmeldebildschirm einfach so passieren. Und dann könnten Sie hier das Root-Tidget hinzufügen, das sich in der Hierarchie befindet , es befindet sich über dem Anmeldebildschirm Und dann könnten Sie auf dem Anmeldebildschirm den Namen Login übergeben Bildschirm einfach so. Und das könntest du löschen. Das wäre also derselbe Code und Sie erhalten dieselbe Ausgabe, wie Sie hier sehen können. Das zeigt also, was ich gerade gesagt habe, dass das Root-Widget ein übergeordnetes Element ist und dann kommt ein Anmeldebildschirm und innerhalb des Anmeldebildschirms haben Sie ein Rasterlayout, Sie haben ein anderes Rasterlayout, Texteingabe und so weiter. Um den Code besser zu organisieren, denn hier im Root-Widget müssten wir später einen weiteren Bildschirm wie einen Anmeldebildschirm hinzufügen, müssten wir später einen weiteren Bildschirm wie einen Anmeldebildschirm hinzufügen sodass dieser seine eigenen untergeordneten Elemente hat Dann hätten wir einen weiteren Bildschirm wie Anmeldefehlerbildschirm den der Benutzer weitergeleitet würde, wenn bei den Anmeldedaten ein Fehler aufgetreten wäre bei den Anmeldedaten ein Fehler aufgetreten Der Code würde also zu komplex werden. Daher haben wir stattdessen in der den Anmeldebildschirm und in der Regel auch das Root-Widget. Und dann geben wir an, dass der Anmeldebildschirm tatsächlich ein untergeordnetes Element des hier verwendeten Root-Widgets ist. Und so fügen wir auf die gleiche Weise weitere Bildschirme hinzu. Das sollten Sie also im Hinterkopf behalten , denn es hilft Ihnen, besser zu verstehen, wie Kiwi funktioniert Und genau das hatte ich über dieses Video, und ich hoffe, wir sehen uns im nächsten Video 178. 176 . Einen Bankkonto-Kurs erstellen: Nun, in den vorherigen Vorlesungen habe ich erwähnt, dass ich ein Programm und eine Anwendung erstellen werde , bei denen wir eine Art Bankkonto verwalten, sodass wir einen Saldo haben, und dann einige Operationen anwenden werden , z. B. Geld vom Bankkontoobjekt abheben Geld vom Bankkontoobjekt und auch Geld einzahlen. Ich werde den Wert und den Saldo in einer einfachen Textdatei speichern . Das ist also keines der zehn Programme, die wir im Kurs entwickeln. Dies dient nur dazu, Sie mit den Kursen vertraut zu machen und sie ein wenig näher zu erklären. Also werde ich hier etwas Hauswirtschaft machen. Also lass mich hier einen Ordner erstellen. Und lege all diese vorhandenen Dateien in diesen Ordner. Wir haben also die vorherigen Dateien hier, und ich werde jetzt einen neuen Ordner erstellen. Nennen wir dieses Konto. Und in diesem Ordner habe ich mein Python-Skript. Nennen wir es also so. Wir haben also diese Python-Datei unter Konto, und wir benötigen auch diese Textdatei. Wir werden den aktuellen Saldo unseres Bankkontos speichern . Dies wird also eine triviale Anwendung sein , da Sie im wirklichen Leben die Bankkontoinformationen, den Saldo, nicht in einer Textdatei speichern möchten den Saldo, nicht in einer Textdatei Im echten Leben möchten Sie das in einer echten Datenbank speichern, wie zum Beispiel Post Gras Aber um das Objekt oder die Programmierung zu üben , speichern wir einfach den Balance-Wert in dieser Datei. Das ist also unser Speicher. Und der Einfachheit halber werden wir nur mit einem einzigen Konto arbeiten. Unser Programm wird also in der Lage sein, ein Kontoobjekt zu verarbeiten , denn wenn Sie mehrere Konten haben, könnte die Lösung davon abweichen. Sie müssten also wahrscheinlich darüber nachdenken, eine Tabelle zu haben, und vielleicht wäre hier eine Datenbank notwendig. Lassen Sie uns also über unser persönliches Konto nachdenken. Sie können dieses Programm für Ihre persönlichen Notizen verwenden, sodass Sie vielleicht Ihren Kontostand im Auge behalten möchten und dieses Python-Programm verwenden können. Und jetzt ist das Objekt hier das Bankkonto. Und dieses Objekt, wir sollten anfangen darüber nachzudenken, welche Eigenschaften dieses Bankkontoobjekt als Ausgangszustand haben sollte. Also haben wir über dieses Minimalobjekt gesprochen, und ein Bankkonto hätte natürlich einen anfänglichen Saldo. Fangen wir also an, dieses Kontoobjekt zu erstellen und es Konto zu nennen. Sie können es nennen , wie Sie wollen, aber ich nenne es Konto. Darin ist also die erste Funktion, die wir definieren wollen, und wir übergeben uns dort selbst. Und lass es uns für einen Moment so belassen. Und wir haben gesagt, dass unser Bankkontoobjekt ein Saldoattribut haben wird. Und in unserem Fall haben wir diesen Saldopunkt TXT, und lassen Sie uns dort einen Anfangswert erstellen. Um nun eine Objektinstanz zu erstellen, müssen wir diesen Wert abrufen und an unsere Init-Funktion übergeben , sodass wir dieses Minimalobjekt konstruieren Da wir eine Datei haben, müssen wir nur diese Nummer aus dieser Datei lesen Und natürlich möchten Sie hier einen Parameter wie den Dateipfad übergeben . Also so werde ich das nennen und jetzt, wenn Sie sich erinnern, in der Bookstore-Anwendung im Backend-Skript übergeben wir in der Bookstore-Anwendung im Backend-Skript hier auch einen Parameter an die Init-Funktion Und dann haben wir aus dieser Datenbankdatei ein Verbindungsobjekt erstellt dieser Datenbankdatei ein Verbindungsobjekt In diesem speziellen Fall wollen wir eine Ganzzahl erstellen, also eine Zahl aus dieser Datei außerhalb dieses Dateipfads. Du könntest also so etwas wie mit Open machen. Also machen wir die Dateibehandlung mit Methoden mit offenem Dateipfad, und das ist eine Textdatei, also müssen wir unseren Modus beibehalten, was Lesen bedeutet. Also öffnen wir den Dateipfad, diese Datei im Lesemodus. Als Datei. Das ist also nur eine temporäre Variable , die hier mit einer Anweisung existiert. Und dann müssen wir aus dieser Datei lesen. Also so etwas wie File Dot RED. Ja, das ist es. Dadurch wird die Datei gelesen, aber du speicherst sie nirgends. Was Sie also tun möchten, ist zu sagen, dass Selbst und Gleichgewicht dem Dateipunkt Lesen entsprechen Das bedeutet also, dass der Wert in der Textdatei in dieser Instanzvariablen gespeichert wird der Wert in der Textdatei in dieser Instanzvariablen gespeichert der Textdatei in dieser Instanzvariablen Das ist also eine Instanzvariable. So heißt sie. Eigentlich ist das die Instanzvariable und das ist das Objekt, also das Account-Objekt. Gut. Das ist fast gut. Und wir müssen dort auch die Integer-Funktion hinzufügen dort auch die Integer-Funktion , da diese standardmäßig als Zeichenfolge gelesen wird. Also müssen wir diesen Wert in eine Ganzzahl umwandeln. Ja, das sollte funktionieren, und das sollte das Objekt für uns konstruieren, das Act-Objekt, an das ein Gleichgewicht geknüpft ist. Und bevor wir hier eine ähnliche Auszahlungsmethode und dann die Einzahlungsmethode erstellen . Ich würde es vorziehen, zuerst eine Instanz dieser Klasse aufzurufen. Ich mache das hier. Sagen wir, sortieren Sie das in der Account-Variablen. Das wird also das Objekt sein, das Objekt, das aus diesem Blueprint erstellt wird , der Konto-Blueprint, da müssen Sie dieses Argument übergeben, das Argument für diesen Parameter, nämlich balance Großartig. Und für sich selbst übergibt Python automatisch die Account-Objektinstanz. Gut. Dadurch wird nun eine Objektinstanz erstellt. Und lassen Sie mich das Objekt hier ausdrucken. Wir sehen also einige Ergebnisse in Aktion. Python, und das ist im Kontoordner und in Akt Pi. Wir haben einen Fehler erhalten, keine solche Datei oder Verzeichnis für Balance Dot TXT. Und der Grund dafür ist, dass wir das Kontoverzeichnis auch dort übergeben müssen . Also und dieses Mal funktioniert es. Wir mussten das Verzeichnis dort übergeben weil wir uns in diesem Ordner im Demo-Ordner befinden, und Sie müssen zuerst den Kontoordner übergeben und dann auf den Rest von TXT zeigen. Und das ist die Ausgabe. Es heißt also Main Dot Account Object. Also das Account-Objekt des Hauptmoduls. Und was Min ist, ist wenn Sie ein Skript ausführen, wie wir es hier getan haben, also mit Python auf das Skript zeigen, Python weist dem Modul diesen Namen zu. Dieses Modul erhält also tatsächlich diesen Namen und das Skript, aber es wird als Modul behandelt. Aber wenn Sie dieses Modul importieren. Wenn ich also laufen würde, öffne ich jetzt eine interaktive Shell. Also aus dem Kontoordner importieren. Was passiert , ist , dass Sie auch die Druckfunktion ausführen lassen. Aber dieses Mal, wenn Sie eine Datei importieren, also wenn Sie sie nicht ausführen, wie wir es zuvor mit dem Python-Konto gemacht haben, AC, dass Pi, wenn Sie das Modul importieren, erhält das Modul den Namen des Skripts, in das es geschrieben wurde. In diesem Fall ist es also AC ohne die Erweiterung. Und hier bekommst du auch den Namen des Pakets des Moduls. Pakete bestehen also aus Modulen, und ein Paket ist wie ein Ordner, und da haben Sie mehrere Module oder ein Modul, wie wir es in diesem Fall haben. Unser Paket hier ist Account, also Account, und dann hat es dieses Modul, und dann hat dieses Modul diese Klasse, die Account-Klasse. Das war also etwas, was ich Ihnen Pakete, Module und Klassen zeigen wollte . Großartig. Jetzt werde ich diese Python-Shell verlassen und ein bisschen mit diesem Skript herumspielen. Und was wir hier gemacht haben, wir haben den Objektnamensraum ausgedruckt und den tatsächlichen Saldo nicht ausgegeben, weil wir den Saldo hier nicht zurückgeben. Wenn Sie jedoch den Saldo ermitteln möchten, müssen Sie auf den Saldo zeigen . Dabei wird eine Punktnotation verwendet, um auf das Objekt zu verweisen , das das Saldoattribut enthält. Schauen wir uns also an, was wir dieses Mal bekommen. Und ja, 1.000. Also das ist der aktuelle Saldo. Wie Sie sehen, können Sie mithilfe der Punktnotation auf Attribute Ihrer Objektinstanz zugreifen der Punktnotation auf Attribute Ihrer Objektinstanz . Gut. Lassen Sie uns nun diese anderen Methoden dort hinzufügen. Und was können wir mit einem Bankkonto machen? Nun, wir können Geld abheben. Und Sie müssen immer self in all Ihren Methoden angeben und dann den Parameter , und dann den Parameter der für diese bestimmte Methode gilt. In diesem Fall haben Sie, wenn Sie etwas Geld abheben, einen Betrag im Kopf , den Sie abheben möchten. Sie übergeben dort also den Betrag als Parameter. Nein, nur um klarzustellen, dass du verstehst, was ich tue. Was ich hier mache, ist, dass ich einen anfänglichen Saldo habe , der aus dieser Datei gelesen wird, also dieser Textdatei, und dann möchte ich dem Benutzer erlauben, Operationen durchzuführen, also Geld von diesem Guthaben abheben. Und sobald der Benutzer die Auszahlungsmethode ausführt, möchte ich die Saldonummer in der Objektinstanz aktualisieren in der Objektinstanz Und ich möchte diesen Saldo noch nicht in meine Bilanzdatei schreiben diesen Saldo noch nicht in meine Bilanzdatei Also möchte ich hier nur etwas berechnen, zum Beispiel Selbstbalance entspricht Selbstbalance Also, das ist eine Auszahlung, also abzüglich des Betrags, den ich abheben möchte Das bedeutet, dass das Eigengleichgewicht , sagen wir, 100 -100 entspricht, und ich werde in diesem Fall ein aktualisiertes Guthaben von 900 Wenn ich will, kann ich die Datei hier erneut öffnen und die Datei hier erneut öffnen und dann den aktualisierten Saldo in diese Datei schreiben Das wäre also eine Lösung. Eine konstruktivere Lösung wäre jedoch wahrscheinlich eine spezielle Methode, die die Änderungen an der Datei Vielleicht möchten Sie also etwas Geld abheben und dann innerhalb derselben Sitzung etwas Geld einzahlen und dann die Commit-Methode anwenden, um die Änderungen zu speichern Das ist also die Lösung, für die ich mich entscheiden möchte. Ja, wir sind mit der Auszahlungsmethode fertig. Zahlen Sie jetzt selbst und den Betrag erneut ein. Das ist also eine lokale Variable. Das ist eine lokale Variable. Sie haben zufällig den gleichen Namen, aber sie haben nicht viel miteinander zu tun. Und Selbstbalance entspricht in diesem Fall dem Selbstgleichgewicht plus dem Betrag Mal sehen, wofür wir das haben. Und ich werde dieses Instanzobjekt hier behalten , das generiert wird. , wir beharren auf einer Objektinstanz Mit anderen Worten, wir beharren auf einer Objektinstanz und drucken den aktuellen Saldo aus Und dann möchte ich etwas Geld abheben. Von meinem Kontoobjekt. Das heißt, ich wende „Auszahlung“ auf das Kontoobjekt an, und „Auszahlung“ benötigt zwei Argumente. Also die Objektinstanz, die automatisch übergeben wird, und dann der Betrag , der 100 sein könnte. Und sobald ich das gemacht habe, möchte ich den aktualisierten Saldo ausdrucken . Mal sehen, was es bewirken wird. Ja, 1.000. Also wird eine Objektinstanz erstellt und du bekommst 1.000 ausgedruckt, weil du hier 100 hast, und dann nimmst du 100 davon und am Ende hast du 900. Großartig. Wenn Sie das also erneut ausführen, werden Sie feststellen, dass erneut eine neue Objektinstanz erstellt wird. Sie haben also keine 900 mehr als aktuellen Saldo. Sie haben 1.000. Das bedeutet, dass Sie die Änderungen in die Datei schreiben müssen , wenn Sie den Saldo speichern möchten. Und das können wir mit Methoden tun. Nennen wir es Commit. Und gib el dort weiter. Und mir fällt kein Parameter ein, den ich durch diese Commit-Methode übergeben müsste , weil wir nur mit den dort vorhandenen Variablen arbeiten werden . Also das wäre so etwas wie mit open, naja, wir müssen den Dateipfad öffnen, aber wir haben hier ein kleines Problem, weil eine Dateipfadvariable jetzt nur noch eine lokale Variable in dieser Init-Methode ist nur noch eine lokale Variable in dieser Init-Methode Wenn wir sie also hier übergeben, wird diese Funktion, diese Methode, sie nicht erkennen Das ist also ein bisschen anders als das andere Backend-Skript, das wir geschrieben haben, weil wir hier diesen Parameter hatten, wie wir es hier tun Aber in diesem Fall wurde dieser Parameter nur innerhalb der Init-Methode verwendet Also haben wir ihn nirgendwo anders benutzt. Dafür gibt es also eine Lösung. Eine Lösung wäre, weiterzumachen und einen anderen Weg zu gehen , nennen wir diesen Weg hier. Also ein weiterer Parameter für die Commit-Methode. Wenn wir dann die Commit-Methode aufrufen wie wir es bei der Auszahlung getan haben, müssten wir den Saldopunkt TXT übergeben. Eigentlich dieser Pfad zur Commit-Methode. Das würde zwar funktionieren, ist aber immer noch nicht die beste Methode objektorientiertes Paradigma. Also müssen wir nach einer anderen Lösung suchen. Und das wäre, diese lokale Variable und Instanzvariable zu machen . Und um das zu tun, würdest du so etwas wie Selbst tun und Dateipfad entspricht Dateipfad Und das macht den Dateipfad, verwechseln Sie das nicht damit verwechseln Sie das nicht Das ist zufällig dasselbe, aber du kannst hier auch etwas anderes schreiben, wie alles Das ist also der Parameter der Einheitsfunktion. Also der Saldo, den TXC auf diesen Parameter legen wird. Der Pfad dieser Datei wird also zu diesem Parameter führen. Und dann erstellen Sie diese Instanzvariable, und diese Instanzvariable entspricht diesem Pfad. Aber du kannst dieses Ding hier benutzen. Du kannst es in deiner Klasse verwenden, wo immer du willst. Und in unserem Fall würden wir es gerne hier verwenden. Also öffnen wir den Self-Dateipfad dieses Mal mit der richtigen Methode, weil wir dieses Mal schreiben oder genauer überschreiben müssen genauer überschreiben um den aktuellen Saldo zu überschreiben , der zum Beispiel dieser sein sollte Das wollen wir mit dieser Datei überschreiben. Also als Datei ist das nur eine temporäre Variablendatei und Dateipunktwiedergabe und Selbstpunktabgleich. Gut, lass uns das versuchen. Und wir haben hier kein Update in der Datei erhalten , weil ich vergessen habe , die Commit-Methode aufzurufen. Sobald wir also Geld abgehoben haben, drucken wir es in der Konsole aus. Und dann das Konto mit dem Punkt Commit angeben, ohne ein Argument explizit zu übergeben , weil wir implizit die Objektinstanz übergeben Gut. Und wir haben dort einen Fehler bekommen: ungültiges Literal für Ganzzahl mit Basis Zehn Das wäre also die Ganzzahl in Zeile sechs. Hier wird also der Wert, mit dieser Methode gelesen wird , nicht in eine Ganzzahl umgewandelt. Und der Grund dafür ist , dass dieser Wert aus dem Gleichgewicht verschwunden ist, und das Lesen einer leeren Zeichenfolge ist Das ist also eine leere Zeichenfolge, die aus dieser Datei gelesen wird, dann versuchst du sie zu konvertieren und es funktioniert nicht Nun, der Grund, warum wir diese leere Zeichenkettendatei hier bekommen haben, ist der vorherige Fehler, also muss unser Argument hier eine Zeichenfolge sein, keine Ganzzahl. Python hat also die Datei mit der Methode geöffnet, war dann aber nicht in der Lage, einen Wert in diese Datei zu schreiben. Die Datei war also leer. Lassen Sie mich also den Anfangswert dort schreiben, und dann sollten wir ihn jetzt erneut ausführen können. Und ja, jetzt haben wir den aktualisierten Wert. Also nochmal, wir haben die Objektinstanz erstellt und dann den aktuellen Saldo ausgedruckt , der aus dieser Datei gelesen wurde. Am Anfang waren es 1.000 , Am Anfang waren es 1.000 , und dann haben wir 1.000 abgezogen, also wurde der Saldo aktualisiert, und dann haben wir diese Änderungen in diese Datei übernommen, sodass wir dort 900 Nun, das Gleiche gilt, wenn Sie, sagen wir, 200 hinzufügen und einzahlen möchten sagen wir, 200 hinzufügen und einzahlen Mal sehen, ob das funktioniert. Uh, ja, das wurde ausgedruckt. Lass uns die Akte überprüfen. Ja. Also das ist unser neues Gleichgewicht. Und ja, ich hoffe, das verdeutlicht einige Konzepte der objektorientierten Programmierung Wenn Sie kreativ sind, können Sie dieses Skript erweitern, sodass Sie dort weitere Methoden hinzufügen und es vielleicht eher zu einer echten Anwendung machen können eher zu einer echten Anwendung machen So großartig. Und hier geht es um diese Vorlesung, und in der nächsten Vorlesung werde ich über Vererbung sprechen, und wir werden dieses Skript erweitern indem wir dort Vererbung anwenden. Also rede ich in der nächsten Vorlesung mit dir. 179. 177. Klassen durch Vererbung erstellen: Fantastisch. Wir sind fast fertig mit dem Unterricht. Aber es gibt noch ein letztes Konzept , das du wissen musst, und das ist Vererbung. Vererbung ist der Prozess, bei dem aus einer Basisklasse eine neue Klasse erstellt wird. Also eine neue Klasse, die alle Eigenschaften und Methoden einer Basisklasse hat , aber auch einige andere Methoden hat. Also warum machen wir das? Nun, ich werde dir das anhand unseres Beispiels erklären. Also hier haben wir diesen Bauplan, also diesen Kurs. Und lassen Sie mich das löschen, um Sie nicht zu verwirren. Also da haben wir nur die Klasseninstanzen aufgerufen. Wir haben also diese Klasse, die ein Bankkontoobjekt für uns erstellt. Dann können wir Geld vom Bankkonto abheben und einzahlen. Was ist nun, wenn wir Geld von diesem Bankkonto überweisen möchten ? also Geld von unserem Bankkonto Überweisen Sie also Geld von unserem Bankkonto auf ein anderes Bankkonto. Nun, wir müssten hier eine Überweisungsmethode hinzufügen. Und dann mach so etwas ganz Einfaches wie Selbstbalance gleich Selbstbalance abzüglich des Betrags. Also überweisen wir dort einen Überweisungsbetrag, von unserem Guthaben hier abgezogen wird Aber soweit ich weiß, können Sie kein Geld von Ihrem Sparkonto überweisen Sie können Geld von Ihrem Girokonto überweisen, aber nicht von einem Sparkonto. Diese Methode wäre also für ein Girokonto nicht sinnvoll . Und dieses Konto ist ein allgemeines Bankkonto. Was wir also tun könnten, ist vielleicht eine weitere Klasse zu erstellen, Beispiel diese zu kopieren und eine weitere Klasse zu erstellen und sie etwas anderes zu nennen. Und so haben wir all diese Methoden da. Das ist also eine Lösung. Die andere Lösung besteht darin , Vererbung zu verwenden. Hier bietet sich also Vererbung an. Sie leiten eine Klasse aus einer Basisklasse ab, bei der es sich um eine allgemeinere Klasse wie diese Kontoklasse hier Lassen Sie uns also eine neue Klasse erstellen. Diese neue Klasse wird als Unterklasse bezeichnet , und dies wird die Basisklasse sein Also auch hier müssen Sie dieselbe Syntax verwenden, die Sie für die Klasse Q oder dort verwenden, um eine Klasse zu erstellen Nennen wir das Girokonto. Das erste, was wir tun wollen, ist eine Innit-Methode zu erstellen Mit dieser Init-Methode werden wir wie dieses Minimalobjekt erstellen , über das ich gesprochen habe Wie in unserer Basisklasse brauchen wir auch hier eine Balance aus unserer Datei, also brauchen wir diesen Dateipfad Aber anstatt diesen Code erneut zu schreiben, wie gesagt, können Sie, naja , zuerst eine Init-Funktionsmethode erstellen und dort natürlich self übergeben Sie übergeben immer den Self-Parameter, egal ob es sich um Basisklassen oder eine Unterklasse Dann möchten Sie in dieser Init-Methode die Init-Methode Ihrer Kontoklasse aufrufen, was bedeutet, dass, wenn Sie eine Objektinstanz Ihrer Prüfklasse erstellen , diese Methode ausgeführt wird, wenn diese Methode ausgeführt wird Diese Methode führt die Init-Funktion Ihrer Account-Methode aus , sodass Sie dieses Minimalobjekt erstellen, das mit diesem hier identisch ist aber dann werden wir hier unten einige zusätzliche Methoden haben. Ein Girokonto ist das und einige andere Dinge. Und hier müssen Sie self und den anderen Parameter übergeben , für diese Init-Funktion erforderlich ist Hier übergeben wir also zwei Parameter, und wir sollten hier dasselbe tun Und wenn ich das jetzt ausführe, erhalte ich eine Fehlermeldung. Ich möchte also, dass Sie sehen , welchen Fehler wir bekommen. Lassen Sie mich also eine Instanz dieser Funktion erstellen. Also überprüfe ich Oh, ja, lass uns das ausprobieren. Ähm, hier. Ja. Das ist im Account-Ordner, also hier, und dann Punkt Pi Lass uns sehen. Das Erste , was das bedeutet, ist, dass der Dateipfad in Zeile 21 nicht definiert ist, was diese hier ist. Und der Grund dafür ist, dass wir in dieser Funktion keinen Dateipfad definiert haben . Sie können das also innerhalb der Init-Klammern als Parameter übergeben Und dann musst du das auch hier übergeben. Sagen wir also, zählen Sie den Saldo Punkt TXT. Gut. Und wir sehen dort keine Ausgabe, weil wir nichts ausdrucken. Aber was im Grunde passiert ist, ist, dass eine Objektinstanz erstellt wurde und diese Methode genannt wurde. Und diese Klasse wurde auch initialisiert. Wenn wir das nun versuchen, der Sinn der Vererbung darin, zum Beispiel zu überprüfen, ob auf Methoden der Basisklasse zugegriffen werden kann, ohne diese Methoden in Ihre Unterklasse zu schreiben Nehmen wir an, wir überprüfen die Einzahlung und geben dort einen Betrag ein. Also zehn. Wenn wir das jetzt ausführen, erhalten wir diesen Attributfehler, der besagt, dass das Prüfobjekt kein Attribut hinterlegt hat, sodass diese Methode nicht erkannt wird. Und der Grund dafür ist, dass wir die Syntax der Vererbung noch nicht erfüllt haben. Der Schlüssel hier ist also, ein Argument an unsere Prüfunterklasse zu übergeben ein Argument an unsere Prüfunterklasse zu Und dieses Argument ist eine Basisklasse, also der Name der Basisklasse Sagen wir, wenn Sie jetzt dasselbe tun und vielleicht die Ausgabe ausdrucken , um zu sehen, was passiert, Self-Punkt-Balance. Entschuldigung, ich wollte sagen, den Saldo überprüfen. Tut mir leid. Und ja, jetzt scheint es zu funktionieren. Also wurde diese Methode anerkannt, und das hat dazu geführt, dass von 1.100, was der ursprüngliche Saldo war, auf 1.110 gestiegen ist also die Variable Saldo Incess der Basisklasse ausgedruckt die Variable Saldo Incess der So zahlen wir also etwas Geld auf unser Girokonto ein Jetzt wollen wir Geld überweisen, also müssen wir hier eine neue Methode definieren, nennen wir diese Überweisung. Übertrage selbst dorthin und auch einen lokalen variablen Betrag, also als Parameter. Das ist also nur eine lokale Variable. Es hat nichts damit zu tun , wenn sie einmal hier sind. Und dann wollen wir die Bilanz aktualisieren. Also wollen wir etwas Geld auf ein Konto überweisen. Dieser Betrag wird von unserem Guthaben abgezogen. Das bedeutet also, dass das Selbstgleichgewicht dem Selbstgleichgewicht abzüglich des Betrags Nun, wenn wir dort die neue Methode ausprobieren. Wir sind also an diesem Punkt. Lassen Sie uns 110 übertragen. Ja. Und ich hatte erwartet, 1.100 hier zu haben, aber ich habe diese Nummer. Und der Grund dafür ist, dass wir die Änderungen nicht früher vorgenommen haben, als wir etwas Geld eingezahlt haben Als wir das Skript jetzt ausgeführt haben, wurde von Anfang an eine Objektinstanz erstellt und sie bekam diese Nummer hier, die nicht aktualisiert wurde, weil wir die Änderungen nicht früher festgeschrieben haben, aber Sie verstehen schon, was ich meine. Also von diesem Saldo, wenn wir diese hier abziehen, bekommen wir Das bedeutet, dass die Übertragungsmethode funktioniert, aber wir müssen dort nur die Commit-Methode anwenden Auch hier können wir diese Änderungen übernehmen. Ja, mal sehen, was wir jetzt bekommen. Also von 1.100 möchte ich 100 übertragen, und jetzt erwarte ich, dass das auf 1.000 aktualisiert wird Lass uns sehen. Ja, 1.000 hier ausgedruckt und 1.000 auch hier drin. Also das funktioniert super. Außerdem möchte ich, dass Sie über die Vererbung wissen , dass Sie Ihre eigenen Instanzvariablen für Ihre Unterklasse hinzufügen können Ihre eigenen Instanzvariablen für Ihre Unterklasse In diesem Fall ist zum Beispiel unsere einzige Instanzvariable Balance, die von der Konto-Basisklasse übernommen wurde Aber wir können unsere eigenen Instanzvariablen hinzufügen. Nehmen wir an, diese Übertragung ist auch mit einer Gebühr verbunden. Wenn Sie also eine Überweisung tätigen, berechnet Ihnen Ihre Bank etwas Geld. Und Sie möchten diese Gebühr als Parameter angeben. Lassen Sie uns die Dinge einfach halten und sagen, wenn Sie Geld überweisen, also Saldo minus Betrag minus Gebühr. Lassen Sie uns dort also keine Prozentsätze anwenden. Nehmen wir an, wir haben eine Gebühr von 1 USD pro Überweisung Wenn wir nun die Übertragungsmethode erneut anwenden, erhalten wir wahrscheinlich eine Fehlermeldung, da dieser Gebühr hier nur um eine lokale Variable handelt. Was Sie jetzt also beantragen müssen, ist, dass Sie diese Gebühr in eine Instanzvariable umwandeln müssen , was bedeutet, dass eine Selbstpunkt-Gebühr einer Gebühr entspricht Das heißt, wenn Sie hier eine Gebühr zahlen, sagen wir, 1$ oder eine andere Währung, und Sie geben sie hier weiter, also wird das hier und das hier hingehört, und das entspricht der Gebühr, die Sie hier zahlen Und dann können wir diese Instanzvariable verwenden und sie in dieser Übertragungsmethode verwenden. Großartig. Jetzt sind wir bei 1.000 und lassen Sie mich das ausführen. Ja. Also 899, und sie sind hier die gleichen, was 100 -100 abzüglich der Gebühr bedeutet, du bekommst diese Nummer Und ja, ich hoffe, Sie können sehen, wie nützlich Vererbung ist, um Unterklassen aus der Basisklasse zu erstellen Das war's für diese Vorlesung, und wir haben noch eine Vorlesung vor uns. Und in der nächsten Vorlesung werde ich einige Begriffe der objektorientierten Programmierung erläutern. Das wird also ein kurzer Vortrag sein, später helfen wird, wenn Sie sich auf die Dokumentation beziehen , weil es in OOP eine ganze Reihe von Konzepten gibt, in OOP eine ganze Reihe von Konzepten gibt, und ich möchte nicht, dass Sie damit verwechselt werden. Also ich denke, das ist ein wichtiger Vortrag. Ja, ich rede später mit dir. 180. 178. OOP-Glossar +++: Hallo nochmal. Und in dieser Vorlesung möchte ich sicherstellen, dass Sie die Terminologie der objektorientierten Programmierung in Python kennen . Jetzt haben wir also die Klasse, die hier dieser Bauplan ist, oder Sie können sie einen Prototyp nennen der die Eigenschaften eines Objekts definiert , das im Begriff ist, erstellt zu werden Das ist also die Klasse, und dann haben wir die Objektinstanz oder einfach das Objekt Dieses Jahr ist also ein Objekt. Also ein Girokontoobjekt, das Daten in diesem speziellen Dateipfad speichert und dieses Attribut hat. Es hat also diese Gebühr. Dann haben wir Instanzvariablen, und das sind Variablen , die innerhalb der Methoden der Klasse definiert sind , wie hier Fault Path. Und auf diese kann von der Instanz der Objektinstanz zugegriffen werden , die von dieser Klasse erstellt wurde. Dann haben wir auch etwas, das als Klassenvariable bezeichnet wird. Also Instanzvariable und Klassenvariablen. Nun, wir haben in keiner der vorherigen Vorlesungen eine Klassenvariable erstellt . Also werde ich jetzt weitermachen und eine erstellen. Lassen Sie uns eines für unser Girokonto erstellen. Das wäre also so etwas wie sagen wir, Typ ist gleich zwei Zittern. Eine Klassenvariable wird also außerhalb der Methoden dieser Klasse deklariert , und Klassenvariablen werden von allen Klasseninstanzen gemeinsam genutzt von allen Klasseninstanzen Instanzvariablen werden also nur von der Objektinstanz gemeinsam genutzt . Lassen Sie mich das zum Beispiel erklären. Hier ist dies eine unserer Objektinstanzen, also haben wir hier nur eine Objektinstanz, aber wir könnten mehr haben. Also kopiere ich das und erstelle hier eine weitere Objektinstanz. Und ich nenne das, sagen wir mal, das ist Jacks Girokonto. Also werde ich das und das ersetzen. Und das ist Johns Girokonto. Und sie haben dort auch ihren persönlichen Speicher. Sagen wir also Jack Dot TXT und Joan Dot TXT. Jack hat also 100$ und Joan hat 200$. Gut. Also müssen wir das ändern, Jack Jack und Joan Und wenn wir dieses Skript jetzt ausführen, bekommen wir zwei Werte ausgedruckt Also minus eins für diese Abrechnung hier weil Jack also 100$ hatte, aber dann hat er 100 überwiesen und dann abzüglich der Gebühr von 1$. Und dann hatte er dort minus 1$. Ihm gehört etwas Geld auf der Bank. Und dann hatte John 200, also hat er jetzt 99. Ich versuche also zu sagen, dass diese Variablen nur zu ihrem Objekt gehören. Aber wenn du es jetzt versuchst, überprüft Jack den Punkttyp. Sie möchten also den Print Jones Punkttyp Print Jones als Prüfpunkt drucken. Sie werden sehen, dass diese Klassenvariable von allen Instanzen dieser Klasse gemeinsam genutzt wird . Was ist also der Unterschied zwischen Klassen- und Instanzvariablen Klassenvariablen werden selten verwendet daher müssen Sie sie hier wirklich übergeben. Ein anderes Konzept, jetzt Doc-Strings. Und eine Doc-Zeichenfolge wird normalerweise übergeben, sobald Sie das Schlüsselwort clas schreiben, also geben Sie einfach das Schlüsselwort class ein Das liefert die Erklärung Ihrer Klasse. Nehmen wir an, diese Klasse generiert Girokontoobjekte. Dann schließt du das mit drei Anführungszeichen. Das macht also, weißt du, wenn wir das ausdrucken uns eine unserer Objektinstanzen schnappen, sagen wir, Jos Prüfpunkt. Doppelter Unterstrich, Doc, und nochmal doppelter Unterstrich . Also drucke das aus Wie Sie sehen, wird eine Dokumentzeichenfolge verwendet , um einige Informationen über diese Klasse bereitzustellen. Es ist also gut, die Zeichenfolge zu definieren wenn Sie Klassen schreiben, damit andere, wenn sie Ihre Klasse verwenden, diese Operation hier anwenden können, sie können sehen, worum es in der Klasse geht. Dies ist besonders nützlich, wenn Sie Klassen aus Modulen importieren. Also, wenn Sie den Code Ihrer Klasse nicht wirklich sehen und Sie dies tun können und Zugriff auf die Dokumentzeichenfolge der Klasse haben. Und dann haben wir ein Konzept von Dota-Mitgliedern, das eigentlich als Klassenvariablen oder Instanzvariablen bezeichnet wird Klassenvariablen oder Instanzvariablen Das ist also ein Datenelement und das ist auch ein Datenelement Dann haben wir den Konstruktor, das war diese Init-Funktion Und wie Sie wissen, die Init-Funktion, also der Konstruktor konstruiert Dann haben Sie Klassenmethoden, die Sie auf Ihre Objektinstanz anwenden Transfer ist also eine Klassenmethode. Das ist also auch eine Methode, aber es ist eine spezielle Methode, also ist es ein Konstruktor Und Instanziierung, falls Sie von Instanziierung hören, ist das ein Prozess der Erstellung von Objektinstanzen ist das ein Prozess der Erstellung von Objektinstanzen Also Instanzen einer Klasse. So wie das ist die Instanziierung der Klasse. Und dieser hier auch. Und Sie wissen schon, Vererbung ist jetzt Vererbung, wenn Sie eine Unterklasse aus einer Basisklasse erstellen Und diese Unterklasse teilt sich die Methoden der Basisklasse und hat ihre eigenen Methoden, hat ihre eigenen Methoden diese Unterklasse spezifisch sind Manchmal hört man auch von Attributen, und Attribute sind das hier Wenn Sie also auf diese Instanzvariablen oder sogar Klassenvariablen oder sogar Instanzvariablen zugreifen, können Sie sagen, dass Sie auf Attribute Ihrer Klasseninstanz, Ihres Objekts zugreifen. Und ja, das ist ungefähr das Vokabular der objektorientierten Programmierung in Python. Und ich glaube wirklich, dass ich Ihnen ein solides Verständnis der objektorientierten Programmierung und der Erstellung von Klassen und Objekten usw. vermittelt ein solides Verständnis der objektorientierten Programmierung und der Erstellung habe. Wenn Sie immer noch etwas verwirrend finden, können Sie sich die Videos entweder noch einmal ansehen weil ich weiß, dass objektorientiertes Programmieren etwas knifflig ist, aber Sie können sogar Fragen stellen, und ich werde mein Bestes geben, um Dinge zu erklären , die Ihnen noch nicht klar sind. Ja, ich hoffe, du findest das nützlich. Und ich werde in der nächsten Vorlesung mit Ihnen sprechen, also sind wir mit diesem Abschnitt fertig und wir sehen uns später. 181. 179. App 7: Mobile Feel-Good-App-Demo +: Hallo, und natürlich willkommen in einem neuen Bereich. Dieser Abschnitt ist etwas ganz Besonderes, denn hier werden wir eine mobile App erstellen. Bisher haben wir mit Desktop-Apps oder Web-Apps gearbeitet. In diesem Abschnitt kann die App, die wir erstellen werden, jedoch auf Android - und IOS-Geräten ausgeführt werden, und sie kann auch auf Desktop-Geräten ausgeführt werden. Wir werden also eine einzige App mit einer grafischen Benutzeroberfläche erstellen , Benutzer auf dem Desktop, auf Android und IOS verwenden können . Diese App wird über eine Anmeldeschnittstelle verfügen , über die sich der Benutzer anmelden und sich auch registrieren kann , um sich als Benutzer der App zu registrieren. Und dann können sie einige Knöpfe drücken, um Angebote zu erhalten . Aus der App. Sie werden also sagen, wie sie sich fühlen, wenn sie sich glücklich, traurig oder geliebt fühlen, damit sie ein Gefühl vermitteln. Und die App wird versuchen , wenn der Benutzer traurig ist, versucht die App, ihn glücklich zu machen, indem sie ein Zitat macht, das für seinen Gefühlszustand relevant ist. Stimmt das? Also das ist die App. Ich bin mir sicher, dass es interessant wird . Wir werden die KeV-Bibliothek benutzen. Es ist eine Drittanbieterbibliothek für Python , mit der Sie Apps erstellen können, also auch Desktop- und mobile Apps. Äh, lassen Sie uns eintauchen und ich werde in der nächsten Vorlesung mit Ihnen sprechen. Wir sehen uns. 182. 181. Erstellen einer Benutzerregistrierungsseite: Zuvor haben wir diesen Python-Code und diesen Kiv-Code erstellt. Es ist also eine Kiv-App, die Sie ausführen, indem Sie den Python-Code ausführen, nicht den Kiv-Code Also hier, drücke den runden Knopf und das ist was wir haben wir zu, es ist eine gut aussehende Oberfläche, aber im Moment ist es ziemlich kalt denn wenn wir diese Tasten drücken, passiert nichts. Lassen Sie uns also weitermachen und die Anmeldeschaltfläche implementieren. Wir wollen also, wenn der Benutzer eine Anmeldeschaltfläche drückt, die Seite, den Bildschirm zu einem anderen Bildschirm mit einem anderen Satz von Widgets wechseln . Dazu müssen wir der Anmeldeschaltfläche einen Funktionsaufruf zuweisen . Gehen wir also weiter und gehen zum QV-Code, suchen wir die Schaltfläche „Anmelden“, die sich hier befindet Die Schaltfläche erhält also dieses Attribut, das Textattribut, aber sie kann auch ein anderes Attribut erhalten , das beim Drücken auf Unterstrich aufgerufen wird Attribut bewirkt, dass , wenn der Benutzer die Taste drückt, Sie, wenn der Benutzer die Taste drückt, die Root-Punkt-Anmeldefunktion aufrufen Vergiss die Code-Klammern nicht. Also, was ist Root und was ist Sign Up? Root ist ein spezieller Name, den Sie in einer QV-Datei verwenden können, und root bezieht sich auf die Klasse des Regel-Widgets Das Regel-Widget hier, wo wir uns befinden, ist der Anmeldebildschirm Also die Klasse des Anmeldebildschirms , also der Anmeldebildschirm. Root bezieht sich also eigentlich auf die Klasse des Anmeldebildschirms. Und jetzt verwenden wir diese Punktnotation. Dann verwenden wir die Methode des Anmeldebildschirms. Melden Sie sich also auf dem Anmeldebildschirm an, auf dem es keine Anmeldemethode gibt, aber wir können eine erstellen. Definieren Sie das Zeichen. Up, verwende den Self-Parameter für Klassenmethoden. Und dann lass uns vorerst etwas Einfaches machen. Lass uns einfach ausdrucken. Das Drücken der Anmeldetaste ist nur eine Zeichenfolge, was bedeutet, dass sie auf dem Terminal ausgedruckt wird . Lass uns das versuchen Speichern Sie die Kiwi-Datei und führen Sie die Python-Datei aus. Und dann drücken Sie auf Anmelden und wie Sie im Terminal sehen können, wird die Zeichenfolge zum Drücken der Anmeldetaste jedes Mal ausgedruckt , wenn ich die Anmeldetaste verwende So einfach ist das also. Verwenden Sie das Attribut beim Drücken, und jedes Mal, wenn die Taste gedrückt wird, wird die Registrierung aufgerufen. Diese Funktion. Was wir jetzt wirklich tun wollen, ist den Bildschirm zu wechseln. Aber zuerst müssen wir einen Bildschirm erstellen. Die Art und Weise, wie Sie Bildschirme erstellen, ist in der Kiwi-Datei enthalten. Wir haben hier also den Login-Bildschirm. Jetzt wollen wir diesen Anmeldebildschirm erstellen, nennen wir ihn. Nach der Regel nutzt ihr die Spalte, ein Fingertipp zum Einrücken Und so wird dieser neue Bildschirm aussehen. Wir haben also ein Etikett. Wir haben zwei Texteingabefelder und wir haben eine Schaltfläche. Und alles befindet sich in einem Rasterlayout. Mit einer Spalte. Und diese eine Spalte wird einfach eine Ebene mit Text haben. Melde dich für eine Weltraumreise an. Warum nicht? Sie können Ihrer Fantasie freien Lauf lassen, aber achten Sie darauf, dass es sich um Insiderzitate handelt. Es ist also eine Schnur. Dann kommt eine Texteingabe. Es wird als Hinweistext verwendet. Die Zeichenfolge für den Benutzernamen. Was wird also als Hinweis in der Textbox angezeigt? Eine weitere Texteingabe mit Hinweis. Text. Du hast es erraten Passwort. Und zu guter Letzt ein Knopf. Mit Text abschicken. Oder Sie können „ Anmelden“ schreiben, was auch immer Sie möchten. Das sind also nur Zeichenketten. Du kannst benutzen, was du willst. Die Idee ist also, dass, wenn der Benutzer auf die Schaltfläche Senden drückt , die Daten, also der Benutzername und das Passwort, an die Datenbank gesendet werden , in der wir die Benutzernamen und Passwörter speichern. Diese Datenbank wird also lesbar sein, sodass wir sie schreiben können. Wir können dieser Datenbank weitere Benutzernamen hinzufügen und sie wird auch lesbar sein. Wenn also ein Benutzer versucht , sich anzumelden, werden wir diese Datenbank lesen, um zu sehen, ob der Benutzername und das Passwort, das der Benutzer mit einer Anmeldeschaltfläche zu senden versucht , in dieser Datenbank enthalten sind oder nicht. Und diese Datenbank wird eine JSON-Datei sein, was eine einfache Möglichkeit ist mit Benutzernamen - und Passwortdaten umzugehen. Richtig. Wenn Sie nun diese Kiwi-Datei speichern und das Python-Skript ausführen, passiert nichts, da die Anmeldeschaltfläche immer noch diese Symbolzeichenfolge ausdruckt und der Bildschirm, den wir gerade erstellt haben, nicht überall hin gesendet wird , um angezeigt zu werden Wir geben also keine Befehle zur Anzeige des Anmeldebildschirms Als Nächstes müssen Sie also den Anmeldebildschirm unter den Root-Widgets auflisten , sozusagen die Namensregistrierung Bildschirm. Bildschirme müssen also einen Namen haben. Und der Grund dafür ist , dass hier in der Anmeldeschaltfläche die Magie haben können, wir hier in der Anmeldeschaltfläche die Magie haben können, Self Dot Manager Dot Current gleich dem Anmeldebildschirm zu machen Self Dot Manager Dot Current gleich dem Anmeldebildschirm zu Anmeldebildschirm ist also diese Zeichenfolge hier, die wir gerade erstellt haben Speichern Sie die Kiwi-Datei und führen Sie die Python-Datei aus, um zu sehen, was vor sich geht Daher kann es sein, dass Sie von Zeit zu Zeit diesen Fehler erhalten . KV-Faktor-Factory-Ausnahme, Anmeldebildschirm für unbekannte Klassen, was bedeutet, dass es sich um einen Fehler handelt, der in Ihrer KV-Datei aufgetreten Der Bildschirm für die Klassenanmeldung, der hier ist, ist unbekannt, weil es in der Kiv-Bibliothek keine Klasse KV gibt , wie es bei Rasterlayoutbeschriftungen der Fall ist Das sind alles Klassen in der Kiwi-Bibliothek. Anmeldebildschirm ist also keine Klasse in der KV-Bibliothek, und es ist keine Klasse, die in der Python-Datei deklariert ist. Sie müssen also nur eine Klasse für den Anmeldebildschirm erstellen. Vom Bildschirm erben und vorerst einfach bestehen, erneut ausführen und sich anmelden Und das ist unser neuer Bildschirm. Wir haben also die Bezeichnung zwei Texteingabefelder und eine Schaltfläche zum Absenden erhalten, was vorerst nichts bewirkt, da dieser Anmeldebildschirm mit der Klasse verbunden ist , für die wir gerade die Anmeldebildschirmklasse erstellt Welche Aktionen auch immer auf dieser Seite, auf diesem Bildschirm vom Benutzer, ausgeführt werden, sie werden einigen Funktionen entsprechen , die wir dem Anmeldebildschirm hinzufügen werden dem Anmeldebildschirm hinzufügen Und lassen Sie mich diese Zeile hier erklären, Self Dot Manager Dot Current Selbst bezieht sich also auf die Instanz dieser aktuellen Klasse, der Klasse, in der sich Self befindet. Also Objekt auf dem Anmeldebildschirm. Anmeldebildschirm ist die Klasse, und self ist das Objekt, das instanziiert wurde , die aus dieser Klasse erstellt wurde Und dann ist Manager Manager eine Eigenschaft von Screen. Da diese Klasse also vom Bildschirm erbt, ist Screen ein übergeordnetes Objekt und der Login-Bildschirm ein untergeordnetes Und das Elternteil gibt dem Kind all seine Methoden, all seine Eigenschaften, all seine Attribute, natürlich auch den Manager Self kann also auf den Manager zugreifen, und dann hat der Manager sein eigenes Attribut, das aktuell ist. Also aktuell vom Manager und vom Manager des Anmeldebildschirms. Und dieses aktuelle Attribut erhält den Namen eines Bildschirms, zu dem Sie wechseln möchten ist der Anmeldebildschirm, dieser Anmeldebildschirm hier, ein Widget, das wir hier erstellt haben. Und das ist die Idee. So wechseln Sie mit QV zwischen den Bildschirmen. 183. 182. Benutzereingaben erfassen: Hallo, nochmal. Was wir bisher in unserer KV-App haben, ist die erste Seite der App, die ich als Anmeldebildschirm gewählt habe. Hier melden sich die Benutzer an und registrieren sich. Und die Anmeldeschaltfläche wurde nicht implementiert, also das Passwort vergessen und die Anmeldeschaltfläche funktioniert. Nun, es gibt ein paar Dinge, die Sie vielleicht Nächstes tun möchten, wie zum Beispiel, Sie möchten vielleicht etwas Entwurfsarbeit leisten , um einige Leerzeichen zwischen diesen Schaltflächen, diesen Texteingaben und dieser Schaltfläche zu haben einige Leerzeichen zwischen diesen Schaltflächen, diesen , oder vielleicht möchten Sie diese beiden Schaltflächen kleiner machen und sie einfach als Links statt als Schaltflächen mit Quadraten anzeigen . Aber das können Sie tun, aber was ich lieber selbst mache, ist, dass ich zuerst ein Mindestdesign erstellen möchte, was bedeutet, dass ich dafür sorgen möchte, dass das Design funktioniert. Ich möchte nur, dass es mir vorerst reicht , die Schaltflächen zu sehen. Mir ist egal, ob sie zu groß oder zu klein sind. Ich möchte, dass sie arbeiten. Also drücke ich eine Anmeldetaste, dann möchte ich hier hin können, oder? Ich verwende einen Namen und ein Passwort. Und wenn ich auf Senden klicke, möchte ich diese Daten in der Datenbank speichern. Also möchte ich einen neuen Benutzer mit diesen Daten erstellen. Und am Ende, nachdem ich alle Funktionen des Programms abgeschlossen habe, möchte ich mit einem Design herumspielen , damit es besser aussieht. Lassen Sie uns in dieser Vorlesung also weitermachen und die Schaltfläche „Senden“ implementieren , sodass diese Daten in einer JSON-Datei gespeichert werden. Richtig, also lasst uns die Schaltfläche „ Senden“ suchen, die sich hier befindet , und das Press-Attribut hinzufügen, das den Wurzelpunkt ausführt. Der Root ist also eine Klasse für den Anmeldebildschirm. Dieser hier. Wir werden die Methode dieser Klasse ausführen. Nennen wir diese Methode „Benutzer hinzufügen“. Okay, lassen Sie uns weitermachen und diese Funktion zu dieser Methode hinzufügen . Fügen Sie den Benutzer selbst hinzu. Lassen Sie uns vorerst übergehen. Diese Methode ruft also die Werte ab, also den Benutzernamen und die Passwortwerte, und sendet sie und speichert sie in der Datei Adjacent. Also, wo sind die Werte? Nun, wir können mit Root-IDs, Punkt, auf den Benutzernamen zugreifen . Hier geben wir die ID des Widgets ein, in das der Benutzername eingegeben wird. Also das Texteingabe-Widget. Es hat keine ID, aber wir können ihm eine ID geben. AUSWEIS. Nutzername. Ich sollte nicht in Anführungszeichen stehen, also ist es nur eine Variable. Dann schreibst du hier den Benutzernamen. Wenn Sie es nun so lassen und auch root bekommen, identifiziert das das Passwort. Geben wir dem Passwort also auch eine ID . ID-Spalte, Passwort, einfach so. Erstellen Sie dann in der Anzeigenbenutzerfunktion einige Parameter. Es kann ein Passwort verwendet werden. Also genau wie diese Ds, aber es hat nichts damit zu tun. Sie können hier beliebige Parameternamen haben. Und aus diesem Grund würde ich gerne das Wort Name P schreiben, um nicht mit diesen IDs verwechselt zu werden. Lassen Sie mich vorerst nur den Namen U und das Wort P ausdrucken, nur um zu sehen, was wir bisher haben. In Ordnung, melde dich an. Sagen wir u1p1, ein Passwort. Warum nicht? Senden Sie ab und wenn Sie nichts erhalten, haben wir die QB-Datei vielleicht nicht gespeichert Die Python-Datei wird automatisch gespeichert und erneut angemeldet, U one, p one, submit. Ja, einreichen, einreichen. Was wir im Gegenzug bekommen, ist das, was dem Namen entspricht, und das sind P-Wörter. Das sind also die Texteingabeobjekte. Wenn Sie nun den Text möchten, den der Benutzer in diese Texteingabefelder eingibt, müssen Sie auf die Texteigenschaft zugreifen. Gleiche gilt für das Passwort. Speichern, ausführen und schließen Sie dieses vorherige Fenster, um das neue zu erhalten. Eins P eins, abschicken, und jetzt erhalten wir den tatsächlichen Text, den der Benutzer eingegeben hat. Auf diese Weise erhalten wir Werte aus den Texteingabefeldern und senden sie zur weiteren Verarbeitung an Python. Root bezieht sich also auf einen Anmeldebildschirm. Benutzer hinzufügen ist eine Methode auf dem Anmeldebildschirm. Auf dem Anmeldebildschirm befindet sich wieder ein Root. Klassen-IDs sind eine Eigenschaft des Anmeldebildschirmobjekts, das tatsächlich vom Bildschirm stammt Bildschirm erbt sie also an den Anmeldebildschirm und der Anmeldebildschirm hat diese IDs, was eigentlich eine Art Wörterbuch mit allen in der Anmeldebildschirm-Regel enthaltenen IDs ergibt allen in der Anmeldebildschirm-Regel enthaltenen IDs In diesem Fall erhalten Sie also Zugriff auf den Benutzernamen und das Passwort Root identifiziert dieses Passwort, gibt dir Text zu dem Texteingabeobjekt das ein ID-Passwort hat, und dann mit Text greifst du in der nächsten Lektion auf den tatsächlichen Wert davon zu. Lass uns weitermachen und mit der JSON-Datei arbeiten, Lass uns weitermachen und mit der JSON-Datei arbeiten um diese Daten in der JSON-Datei zu speichern. 184. 183. Verarbeitung von Benutzeranmeldungen +: Hallo, noch einmal, in dieser Vorlesung werden wir den Anmeldebildschirm so implementieren , dass, wenn der Benutzer den Benutzernamen und das Passwort eingibt und dann auf Senden klickt, diese Daten in der JSON-Datei des Benutzers gespeichert werden, die ich hier habe. Sie können also entweder eine leere Datei erstellen und sie wie Benutzer Dot JSON nennen, oder Sie können meine Datei abrufen, die Sie in den Vorlesungsressourcen angehängt finden. Und in dieser Datei habe ich bereits zwei Benutzer. Das sind JSON-Daten. Damit es besser aussieht, können Sie es formatieren, wenn Sie Windows verwenden, Shift Alt F. Wenn Sie einen Mac verwenden, verwenden Sie Shift Option F. Wenn Sie Linux verwenden, verwenden Sie Strg+Shift I. Wenn Sie diese Kombination verwenden, wird der JSON-Code wie folgt formatiert Der Grundgedanke dabei ist, dass die App weitere Benutzer hinzufügt, wenn der Benutzer auf der Anmeldeseite auf die Schaltfläche „Senden“ klickt Dies ist im Grunde ein großes Python-Wörterbuch. Es beginnt hier und es endet hier. Dieses Wörterbuch hat Werte wie diesen Schlüssel hier. Und der Wert dieses ersten Schlüssels, das ist also der Schlüssel des großen Wörterbuchs. Der Wert dieses Schlüssels ist dieses Wörterbuch. Es ist also ein weiteres Wörterbuch innerhalb des großen Wörterbuchs, aber das ist ein anderes Problem. Es kann wie in diesem Fall passieren. Und so hat dieses Wörterbuch die Daten. Also der Benutzername, es ist wieder Benutzer eins wie dieser. Das Passwort ist Pessach. Das ist also ein vorhandener Benutzer. Ich habe diese Datei manuell erstellt, aber das Programm wird in der Lage sein, diese Datei auch zu erstellen und weitere Benutzer hinzuzufügen. Also hier endet der Wert dieses Schlüssels und dann startet der andere Schlüssel, der andere Benutzer, Benutzer zwei. Das ist Nutzername. Sie können auch hier sehen, Schritt zwei, und das ist ein Datum, an dem dieser Benutzername in die JSON-Datei eingefügt wurde Lassen wir diese Datei hier unten geöffnet. Drücken Sie den Terminalraum. Also drückt der Benutzer die Senden-Schaltfläche, die Senden-Schaltfläche, ruft die Ad-User-Funktion auf, und diese beiden Argumente werden an den Funktionsaufruf übergeben. Also Benutzer hinzufügen ist dieser hier drin. Also nennst du P Word. Was machen wir mit diesen beiden Werten , die der Benutzer in die Textfelder eingegeben hat? Nun, was ich tun werde, ist zunächst Json als Datei zu öffnen und die Benutzer dazu zu bringen, sie in ein Wörterbuch zu laden, sodass Benutzer das Gleiche wie json dot load haben. Wir müssen Jason hier eingeben. JSON ist also eine Bibliothek. Und jetzt, nur als Zwischenschritt, lassen Sie uns die Benutzer ausdrucken, um zu sehen, was wir bisher haben. Eins, eins, abschicken und das ist es, was wir bekommen. Das ist es also, was wir derzeit in der JSON-Datei haben. Und das ist eigentlich so users ist ein Python-Wörterbuch. Was wir nun mit diesem Wörterbuch machen können , ist, dass wir einen weiteren Wert hinzufügen können. Also noch ein Paar aus Schlüssel und Wert, was ziemlich einfach ist. Also sagen wir Benutzer. Welchen Schlüssel müssen wir hinzufügen? Nun, das haben wir von Name. Also werden wir den U-One-Benutzernamen hinzufügen , den ich als Benutzer eingegeben habe. Also werden wir dort einen dritten Benutzernamen haben, und das wird sein Wert sein, der ein Wörterbuch sein wird. So wie wir für Benutzer eins haben, dieses Wörterbuch, werden wir auch für U dieses Wörterbuch haben , also den Benutzernamen. Für Key wird der Benutzername wieder U Name lauten. Und dann wird das Passwort P-Wort sein. P-Wort. Also sind wir hier. P-Wort, das den Wert P eins bekommen wird . Und dann, da wir hier nicht viel mehr Platz haben, werde ich ein Komma setzen um den Ausdruck in einer anderen Zeile fortzusetzen Wenn Sie der Meinung sind, dass eine Zeile zu lang ist, können Sie diese Zeile nur dann in mehrere Zeilen aufteilen , wenn sich die Zeile in Klammern befindet, z. B. im Fall einer Funktionsdefinition oder in eckigen Klammern, wie im Fall einer Liste, oder in geschweiften Klammern, wie im Fall In allen drei Fällen funktioniert der Code einwandfrei Sie können eine Zeile ohne Klammern, Klammern oder geschweifte Klammern nicht teilen Klammern, Klammern oder geschweifte Klammern nicht Wenn Sie das versuchen, erhalten Sie einen Syntaxfehler, sofern Sie keinen BC-Slash verwenden Ein umgekehrter Schrägstrich ermöglicht es Ihnen, einen Ausdruck in mehrere Zeilen aufzuteilen, auch wenn dieser Ausdruck nicht in Klammern, Klammern oder geschweiften Klammern steht Klammern Das Aufteilen eines Ausdrucks in mehrere Zeilen sorgt Es wird empfohlen, einen Ausdruck aufzuteilen , wenn er 79 Zeichen erreicht hat Dies ist jedoch nur eine Empfehlung. Es hat keine Auswirkung auf den Code. Also, was kommt als Nächstes? Nun, hat den erstellten Schlüssel erstellt. Der Wert dafür wird Datum und Uhrzeit sein Lassen Sie uns zuerst Datetime importieren Von Datum, Uhrzeit, Import, Datum, Uhrzeit. Also die Daytime-Klasse des Datetime-Moduls. Das ist also die Datetime-Klasse , die ich hier eingegeben habe. Daytime dot, ich kann dir zeigen, was ich hier erreichen will Also ab Datum, Uhrzeit, Import, Datum, Uhrzeit, Tageszeit, Punkt jetzt geben wir dir dieses Datetime-Objekt Und was wir daraus wollen, ist, dass wir eine Zeichenfolge extrahieren wollen Wir wollen das Hier, den Monat, den Tag, die Stunden, Minuten und Sekunden haben. Das gibt uns also das Datum und die Uhrzeit in diesem Zeichenkettenformat. Das wird also hier reinkommen. Stimmt. Und das ist es. Lassen Sie mich jetzt wieder Benutzer hier unten drucken. Schließen Sie das vorherige Fenster, melden Sie sich an, eins, senden Sie es ab. Und Sie können jetzt sehen, dass wir ein weiteres Paar von Schlüssel und Wert haben . Also den UO-Benutzernamen mit dem Benutzernamen UO-Passwort P eins und erstelle ihn genau zu diesem Zeitpunkt. Also, was können wir jetzt mit diesem neuen Wörterbuch machen? Nun, nichts Besonderes. Wir müssen nur Benutzer-Punkt-JSON öffnen, diesmal jedoch im Schreibmodus als Datei, und wir greifen auf JSON, das JSON-Modul, zu und speichern das Wörterbuch des Benutzers in der Datei. Und das ist alles Also, was ich an dieser Stelle mache, überschreibe ich die Benutzer, die vorhandenen Benutzer, diese JSON-Datei wird also eine komplett neue Datei An dieser Stelle wird also eine komplett neue Datei erstellt, eine leere Datei Und in diese leere Datei werde ich das neue Benutzerwörterbuch schreiben, das dieses hier sein wird. Das neue Wörterbuch wird also die vorhandenen Benutzer enthalten, wie Sie hier gesehen haben, Benutzer eins und Benutzer zwei, und es wird auch den aktuellen Benutzer hinzufügen. Ich hoffe also, dass das klar ist. Weißt du, wenn wir das jetzt testen, die aktuelle Sitzung mit Control C unterbrechen, den Code ausführen, uns anmelden, U eins, P eins, abschicken Also drücke ich den Absenden-Button, jetzt passiert nichts, weil alles im Hintergrund passiert, der Benutzer hat also die Datei aktualisiert Wenn Sie sich nun die Benutzer dieser JSON-Datei ansehen, werden Sie feststellen, dass es derzeit einen Fehler im Visual Studio-Code gibt einen Fehler im Visual Studio-Code , der die Dateien nicht aktualisiert, wenn sie aktualisiert werden. Ich hoffe, dass dies bald von den Visual Studio-Code-Entwicklern gelöst wird. Dieses Problem wurde gemeldet. Was wir aber trotzdem tun können, ist, dass Sie den Datei-Explorer in Ihrem Betriebssystem aufrufen können , in dem Sie diese Dateien haben, und Sie können einen alternativen Texteditor wie Not Pat verwenden . Ich habe Atom hier, Text bearbeiten. Wählen Sie also einen von ihnen und Sie werden sehen, dass die Änderungen im anderen Editor in der JSON-Datei des Benutzers aufgezeichnet wurden. So kannst du sehen, dass U da ist. Also mit U-Eins, -Pass oder P-Eins und dem Erstellungsdatum. So fügen Sie der JSON-Datei einen neuen Benutzer hinzu. Und schließlich, was wir hier hinzufügen müssen, weil Sie sehen, dass Sie, wenn Sie auf Senden klicken und nichts passiert, nicht wissen, ob Sie erfolgreich als Benutzer registriert wurden oder nicht. Lassen Sie uns also in der anderen Lektion einen weiteren Bildschirm erstellen, angezeigt wird , wenn der Benutzer Schaltfläche „Senden“ drückt. Wir sehen uns. 185. 184. Erstellen einer Erfolgsseite für die Anmeldung: An dieser Stelle können wir also Benutzer zur Datenbank hinzufügen, indem sie in diese Textfelder schreiben und auf die Schaltfläche „Senden“ klicken. Lassen Sie uns nun eine weitere Seite anzeigen , wenn der Benutzer auf Senden drückt. Nun, wir können das genauso machen, wie wir es getan haben, als wir vom Anmeldebildschirm zum Anmeldebildschirm gewechselt Also haben wir das gemacht, indem in die Anmeldefunktion der Anmeldebildschirmklasse geschrieben haben, dass dieser Selbstmanager aktuell dem Anmeldebildschirm geschrieben haben, dass dieser Selbstmanager entspricht Wir können das Gleiche hier machen. Die Anzeigennutzerfunktion wird also aufgerufen, wenn der Benutzer eine Senden-Schaltfläche drückt. Wir können also Self Dot Manager Dot Current gleich machen. Nennen wir diesen Anmeldebildschirm Erfolg. Das wird also ein weiterer Bildschirm sein, den wir hier auflisten werden. Melden Sie sich an. Erfolgreicher Bildschirm. Der Name sollte derselbe sein, den Sie dort verwendet haben. Und natürlich müssen wir diesen Bildschirm erstellen. Anmeldebildschirm erfolgreich, eine Kolumne. Und ich möchte, dass diese Seite so aussieht , dass ich möchte diese Seite ein Etikett „ Anmeldung erfolgreich“ hat. Und dann sollte sie eine Schaltfläche unter dieser Bezeichnung haben, der Anmeldeseite stehen würde. Der Benutzer kann also diese Taste drücken und zur Anmeldeseite zurückkehren , auf der er sich anmelden kann. Also zum Anmeldebildschirm. Daher benötigen wir zunächst ein Rasterlayout. Wir brauchen nur eine Spalte und dann brauchen wir ein Label. Der Text davon wäre. Anmeldung mit den Codes war erfolgreich, und dann brauchst du eine Schaltfläche. Der Text der Schaltfläche wäre Anmeldeseite. Und lassen wir es vorerst so. Ich werde einfach alles ausführen, um zu sehen, wofür wir das haben. Also haben wir eine Fehler-Factory-Ausnahme. Natürlich haben wir nicht den Anmeldebildschirm mit Erfolg. Also müssen wir einen Anmeldebildschirm für die Klasse „Erfolg“ hinzufügen , der vom Bildschirm erbt wird, und lassen Sie uns dort weitermachen Führen Sie es erneut aus. Der Namensbildschirm ist nicht definiert. Ja, ich habe hier einen Text eingegeben, Bildschirm Anmelden drei P drei, Abschicken, Anmeldung erfolgreich, das Label und die Anmeldeseite, was vorerst nichts tut, weil wir kein Druckattribut für diese Schaltfläche haben . Also, ja, um das Ganze abzuschließen, das haben wir getan, um diesen Bildschirm zu implementieren , um zum nächsten Bildschirm zu wechseln. Also haben wir zunächst einen Self-Manager-Bildschirm in der Anzeigennutzerfunktion hinzugefügt . Dadurch wird der aktuelle Bildschirm auf diesen Bildschirm hier geändert . Und dieser Bildschirm wurde hier definiert und durch diese Klasse in Python dargestellt. Und das ist alles. Also , drei und vier Punkte mussten wir 12, drei und vier Punkte hinzufügen. Versuchen Sie nun als Übung, die Anmeldeschaltfläche zu implementieren. Wenn der Benutzer also auf der Seite die Anmeldetaste drückt, möchten Sie sich anmelden, vier Pi vier. Wenn der Benutzer auf „Anmelden“ klickt, kehren Sie zur Hauptseite zurück, also zur Anmeldeseite, die hier ist. Versuche das zu tun. 186. 185. Zwischen Seiten wechseln: Lassen Sie mich also schnell die Schaltfläche für die Anmeldeseite implementieren. Richtig. Die Schaltfläche auf der Anmeldeseite ist genau hier. Drücken Sie also den Root-Punkt und gehen Sie zu Login. So nenne ich die Funktion. Wir befinden uns also in der Erfolgsregel des Anmeldebildschirms, was bedeutet, dass wir zur Erfolgsklasse auf dem Anmeldebildschirm gehen und die Funktion zur Anmeldung selbst definieren müssen Erfolgsklasse auf dem Anmeldebildschirm gehen und die Funktion zur Anmeldung selbst definieren und natürlich self, das ist Manager, das ist aktuell, entspricht dem Anmeldebildschirm, hier ist Wir haben also schon diesen Bildschirm. Wir müssen jetzt keinen neuen Bildschirm erstellen. Speichern Sie die QV-Datei und führen Sie sie aus, melden Sie sich an. Ux, P sechs, es spielt keine Rolle, welchen Benutzernamen und welches Passwort Sie angeben Registrierung war erfolgreich. Die Anmeldeseite heißt und Sie gelangen zurück zum Anmeldebildschirm. Sie nun beachten sollten, ist die Richtung des Übergangs der Bildschirme. Derzeit wird der Übergang standardmäßig als links bezeichnet. Also meldest du dich an. Die Bewegung besteht also darin, dass der nächste Bildschirm nach links geht. Also achtest du auf den pH-Wert. Jetzt geht der nächste Bildschirm so nach links. Und wenn du dich einloggst, möchtest du vielleicht nach rechts gehen. Also den Übergang nach rechts zu ändern, was sinnvoller ist. Wenn Sie das tun möchten, gehen Sie zu der Stelle, an der Sie den aktuellen Bildschirm einstellen. Deshalb möchten wir den Übergang des Anmeldebildschirms ändern . Wenn wir also den aktuellen Bildschirm als Anmeldebildschirm festlegen, wollen wir, dass der Manager die richtige Richtung einschlägt. Führe das aus, melde dich an. Ich werde dort nur ein paar leere Zeichenketten einreichen, nur um das Interface schnell auszuprobieren. Also abschicken, das ist ein neuer Benutzer mit leeren Zeichenketten. Es spielt keine Rolle. Sie können später einige Einschränkungen festlegen, wenn Sie möchten. Gehen Sie also zur Anmeldeseite. Und dieses Mal kommt der nächste Bildschirm von links nach rechts. Also, wenn Sie das wollen, was ich für sinnvoll halte, dann müssen Sie diese Übergangseigenschaft der Manager-Eigenschaft verwenden , die eine Richtungseigenschaft hat, und sie auf rechts setzen. Das ist die Idee. 187. 186. Verarbeitung von Benutzer-Anmeldedaten: Bisher haben wir mit unserem Programm die erste Seite erstellt , auf der sich der Benutzer anmelden kann, und wir haben auch die Anmeldeseite erstellt, auf der sich neue Benutzer anmelden und Mitglied in unserer JSON-Datenbank werden können In dieser Vorlesung werden wir die Login-Funktionalität implementieren Lassen Sie mich Ihnen zeigen, wie die fertige Version des Programms funktioniert. Ich zeige dir den Code nicht. Noch nicht, nur wie der Login funktionieren wird. Ignoriere die gut aussehende Oberfläche, oder das machen wir jetzt später. Jetzt müssen wir über die Funktionalität nachdenken. Wenn sich der Benutzer anmeldet , gibt er die Daten ein. Sie drücken auf Login und gehen zu dieser internen Seite des Programms. Hier haben wir also eine Schaltfläche, die rot wird, wenn wir die Maus bewegen, und wenn wir darauf klicken, werden wir abgemeldet und wir gelangen zurück zur Anmeldeseite Wenn Delta falsch ist, wird ein falscher Benutzername oder ein falsches Passwort angezeigt Also nochmal, wenn die Daten korrekt sind , werden wir auf diese Seite weitergeleitet. Lassen Sie uns in dieser Vorlesung also weitermachen und diesen Bildschirm erstellen. Ich habe einen Screenshot davon gemacht, also haben wir ihn hier als Referenz. Also müssen wir hier einen weiteren Bildschirm in die Liste der Bildschirme aufnehmen. Nennen wir den Bildschirm „ Anmeldebildschirm erfolgreich“. Geben wir in derselben Zeile den Namen Anmeldescreen Success ein und erstellen Sie dann eine Regel für diesen Bildschirm. Ich werde es einfach kopieren und einfügen. Und was haben wir hier? Nun, wir beginnen mit dem Rasterlayout, das eine Spalte hat. Im Moment werde ich nur eine einfache Schaltfläche bereitstellen. Später werden wir die Funktionalität implementieren , die Sie gerade mit dieser Animation zeigen. Wenn Sie die Maus über die Schaltfläche bewegen, wird die Schaltfläche rot. Lassen Sie uns vorerst einfach eine einfache Taste verwenden. Mit Text. Achten Sie auf die Presse. Wir müssen also eine Erfolgsklasse für den Anmeldebildschirm im Python-Code erstellen und dort eine Funktion erstellen , um den Benutzer abzumelden. Also pass auf. Ja, so möchte ich die Funktion in der Erfolgsklasse für den Anmeldebildschirm aufrufen Erfolgsklasse für den Anmeldebildschirm , die wir erstellen werden. Lassen wir den Button so und dann haben wir ein Label. Wie findest du, dass das das Etikett ist? Text Wir fragen also den Benutzer, wie er sich fühlt damit er ein Gefühl eingeben kann, und dann geben wir ihm einige Zitate, je nachdem, wie er sich fühlt, damit sich besser fühlt oder sein Gefühl verstärkt. Zitate sind eine gute Sache. Sehr kluge Leute haben gut über sie nachgedacht, also nutzen wir sie. Nutzen wir sie. Texteingabe. Mit Hinweis? Text. Also hier kannst du schreiben, was du willst, aber ich möchte ihnen einen Hinweis geben , damit sie wissen, was sie hier eingeben können. Also, ohne hier eine große Beschreibung in den Hauptteil der Oberfläche der Seite aufnehmen hier eine große Beschreibung in zu müssen, die Oberfläche sauber halten wir die Oberfläche sauber halten und diesen Bereich hier im Lehrbuch nutzen Also Dinge zum Ausprobieren. Glücklich, traurig, ungeliebt. Ja, das sollte okay sein. Und dann haben wir noch einen Button mit dem Text Erklären Sie mich. Fühlen Sie sich frei, einen beliebigen Namen zu verwenden. So weit reicht meine Vorstellungskraft. Und jetzt, beim Drücken, was machen wir, wenn der Benutzer diese Taste drückt? Nun, wenn der Benutzer diese Taste drückt, werden wir einen Text unter der Taste anzeigen. Deshalb benötigen wir ein Etikett. Und der Text ist vorerst nur eine leere Zeichenfolge. Fügen wir also später ein Press-Attribut für die Schaltfläche hinzu. Lassen Sie mich zunächst einen Klassenanmeldebildschirm für Erfolg schreiben , der natürlich vom Bildschirm erbt und über eine Methode verfügt Loggen Sie sich aus. Melden Sie sich ab, um den Benutzer abzumelden. Und hier möchte ich zunächst eine Richtung für den Übergang dieses Bildschirms definieren. Lass es uns richtig machen. Die Abmeldung geht zurück zur vorherigen Seite. Es ist sinnvoll, die richtige Richtung für den Übergang festzulegen Dann natürlich, Manager, das ist aktuell gleich Wo wollen wir den Benutzer nach dem Logout hinbringen? Wir möchten den Benutzer zum Anmeldebildschirm führen. Auch das macht Sinn, oder? Also Anmeldebildschirm. Also gut, wir haben die Seite. Wir haben die Erfolgsseite für den Login-Login-Bildschirm erstellt , und das war diese hier. Lassen Sie mich das schließen, um mehr Platz für den Code zu haben. Wir haben die Funktionalität der Anmeldeschaltfläche jedoch noch nicht implementiert. Die u1p1-Anmeldung funktioniert also nicht. Suchen wir also nach der Anmeldeschaltfläche . Welches ist auf dem Anmeldebildschirm. Ja. Der Anmeldebildschirm. Ja. Also das ist ein Button-Button-Login. Also, was wollen wir auf einer Presseveranstaltung machen? Nun, wir wollen eine Route ausführen, die die Login-Funktion protokolliert, die wir in der Login-Bildschirmklasse genau hier haben müssen . Es ist also im Grunde die gleiche Idee wie bei einem Ads-Nutzer. Eine Funktion, bei der wir dem Anzeigenbenutzer eine Funktion gegeben ihm den Benutzernamen und das Passwort zur Verfügung gestellt haben. Also nochmal, wir machen dasselbe mit define login. Self und hier müssen wir zwei Argumente angeben. Das erste wären Roots, diese IDs, dieser Benutzername, dieser Text. Und das zweite wäre Root-IDs, Punkt-Passwort, Punkt-Text. Also wir reden hier, tut mir leid für die Art von hier. Wir sprechen über den Benutzernamen, den der Benutzer in das Texteingabefeld eingibt, und über das Passwort, das der Benutzer in das Texteingabefeld dem Anmeldebildschirm eingibt. Root bezieht sich also auf den Anmeldebildschirm auf die aktuelle Regel, in der Sie den Code hier schreiben. Und wir haben keine ID für die Texteingabe, also machen wir weiter und machen ID, verwenden den Namen, dasselbe gilt für das Passwort. Und dann nehmen wir diesen Benutzernamen und das Passwort in die Login-Funktion. Lassen Sie uns Name und P-Wort als Parameter verwenden. Sie können einen beliebigen Namen verwenden. Sie können auch Benutzername und Passwort verwenden. Wie melden wir also einen Benutzer an? Nun, die Idee ist, dass wir die JSON-Datei, in der wir die Benutzerdaten haben, öffnen müssen , um sie zu lesen und zu überprüfen, ob der Benutzername und das Passwort in dieser Datei enthalten sind. Oder genauer gesagt, wenn dieser Benutzername in der Datei enthalten ist und er ein Passwort hat, das Passwort, das der Benutzer in der grafischen Benutzeroberfläche angibt. Wenn das der Fall ist, wechseln wir den Bildschirm mithilfe der aktuellen Eigenschaft eines Managerpunkts. Wir schalten den Bildschirm auf den Bildschirm um, den ich Ihnen gerade gezeigt , den wir gerade gebaut haben und wir noch nicht gesehen haben, wie er aussieht. Lassen Sie mich das also schnell mit offenen Benutzern implementieren , Punkt JSON hat Datei. also im Lesemodus Wenn wir also im Lesemodus das R nicht so definieren, bedeutet das implizit, dass wir die Datei lesen Benutzer, die JSON entsprechen und geladen werden. Die Datei. Das wird uns also ein Wörterbuch geben. Benutzer werden das Wörterbuch sein das alle Daten in der JSON-Datei des Benutzers enthält. Und dann, wenn Sie Benutzer eintragen. Also, was wir hier machen, ist, lass es mich dir zeigen. Wir brauchen also diese JSON-Bibliothek und Users wird das Wörterbuch sein, richtig. sind viele Daten. Und wenn wir zum Beispiel sagen, dass 77 Benutzer gibt, kommen wir durch, weil U 7 tatsächlich zu den Wörterbuchschlüsseln gehört. Also hier, U 7, können Sie den Benutzer ignorieren. Sie sind nur ein Präfix , um anzuzeigen, dass es sich um Unicode-Daten handelt, aber dies sind die Zeichenketten innerhalb der Codes U Seven gehört also zu den Wörterbuchschlüsseln. Sie können sich auch eine übersichtliche Liste der Schlüssel anzeigen lassen. Damit. Also Benutzer, die sich küssen, sehen, dass wir Sieben zu diesen Daten gehören. Das ist der Grund, warum wir wahr werden, und wir können das nutzen und sagen: Ich nutze den Benutzernamen in Benutzern, also überprüfen wir zuerst, ob der Benutzername in der Datenbank ist. Aber wir müssen auch überprüfen, ob die Benutzer ihr Passwort gleich PWord nennen , also das ist unsere Bedingung. Die erste ist also, dass der Benutzername existieren muss. Und das zweite ist, dass Sie wissen, die Benutzer, Sie nennen , sagen wir, sieben, also Benutzer U sieben entspricht dem. Das gibt uns also das Wörterbuch, das der Schlüssel U 7 hat. Das ist wie der Wert , den die Ku-Seven hat. Es ist also ein Wörterbuch. Und wenn wir unsere Zugriffskette fortsetzen, verwenden wir ein Passwort. Wir greifen also auf den Wert des Schlüsselkennworts zu. Jedes dieser Wörterbücher hat dieses Passwort als Schlüssel, und der Wert dieses Passworts ist das tatsächliche Passwort Also P sieben in diesem Fall. Wir prüfen also, ob das Passwort dieses Benutzers ein Passwort ist, das der Benutzer hier angibt. Also Passwort, dieser Text kommt hier rein. Das muss identisch sein, kein Zuweisungsoperator. Wenn das also der Fall ist, verwalten Sie den aktuellen Status, der der Anmelde-Erfolgsseite entspricht, dem Anmeldebildschirm , den wir erstellt haben. Richtig. Und wir müssen dort auch eine S-Bedingung hinzufügen, aber lassen Sie mich versuchen, zu sehen, was wir bisher haben, und den Code zu debuggen , wenn wir Probleme haben Also sieben P sieben einloggen, und hier ist ein Bildschirm Das ist also eine Schaltfläche zum Abmelden. Wie fühlst du dich? Das Textfeld, das wir erstellt haben, erleuchtet mich, und das ist der Bereich, in dem der Text angezeigt werden würde Im Moment funktioniert es nicht, weil wir der Schaltfläche „ Erklären Sie mich“ keine Funktion hinzugefügt haben Erklären Sie mich“ keine Funktion hinzugefügt Lassen Sie mich jetzt die Schaltfläche Abmelden ausprobieren. Also out ist nicht definiert, wie Sie hier den Fehler sehen können Also unser Logout-Button , der hier beim Drücken ist, zeigt darauf, dass wir eigentlich root schreiben sollten, das ist Logout Es zeigt also auf die erfolgreiche Logout-Funktion des Anmeldebildschirms erfolgreiche Logout-Funktion des Anmeldebildschirms Das war also ein Problem. Wir haben die Klasse nicht angegeben , die diesen Out-Button hatte. Also lass es mich noch einmal versuchen. P sieben Einloggen, Lou und wir sind wieder auf der Anmeldeseite, wenn wir uns abmelden Und wenn wir falsche Daten eingeben, passiert nichts. Also hier ist, was wir tun werden. Wir werden direkt unter der Anmeldeschaltfläche zwischen diesen beiden Schaltflächen und der Anmeldeschaltfläche ein Etikett hinzufügen der Anmeldeschaltfläche zwischen diesen beiden Schaltflächen und der Anmeldeschaltfläche . Also lass uns weitermachen und das tun. Wir sprechen über den Anmeldebildschirm. Das ist der Login-Button. Fügen wir also das Etikett mit Text hinzu, es ist vorerst leer. Also speichere das, schließe das Fenster und führe es erneut aus. Jetzt haben wir hier einen Platz. Das ist also ein Etikett. Und in diesem Label gehen wir jetzt, wenn die Daten korrekt sind, wenn die Daten korrekt sind, zu den Erfolgsseiten des Anmeldebildschirms . Jetzt müssen wir also auf die ID des Labels zugreifen. Geben wir also zuerst eine ID in das Etikett ein, melden wir uns falsch an. Also hier, jetzt müssen wir auf dieses Etikett zugreifen. Das machst du, indem du dich selbst benutzt. Self zeigt auf das Objekt auf dem Anmeldebildschirm. Dann suchen wir nach den IDs von self. Anmeldung, falsche ID. Das ist also das Label-Objekt. Jetzt müssen wir auf den Text des Labelobjekts zugreifen und dem Text einen falschen Benutzernamen oder ein falsches Passwort zuweisen . Stellen Sie also sicher, dass Sie die QV-Datei speichern und den Code ausführen. Nur ein paar zufällige Daten, die nicht in der Datenbank sind Loggen Sie sich ein und wir bekommen das Label dort wie erwartet Sieben P sieben, einloggen, und wir gehen zur Anmeldeseite. So greifen Sie also auf Elemente aus der Ki-Datei zu. Wenn Sie sich also in der KivFle befinden, zeigt root auf die zugehörige Klasse dieser Regel Also Anmeldebildschirm, Anmeldebildschirmklasse, diese Namen müssen identisch sein Und wenn Sie sich in der Python-Datei befinden, zeigt self auf diese Klasse für den Anmeldebildschirm der Klasse. Und da der Anmeldebildschirm hier und Anmeldebildschirm dort miteinander kommunizieren, erhalten und empfangen sie Daten. Das heißt, das Self-Objekt kennt die IDs und alle Widgets , die der Anmeldebildschirm enthält. Daher suchen Sie nach der falschen Anmelde-ID , um dieses Objekt auf dem Anmeldebildschirm zu beschriften, und greifen dann auf Text zu. Selfie hat also seine Wurzeln dort und das war's. Lass uns jetzt in die nächste Vorlesung gehen und noch ein paar coole Dinge über das Interface machen . 188. 187. Dem Benutzer die Ausgabe anzeigen +: Für diese Vorlesung möchte ich Sie bitten, die Ressourcen dieser Vorlesung aufzurufen und die drei Textdateien herunterzuladen. Sie dann im Explorer hier in Ihrer IDE Erstellen Sie dann im Explorer hier in Ihrer IDE einen neuen Ordner. Geben Sie ihm einen Namen wie Anführungszeichen und legen Sie diese drei Dateien dann in diesen DES-Ordner. Sie können Drag & Drop verwenden, wenn Sie möchten. Ich habe diese Dateien zum Beispiel irgendwo und werde sie einfach per Drag & Drop in diesen Ordner ziehen. Sie sehen also, dass sich die Dateien jetzt im Ordner mit Anführungszeichen befinden. In dieser Vorlesung werden wir also in dem Programm, das wir haben vorerst eine dieser drei unterstützten Füllungen schreiben Sie können später weitere Dateien hinzufügen, wenn Sie über einige Daten verfügen. Aber das haben wir bisher. Wenn der Benutzer also die Schaltfläche Enlighten me drückt , möchten wir eines der Zitate anzeigen, die sich in der Happy TXT-Datei befinden Also eine dieser Zeilen. Manche sind lang, manche kürzer. Wenn der Benutzer also SAD eingibt, dann möchten Sie hier in diesem Bereich eine der Zeilen der SAD anzeigen , diese TxD-Datei Das sind auch unsere Zitate. Und so verstehst du die Idee. Und wenn der Benutzer eine unbekannte Füllung eingibt, zum Beispiel, aufgeregt. Und wenn sie eine Taste drücken, willst du versuchen, es mit einer anderen Füllung zu versuchen, weil du dort nicht alle möglichen Füllungen abdecken Das ist es also, was wir in dieser Vorlesung tun werden. Hauptpunkt Pi. Fangen wir also mit dem Button an. Versuchen Sie, die Schaltfläche Erklären Sie mich zu finden. Oder zumindest heißt mein Button so. Diese Schaltfläche ist also Teil der Erfolgsseite des Anmeldebildschirms. Und wir haben noch kein Presseattribut. also drücken, möchten Sie eine Methode der Erfolgsklasse für den Anmeldebildschirm ausführen , die ich hier habe. Damit der Anmeldebildschirm erfolgreich ist, gibt es bereits eine Methode, Logout, die ausgeführt wird wenn diese Taste gedrückt wird Jetzt wollen wir die Gute-Methode implementieren . Codieren Sie sich selbst wie gewohnt. Und so muss diese Methode jetzt den Wert kommunizieren, den der Benutzer in die Texteingabe eingegeben hat. Also, welche Wurzel hat dieser ID-Punkt. Wir haben keine ID für die Texteingabe, also geben wir eine ID ein. Das ist also eine Texteingabe , bei der der Benutzer die Füllung eingegeben hat. Lassen Sie uns also die Füllung dort platzieren. Identifiziert diese Füllung, wir wollen den Text dieser Texteingabe erhalten. Also diese Füllung wird hier hingehören. Nennen wir es einfach Füllen, nicht zu verwechseln mit dem Füllwort. Und das Erste, was wir vielleicht tun möchten, ist sehen, ob wir korrekt auf den Fülltext zugreifen. Also ausdrucken, füllen. Und stellen Sie sicher, dass Sie das Design speichern , dass die KV-Datei Login ausführt. Ich konnte mich anmelden, weil ich diesen Benutzernamen habe , den ich zuvor erstellt habe. Als ich mich angemeldet habe, habe ich einen Benutzernamen erstellt , der eine leere Zeichenfolge und eine leere Zeichenfolge für das Passwort ist. Im Grunde ist es also ein Benutzer mit einer leeren Zeichenfolge, leeren Zeichenfolge als Benutzername und Passwort, was funktioniert, weil ich keine Einschränkungen für den Benutzernamen und das Passwort festgelegt habe . Das ist also nur der Einfachheit halber, wenn Sie es versuchen, wenn Sie die Anwendung testen. Glücklich erleuchte mich, und so bekommen wir die Glücklichen. Schnur da. Und wenn das mit einem großen Alter ist, wirst du glücklich werden. Das erste, was wir vielleicht tun möchten, ist , das Feld in Kleinbuchstaben umzuwandeln Selbst wenn der Benutzer „ zufrieden mit einem Alter in Großbuchstaben“ eingibt, werden wir das komplett in Kleinbuchstaben umwandeln , sodass wir es jetzt mit den Namen in den Textdateien mit den Dateinamen vergleichen können in den Textdateien mit den Dateinamen Schauen wir uns nun an, welche verfügbaren Gefühle uns zur Verfügung stehen. Also weise ich einer Variablen verfügbare Gefühle zu und verwende das Globe-Modul, zu und verwende das Globe-Modul um eine Liste von Dateinamen zu erhalten Das wird mir das geben. Natürlich ein Fehler, weil ich Glob nicht importiert habe. Es gibt dir also eine Liste mit allen Dateien. Hier sind alle verfügbaren Füllungen verfügbar. Wir sind hier bei der Methode „Angebot einholen“. Jetzt sieht die Liste der verfügbaren Füllungen jetzt wie eine Liste von Dateipfaden Was ich tun möchte, ist , alle Namen dieser Dateien zu extrahieren , nur den eingestellten Teil Eine Möglichkeit, dies zu tun, besteht darin, das Pfadobjekt der Path-Leap-Bibliothek zu verwenden Sie müssen diese Bibliothek nicht installieren. Es kommt mit Python. Es ist eine Standardbibliothek. Wenn Sie mit Path einen Pfad angeben, z. B. Codes, geben Sie TXT ein und extrahieren Sie dann den STEM daraus. Ich gebe Ihnen den Namen der Datei ohne die Erweiterung ohne den anderen Teil des Pfads. Tatsächlich gibt es viele Pfadmethoden, und STEM ist eine davon. So können Sie das Suffix, den Namen der Datei, einschließlich der Erweiterung usw. Was wir hier jetzt tun können ist, dass wir diese STEM-Eigenschaft nutzen müssen, und wir müssen sie auf alle Dateinamen anwenden Um das zu tun, können Sie ein Mindestmaß an Verständnis gebrauchen. Das heißt, verfügbare Gefühle entsprechen dem Pfad. Sagen wir Dateiname für Dateiname in Available Feelings. Und hier möchte ich die Zeile in mehrere Zeilen aufteilen. Da das in eckigen Klammern steht, darf ich die Zeile teilen. Also wollen wir den Stamm daraus machen. Dann wollen wir vielleicht versuchen , hier die verfügbaren Füllungen auszudrucken Stellen Sie außerdem sicher, dass Sie aus dem Pfad importieren und dann die App ausführen . Und ich habe eine Fehlermeldung erhalten, als ich die Taste gedrückt habe Das String-Objekt hat kein STEM-Attribut. Ja, natürlich, weil ich es hier getan habe. Anstatt STEM hinter das Pfadobjekt zu setzen, setze ich es direkt neben den Dateinamen. Der Dateiname ist eine Zeichenfolge. Deshalb bekommst du, dass STR kein STEM hat. Also lass es uns hier reinstellen und es erneut versuchen. Erkläre mich. So glücklich Set und Loaf. Das ist es, was wir wollen Jetzt haben wir die verfügbaren Gefühle in einer Liste. Was kann ich jetzt tun? Ich kann sagen, dass ich mich in verfügbaren Gefühlen fühle. Wenn dieses Gefühl also in den verfügbaren Gefühlen enthalten ist, wollen wir als Nächstes die Datei öffnen , die dieses Gefühl hat die ein Zitat für dieses Gefühl enthält. Verwenden wir also einen offenen. Ich werde hier die Zeichenkettenformatierung verwenden. F. Also Zitate, ich werde diesen Dateipfad öffnen , der diesen Füllpunkt TXT als Datei hat. Also, was mache ich hier? Also, das Ding, was mir das geben wird, ist, sagen wir, das Gefühl, dass der eingegebene Benutzer glücklich war, oder? Also bekommen wir diese Variable. Sie hat einen Wert. Und wenn wir jetzt diese Zeichenfolge bekommen, erhalten wir den Dateipfad für diese Füllung. Dieser Ausdruck hier in diesen geschweiften Klammern wird also durch den Wert dieser Variablen der Feldvariablen ersetzt dieser Variablen der Feldvariablen Ich hoffe also, dass das klar ist. Und dann wollen wir alle DES, die ganze Datei mit der Read-Lines-Methode abrufen . Das gibt uns also eine Liste aller Codes. Lassen Sie mich also den Einzug rückgängig machen und die Codes ausdrucken , um zu sehen, wofür wir das haben Freut mich, die Zitate waren gut, und das ist eine Liste Also, wie ich dir gesagt habe, Glück ist wenn du denkst und was du sagst, und so weiter. Und dann wurde es von Mahatma Gandhi erzählt, und dann hast du ein Komma, und da fängt das andere Zitat an Also erstens haben wir eine Liste mit mehreren Zeichenketten, wobei jede Zeichenfolge Also, was können wir jetzt mit diesem Zitat machen? Hmm. Was wir tun können, ist das Selbst dazu zu bringen , das zu denken Die Idee dieses Labels, auf dem wir das Zitat zeigen wollen, das sich direkt unter der Schaltfläche „Ich erleuchtet“ befindet Also die Idee, Zitat, Zitat. Zitat, dieser Text. Der Text dieses Labels wird also Zufallsprinzip aus der Zitatliste ausgewählt. Was diese Methode also macht, ist, dass sie eine Liste als Eingabe erhält. Also eins, zwei, drei, und es gibt jedes Mal, wenn Sie es ausführen, ein zufälliges Element aus dieser Liste zurück . Also einfach rein zufällig. Also bekommen wir eine dieser Zeichenketten, eines dieser Anführungszeichen, und dieses Zitat wird als Text des Labels gesetzt. So funktioniert es also. Und stellen wir sicher, dass wir zufällig importieren. Und wir sind bereit, die App auszuführen. Ein Login glücklich erleuchte mich. Und wir haben diesen Fehler bekommen, der ein ziemlich häufiger Attributfehler ist ziemlich häufiger Attributfehler Super hat kein Attribut zum Abrufen eines Attributs. Dies passiert, wenn die Python-Datei diese ID, in diesem Fall die Anführungs-ID, nicht findet . Sie können also sehen, dass der Fehler in Zeile 61 aufgetreten ist. Also die Leitung da drin funktioniert nicht gut. Ich glaube, das liegt daran, dass ich die QV-Datei nicht gespeichert habe als ich sie eingegeben habe, als ich die ID des Labels hier aktualisiert habe Also habe ich eine ID geschrieben , aber die QV-Datei nicht gespeichert . Also lass es mich noch einmal versuchen. Ich freue mich, dass diese Fehler auftauchen, weil Sie lernen, sie zu beheben. Erkläre mich. Und ja, also wir bekommen das Etikett hier drin angezeigt Wenn Sie erneut drücken, wird diese Zufallsfunktion eine weitere Zufallsauswahl aus der Liste auswählen. Manchmal nehme ich an dasselbe Zitat angezeigt wird, was meiner Meinung nach in Ordnung ist, dass dasselbe Zitat angezeigt wird, was meiner Meinung nach in Ordnung ist, aber es gibt Möglichkeiten ein anderes Zitat als das vorherige anzuzeigen, aber das funktioniert ziemlich gut, denke ich. Rechnen Sie mit dem Fall, dass es ein langes Zitat gibt und es außerhalb der Grenzen des App-Fensters liegt. Das ist also ein Problem, aber kein Grund zur Sorge denn wir werden später eine Scroll-Ansicht implementieren, die dieses Label zusammendrückt und es flexibel macht. Indem Sie die Größe des Labels je nach Widget und App-Größe ändern. Lassen Sie mich das vorerst schließen und den Ils-Block beenden, selbst den ID-Code, dem Text entspricht , um es mit einer anderen Füllung zu versuchen Lassen Sie mich es noch einmal versuchen und wir sind mit diesem Video fertig Also das funktioniert. Das funktioniert auch. Und ich fühle mich hübsch. Oh, versuche es mit einer anderen Füllung. Das unterstützen wir nicht. Und so machen wir eine App. Das wählt zufällig ein Zitat aus. Die Funktionalität des Programms ist also so gut wie fertig. Was noch zu tun bleibt, ist , das Interface und die Buttons und die Zwischenräume zwischen den Buttons ein bisschen hübsch zu gestalten das Interface und die Buttons und die Zwischenräume zwischen den Buttons und etwas Animation hinzuzufügen. sind also Dinge , die dir helfen werden einige Apps für die reale Welt zu entwickeln, die modern sind und von den Benutzern angenehm zu bedienen sind und die du tatsächlich verkaufen kannst. Lassen Sie uns das also in den nächsten Vorlesungen tun. 189. 188. Die Anmeldeseite stilisieren: Jetzt, da die App-Funktionalität einwandfrei funktioniert, beginnen wir mit dem Styling Also machen alle Knöpfe das , was sie tun sollen. Nun, außer der Schaltfläche „Passwort vergessen“, die als Übung dienen soll, die du lösen musst. Jetzt, im nächsten Video, werden wir am Styling arbeiten. Das ist also ein Programm, das wir zusammen gebaut haben, und das ist das stilisierte Endprodukt In diesem Video in genau diesem Video werden wir also am Anmeldebildschirm arbeiten Sie können sie sogar so skalieren, genau zu sehen , wie sie in einem echten Telefon aussehen werden , denn das mehr oder weniger der Größe eines Telefons, dem Größenverhältnis Lassen Sie uns also diese beiden Schnittstellen schließen, und ich lasse diese Schnittstelle hier offen , um sie als Referenz zu verwenden Wir arbeiten also nicht in der Python-Datei hier in der KV-Datei. Das ist ungefähr das Design. Richtig, das Erste, was Sie hinzufügen möchten, ist etwas Polsterung und etwas Abstand in diesem Rasterlayout 15, ich werde erklären, was das bedeutet, natürlich Abstand 2020 Also dieses Grid-Layout, was es ist, ist, wir haben das Hauptraster-Layout, das ist das gesamte Widget, und dann hat dieses Grid-Layout die Benutzeranmeldung, beschriftet diese beiden Texteingaben und diese Schaltfläche. Und hier ist auch ein unsichtbares Etikett drin. Also wollen wir etwas Abstand hinzufügen, was 15 horizontal bedeutet, was den Abstand des Rasterlayouts dieses Rasterlayouts zu den Außenrändern der App bedeutet dieses Rasterlayouts zu den Außenrändern der App Sie sehen also, dass wir hier einen Abstand von etwa 15 haben, und es gibt auch einen gewissen Abstand, den Sie nicht sehen können, aber hier gibt es eine vertikale Polsterung zwischen diesem Etikett und dem Hauptrahmen Das ist also Polsterung, der Außenraum dieses Rasterlayouts Und dann ist der Abstand 2020 den Abstand zwischen den Widgets dieser Rasterlayouts bedeutet Der Abstand ist also eine interne Sache und die Polsterung ist äußerlich So kannst du dir das vorstellen. Also 20 Pixel zwischen diesen beiden und 20 auch hier, zwischen diesem Textfeld und dieser Schaltfläche Nun, Sie können sehen, dass zwischen der Schaltfläche und dieser Texteingabe tatsächlich mehr als 20 Pixel Platz zwischen der Schaltfläche und dieser Texteingabe tatsächlich mehr als 20 Pixel Aber das liegt daran, dass wir diese Schnittstelle auch in diesem Endprodukt angewendet haben. Ich habe auch einige Größen auf die Schaltfläche selbst angewendet. Es gibt also eine Polsterung plus die Reduzierung der Größe der Schaltfläche Deshalb siehst du hier mehr Platz. Also lass es uns so sicher aufbewahren. Und dann müssen Sie die Python-Datei wie immer ausführen. Und jetzt haben wir eine gewisse Polsterung und gewissen Abstand zwischen diesen Widgets Wie wäre es, die Schriftgröße der Benutzeranmeldung dieses Labels zu erhöhen der Benutzeranmeldung dieses Labels Sie müssen also zum Etikett gehen und die Schriftgröße auf 20 einstellen. Es muss eine Zeichenfolge wie dieser SP sein. Jetzt ist das Telefon größer. Lassen Sie uns nun an der Größe der Anmeldeschaltfläche arbeiten. Sie sehen, dass das etwas zu breit aussieht. Wie wäre es also, es etwas kürzer zu machen? Nun, in QV gibt es ein Attribut namens Größenhinweis, das Sie einem Widget geben können, zum Beispiel einer Schaltfläche hier. Größenhinweis. QV funktioniert nun so, dass der Bereich standardmäßig proportional zwischen den Widgets aufgeteilt ist, was bedeutet, dass wir hier zum Beispiel das Hauptraster-Layout haben, das den gesamten Platz einnimmt, weil es ein Rasterlayout ist Es ist also wie ein einzelnes Kind, es wird alles bekommen. Dann hat dieses Rasterlayout zwei Kinder. Es hat dieses Rasterlayout hier und es hat dieses Rasterlayout hier drin. Und der Bereich zwischen diesen beiden Kindern wird gleichmäßig aufgeteilt. Und so dieses Rasterlayout, das zweite hat zwei Schaltflächen, die Schaltfläche „Passwort vergessen“ und die Schaltfläche „Anmelden“ Daher können Sie sehen, dass dieses Rasterlayout hier Hälfte des Hauptrasterlayouts hat Und das andere Rasterlayout, das erste Rasterlayout, hat die andere Hälfte. Das Gleiche gilt für die untergeordneten Elemente jedes dieser beiden Rasterlayouts. Also die Kinder des ersten Rasterlayouts. Das Label und die Texteingaben, jedem von ihnen wird wieder der Platz zugewiesen, den sie verdienen. Hier hatten wir also ein Label, zwei, drei, vier und ein unsichtbares Label, also fünf Widgets, und so haben wir für jedes Widget 20% dieses Platzes. Es gibt jedoch ein Größenhinweis-Attribut , das ich Ihnen gerade vorgestellt habe, dem Sie ändern können, wie viel ein Widget von seinem übergeordneten Element erhält, also Größenhinweis. Geben wir also einen Wert von 0,3 und 0,5 an. Zum Login-Button. Was passieren wird, ist, dass die Anmeldeschaltfläche vertikal gedrückt wird Siehst du, weil wir einen Wert von 0,5 angegeben haben. Es hat also die halbe Höhe. Und wir haben auch einen Wert von 0,3 angegeben, um es horizontal zusammenzudrücken, aber das funktioniert nicht, weil es hier an der Seite keine anderen Widgets gibt. So oder so, der Login-Button bekommt also wieder den gesamten Speicherplatz. Es wird kein Raum mit anderen Widgets in dieser Richtung in horizontaler Richtung aufgeteilt anderen Widgets in dieser Richtung in horizontaler Richtung Um die Schaltfläche ändern zu können, müssen wir diese Schaltfläche eigentlich einrücken und sie zum untergeordneten Element eines relativen Layout-Widgets machen Wenn Sie das speichern und ausführen, werden Sie jetzt sehen, dass sich die Position der Schaltfläche geändert hat Ich habe tatsächlich 0,3, 30% dieses horizontalen Raums, wie Sie sehen können, es ist ein Drittel. Von diesem horizontalen Raum und auch 0,5, 50% der Höhe. Aber wenn Sie diesen Wert um 0,5 verringern, wenn Sie ihn zum Beispiel um 0,1 reduzieren, erhalten Sie keine Schaltfläche mit einer sehr, sehr geringen Höhe, weil dort ein Etikett mit einer festen Größe steht . Das Minimum, das Sie erhalten können, ist also die Höhe der Beschriftung für die Schaltfläche. Nun, wie können wir diesen Knopf in der Mitte platzieren? Wir müssen einen Pausenhinweis verwenden , der ein Wörterbuch erhält. Zentrum X 0,5. Und Mitte Y 0,6. Ich habe mit verschiedenen Werten experimentiert, und diesen habe ich für den besten befunden Aber noch nicht, weil diese Leute hier, diese Knöpfe zu viel Platz beanspruchen Wir können also zu dem Rasterlayout wechseln , das diese Schaltflächen enthält. Dieser hier, und wir sagen Größe. Hinweis: 0,20 0,2. Speichern Sie das und sehen Sie, was passiert. Hm. Es sieht also viel besser aus, also ist der Größenhinweis ziemlich magisch, weil man damit die Größen relativ machen kann. Sie sollten keine feste Größe festlegen , da es bei Mobilgeräten unterschiedliche Größen gibt, und es ist besser, alles relativ groß zu halten. Also, was ich hier getan habe, ist, dass ich diesem Rasterlayout einen Abstand von 20% gegeben habe . Also 20% hier, und das hier sind 80% für das andere Rasterlayout. Die Taste drückte also, weil sie versuchte, ihr Bestes mit den Werten zu tun Bestes mit den Werten , die ich hier für die Schaltfläche eingegeben habe, diese Anmeldeschaltfläche, aber sie konnte es nicht tun weil dieses Rasterlayout zu viel Platz beanspruchte Daher sind 20% gut. Und wenn Sie möchten, können Sie jetzt einen Abstand von zehn und zehn und einen Abstand von zehn und Null angeben von zehn und zehn und einen Abstand von zehn und Null Das war der alte. Das ist ein neuer. Das ist also nicht schlecht. Ich habe nur einen gewissen Abstand zwischen den Tasten und eine gewisse Polsterung relativ zur Außenseite Also der horizontale Raum, dieser, und der vertikale Abstand vertikal Und darüber hinaus gibt es keine anderen vertikalen Schaltflächen, also macht das nicht viel Sinn. Null ist also in Ordnung. Und lass mich das schließen. Und zum Schluss lassen wir diese beiden Schaltflächen wie Links aussehen. Das sind also das vergessene Passwort und die Anmeldung. Lassen Sie uns die Hintergrundfarbe, die derzeit grau ist, in ein RGB- und Opazitätsformat ändern die derzeit grau ist, in ein RGB- und Opazitätsformat Also Alpha für Opazität, und es wird ein Wert von 0-1 angenommen Es sind also Dezimalwerte. Sie können 0,1 eingeben und so weiter. Ich gebe eins, eins, eins und Null ein. Null bedeutet, dass die Hintergrundfarbe vollständig transparent ist. Ich speichere das und führe es aus. Sie können jetzt sehen, dass das vergessene Passwort so ist. Wenn ich jedoch auf die Schaltfläche klicke, scheint sie nichts Ähnliches wie die Anmeldeschaltfläche zu tun . Wir können also mit der Opazität des Textes herumspielen Setzen wir es auf den Wert eins, wenn der Eigenzustand normal ist, siehe 0,5 Das ist also ein netter Zauber, ich erkläre dir, wie er funktioniert. Weißt du, wenn ich auf die Schaltfläche klicke, verstehe ich, dass ich auf die Schaltfläche klicke. Was also passiert ist , dass die Opazität eins ist. Wenn sich der Selbststatus auf das aktuelle Widget bezieht, bei dem es sich um eine Schaltfläche handelt Denken Sie also daran, dass root auf die Regel verwiesen hat, die hier wie der Anmeldebildschirm aussehen würde. Aber ich habe mich selbst auf genau diesen Button bezogen. Und wenn du auf eine Eigenschaft des Grid-Layouts zugreifen möchtest, könntest du Parent so machen. Selbst, das Elternteil, würde also auf das übergeordnete Element der Schaltfläche zeigen , was das Rasterlayout ist. Aber das brauchen wir momentan nicht, also wenn der Zustand nicht normal ist, ist dies der normale Zustand , wenn die Taste nicht gedrückt ist. Es gibt auch andere Zustände wie „gedrückt“ und „losgelassen“, aber dieser Zustand ist normal. Und andernfalls, wenn der Zustand nicht normal ist, wie dieser Zustand hier, habe ich die Taste gedrückt. In diesem Fall möchten wir der Opazität einen Wert von 0,5 geben. Also diese ganze Sache hier ist Python-Code. Alles auf der rechten Seite dieser Attribute hier, hier, da. Alles, was es gibt, ist Python-Code. Und zum Schluss ändern wir die Farbe des Bodens. Sie können dafür ein Farbattribut verwenden. Lass uns 0.1 machen. Das bedeutet also 10% Rot, 70% Grün und 100% Blau mit einer Transparenz von eins, also nicht transparent. Spar dir das. Und ich werde diese drei Attribute kopieren und sie auch der anderen Schaltfläche geben, der Anmeldeschaltfläche, die Datei speichern, ausführen Und ja, genau das hatte ich vor. Also melde dich für ein Passwort an. Ich drücke es. Ich gehe auf die andere Seite, auf die Anmeldeseite. Also nochmal, das ist die Oberfläche, die wir bis jetzt für die Logins haben . Eine letzte Sache, die ich hinzufügen möchte , ist, dass derzeit, wenn wir einen Benutzernamen eingeben, das Passwort sichtbar ist Stattdessen wollen wir Sterne zeigen. Gehen Sie also zur Texteingabe für das Passwort und greifen Sie auf das Passwortattribut zu und setzen Sie es auf true. Wenn Sie dieses Attribut also auf true setzen, passiert, dass die Texteingabe als Passworteingabe behandelt wird, sodass das Passwort nicht angezeigt wird. Und danke , dass du diesem Video gefolgt bist. In den nächsten Videos werden wir die anderen Seiten der App stilisieren . Wir sehen uns 190. 189. Die Anmeldeseite stilisieren: Hallo. Was Sie sich ansehen, ist die Anmeldeseite. Hier auf dieser Seite ist das Programm, das wir bisher erstellt haben, und so sollte dieses Programm nach diesem Video aussehen. Lassen Sie uns also weitermachen und unserer Anmeldeseite etwas Abstand und etwas Abstand hinzufügen unserer Anmeldeseite etwas Abstand und etwas Abstand Das ist ein Code. Wir sprechen also über den Anmeldebildschirm. Ich denke, eine Polsterung von 2020 und ein Abstand von 2020 sollten in Ordnung sein Lassen Sie mich also Sign Up ausführen. Also ich denke, das ist in Ordnung, aber wenn Sie möchten, können Sie mit der Polsterung und dem Abstand herumspielen und vielleicht mit den anderen Größenhinweisattributen , die ich Ihnen zuvor gezeigt habe also an Ihnen, diesem einen Hinweis auf das Rasterlayout und dann weitere Si-Hinweise und dann weitere Si-Hinweise den Texteingabefeldern zu Ich denke, das sieht sowieso gut aus, für eine mobile Bildschirmgröße 191. 190. Die Buttons interaktiv gestalten: Hallo, ich freue mich sehr, Ihnen jetzt zeigen zu können, wie Sie die Hauptseite der App stilisieren können , auf der der Benutzer die meiste Zeit verbringen wird Also die Seite, auf der sie zu diesen Zitaten kommen. Und hier auf der linken Seite ist, was wir bis jetzt haben, wie unsere Hauptseite aussieht. Das ist also die Erfolgsseite des Anmeldebildschirms. So haben wir es genannt. Und so wird die Seite nach diesen paar Videos aussehen. Zunächst werden wir also etwas Abstand und Abstand hinzufügen, um diese Schaltflächen voneinander zu trennen. Das ist also das Erste Die zweite Sache ist, dass wir diese große Taste wie diese schicke Schaltfläche hier aussehen lassen , die ihre Farbe ändert, wenn wir die Maus bewegen, wenn wir die Maus über der Taste platzieren Und dann werden wir diesem Labelbereich hier auch etwas Scrollen hinzufügen diesem Labelbereich hier auch etwas Scrollen hinzufügen , sodass der gesamte Text in einem kleinen Bereich angezeigt wird und der Benutzer scrollen und den gesamten Text sehen kann Lassen Sie uns also weitermachen und an einigen Polstern und Abständen und dann an der Unterseite arbeiten an einigen Polstern und Abständen und dann an der Bevor wir beginnen, möchte ich, dass Sie zu den Ressourcen gehen und die Hoverbl-PY-Datei, die Logout-, Hover-PNG-Datei und die PNG-Datei Logout not Hover Dot herunterladen not Hover Dot und die PNG-Datei Logout Ich werde gleich erklären, was sie sind . Also das Padding jetzt, Login-Bildschirm erfolgreich Hmm Fügen wir auch die Polsterung von 30, 30 und den Abstand von 30, 30 hinzu. Mal sehen, was wir bekommen Oh ja, es sieht besser aus. Also jetzt die Schaltfläche, die Kiv-Bibliothek hat nicht nativ ein Objekt, um Hover-Verhalten zu implementieren , sodass sich etwas ändert, wenn Sie die Maus bewegen, oder es gibt keine einfache Möglichkeit Aber jemand hat ein sehr kleines Submodul namens hoverbl entwickelt und Sie können diese Datei abrufen und sie in dasselbe Verzeichnis wie Ihre Hauptdatei mit Punkt py legen Sie befinden sich also im selben Ordner. Und dann müssen Sie die HoverBLTPI-Datei nicht ändern, also werde ich sie einfach schließen Und dann können wir aus Hoverbl importieren, wir importieren das Hover-Verhaltensobjekt . Das ist also eine Klasse, Hover-Verhalten der Klasse in der Hoverbel-Py-Datei mit dem Punkt Das werden wir also verwenden. Und die Art und Weise, wie wir das nutzen werden, ist, gehen wir hier runter. Und ich werde eine Klasse erstellen und sie Image Button nennen. Das wird also ein besonderer Button sein. Es wird kein einfacher Button mehr sein, sondern ein Bild-Button. Und diese Bildschaltfläche wird von der Hover-Verhaltensklasse und einigen anderen Klassen erben der Hover-Verhaltensklasse , die ich hier importieren werde Die Art und Weise, wie wir diese Schaltfläche implementieren werden , besteht darin, zwei verschiedene Bilder zu verwenden Ich habe diese Bilder in Power Points erstellt. Sie können sie ganz einfach erstellen. Sie haben diese Symbole. Und du fügst etwas Text hinzu und machst dann den Hintergrund transparent. Und so hast du einen blauen und einen roten. Die zwei verschiedenen Zustände , die die Schaltfläche haben soll, sind also ein PNG-Bild. Die Idee ist also, dass diese Schaltfläche keinen Text enthalten wird. Ich werde ein Bild haben. Daher müssen wir aus QV Dot X Dot Image, Import, Image importieren Und schließlich werden UX-Verhaltensweisen aus QV Dot importiert. Verhalten der Schaltflächen, und das war's. Jetzt erhalten wir das Bild- und Schaltflächenverhalten und platzieren sie als übergeordnete Elemente der Bildschaltfläche. Objekt. Und alles, was wir hier tun müssen, ist einfach zu bestehen. Es ist nur eine Klasse, die diese drei Objekte zusammenbringt. Um eine Klasse zu erstellen, also die Bildschaltflächenklasse Attributen, die sich wie diese drei Objekte verhalten Also gehen wir dann zur Bildschaltfläche und ich platziere das hier falsch. Es tut uns leid. Also das sollte eigentlich hier sein, Bild-Button. Wir sprechen über den Logout-Button, nicht über den Enlighten Me-Button Und wir brauchen diesen Abmeldetext nicht mehr. Wir brauchen diesen Abmeldetext also nicht, weil wir unser eigenes Bild verwenden dem der Text enthalten ist Also entferne das, wenn du Root Lookout drückst. Ja, das ist richtig Und die Quelle dieser Bildschaltfläche wird Logout Hover sein, ich selbst Punkt Hovert Lookout, Nein, Hover Oh, Punkt PNG, natürlich. Das ist also der Pfad des Bildes. Also Overt, dieses Selbstschweben, was es ist, ist dieses Attribut der Verhaltensklasse Hort Also ist es ein Bowlinggelände. Es könnte entweder wahr oder falsch sein. Das ist also Python-Code. Ich habe dir gesagt, dass alles rechts neben diesen Attributen Python-Code ist. Also werden wir eine Quelle angeben, das Abmeldebild mit dem Mauszeiger für diese Bildschaltfläche Wenn das wahr ist, wenn der Mauszeiger darüber bewegt wird, ist es wahr. Das HoverlPifle erkennt also, ob sich eine Maus über dieser Taste befindet Andernfalls setzen wir Logout nicht auf Hover. Also dieser Pfad da. Also lass mich sehen, was passiert. Ja, es funktioniert also gut, so einfach ist das. Aber der Button nimmt hier offensichtlich zu viel Platz ein. Es nimmt also im Grunde ein, zwei, drei, vier, fünf, 20% in Anspruch, also haben wir fünf Widgets. Jedes von ihnen erhält 20% des Platzes. Lassen Sie uns dann einige Größenangaben machen. Hinweis zur Größe Ich denke, ein guter Betrag wäre 0,35, 0,35 . Also lass uns sehen. Ja, ich finde das gut. Und jetzt ist das in der Mitte. Also, wenn du es auf die rechte Seite stellen willst, willst du die Position ändern. Und wieder gibt es das Positionshinweis-Attribut, das ein Wörterbuch erhält, Mitte X. Ich denke, eine gute Zahl wäre 0,93 und Zentrum Y. 0,8. das ein Wörterbuch erhält, Mitte X. Ich denke, eine gute Zahl wäre 0,93 und Zentrum Y. 0,8. Wenn wir das versuchen und schauen, was wir haben, wird nichts passieren Denn wenn wir diesen Positionshinweis verwenden, muss sich das Widget in einem anderen Widget befinden , das als relatives Layout bezeichnet wird Wenn du die Kiwi-Datei jetzt speicherst und die Datei ausführst, wird das Wunder bewirken Wenn ich die Taste drücke, funktioniert es nicht. Und der Grund, warum das nicht funktioniert, verbirgt sich hier darin , wie wir diese Muster dieser Bild-Button-Klasse anordnen . Das Verhalten von unten sollte das erste sein , weil diese Reihenfolge die Methoden dieses unteren Verhaltens verbergen könnte. Lass es mich jetzt noch einmal versuchen. Pass auf. Jetzt funktioniert es also. Loggen Sie sich erneut ein. Und hier geht es um diese Implementierung von Bildschaltflächen. Und in der nächsten Vorlesung wollen wir weitermachen und diese Scroll-Ansicht des Labels hier implementieren . Sehen Sie hier. 192. 191. Einen rollbaren Bereich erstellen: Hallo, lass uns weiter an der Hauptseite unserer App arbeiten. Und so gibt der Benutzer einige Codes ein. Und wie Sie wissen, ist dieses Etikett hier, das Display, nicht optimiert. Was wir also tun müssen, ist, wie Sie sehen, den Text innerhalb der Ränder der App zu platzieren, sodass, wenn das Gerät, auf dem die App läuft, der Text normal angezeigt wird, so angezeigt wird, wie er gerade angezeigt wird. Aber das Handy, wenn es sich bei dem Gerät um ein Mobiltelefon handelt, wird es so aussehen. Sie möchten also den Text in diesem Bereich hier umschließen , damit der Benutzer das gesamte Zitat sehen kann. Wir befinden uns also auf der Erfolgsseite des Anmeldebildschirms und wir sprechen über das Textgrößenattribut. Lassen Sie uns also die Textgröße auf Selbstpunktbreite und Selbstpunkthöhe ändern . Was ist Selbstpunktbreite und was ist Selbstpunkthöhe? Eigenpunktbreite, Self bezieht sich auf das aktuelle Widget. Self ist also eigentlich das Etikett, und Breite ist die Breite des Etiketts, Höhe ist die Höhe des Etiketts. Der Text erhält also die Breite und Höhe des Etiketts an der Stelle, an der er sich befindet, was bedeutet, dass ich die Kiwi-Datei speichern Also hat jedes Widget hier eine Größe. Und so ist Label eines von fünf Widgets. Label, Sie haben eine Schaltfläche, Sie haben Texteingabe, Label und Sie haben dieses relative Layout, und das Etikett macht hier 20% aus. Es ist unsichtbar, aber wenn es einen Hintergrund wie diese Schaltfläche hätte, würde es wie die Texteingabegröße und die Größe der Schaltfläche aussehen . Es ist also irgendwo hier drin. Also das ist die Breite und das ist die Höhe, mehr oder weniger des Etiketts. Also, wenn ich SD sage, versuchen wir, ein langes Zitat zu bekommen. Also das bekommen wir jetzt. Also sieht es besser aus. Wenn wir drücken, sehen Sie, dass sich der Text innerhalb der Höhe und Breite des Etiketts befindet. Sie können also sehen, dass ich jetzt, wenn ich das Fenster zusammendrücke, seine Größe ändere Die Größe des Etiketts wird dynamisch geändert, ebenso wie die Schaltfläche und die Texteingabe Die Textgröße spiegelt also auch die Größe des Etiketts wider, wie Sie hier sehen können Aber das ist noch nicht genug. Wie wäre es also, dem Text mehr Fläche zu geben , um ihn vertikal auszudehnen? Wenn Sie das tun möchten, möchten Sie Höhe der Textgröße auf „Keine“ setzen. Sie möchten also nicht, dass es mit dem Etikett zusammenhängt. Also, wenn du das speicherst, probiere den Code aus. Sie sehen jetzt, dass die Höhe des Textes größer ist als die Höhe des Etiketts. Das Etikett ist irgendwo hier. Lassen Sie mich die Größe noch einmal ändern. Die Etikettenhöhe ist also so hoch, also ist sie irgendwo hier, und die Texthöhe ist größer als die Etikettenhöhe. Das ist besser. Wir können den Text sehen, aber offensichtlich ist der Text überlagernd. Es liegt über anderen Widgets, also ist das natürlich noch nicht ideal Also, was können wir hier tun? Also, ich denke, wir müssen einen Weg finden, die Höhe des Etiketts so zu ändern , dass sie der Höhe des Textes entspricht. In diesem Fall wäre das so, als hätte man mehr von diesem schwarzen Bereich hier auf dem Etikett. Also das Etikett hier oben zu haben und die anderen Widgets über das Etikett zu quetschen Lassen Sie uns also die Höhe des Labels so ändern , dass sie der Höhe des Textes entspricht . Wie können wir das machen? Nun, zuerst brauchen wir das Etikett Y. Also die Höhe des Etiketts, wir brauchen das, um die Größenangaben zu ignorieren, was bedeutet, lassen Sie mich Ihnen zeigen, was das Lassen Sie mich ein anderes Zitat versuchen. Das bedeutet also, dass die Höhe des Labels nicht mehr 20% des Rasterlayouts ausmacht, sondern standardmäßig eine feste Größe von 100 Pixeln hat. Standardmäßig beträgt die Höhe des Etiketts jetzt also 100 Pixel. Das ist also dasselbe wie Höhe 100. Wenn ich das jetzt ausführe , erhalten wir exakt dieselbe Ausgabe. Aber wenn du das auf 400 änderst, also die Höhe des Labels, ist das das Höhenattribut des Labels, nicht des Textes. Also, wenn du jetzt siehst, ist das Etikett ziemlich größer. Sagen wir Set. Das nimmt jetzt also viel Platz in Anspruch. Also drückst du es und du kannst den Text sehen. Aber das ist nicht das, was wir wollen. Wir sagten, wir wollen, dass die Höhe dynamisch ist. Wir wollen, dass die Höhe der Höhe des Textes entspricht. Wenn wir also das Fenster so dehnen, wollen wir, dass diese Schaltflächen hier unten sind und wir wollen, dass die Beschriftung kleiner ist. Der Weg, das zu tun, ist also, anstatt eine feste Größe für die Höhe zu haben, wir wollen diese Texturgröße selbst bestimmen. Und wir erhalten das zweite Element dieses Text-Orcis-Tupels. Text oder Größe ist also ein Tupel , das zwei Elemente enthält. Das erste Element ist die Breite des Textes. Es ist also ein dynamischer Wert. Es wird sich ändern, wenn Sie die Größe des Fensters ändern. Der erste Wert ist also die Breite und der zweite die Höhe Mit diesem Index greifen wir also auf das zweite Element des Umsturzes zu. Wenn wir das erste Element wollten, würden wir hier Null verwenden Wir wollen das zweite, das ist die Höhe. Also speichern Sie das. Sie sehen also , das Etikett ist dynamisch, also ändert es seine Größe je nach Textgröße. Und wir können den gesamten Text sehen. Und wenn wir das Fenster auf diese Weise dehnen, haben wir hier keinen übermäßigen leeren Bereich, was der Labelkörper wäre. Das ist natürlich nicht ideal, und es bleibt noch eine Sache übrig, die wir hier tun können. Was wir tun müssen, ist etwas Platz für das Scroll-View-Widget zu haben. Und das Label, zusammen mit seinen Attributen, muss ich mit der Tabulatortaste einrücken um es als untergeordnetes Element der Scroll-Ansicht zu haben Scroll-Ansicht befindet sich jetzt also Die Scroll-Ansicht befindet sich jetzt also auf derselben Ebene wie das andere Widget, die Button-Texteingabe, das andere Label usw. Also speichere den Kivfle jetzt und führe ihn aus. Glücklich. Und so kannst du dort einen Scroller sehen Traurig. Erkläre mich. Es funktioniert also mit jeder Art von Text. Wenn der Text kurz ist, wird nicht gescrollt, und wenn der Text länger ist, automatisch gescrollt Sie können also zum Ende des Textes gehen. Und so erstellen Sie eine Scroll-Ansicht, die ein Etikett hat und das Etikett enthält etwas Text. Ich hoffe es hat euch gefallen und wir sehen uns im nächsten Video. 193. 192. Die Umgebung für die Bereitstellung der mobilen App vorbereiten: Higen. In den nächsten Videos zeige ich Ihnen gerne, wie Sie aus der Python-Datei, die wir bereits in den vorherigen Vorlesungen erstellt haben, eine APK-Datei erstellen aus der Python-Datei, die wir bereits in den können. Eine APK-Datei ist nun eine Datei , die auf einem Android-Telefon installiert werden kann , sodass die App auf Mobilgeräten verwendet werden kann. Derzeit haben wir nur eine Dot-Py-Datei. Wir haben also die Haupt-Punkt-Py-Datei und die Design-Punkt-KV-Datei. Und wir haben auch eine Reihe zusätzlicher Dateien wie diese OverLTPyFle und diese PNG-Dateien sowie die Datenbank, die in der Punkt-Json-Datei des Benutzers gespeichert ist des Benutzers gespeichert All diese Dateien werden also in einer APK-Datei gebündelt. Um eine APK-Datei zu erstellen, müssen wir eine Bibliothek namens Bildozer verwenden Es ist eine Python-Bibliothek, mit der wir installieren können . PIP oder Conda Das Problem ist, dass das Erstellen von APK-Dateien unter Windows- oder Mac-Betriebssystemen sehr schwierig, um nicht zu sagen unmöglich ist Das Beste, was wir tun können, ist, ein Linux-Betriebssystem wie Ubuntu zu verwenden . Aber ich werde Sie nicht bitten, Ihr Windows-Betriebssystem oder Ihr MacOS zu löschen Ihr Windows-Betriebssystem oder Ihr und Linux auf Ihrem Computer zu installieren. Jetzt werden wir eine virtuelle Maschine verwenden, eine Software, die Sie auf macOS oder Windows installieren können . Und in dieser Software wird sich diese Software wie ein Computer verhalten. Aber es ist ein virtueller Computer. Es ist eine Software. In dieser Software können Sie also Betriebssysteme wie Linux, Windows oder Mac installieren . In diesem Vortrag werde ich Ihnen zeigen, wie Sie Virtual Box installieren. Diese Installation ist einfach, egal ob Sie Windows oder MacOS Also geh einfach zu virtualbox.org. Und klicken Sie auf die Download-Schaltfläche dann auf einen der Links Wenn Sie also Windows verwenden, bedeutet dies, dass das Host-Betriebssystem Windows ist. Windows wird also das Ubuntu-Linux-System hosten. Ich bin gerade auf einem Windows-Computer, also werde ich auf Windows Hosts klicken. Das gibt mir also die ausführbare Datei von Virtual Box. Sobald die Datei heruntergeladen ist. Fahren Sie fort und doppelklicken Sie, um zu installieren. Ich möchte keine Verknüpfung auf dem Desktop oder in der Schnellstartleiste, aber Sie können diese Optionen gerne aktiviert lassen. Ja, wir brauchen Internet in dieser virtuellen Box in dieser virtuellen Maschine, dem virtuellen Computer. Also installiere. Ich würde mich wieder für Install entscheiden. fertig sind, wird Oracle Virtual Box jetzt gestartet. Rechnen Sie damit, dass es eine Weile dauern wird, und hier ist es. Die Oberfläche ist also ziemlich einfach. Wir haben hier einige Knöpfe. Wir sind an dem neuen Button interessiert. Aber zuerst, bevor ich das mache, musst du zu ubuntu.com gehen Und lade ein Ubuntu-Betriebssystem herunter. Gehen Sie also zur Download-Schaltfläche, gehen Sie zum Ubuntu-Desktop. Es gibt jetzt zwei Versionen, aber dies ist eine stabile Version, die mit grünem Knopf. Also werde ich das herunterladen. Rechnen Sie damit, dass das eine Weile dauern wird, denn es sind ungefähr 2 Gigabyte Ja, das sind ziemlich viele Daten. Sobald Sie diese Datei heruntergeladen haben, gehen Sie erneut zu Oracle Virtual Box und dann zu Neu. Vorname, ich nenne es Ubuntu und Sie werden sehen , dass diese Drop-down-Listen automatisch aktualisiert werden. Sie möchten hier also Linux auswählen. Wir installieren ein Linux-Betriebssystem und Ubuntu 64 Bit. Das habe ich zumindest von ubunto.com heruntergeladen, aber Ihr System erkennt automatisch die Architektur des Programms Also werde ich jetzt auf Weiter klicken, die Speichergröße. Sie sagen, dass die empfohlene Größe ein Gigabyte für RAM ist, aber ich würde sagen, Sie sollten sich für eine höhere Größe entscheiden, nämlich Wenn Sie nicht viel RAM auf Ihrem Computer auf Ihrem physischen Computer haben , sollten Sie sich vielleicht für weniger entscheiden und sehen, wie Ubuntu mit so viel Speicher funktioniert Aber das ist die Idee. Das sind 3.000 Megabyte, das ist die RAM-Größe auf diesem Windows-Computer, den ich verwende, und ich gebe dem virtuellen Linux-Computer 4 Megabyte Das wäre also die maximale Größe 4 Gigabyte RAM Klicken Sie auf Weiter. Erstellen Sie jetzt eine virtuelle Festplatte. Erstellen. Sie möchten einen VDI, also klicken Sie auf Weiter. Dynamisch zugewiesen ist in Ordnung. Das liegt wieder an dir. Ich empfehle 20 Gigabyte, wenn Sie sie haben. Also etwa 20 Gigabyte, aber gib ihm mindestens zehn, oder wenn du nicht viel Speicherplatz auf deiner Festplatte in deinem Computer hast , dann solltest du dich für weniger als 5 Gigabyte entscheiden und schauen, wie aber gib ihm mindestens zehn, oder wenn du nicht viel Speicherplatz auf deiner Festplatte in deinem Computer hast, dann solltest du dich für weniger als 5 Gigabyte entscheiden und schauen, wie die Dinge funktionieren. Normalerweise sollten Sie, wenn Ihnen der Speicherplatz oder der Arbeitsspeicher ausgehen, einige Popup-Fenster aus einer virtuellen Box aufrufen , die Ihnen sagen , dass der Speicherplatz nicht ausreicht, aber je mehr Speicherplatz, desto Klicken Sie auf Erstellen. Und so haben wir jetzt hier eine Ebene erstellt. Sie möchten zum Start gehen Und Sie werden aufgefordert, eine Startdiskette auszuwählen. Sie möchten also hier in diesen Ordner gehen und dann die ISO-Datei suchen, die Sie von ubuntu.com heruntergeladen haben Also das ist einer da. Klicken Sie auf Start. Nun, dieses Fenster hier ist etwas klein, aber Sie können zur Maschine und zu den Einstellungen gehen, zur Anzeige gehen. Und hier im Skalierungsfaktor möchten Sie ihn vielleicht auf 300% erhöhen . Klicken Sie auf Okay. Und jetzt siehst du, dass der Bildschirm etwas größer ist. Das ist also der nächste Bildschirm, den wir haben. Sie möchten zur Installation von Ubuntu gehen. Es geht hier auf Englisch und dort auf Englisch für das Tastaturlayout. Diese Einstellungen sind in Ordnung. Dann möchten Sie Buntu als Festplatte auswählen und installieren, das einfach all Ihre Programme, Ihre Fotos und Ihren Computer löscht , alles, was Sie jemals hatten. War nur ein Scherz. Es geht nur um die Programme, die Sie in der virtuellen Box haben, die wir nicht haben. Dies wäre also der Fall, wenn Sie ein vorhandenes Betriebssystem überschreiben würden , das Sie bereits in dieser virtuellen Box hatten Es hat also nichts mit Ihren Programmen in Ihrem Hauptbetriebssystem zu tun , also Windows oder MacOS Gehen Sie also einfach zu Jetzt installieren. Fahren Sie fort. Wählen Sie Ihre Zeitzone aus. Wählen Sie einen Namen für den Computer aus. Ich melde mich einfach automatisch an, ohne ein Passwort anzugeben Sie müssen jedoch ein Passwort wählen. Klicken Sie auf Weiter. Und das wird jetzt eine Weile dauern , bis die Dateien installiert sind. Also bis Ubuntu in dieser virtuellen Maschine in dieser virtuellen Box installiert ist , Software. Meine Installation wurde abgeschlossen und ich werde aufgefordert, neu zu starten . Deshalb klicke ich auf Jetzt neu starten. Dadurch wird das Linux-Betriebssystem neu gestartet, nicht das Host-Betriebssystem , in meinem Fall Windows. Also einfach Ubuntu in der virtuellen Box neu starten. Es scheint ein Fehler vorzuliegen, und ich habe gerade die Eingabetaste gedrückt und die Dinge scheinen zu funktionieren Das ist also Ubuntu. Wenn Sie die Startup-Anleitung sehen möchten. Klicken Sie einfach auf Weiter. Und fertig. Jetzt möchten Sie vielleicht zu Oracle Virtual Box gehen, also zur Virtual Box-Oberfläche und dann zu Computer und Einstellungen und dann zu General Advanced gehen. Und vielleicht möchten Sie die Optionen Shared Clipboard und Dragon Drop aktivieren die Optionen Shared Clipboard und Dragon Drop Ich habe sie als bidirektional eingestellt, was bedeutet, dass Sie Dateien vom Betriebssystem Ihres Hosts kopieren können , also von Windows oder Mac über Linux nach Ubuntu und umgekehrt Mir ist jedoch aufgefallen , dass das nicht funktioniert. Wenn Sie diese Aufforderung erhalten, bedeutet dies, dass es einige Updates für Ubuntu gibt. Aber ich werde dieses Fenster einfach schließen. Ich gehe also davon aus, dass die Option Kopieren und Einfügen von Dateien zwischen den Systemen nicht funktioniert Deshalb werde ich Ihnen zeigen, was Sie tun können , um Dateien von Ihrem Host-Betriebssystem auf Ihr Linux auf Ihr Ubuntu-Betriebssystem zu Das ist also der Ordner, in dem ich alle Dateien habe, die ich für diese APK-Datei für die mobile Version des Programms benötige . Es ist also alles, was wir durchgemacht haben, plus diese Kv Build Dozer Installer Dot SH-Datei Dies ist eine Datei, die Sie von den Ressourcen herunterladen können, und ich werde Ihnen zeigen, wofür diese Datei gedacht ist Aber vorerst werde ich nur Dropbox verwenden. Ich habe die Projektdateien also bereits in meiner Dropbox unter Windows. Also der Ordner ist dieser hier. Teaching hat alle Dateien. Ordnung, also werde ich rechten Maustaste klicken und den Dropbox-Link kopieren. Also das ist unter Windows. Es ist nicht unter Linux. Es ist außerhalb von Virtual Box. Eine andere Möglichkeit, dies zu tun , wäre , diesen Dienst zu nutzen, Google Dot IO Auf diese Weise können Sie eine Datei hochladen, und Sie erhalten einen Link Und damit Sie diesen Link verwenden können, können Sie diesen Link in Linux einfügen , da dort ein Browser vorhanden ist. Sie haben Firefox in Linux. Da wir aber nicht kopieren und einfügen können, müssen wir diesen Link manuell eingeben. In meinem Fall werde ich also Drawbox und usebtle.com verwenden, um die von mir erstellte URL zu kürzen Das ist also die URL dort. Und geben Sie diese URL in den Browser Ihres Linux-Betriebssystems ein. Wenn Sie diese Dateifreigabe nicht nutzen möchten, können Sie einfach diese URL verwenden, um meine Dateien abzurufen, sodass Sie die Dateien mit dem Browser direkt von Ihrem Linux-System herunterladen können die Dateien mit dem Browser direkt von . Gehe zu direkteren Downloads. Datei speichern. Okay. Die Dateien sollten jetzt heruntergeladen worden sein und Sie können sie in den Dateien finden. Herunterladen. Klicken Sie mit der rechten Maustaste auf die heruntergeladene Zip-Datei. Gehe, um zwei zu extrahieren. Sie möchten den Desktop auswählen. Aber klicken Sie dort auf dieses neue Ordnersymbol , um einen Ordner zu erstellen. Sagen wir Projekt eins, erstellen und auswählen. Jetzt sehen wir dieses Projekt, einen Ordner hier, und da ist der Unterrichtsordner drin, und das sind die Dateien. Und so lasst uns dieses Video hier beenden. So installiert man Visual Box und wie man Linux in der Virtual Box einrichtet Linux in der Virtual Box und wie man die Dateien in das Linux-Betriebssystem bringt. Jetzt sind wir bereit, eine ausführbare Datei für Mobilgeräte zu erstellen , die auf Android ausgeführt werden kann. Also lass uns das im nächsten Video machen. 194. 193. Eine APK-Datei für Android erstellen: Hallo nochmal. Im vorherigen Video habe ich Ihnen gezeigt, wie man Virtual Box installiert, wie man Ubuntu in Virtual Box installiert, und dann haben wir die Projektdateien in dieses Ubuntu-Betriebssystem transportiert . Jetzt befinden sie sich im Dateisystem von Ubuntu. Was wir jetzt tun werden, ist, die Bill Dozer Python-Bibliothek zu verwenden , um eine APK-Datei zu erstellen Aber bevor wir das tun, müssen wir einige Abhängigkeiten im Ubuntu-Betriebssystem installieren , da Bulldoser sie benötigt, um diese APK-Mobildatei erstellen zu können diese APK-Mobildatei erstellen zu Sie dazu mit der rechten Maustaste in dem Ordner, in dem sich die Projektdateien befinden, Klicken Sie dazu mit der rechten Maustaste in dem Ordner, in dem sich die Projektdateien befinden, und öffnen Sie das Terminal Das öffnet also das Linux-Terminal. Sie werden dieses aktuelle Verzeichnis sehen. Dort befinden sich also Ihre Dateien. Wenn Sie LS verwenden, werden Sie feststellen , dass dies die Dateien sind. Der Hauptpunkt Pi ist also da. Stellen Sie sicher, dass das genau Main Dot Pi heißt , weil Bill Dozer diese Datei sehen muss Und diese Datei sollte das Hauptprogramm haben. Ich brauche diese Screenshot-Datei nicht, also werde ich sie einfach entfernen , wie Sie sehen können, die Screenshot-Datei ist nicht mehr da. Um die geöffneten Fenster auf Ubuntu zu finden, gehen Sie zu Aktivitäten. Sie werden sehen, dass das Terminal geöffnet ist und der Datei-Explorer ebenfalls geöffnet ist. Klicken Sie auf das Terminal. Dadurch wird das Terminalfenster zurückgebracht. Jetzt sehen Sie unter diesen Dateien diesen Kiv Bulldozer-Installationspunkt Sie können den Inhalt dieser Datei mit CAT sehen und den Namen der Datei eingeben Das ist also, was diese Datei enthält. Im Grunde sind dies Anweisungen zur Installation vieler Abhängigkeiten, einschließlich Python, Belser und Kiwi, da dieses Linux-System auch kein Kiwi hat Also geh hier runter. Wir sind wieder hier, klicken Sie auf Bash und drücken Sie die Tabulatortaste, um den Namen automatisch zu vervollständigen Das ist also der Name der SH-Datei. Klicken Sie auf Enter. Geben Sie das Passwort für Ihr Ubuntu-System ein. Dies ist ein Passwort, das Sie bei der Installation von Ubuntu erstellt haben. Ubuntu hat Sie nach einem Benutzernamen und einem Passwort gefragt und rechnen Sie damit, dass dies eine Weile dauern wird. Ubuntu lädt diese Pakete jetzt aus dem Internet herunter und das Internet wurde bei der Installation von Ubuntu automatisch aktiviert, sodass ich keine manuelle Konfiguration der Internetverbindung vornehmen musste . Manchmal erhältst du einige Warnungen, aber du kannst sie ignorieren. Dies ist kein stabiler Prozess, da viele Abhängigkeiten damit verbunden sind und manchmal Fehler auftreten, wenn wir die APK-Datei erstellen , sodass diese Datei manchmal nicht erstellt wird. Es ist kein einfacher Prozess, aber du kannst die Fehler lesen, was sie sagen, und vielleicht bei Google suchen, um zu sehen worüber andere über diesen bestimmten Fehler sprechen . Es gibt keine Garantie , dass es funktioniert. Davon abgesehen ist Linux das beste Betriebssystem, um diese APK-Pakete erstellen zu können . Endlich hat die Installation meinen Computer auf meinem virtuellen Linux-Computer abgeschlossen . Der nächste Schritt ist optional. Vielleicht möchten Sie die App ausprobieren, die Sie haben. Verwenden Sie dazu Python, den Befehl Python Three, Mindas Pi, die Datei, die wir verwendet haben Die App funktioniert einwandfrei mit Python. Lass es uns ausprobieren. Ja, es funktioniert gut. Ja, mach das Fenster zu. Und als Nächstes wollen wir eine Bull Dozer-Spezifikationsdatei erstellen Dazu verwenden wir Bull Dozer, also den Befehl Bull Dozer darin Okay, das hat diese Bilozer-Punktspezifikationsdatei erstellt. Sie können dieses Fenster minimieren und diese Datei im Dateisystem finden Sie können diese Datei ignorieren. Das brauchen wir nicht. Das waren nur ein paar Notizen, die ich benutzt habe. Also Bulloser Dot Spec, Sie können darauf doppelklicken und es wird mit der Texteditor-App geöffnet mit der Texteditor-App Hier haben wir also die Möglichkeit, einige Parameter der App zu ändern , die wir erstellen werden Lass uns den Titel angeben, wie fühlst du dich? Sie können einen Namen für das Paket wählen, aber verwenden Sie dort keine Leerzeichen. Ich überlasse es einfach meiner App. Und Sie möchten hier aufhören, welche Erweiterungen soll das Paket enthalten? Wir haben also Pi-Dateien. Wir haben auch einige PNG-Dateien und wir haben auch JSON-Dateien. Das wollen wir also mit einbeziehen. KV-Datei auch, aber sie ist schon da. Also KV ist schon da und dann geh weiter runter. Das wird also Version 0.1 sein. Es ist unser erster Einsatz, und dann willst du hier vorbeischauen. Also, welche Anforderung hat Ihr Paket? Nun, mal sehen, welche Bibliotheken. Welche Bibliotheken von Drittanbietern haben wir in unserer PI-Hauptdatei? Wir haben also die QV-Datei. Hoerbl ist eine lokale Datei. Es ist keine Bibliothek eines Drittanbieters. Diese lokale Datei ist in der Projektdatei enthalten, sodass Sie das nicht in den Anforderungen deklarieren müssen , und das ist alles, was wir haben. JSON und Globe sind Standard-Python-Bibliotheken, daher enthalten sie auch Python Random und Path Leap. In der Builders Dot Spec-Datei müssen wir also nichts anderes als Python Three und KV hinzufügen anderes als Python Three und KV Gehen Sie hier runter, Sie möchten alle Ausrichtungen aktivieren, nicht nur Portraits auf dem Handy Das ist in Ordnung. Und diese Version hier sollte auf acht geändert werden. Und das ist alles. Stellen Sie sicher, dass Sie die Datei speichern, klicken Sie auf Speichern oder Strg S , schließen Sie und kehren Sie dann zum Terminalfenster zurück. Und jetzt müssen wir nur noch den Befehl ausführen , der hoffentlich die APK-Datei erstellt . Das heißt, Saucer Android erstellen, debuggen Irgendwann werden wir Sie fragen , ob Sie die Lizenz akzeptieren möchten, um die Lizenz zu akzeptieren, Y drücken und dann die Eingabetaste drücken Das ist zunächst in meinem System gescheitert. Wenn das der Fall ist, sollten Sie vielleicht zurückgehen und sich den Fehler ansehen , da dies nur allgemeine Meldungen sind. Wenn Sie nach diesen Farben suchen möchten, möchten Sie hier die obere rote Meldung suchen. Dieser Befehl ist fehlgeschlagen. Ich denke, das liegt daran, dass wir Version acht angegeben haben. Lassen Sie uns versuchen, zur Blows - oder Spezifikationsdatei zu gehen und diese zu ändern , diesen Wert zu löschen und ihn durch arm 64 V eTA zu ersetzen. Fügen Sie ihn dort ein Und außerdem haben wir vergessen, ich glaube, wir haben vergessen, die Punkt-TXT-Erweiterung hier zu den akzeptierten Erweiterungen hinzuzufügen die Punkt-TXT-Erweiterung hier zu den akzeptierten Erweiterungen Punkt TXT, weil Punkt TXT die Datei ist, in der wir diese Anführungszeichen haben. Stellen Sie also sicher, dass Sie dies speichern , schließen und erneut zum Terminal wechseln. Dieses Mal werden wir erneut versuchen, die APK-Datei mit Bulldozer Android zu erstellen die APK-Datei mit Bulldozer Aber dieses Mal werden wir die saubere Flagge hinzufügen . Und dann debuggen Die Clean-Flagge stellt also sicher, dass die bisherigen Bemühungen, das APK-Paket zu erstellen, nicht beeinträchtigt Herr Moderator, auch hier müssen wir eine Weile warten, bis der Verpackungsprozess abgeschlossen ist. Diesmal werden Sie jedoch nicht aufgefordert, die Lizenz zu akzeptieren, und der Vorgang ist möglicherweise schneller als zuvor. Warten wir also ein bisschen. Also wurden die zweiten Build-Versuche in meinem Linux abgeschlossen, gehe zum Ordner. Ben hat den Ordner erstellt. Darin sollten Sie also die APK-Datei finden können . Das ist ungefähr dieses Video. Im nächsten Video werde ich mir ein Android-Gerät besorgen und Ihnen zeigen, wie Sie diese APK-Datei auf einem Android-Gerät installieren . Wir sehen uns. 195. 194. Installiere die APK-Datei auf Android: Der nächste Schritt besteht also darin, diese APK-Datei herunterzuladen , sie auf ein Android-Gerät zu laden und zu installieren, damit wir mit der App auf dem eigentlichen Mobilgerät spielen können . Jetzt können Sie hier kreativ sein, wie Sie diese Datei auf Ihr Mobilgerät übertragen können. Es wäre einfacher, wenn dieses Linux-System Ihrem physischen Computer installiert wäre, nicht in einer virtuellen Box. Wenn Sie also im wirklichen Leben die Entwicklung mobiler Apps mit Python ernst nehmen möchten , möchten Sie vielleicht Ubuntu auf Ihrem Computer installieren , um einen Linux-Computer zu haben. Sie könnten dies mit Dual-Boot tun, wenn Sie einen Windows-Laptop oder PC haben, und in diesem Fall könnten Sie Ihr Mobiltelefon mit einem USB-Kabel verbinden, könnten Sie Ihr Mobiltelefon mit einem USB-Kabel verbinden sodass Sie die Dateien problemlos auf Ihrem Mobilgerät platzieren können. In diesem Fall möchte ich eine allgemeine Lösung haben , die für alle funktioniert. Also werde ich diese Datei in diesen Go File Dot IO-Dienst hochladen . Also klicke dort und gehe zu Bin. Das ist die Datei. Hochladen. Und jetzt können Sie diesen Link hier abrufen, den Download-Link, und Sie können ihn in den Browser Ihres Mobilgeräts einfügen. Hallo. Lassen Sie mich Ihnen jetzt zeigen, wie Sie die APG-Datei auf einem Android-Gerät installieren die APG-Datei auf einem Android-Gerät Das ist also die Go File Dot IO-Webseite, auf die ich die APK-Datei hochgeladen habe, damit ich sie auf meinem Mobilgerät teilen kann Das ist eine der Möglichkeiten. Mein Browser zeigt also auf diesen Dienst. Ich gehe zum Herunterladen. Drücken Sie die Download-Schaltfläche. Also heißt es Herunterladen. Wenn die APK-Datei heruntergeladen wird, werden Sie gefragt, ob Sie sie installieren möchten. Drücken Sie also auf Installieren. Android fragt Sie, ob Sie diese App installieren möchten oder nicht da Sie normalerweise aus Sicherheitsgründen keine Apps installieren möchten, von denen Sie nicht wissen, woher sie stammen Also diese App, wir bauen diese App, also wollen wir trotzdem zur Installation übergehen Ich habe die Nachrichten-App installiert. Wenn Sie die App zum Scannen an Google senden möchten , möchte ich das nicht tun. Also sende nicht. Drücken Sie also Fertig und suchen Sie die App. Also hier ist die App. Ich werde darauf klicken. Es wird geladen. Und zwei U eins, P eins, einloggen. Glücklich. Klicken Sie auf Erklären mich und Sie sehen, dass die Nachrichten angezeigt werden Es funktioniert also. Ich hoffe, das funktioniert gut für dich. Ich hoffe, Ihnen gefällt der Prozess. Wenn der Build in Ihrem Fall nicht erfolgreich war, schauen Sie sich bitte die häufig gestellten Fragen um zu sehen, ob Ihre Frage dort beantwortet wurde, und Sie können versuchen den Build-Prozess erneut mit dem Bildoser Benutze immer die Option „Reinigen“, dann sehe ich dich in den nächsten Videos 196. 195. Web-Scraping mit Python & Beautiful Soup: Hallo und willkommen in diesem interessanten Bereich. Abschnitt lernen Sie Web-Scraping diesem Abschnitt lernen Sie Web-Scraping mit Python In dieser Vorlesung wollte ich erklären, was Web Scraping bedeutet Web Scraping bedeutet also, das Web nach Informationen zu durchsuchen, oder mit anderen Worten, Informationen aus Webseiten zu extrahieren Nehmen wir an, Sie möchten Informationen über Immobilien extrahieren Informationen über Vielleicht möchten Sie die Preisentwicklung über Zeit und Ort wissen . Und ich glaube nicht, dass es einige nette Excel-Dateien mit gut strukturierten Daten gibt , die Sie herunterladen und sofort Datenanalysen durchführen können . In Wirklichkeit sind solche Daten über HTML-Webseiten von Immobilien-Websites verteilt HTML-Webseiten von Immobilien-Websites In unserem Beispiel. Sie müssen sie also verschrotten und in ein strukturiertes Format wie Excel- und Excel-Datei, CSV, Pandas DataFrames oder andere tabellarische Formate bringen in ein strukturiertes Format wie Excel- und Excel-Datei, CSV, Pandas DataFrames Und das in ein gut strukturiertes Format zu bringen , wird als Web Scrapping bezeichnet, und Python ist darin hervorragend Insbesondere werden wir eine Python-Bibliothek namens Beautiful Soup verwenden . In diesem Abschnitt stelle ich Ihnen Beautiful Soup vor, und wir werden einige Informationen von einer einfachen Webseite extrahieren , während ich Ihnen zeige, wie Beautiful Soup funktioniert. Im nächsten Abschnitt, also sobald wir die Lektionen dieses Abschnitts gelesen haben, werden wir fortfahren und einige Immobilieninformationen wie Immobilienadressen und Immobilienpreise, die Gegend und andere Merkmale von Immobilien extrahieren einige Immobilieninformationen wie Immobilienadressen und Immobilienpreise, . Wir werden diese Informationen von einer großen Immobilien-Website extrahieren . Also, ja, das ist ungefähr das, was Scraping ist. Ja, ich werde in der nächsten Vorlesung mit dir sprechen. 197. 196. So funktioniert Web-Scraping +: Wie funktioniert Web Scrapping überhaupt? Wie kann Python die Informationen von einer Webseite abrufen und als Text speichern, damit Sie sie bequem analysieren können ? Nun, dieser Text , den Sie hier sehen. Das ist also eine Beispiel-Website, und eigentlich ist diese Domain für Beispiele reserviert. Aber es ist eine normale Webseite, die mit HTML und CSS und anderen Webentwicklungstools erstellt wurde . HTML ist also das, was die Elemente, den Text und alles andere rendert Im Browser. Zum Glück können Sie jetzt den Code jeder Webseite sehen , indem Sie zum Seitenquelltext gehen , wie ich es hier getan habe. Das ist also der Code, der HTML-Code, so wie Sie ihn sehen, er wird hier mit HTML-Tags geöffnet und hier geschlossen. Das hat also den Titel der Webseite, das ist diese hier, die Beispieldomain und so weiter Und das Wichtigste ist, dass Sie wissen das SML-Skript aus SDML-Elementen besteht Diese Zeile hier ist also ein SML-Element, also ist es ein Metaelement, und dann haben wir Divisionselemente, das ist dieses hier Wir haben dieses Jahr Absatzelemente. Und diese werden Tags genannt. Also das Div-Tag und das Abschluss-Tag der Division. Also öffnendes Abteilungs-Tag, Division-Tag. Und dann haben wir das Body-Tag. Hier befindet sich also der sichtbare Teil der HTML-Seite der Webseite Also alles, was du in den Body-Tags platzierst, wirst du dort sehen Wenn Sie hier also ein Beispiel für eine Domain haben, ist diese Domain so eingerichtet, dass sie verwendet werden kann usw., hier sehen Sie den Text Diese Domain ist so eingerichtet , dass sie für usw. verwendet werden kann. Daher sind die HTML-Elemente der Schlüssel für Web-Scrabbing. Im Grunde genommen wollen Sie also, sagen wir, Sie wollen den Text der Age-One-Tags aus allen DIF und allen Unterteilungen extrahieren Age-One-Tags aus allen DIF und allen Unterteilungen Sie sagen Python also, Sie sagen Python, dass es zu allen Age-One-Tags gehen und den Text dieser Tags extrahieren soll. Python wird das tun. Zuallererst müssen Sie jedoch das gesamte Skript in Python laden, und dazu verwenden Sie die Anforderungsbibliothek. Anfragen ermöglichen es Ihnen also, eine Python-URL wie example.com anzugeben, und Python wird alle Texte abrufen Sobald Sie diesen Text haben, werden Sie die wunderschöne Soap-Bibliothek verwenden , um alle Elemente aus dem Text zu extrahieren Also zum Beispiel die Prüfung, der Text in den HD-Hone-Tags. Und dann können Sie den extrahierten Text in Variablen in Python-Wörterbüchern oder Pandas-Datenrahmen speichern , und zwar überall dort, wo Sie ihn für Ihre Bedürfnisse nützlich finden Das ist also das Konzept und Sie können den gleichen Quellcode, wie Sie vielleicht schon wissen, von der Inspektion aus sehen wie Sie vielleicht schon wissen, von der Inspektion aus Klicken Sie also mit der rechten Maustaste auf Inspect und Sie sehen das. Also hier ist dieser Quellcode, aber Sie sehen ihn übersichtlicher. Wenn Sie also zum Beispiel Maus über die Body-Tags fahren, das entsprechende Element auf wird das entsprechende Element auf der Webseite hervorgehoben, sobald Sie es sehen Wenn Sie das also erweitern, sind Sie jetzt bei Tags und so weiter am Rand Auf diese Weise können Sie tatsächlich die Namen der Steuern für die Elemente sehen , die Sie extrahieren möchten. Wir werden also das Inspektionsfenster verwenden um den Quellcode unserer Webseiten zu verstehen Das ist also ungefähr das Konzept des Web-Scrappings. Und wir sehen uns in der nächsten Vorlesung, wo ich eine Webseite in Python lade und wir dann einige einfache Daten von der Webseite extrahieren werden . Also nur um dir den Einstieg Request-Bibliothek und die wunderschöne Soap-Bibliothek zu erleichtern. Also lass uns weitermachen. 198. 197. Web-Scraping-Beispiel mit Python: Wie Sie sehen, ist es ziemlich einfach. Und absichtlich habe ich versucht, eine einfache Webseite für Sie zu finden. Also los geht's. Ich wollte dich vorerst nicht mit vielen Inhalten ablenken vorerst nicht mit vielen Inhalten Später können Sie Informationen von einer großen Website mit vielen Daten abrufen Informationen von einer großen Website mit vielen Daten Lassen Sie uns also vorerst versuchen, zu greifen. Nehmen wir an, wir möchten die Namen der Städte von dieser Seite extrahieren . Wenn Sie also MIP folgen möchten, geben Sie bitte diese Adresse in Ihre Adressleiste mit dem Punkt HTML am Ende Also haben wir hier nur drei Städte, die wir extrahieren werden Aber der Code, den wir schreiben werden, funktioniert hier mit einer beliebigen Anzahl von Zeilen. Ich werde das IPython-Notebook oder das Jupiter-Notebook verwenden , wie es jetzt heißt, also wurde es in JPeter Notebook umbenannt also die rechte Maustaste, klicken Sie und öffnen Sie Ihre Befehlszeile JPter Node Book. Und ich werde ein kostenloses Python-E-Book erstellen. Großartig. Das erste, was Sie tun möchten, ist, diesen Quellcode in Python zu laden. Der Weg, das zu tun, besteht darin, die Anforderungsbibliothek zu verwenden. Wenn Sie das also nicht installiert haben, können Sie es einfach mit PIP install oder ähnlichen Anfragen Ich habe es schon, also bin ich schon zufrieden. Der Vorgang ist jedoch sehr einfach, sodass Sie bereits wissen, wie Sie Pakete mit PIP installieren Und du brauchst auch die schöne Suppenbibliothek. Um das zu installieren, müssen Sie erneut PIP install sagen und nicht Beautiful Soup, sondern Bs steht für also Beautiful Soap Four Das ist also die neueste Version von Beautiful Soap. Und dann. Sie möchten also Anfragen importieren, und als Erstes möchten Sie den Quellcode laden. Und dann fangen wir an, nach HDML-Tags zu suchen und Elemente aus diesen Tags zu extrahieren Aber lassen Sie mich auch wunderschöne Seife importieren. Also aus BC BC Four, importieren. Wunderschöne Suppe. Das ist also die Syntax. Du importierst den schönen Suppenkurs von BC Four. Wenn Sie Python 2 verwenden, sollte dies etwas anders sein. Sie möchten also wunderschöne Seife direkt wie folgt importieren. Okay, Alt Enter und gehe zur nächsten Zeile. Also um eine Webseite zu laden. Es ist gut, eine Variable zu erstellen, damit Sie den Quellcode der Webseite in diese Variable laden können. Also gleich Anfragen Punkt Holen Sie sich also die G-Methode. Sie zeigen also auf die Bibliothek und dann auf die Get-Methode. Und alles, was Sie hier übergeben müssen ist die URL der Webseite , die Sie laden möchten. Also in diesem Fall pythonhw.com. Beispiel Punkt-HTML. Also vergiss den HTML-Code nicht. Dies ist nur eine statische Webseite, also sollten Sie die ICML dort übergeben Jetzt sollte dies ein Anforderungsobjekt erstellen. Also sind wir immer noch nicht da. Und was Sie tun möchten, ist den Inhalt dieses Anforderungsdatentyps abzurufen und ihn vielleicht in einer anderen Variablen zu speichern. Also der Inhalt, der in einer solchen C-Variablen gespeichert ist. Und wenn Sie jetzt überprüfen möchten, was das sieht, werden Sie feststellen, dass es sich um einen Byte-Datentyp handelt. Und du kannst es ausdrucken, wenn du willst. Auch wenn das nicht sehr gut aussieht, ist das tatsächlich der Quellcode, den Sie hier sehen. Wir haben also das Head-Tag und die HTML-Tags und alles andere da. Und jetzt kommt hier die schöne Suppe ins Spiel. Die Anfrage lädt also nur den Quellcode der Webseite, aber in einer sehr verschlüsselten Form, wie Sie hier sehen Nun, wenn Sie das schön machen und die Elemente und den Text und alles aus diesem Quellcode extrahieren möchten, sollten Sie wunderschöne Seife verwenden Also alles, was Beautiful Soup tut, ist diesen Quellcode zu analysieren und dir das zu geben, was du willst geben Ihnen also die Elemente des HTML-Textes, an denen Sie interessiert sind Sie haben diesen Inhalt also bereits geladen, und jetzt möchten Sie vielleicht eine Variable erstellen und sie Suppe nennen. Und das würde der schönen Suppe entsprechen und raten Sie mal, was Sie hier weitergeben möchten. Nun, das wäre der Inhalt. Und vielleicht noch ein Argument. Sie möchten also den Parser angeben , den Sie zum Analysieren dieser Daten verwenden möchten Das ist normalerweise der HDML-Parser. Das ist es also, was Sie fast immer verwenden möchten. Wenn Sie das nicht angeben, erhalten Sie eine Warnung, aber die Dinge werden trotzdem funktionieren. Also gebe ich es normalerweise dort weiter. Und wenn Sie das getan haben, dann führen Sie das L aus. Wenn Sie wissen, geben Sie dort Soup Prettify mit leeren Klammern Sie werden den Quellcode der Webseite in übersichtlicher Form sehen der Webseite in übersichtlicher Form Beautiful Soap ist also darauf trainiert, diese Tags tatsächlich zu erkennen und sie dann für das menschliche Auge visuell darzustellen . Dies dient jedoch nur zur Veranschaulichung. Normalerweise müssen Sie die Pretty Phi-Methode nicht oft verwenden, denn eine bessere Methode, um diesen Code zu sehen, besteht, wie ich bereits erwähnt habe, darin, mich die Zelle löschen zu lassen. Das brauchen wir nicht. Eine bessere Möglichkeit , diesen Quellcode zu sehen, besteht darin, auf Ihre Webseite zu gehen und zu überprüfen. Hier sehen Sie eine bessere Syntax des HTML-Codes Also hier wirst du das sehen. Wir haben hier drei Abteilungen. Mit einer Klasse für Städte. Wir haben hier noch ein paar Abteilungen, aber das ist es, was uns interessiert. Der Körper ist also alles. Und wenn Sie eine dieser Abteilungen erweitern, werden Sie feststellen, dass wir ein H-Two-Tag haben, also ein Überschriften-Tag, und auch ein Absatz-Tag. Also P-Tag und H-Tag zwei. Und auch die andere Abteilung, die hier ist, hat dieses H-Two-Tag und das Absatz-Tag. Und Tokio hat auch das Gleiche. Also ist es jetzt unsere Pflicht, die Namen dieser Elemente zu ermitteln. Also das wären die H2, der Text der H-Zwei-Tags in den Tags der Stadt. Also fangen Sie natürlich an, darüber nachzudenken durch diese Felder zu iterieren , die eigentlich Unterteilungen sind Sie möchten also hier, hier und hier alles durchgehen und extrahieren, was Sie extrahieren möchten Also gehen wir zurück zum Code, und was Sie tun möchten, ist eine Methode namens find A auszuführen. Und was Sie suchen, sind Divs Devs, aber es gibt vielleicht viele Divs auf der Also haben wir hier zum Beispiel zwei weitere Divs. Und wir wollen nicht, dass diese gefunden werden. Wir wollen nur diese drei. Aber diese drei haben, wie Sie sehen, ein gemeinsames Klassenattribut , das den Städten entspricht. Das wollen wir uns zunutze machen. Und wir geben hier ein Wörterbuch, das besagt, dass Klasse gleich Städten Okay, lassen Sie mich hier eine Variable erstellen, alles aufrufen und ausführen Wenn Sie jetzt alles drucken, werden Sie sehen, dass die Abteilungen aus dem Quellcode extrahiert wurden. Also aus der Suppe, das war der gesamte Quellcode. Und ich möchte, dass du es dir hier genauer ansiehst. Sie können hier sehen, dass die erste Division durch Kommas getrennt ist Und dann beginnt die zweite Division. Also für Paris ist Paris die zweite und sie endet hier und dann beginnt Tokio hier. Also haben wir eine Liste mit drei Elementen, eines für jede Abteilung. Wenn Sie nun nur das erste Element mit diesem Klassenattribut, self cities, suchen nur das erste Element mit diesem Klassenattribut, self cities, möchten, sollten Sie die Find-Methode verwenden. In diesem Fall erhalten Sie also keine Liste, sondern nur die Code-Division für die erste Division , was zufällig ein Tag-Element von Beautiful Soup ist. Es ist also keine schlichte Saite, sondern eine besondere, sagen wir mal, eine besonders schöne Seifenschnur. Diese schöne Seife kennt also ihre Struktur, sie weiß also, welche Elemente oder wo sich die Tags befinden und wo sich der Text befindet und so weiter. Damit diese schöne Suppe Ihnen die Informationen geben kann , nach denen Sie suchen. Also nochmal, also extrahierst du das erste Element. Eine alternative Methode zum Extrahieren des ersten Elements besteht darin, das erste Element logisch zu extrahieren, sodass wir hier alle Elemente haben, indem wir die Listenindizierung verwenden Also dieses Objekt, das ich Ihnen gerade gezeigt habe, das technische Objekt von Beautiful Soup, unterstützt Also führst du das aus. Und in diesem Fall, wie Sie sehen, extrahieren Sie das erste Element des Tag-Objekts, oder Sie könnten es so machen, also schnappen Sie sich alle. Also hier hast du sie alle, und Null ist die erste. Du verstehst die Idee. Okay, aber was ist, wenn du nur die H-TO-Tags aus dieser D-Klasse haben willst? Nun, in diesem Fall sollten Sie auf das Objekt verweisen und dann die Fine-Methode erneut anwenden. Und dieses Mal würden Sie das H-2-Element haben wollen. Und in diesem Fall haben Sie kein Klassenattribut, also müssen Sie es so belassen. Und Sie erhalten eine Fehlermeldung, weil ich hier nicht auf diese Abteilung gezeigt habe, sondern auf die Liste. Enthält all diese Abteilungen. Python versucht, die H-Zwei zu ermitteln, aber diese Ergebnismengenmethode hat dieses H-Zwei-Element nicht. Sie möchten also auf das erste Element der Liste zeigen, und das gibt Ihnen das H-2-Element mit dem Text und dem Text, was einer Liste ähnelt, sodass Sie dort eine Nullindizierung durchführen möchten Und wenn Sie nur London wollen, fügen Sie Text hinzu und Sie erhalten London Also das ist es, was wir wollten, oder? Um die Städte zu extrahieren. Also haben wir London extrahiert. Also, wie wäre es mit der Extrahierung von Paris und Tokio? Nun, wie Sie sich vorstellen können, müssen wir vier Schleifen verwenden Aber lassen Sie mich zunächst zusammenfassen, was wir hier getan haben. Also haben wir den Inhalt hier oben geladen, das ist dieser hier, und dann haben wir diesen Inhalt mit der Methode Beautiful Soup geladen diesen Inhalt mit der Methode Beautiful Soup Und eine schöne Suppe macht diese Suppe so schön, dass sie die Etiketten erkennt. Und was wir dann getan haben, ist, dass wir diesen Inhalt gefunden und daraus extrahiert haben. Wir haben alle Divisionselemente extrahiert. Also zusammen mit den Tags und den Attributen und dem darin enthaltenen Text. Alles innerhalb dieser Abteilungen mit einer Klasse entspricht Städten Dann können wir für jedes dieser Elemente dieser Liste erneut eine Find-All-Methode ausführen So können wir die Tags für die Untersteuer dieser Division finden. Und in diesem Fall haben wir das H-Tag gefunden. Und dann schnappen wir uns das erste Element der Liste, was in diesem Fall zufällig eine Liste mit nur einem Element war. Also muss jede dieser Abteilungen ein H besteuern. Oder Sie könnten einfach find hier verwenden und ohne diese Indizierung zu verwenden Dies ist jedoch eine allgemeine Methode. Dann wenden wir dort das Textattribut an, um den Text aus diesem Element zu extrahieren. Also haben wir London. Also müssen wir dasselbe tun, aber in diesem Fall durch Iteration Also für, sagen wir, den Artikel in O, den Sie ausdrucken möchten. Also Artikel hier ist dieser hier. Das wäre also der erste Artikel. Sie möchten also den Artikel ausdrucken, den Sie gefunden haben. Und Sie möchten zum Beispiel die beiden H-Tags von diesem ersten Objekt finden . Also zwei H-Tags, und dann müssen Sie diesen Null-Index da drin anwenden, und Sie wollen den Text daraus holen, und das war's. Hier sind die Daten. Alternativ könnten Sie hier einfach P übergeben und Sie erhalten die Absätze. Also dieser ist hier, der Text. Das ist also die Idee Webseiten in Python zu laden und sie mit wunderschöner Seife zu analysieren und Texte aus der Webseite zu extrahieren Es tut mir leid, wenn ich dieses Zeug ein bisschen wiederholt habe, aber ich möchte wirklich sichergehen, dass Sie die Kernkonzepte verstehen Auf der anderen Seite, wenn du das sehr einfach findest , würde ich sagen, lass uns zu den nächsten Vorlesungen übergehen, wo wir einige Informationen von einer fortgeschritteneren Website extrahieren werden , und wir werden Links und nicht nur Text extrahieren Das ist also ein Programm aus der realen Welt und ein sehr interessantes Also werde ich später mit dir reden. 199. 198. App 8: Web-Scrapping-App-Demo ++: Hallo, willkommen in diesem neuen Bereich. Und wie hier in der ersten Vorlesung üblich, werde ich Ihnen nur eine Demonstration des Programms geben , das Sie erstellen werden. Und so werden Sie dieses Programm am Ende dieses Abschnitts zur Hand haben. Und ja, während meiner Arbeit als Freelancer habe ich einen Anstieg der Nachfrage nach Daten aus dem Internet von verschiedenen Kunden festgestellt, und diese Daten können für verschiedene Zwecke verwendet werden Zum Beispiel benötigen Sie möglicherweise Immobiliendaten von Immobilien-Websites wie dieser hier, oder Sie benötigen möglicherweise Unternehmen, also eine oder Sie benötigen möglicherweise Unternehmen, Liste von Unternehmen, und Sie möchten vielleicht in den Gelben Seiten oder sogar in Informationen aus Wikipedia danach suchen Gelben Seiten oder sogar in Informationen aus Wikipedia Das Problem ist, dass diese Websites Ihnen keine CSV-Datei mit den Daten geben Ihnen keine CSV-Datei mit , nach denen Sie suchen. Also machen sie das nicht. Und was Sie in diesem Fall tun möchten, ist , Daten von diesen Websites zu Und ja, möglicherweise benötigen Sie Daten für verschiedene Zwecke. Und das können wir tun. Wir können Web-Scrapping machen. Der Prozess wird also Webscrapping genannt. Das können wir mit Python machen. Python ist also perfekt dafür. Im Grunde genommen erhalten Sie diese Daten und speichern sie in einer Tabelle, wie hier in einem Pampas-Datenrahmen, und Sie können sie auch einfach in der Ausgabe exportieren Ja, in diesem Abschnitt werden Sie Web-Scrapping auf dieser Immobilien-Website durchführen Web-Scrapping auf dieser Immobilien-Website Mit Python werden Sie also eine Suchabfrage an einem bestimmten Ort durchführen. Python wird also nach Daten suchen und dann diese Daten abrufen und sie in dieser Tabelle speichern und dann, ich werde sagen, dann in einer Out-Food-CSV-Datei. Also ist alles automatisch. Und vielleicht möchten Sie verschiedene Attribute von der Website abrufen . In unserem Fall haben wir also diesen Satz von Attributen. Und ja, Sie können diese Daten in einer einzigen Programmrunde abrufen . Aber natürlich müssen Sie zuerst dieses Programm erstellen, und genau das werden wir in den nächsten Vorlesungen tun. Das ist also sehr nützlich. Und neben dem Erlernen von Web-Scrapping werden dadurch auch Ihre Python-Fähigkeiten im Allgemeinen verbessert Und ja, lassen Sie uns damit beginnen und ich werde in der nächsten Vorlesung mit Ihnen sprechen 200. 199. Die Webseite in Python laden: Da, ich freue mich, wenn du dir das ansiehst Es ist toll, dass du es im Kurs so weit geschafft hast. Und in dieser Vorlesung, in den nächsten paar Vorlesungen, lernst du, wie man Daten von dieser Website Das ist also eine Immobilien-Website, und was sie tut, sie listet Immobilien auf, die zum Verkauf oder zur Miete stehen Also sagen wir im Grunde Rock Springs. Es gibt dort tatsächlich ein paar Felsquellen, sagen wir also Wyoming Rock Springs in Wyoming Also suchen wir dort nach einigen Immobilien. A in Wyoming und es heißt, es habe 28 Angebote gefunden Es ist also eine ziemlich kleine Stadt, eine kleine Stadt. Die Idee ist also, dass Sie lernen, wie man Daten von jeder dieser Eigenschaften dann berechnet werden kann, ist, dass Sie dort die Adresse und die Anzahl der Wetten, Immobilie hat, sowie die Anzahl der Bäder und so weiter Und Sie erhalten auch die Quadratfuß der Immobilien. Falls das verfügbar ist. Immobilien haben das also nicht, also müssen wir auch damit rechnen. Außerdem löschen Sie Daten von mehreren Seiten. Wir haben also zehn Immobilien hier auf dieser ersten Seite. Und dann haben wir auf der nächsten Seite zehn weitere, und dann auf der drittletzten Seite haben wir den Rest , der acht sein sollte, also insgesamt 28. Nein, normalerweise gehe ich davon aus, dass Sie über die Anfragen und die schönen Soap-Bibliotheken Bescheid wissen . Sie hätten also an den vorherigen Vorlesungen teilnehmen sollen , in denen wir Daten von einer einfachen Webseite gesammelt haben. Das war also ein triviales Und ich glaube , dass Sie nach diesem Beispiel am Ende damit enden, Aus diesem Grund möchte ich, dass Sie lernen , echte Daten zu löschen Das ist also eines der echten Programme , die wir in diesem Kurs entwickeln Und in dem Skript, das wir gerade schreiben werden, wirst du dort mit einigen echten Programmierproblemen konfrontiert werden, was sehr wichtig ist, um deine Fähigkeiten, deine Python-Fähigkeiten, auszubauen. Nur ein Problem. Bevor Sie Daten von einer Website löschen, sollten Sie die Datenrichtlinien dieser Website lesen Daher haben sie möglicherweise einige Richtlinien gegen die Verwendung oder den Abruf ihrer Daten Ich verwende das für Bildungszwecke, also glaube ich, dass Sie dasselbe tun werden. Das sollte also kein Problem sein. Also lass uns weitermachen und das Programm schreiben. Und ich werde das Jupiter-Notizbuch verwenden. Ich schlage vor, dass Sie dasselbe tun. Dadurch wird also eine Jupiter-Notebook-Datei erstellt. Also verwende ich Python drei. Nennen wir das Century 21. Großartig. Sie wissen jetzt also, dass das allererste , was Sie tun möchten, wenn Sie ein Programm schreiben, vielleicht die Bibliotheken importieren , die Sie verwenden werden. Sie werden also Anfragen und wunderschöne Seife verwenden. Also von By Four Import. Großartig. Gehen Sie jetzt zur nächsten Zeile. Und gehen wir zurück zur Website. Das Erste, worüber Sie jetzt nachdenken sollten, ist, wie laden wir den Quellcode der Webseiten? Und jetzt ist das eigentlich ein bisschen kompliziert. Ich meine, nicht sehr kompliziert, aber es unterscheidet sich von der statischen Webseite, die wir in den vorherigen Vorlesungen gestrichen Also hier werden wir , wie gesagt, drei Seiten verschrotten, und das Gute daran ist, dass jede dieser Seiten eine eindeutige URL hat Wenn Sie also hier auf der Hauptseite sind, sehen Sie, dass die URL einfach einfach ist Aber wenn Sie dann nach einem Ort suchen, also schauen Sie sich jetzt die URL an, wenn ich suche, wird sich die URL ändern. Also ging es an Immobilien in Rock Springs und Wyoming. Also das ist die Zeichenfolge, also für den Ort , den Sie suchen, Rock Springs und WY und Sie haben hier noch etwas anderes , dessen Sie sich bewusst sein müssen Die Idee ist also, dass du jetzt diese URL bekommst. Also zuerst werden wir nur die erste Seite verschrotten. Und sobald wir das verstanden haben, denken wir über die nächsten Seiten Weil die nächsten Seiten identisch sind, ist die Struktur also dieselbe, aber wir werden nur eine Schleife schreiben , um durch die nächsten Seiten zu iterieren Lassen Sie uns also weitermachen und die erste Seite entladen. Nehmen wir an, request dot get here ist die URL. Und wir wollen den Inhalt dieses Anforderungsobjekts. Also dieser Inhalt. Und lass es uns ausdrucken. Also ein einfacher Test dort. Mm hmm. Mm hmm In Ordnung, meine Internetverbindung funktioniert also. Das ist alles, was wir über diesen Code wissen , weil wir ihn nicht lesen können. Wir wollen also zum nächsten Verkauf gehen und den Code lesbarer machen . Also müssen wir hier das wunderschöne Suplibrar verwenden. C und der Parser, der HTML Parser ist . Und vielleicht Suppe ausdrucken. Sei hübsch fünf. Nun, lass uns sehen. Also das ist die Seite. Manchmal werden Sie möglicherweise von der Webseite rausgeschmissen, also sollten Sie sicherstellen , dass die Seite korrekt geladen wurde. Also könnte ich vielleicht hierher gehen und nach etwas suchen. Also Winchester, ich suche nach Winchester. Ja, die Seite scheint also korrekt geladen worden zu sein. Und das Schöne brauchen wir da nicht. Also lass mich das Notizbuch dort reinigen. So konnten wir die Seite mit Anfragen korrekt laden. Und was kommt jetzt als Nächstes? Nun, als Nächstes müssen wir die Struktur der Webseite verstehen. Also müssen wir das Inspect-Tool in unserem Browser verwenden, und das werden wir in der nächsten Vorlesung tun. Also sieh mal. 201. 200. Div-Elemente extrahieren: Großartig. Gehen wir also auf unsere Seite. Also haben wir dort nach Arbeitsfedern gesucht. Und was wir jetzt tun wollen , ist die Struktur der Webseite zu verstehen. Also verwenden wir dort das Inspect-Tool. Und die Logik ist, dass Sie sozusagen durch all diese Boxen iterieren möchten Also schnappen wir uns den HTML-Code dieser Boxen und dann gehen wir in diese HTMLs hinein Also iterieren wir durch diese HTMLs. Und dann finden wir die Tags für die Daten, die wir abrufen möchten Das bringt uns zu dem Punkt , dass wir nach den Elementen suchen sollten , die diese Boxen identifizieren. Wenn ich hier noch einmal nachsehe, werde ich sehen, dass diese halbe Box dieses Div mit dieser ID enthält. Und eigentlich will ich eine obere Ebene, also will ich, dass die gesamte Box da ist. Also, wenn ich jetzt hier hingehe, sieht das so aus, als ob die ganze Kiste hier ist. Also hier drinnen sollten die Daten sein. Das ist das Bild. Und das ist der Preis. Also, hier ist ein Text für den Preis, und wir haben diesen Preis als Klasse für das H-Vier-Tag, das hier diese Zahl erzeugt Das ist also die erste Div-Division. Und dann sollten wir das nächste Div irgendwo dort haben , hier. Also Eigenschaftszeile, Eigenschaftszeile hier, Eigenschaftszeile, wieder Eigenschaftszeile. Also die Klasse Property Row und nochmal hier. Und lass mich das hier aufschreiben. Also docken wir es unten an , damit wir die gesamte Kiste dort sehen können. Okay, so. Also los geht's. Was ich also später verschrotten und in einer CSV-Datei oder Excel-Datei mit Pandas speichern möchte speichern später verschrotten und in einer CSV-Datei oder Excel-Datei mit Pandas ist, dass ich den Preis, die Adresse, die Anzahl der Betten, die Anzahl der Bäder, die Fläche des Grundstücks und auch die Grundstücksgröße erhalte Anzahl der Betten, die Anzahl der Bäder, , wenn es viel gibt Manche Immobilien sind dort also nicht geladen. Also haben wir da einen Trick, und du wirst lernen, wie man ihn knackt. Also das sind die Daten, die ich von jeder Immobilie abrufen werde . Und lassen Sie mich das hier nochmal aufstellen. Und du kannst entweder hier klicken und es dir ansehen, damit es direkt zu den Elementen geht, also zum Preis, oder manuell gehen, was wahrscheinlich besser ist, weil es dir hilft, die Website, die Struktur der Webseite besser zu verstehen . Das ist also ein Preis, und dann hier unten, hier drinnen, sollten die Adresselemente stehen, die wichtigsten Informationen. Das sind die Wetten. Wenn wir das also erweitern, werden Sie sehen, dass hier der Text für die Adresse ist. Es hat also eine Spanne von mit diesem Klassennamen. Und das hier ist der Name der Stadt und der Code für den Bundesstaat und auch die Postleitzahl. Großartig. Aber zuerst muss ich, wie gesagt, diese Eigenschaftszeilenklasse des Div durchgehen. Also lass uns das hier machen. Und Sie wissen, dass Sie eine Methode namens final haben, die für das Soup-Objekt gilt. Also fertig, und das generiert eine Liste mit allen Dif-Elementen , die eine Klasse von was Property row haben Ja, es ist Property Row. Grundstückszeile mit Großbuchstaben R, das ist alles. Also werde ich das eingeben und ausführen. Also, was kannst du tun? Also, drucken Sie es alle aus und sehen Sie vielleicht, was Sie bekommen. Also fängt es ganz am Anfang der allerersten Einteilung in die Grundstückszeile an. Das wäre also der erste Preis, das war dieser hier oben, hier. Dann sollte hier nach dem Ende der ersten Division ein Komma hier nach dem Ende der ersten Division Aber wie dem auch sei, wenn du sie nicht manuell finden willst , kannst du etwas tun Sie können die Länge dieses Gesamtobjekts ermitteln, das wie eine Liste ist, es ist nicht gerade eine Liste. Eigentlich ist es ein Ergebnismengenelement der B 4 der Beautiful Soup Library, aber es hat genau wie Liste zwei eine Längenfunktion. Also Länge, und du bekommst zehn. Und wir haben genau zehn Ergebnisse für jede Seite. Also erste Seite hier, zweite Seite zehn Ergebnisse und so weiter. Nun, das ist wie eine Liste, es gibt also keine gute Methode, aber es sind Elemente. Nehmen wir an, das erste Element, dieses Element hat eine endgültige Methode. Also, genau wie Sie es mit der schönen Suppe tun, also wenden Sie die Methode an, eine letzte Methode, eine schöne Suppe, um Tag-Elemente zu finden, Sie können dasselbe für die Elemente der A-Liste tun. Nennen wir die Ergebnismenge sozusagen eine Liste. Und das bedeutet, dass Sie eine gute Methode auf diesen Quellcode anwenden können . Schauen wir uns also den Preis an. Nun, Sie können zur Inspektion gehen oder einfach hier nachschauen, wenn das ist, das ist nicht viel Code. Also ich habe den Preis hier gefunden. Also haben wir die H vier Tags, H vier. Und es hat auch einen Immobilienpreis und eine Preisklasse. Also lass uns das weitergeben. Sie können sich dafür entscheiden, das nicht zu bestehen. Das Problem, auf das Sie stoßen können, wenn Sie den Klassennamen nicht übergeben , ist, dass Python diese auch extrahiert, wenn Sie andere H-Four-Tags im Code haben , wenn Sie andere H-Four-Tags im Code . Sie müssen also angeben , welches H Four Sie möchten. Also geben Sie den Preis an, finden Sie, und hier ist der Preis Das ist also ein Preis, aber auch mit den Etiketten. Und das ist eigentlich eine Liste, wie Sie sehen. Da wir nur einen Preis für jede Immobilie haben, dürfen wir in diesem Fall die Find-Methode verwenden. Das würde uns also zumindest keine Ergebnisse liefern , sondern das eigentliche technische Element. Das heißt, wir können hier jetzt ein Textobjekt anwenden und erhalten dort diese flippige Zeichenfolge Im wirklichen Leben sind die Dinge also nicht so einfach, wie Sie sehen, aber zum Glück ist dieses ganze Objekt tatsächlich eine Zeichenfolge Es ist also eine einfache Python-Zeichenfolge. Das heißt, Sie können String-Methoden auf dieses Objekt anwenden. Lassen Sie mich das kontrollieren, um den Typ zu entfernen. In diesem Fall wollen wir also wollen wir all diese Zeichen entfernen. Und eine Möglichkeit, das zu tun, über die ich nachdenke, ist das Ersetzen. Sie möchten also den Backslash N durch nichts ersetzen. Übergeben Sie dort einfach eine leere Zeichenfolge und sehen Sie, was Sie bekommen. Okay, diese Leute von dieser Century 21-Website haben beschlossen, uns das Leben schwer zu machen. Aber wie wäre es mit einer Bewerbung? Wie Sie sehen, haben wir dort etwas Leerraum, also ersetzen wir den Leerraum durch nichts und wir erhalten die tatsächliche Zeichenfolge. Großartig. Wir wissen also irgendwie, dass die Dinge derzeit gut funktionieren. Und vorerst drucke ich nur die Ergebnisse aus. Wie ich bereits erwähnt habe, ist es sinnvoll, zuerst Print-Anweisungen zu verwenden , wenn Sie Ihre Programme erstellen, und dann diese Print-Anweisungen durch andere Funktionen zu ersetzen , die Sie für die Daten verwenden möchten , die Sie abrufen, oder andere Objekte, mit denen Sie arbeiten. In unserem Beispiel hier werden wir später einige Pandas-Methoden hinzufügen, um diese Werte abzurufen und sie in eine CSE-Datei zu senden Das ist also eines der ersten Dinge, die ich sagen möchte. Die zweite Sache ist, dass wir hier jetzt den Wert des ersten Elements abrufen. Und jetzt fangen wir an, darüber nachzudenken, effizient zu sein. Also müssen wir das tun, anstatt alle anderen Elemente wie die Immobilienadresse und den Immobilienstatus usw. zu extrahieren alle anderen Elemente wie die Immobilienadresse und den Immobilienstatus usw. zu Vielleicht ist es gut, tatsächlich mit dem Aufbau unserer For-Schleife zu beginnen. Wir wissen jetzt also, dass einzelne Werte korrekt extrahiert werden. Aber jetzt wollen wir sicherstellen, dass eine Schleife, die all diese Eigenschaften durchläuft, auch funktioniert Und fangen wir an die Schleife in der anderen Vorlesung zu schreiben Aber lassen Sie uns diesen Code vorerst tatsächlich organisieren. Also hier ist ein Trick, den Sie in Jupiter anwenden können. Also gehe ich zur ersten Zelle und bin im Befehlsmodus. Sie drücken also Escape, um in den Befehlsmodus zu gelangen , und Shift und J, Sie wählen die andere Zelle aus. J, wählen Sie erneut die andere Zelle aus, oder Sie können mit K nach oben gehen, also J, J, J. Und was ich jetzt tun möchte, ist all diese Zellen in einer einzigen Zelle zusammenzuführen. Und um das mit Shift-Taste zu tun, drücken Sie Shift M, und Sie bekommen alle Zellen zu einer einzigen Zelle zusammengefügt. Das ist also eher eine Frage der Präferenz, aber es ist gut, ein sauberes Notizbuch dabei zu haben. Das ist also, was wir bisher gemacht haben. Lassen Sie uns weitermachen und die Schleife in einer anderen Vorlesung durchgehen. Wir sehen uns. 202. 201. Die Adressen der Eigenschaften abkratzen: Wir haben also die gesamte Suppe von der Webseite, was eigentlich der Quellcode ist Und wir haben auch den Quellcode der Divisionen mit der Klasseneigenschaftszeile. Und jetzt konnten wir den Immobilienpreis nur für die erste Division ermitteln. Also nur für die erste Box hier, um alle Boxen zu bekommen, müssen wir iterieren Also DD, das zu löschen. Und vier, sagen wir, Artikel aus Legierung. Und eigentlich möchte ich das alles hier ausdrucken lassen , damit Sie sehen können, was alles ist. Wenn Sie das also für einen Moment vergessen, können Sie sehen, was es ist. Es ist also wie eine Liste. Also alles zum Artikel hier. Also werden wir hier die Druckmethode verwenden. Aber ich würde es gerne am Ende schreiben , weil ich dort jetzt keine Klammern hinzufügen möchte. Es ist also gut, vorerst weniger Klammern zu haben, damit Sie diesen klareren Code sehen können, den eigentlichen Code. Wir gehen also das erste Element durch, das ist diese Unterteilung hier, und wir wollen die Find-Methode auf dieses Element anwenden oder nur die Find-Methode weil wir hier nur ein H Vier haben. Finden wir also, und wir wollen die H4 finden, die eine bestimmte Preisklasse hat Und was wir dann von diesem Produkt erwarten , ist der Text Und Sie haben gesehen, dass der Text dort etwas chaotisch war, also wollen wir die umgekehrten Schrägstriche durch nichts ersetzen und dann dort noch einen Da war also Platz und wir haben ihn durch nichts ersetzt Also ist es dieselbe Zeile wie hier. Und dann willst du das ausdrucken. Fügen Sie dort also eine gedruckte Erklärung hinzu. Und ja, das ist es. Mal sehen, wie das läuft. Hmm. Das ging schnell Also 725, 452. Lecker. Das ist gut Ordnung. Lassen Sie mich das löschen, um Platz zu sparen Also haben wir hier alle schon definiert. Also müssen wir es hier nicht hinzufügen. Und lassen Sie uns jetzt gehen und dieses Zero-Gateway extrahieren. Das sieht nicht gerade nach einem guten Beispiel aus. Ignorieren wir das also und extrahieren wir diese Adresse hier. Also Winchester Boulevard, und das wäre Inspection Mm hmm Also das hat ein Span-Tag mit einer Klasse von Prop Aber Sie können sehen , dass es hier noch eine weitere Klasse gibt, nämlich den Zusammenbruch von Requisit-Adressen Also zwei Klassen, das ist die Adresse und das ist der Name der Stadt Und schau, ob du noch andere Requisiten hast, die Adresse kollabiert nicht. Nein, tun wir nicht. Also prop Adresse kollabieren Lassen Sie uns hier eine weitere Aussage hinzufügen. Gegenstand. Diese Adressen sind also wieder in dieser Methode enthalten. Also Artikel finden. Wenn Sie dieses Mal Fine statt Fine Ole verwenden, wird das Script beim ersten Auftreten von Prop Address Collapse abgreifen beim ersten Auftreten von Prop Address Collapse abgreifen Es gibt Ihnen also die Adresse des Winchester Boulevards und ignoriert die zweite Also wird es Rock Springs ignorieren. Also das bedeutet, dass wir Fine O verwenden müssen. Und wenn Sie diese erste Zeile haben wollen, würden Sie den Null-Index an diese Ergebnismengenliste übergeben diese Ergebnismengenliste dann einen Index von eins für die nächste Zeile. Also werden wir das tun. Das war ein Span-Tag mit der Klasse Prop Address Collapse Lassen Sie mich das ausdrucken, um zu sehen, was wir bis jetzt haben. Also, hier ist der Preis für die erste Immobilie, und dann holen wir uns hier die Ergebnisliste, die eigentlich aus zwei Elementen besteht. Also die Adresse hier und dann der Name der Stadt mit einer Landesvorwahl hier und der Postleitzahl. Also das heißt, wir müssen hier einen Null-Index anwenden, wenn du den ersten haben willst, okay? Und dann, ähm, lass uns sehen. Also hier ist das erste, das erste Element. Wenn du das zweite willst, willst du es hier in die Phasen kopieren und eins hier weitergeben Führen Sie aus. Und los geht's. Ah, ich schätze, du willst den Text, also willst du die Textmethode dort anwenden. Hm. Großartig. Und nur der besseren Übersicht halber fügen wir am Ende der Schleife eine weitere Zeile hinzu, um eine leere Zeichenfolge zu übergeben. Jetzt können Sie die Blöcke klarer sehen, und wir haben dort zehn Blöcke. Ziemlich genial, nicht wahr? Gehen wir jetzt los und ermitteln die Anzahl der Betten und die Anzahl der Bäder. Das ist also ein Span-Tag mit einem Klasseninformationsbett. Und Bäder. Und hier ist das andere Spinnglas. Falls Wert, Vollbad. Also, hier haben wir ein Problem. Nein, wir müssen hier vorsichtig sein weil wir die Anzahl der Bäder hier ermitteln müssen, die in den B-Tags steht. Aber die Anzahl der Bäder ist auch in den B-Tags enthalten. Sie können also weitermachen und eine gute Methode direkt in diesem Level anwenden . Also direkt unter O. Aber das würde wahrscheinlich einige Probleme bereiten , weil Sie dort mehrere Bs haben. Und so hast du auch den Bereich , der auch ein bisschen markiert sein sollte. Spannen Sie den Unterricht. Ja, es ist ein bisschen auffällig. Also manchmal hat man drei B-Tags, manchmal hat man mehr. Es kann also zwei Lösungen geben. Sie können entweder davon ausgehen , dass Wetten immer die ersten sind , und Sie können einen Index von Null an die Ergebnisliste übergeben. Sie bekommen also Betten und dann bekommen Sie Vollbäder mit einem Index von eins und zwei für diesen Quadratfuß hier und drei für diesen. Aber ich würde es vorziehen, es konstruktiver zu machen. Also würde ich gerne zuerst diese Ausgaben-Tags extrahieren, dann gehe ich in jedes der Spend-Tags und extrahiere den Wert innerhalb des B-Tags. Also haben wir Zeit für ein Infobett und für ein Vollbad, und das ist dieses hier. Ja, das ist sogar als dritter aufgeführt. Also die Betten sind die ersten und Quadratfuß, die Fläche ist die zweite und dann die vollen Betten und so weiter. Wir müssen also nicht über die Reihenfolge nachdenken. Wir müssen uns nur die Klassennamen schnappen. Also Info, das bedeutet, dass du auf den Artikel zugreifen willst, okay, in diesem Fall. Also, du willst die Spanne herausfinden, und lass uns zuerst die Betten machen, was das Informationsbett war. Also lass es uns zuerst ausdrucken , um zu sehen, ob du startklar bist. Und so bekommst du keine für die erste Immobilie. Es gibt also keine Daten für Betten und Bäder, also können Sie nichts dagegen tun. Manchmal müssen Sie einfach keine Daten akzeptieren. Und dann ist hier der Code, also der Quellcode für den nächsten. Nun, hier ist ein Trick. Wenn Sie die Textmethode auf dieses Objekt anwenden, also sollte es hier sein, dieser Text, erhalten Sie eine Fehlermeldung. Und schau genau hin , was der Fehler sagt. Es heißt also, dass ein Objekt ohne Typ keinen Attributtext hat. Dieses Objekt ohne Typ war hier, also keines, was ein spezielles Objekt ist und für das keine Textmethode verfügbar ist. Also musst du damit rechnen. Und die Art und Weise, wie Sie diese Ausnahmen zählen , besteht darin, eine Try-and-Accept-Anweisung zu verwenden. Sie müssen also diese gedruckte Aussage hier mit try beifügen Also versuche das, wenn es funktioniert. Wenn es dieses andere Zeug hier nicht macht. Also was ist Pass. Also ignoriere diese Nichttypen dort einfach. Versuchen Sie also noch einmal, die Textmethode tatsächlich aus diesem Span-Text herauszuholen. Und wenn das nicht verfügbar ist, fahren Sie einfach mit der nächsten Iteration der Schleife fort Also lass uns das versuchen. Und ja, jetzt funktioniert es. Nun, wie Sie sehen können, haben wir den Text für das B-Tag, aber auch den Text des Span-Tags. Das ist also der Text des B-Tags, und das ist der Text des Span-Tags. Also, wenn das in Ordnung für dich ist, kannst du es so lassen. Aber ich hätte gerne nur die einfache Nummer. Und um das zu tun, müssen Sie vielleicht die Suchmethoden anwenden. Wir haben also wieder diesen Quellcode, also müssen wir ihn in diesem Quellcode finden. Wir müssen das Bt-Tag finden, das keinen Klassennamen hat, also lassen wir es so und wir müssen den Text aus diesem Bit-Tag extrahieren. Und das gibt dir nur die Nummer. Also vier, vier, fünf und so weiter. Also das ist gut. Lassen Sie uns jetzt dasselbe tun. Also kopiere ich den gesamten Block und wir machen dasselbe für die Anzahl der Bäder. Lassen Sie uns hier Platz machen. Und für die Anzahl war das so die Größe der Fläche. Und diese andere Sache hier. Also halbe Bäder. Also rechnen wir auch damit. Also Info Quadratfuß, Info Quadratfuß da. Wir gehen so hierher. Dann haben wir Info Value Vollbad. Und noch eins für die Halbbäder. Das wäre also Info Value Halb Bath. Ausführen. Wir haben da ein Problem mit Einkerbungen Also Troy, dieser ist gut. Dieser ist auch hier nicht gut. Sie müssen also die Aussagen nach Troy und dem Autor der Aussage einrücken die Aussagen nach Troy und dem Autor der Aussage Also führe es aus und lass uns sehen. Gut. Also vier Betten und dann vier Bäder dort. Aber dann haben wir hier die Gegend oder das Grundstück. Also die Reihenfolge ist so nicht sehr gut. In dem Fall wollen wir hier keinen Pass schreiben, aber vielleicht wollen wir keinen drucken. In diesen Fällen also drucken, nichts, drucken, nichts. Hier gilt das Gleiche. Hinrichten. Und jetzt sieht es besser aus. Jetzt wissen wir also, in welcher Reihenfolge wir wissen, dass wir in dieser Immobilie vier Betten haben und die Größe der Fläche nicht verfügbar ist, und dann haben wir vier Bäder. Und dann haben wir keine Informationen über die Halbbäder dort. Also das sieht gut aus. Und ich möchte hier aufhören und in der nächsten Vorlesung weitere Daten sammeln. Ja, lass uns weitermachen. 203. 202. Spezielle Elemente kratzen: Da sind wir wieder. Und wir haben dieses Skript, das diese Ausgabe erzeugt. Wir haben also einige Attribute für jede dieser Eigenschaften. Insbesondere sind die Attribute dieses Blocks hier. Also Preis, Adresse und einige Attribute wie die Anzahl der Wetten und so weiter. Jetzt möchte ich noch weiter gehen und die Grundstücksgröße für jede Immobilie extrahieren , wann immer dieses Attribut verfügbar ist. Wie Sie hier sehen, haben einige Immobilien keine große Grundstücksgröße. Und obwohl die Grundstücksgröße ein wichtiges Merkmal ist , das man von einer Immobilie kennen lernen muss, ist es in diesem Fall auch ziemlich schwierig, es aus dieser Webseite zu extrahieren. Und der Grund dafür ist, dass Sie, wenn Sie sich den Quellcode ansehen, feststellen werden, dass dies der Name der Attribute ist, also die Losgröße, und das ist der tatsächliche Wert, den wir extrahieren wollen. Und beide gehören zu dieser Abteilung. Also die erste Zeile dort. Diese Abteilung hat den Klassennamen Spaltengruppe. Jetzt haben wir eine weitere Spaltengruppenklasse, also eine weitere Division mit der Spaltengruppenklasse hier in der zweiten Zeile. Wenn Sie sich dann eine andere Eigenschaft ansehen, also eine weitere Eigenschaftszeile. Sie werden sehen, dass sich diese Aufteilung in Spaltengruppen hier wiederholt. Wenn Sie also eine Schleife schreiben, um die Span with Feature Name Class für alle Eigenschaften zu extrahieren die Span with Feature Name Class für alle Eigenschaften , könnten Sie für diese Eigenschaft die tatsächliche Grundstücksgröße ermitteln. Aber für diese andere Methode würden Sie wahrscheinlich das Alter der Immobilie ermitteln, aber Sie würden die Grundstücksgröße erwarten. Sie würden das Alter der Immobilie ermitteln, weil das Alter der Immobilie dort der erste Merkmalsname ist. Und die Grundstücksgröße ist auch der erste Merkmalsname. Also mit der Feature-Ename-Klasse in der zweiten Eigenschaft. Dies ist also einer der Fälle , in denen Sie über alternative Lösungen nachdenken müssen. Wenn Sie also auf die Methode der Spaltengruppe zeigen, also sagen Sie, finden Sie alles in der Division mit der Klasse Spaltengruppe, und darin den Feature-Namen mit dem Index Null suchen, erhalten Sie die ersten Zeilen. Das weißt du. Lassen Sie uns jetzt eine Lösung finden. Nun, wie wäre es, all diese Spaltengruppen durchzugehen? Und dann überprüfen wir , ob der Text der Feature-Gruppe der Losgröße entspricht, geben mir dann den Text im Feature-Namen also in dieser speziellen Iteration Wenn also in dieser speziellen Iteration die Feature-Gruppe der Grundstücksgröße entspricht oder sie eine Zeichenfolge für die Losgröße im Text enthält, geben Sie mir in dieser aktuellen Iteration den Textwert des Feature-Namens Also brauchen wir hier eine Schleife. In unserer großen Schleife. Also diese große Schleife hier, nennen wir sie die große Schleife, durchläuft jede dieser Zeilen. Dann innerhalb der aktuellen Iteration dieser großen Schleife Nehmen wir an, die aktuelle Iteration würde diese Eigenschaft durchlaufen Darin gehen wir also zu den Unterteilungen der Spaltengruppen über. Nehmen wir an, vier, nennen wir diese variable Spaltengruppe in der aktuellen Variablen Element. Also nochmal, Artikel, wie wir es dort gemacht haben. Ich finde eigentlich alles. Sie möchten also Abteilungen mit einem Klassennamen in der Spalte Gruppe finden . Gruppe. Und lassen Sie mich schnell die Spaltengruppenvariable ausdrucken. Also nur um zu sehen, was wir bisher haben. Und los geht's. Also das sind die Daten, die wir haben, und dann geht es los. Lass mich hier rauf gehen. Hier ist der Quellcode für jede der Abteilungen der Spaltengruppen. Also die erste Division, die zweite Division und so weiter. Das sind also Funktionen , die diesem Header hier entsprechen. Und dann haben wir einen Architekturstil , den wir nicht brauchen. Wir haben den Dachtyp, also druckt Python bei jeder Iteration diese Zeilen aus Nun, was wir mit diesen Zeilen machen wollen, lassen wir den Ausdruck dort für eine Weile stehen Was wir mit diesen Zeilen machen wollen ist, sie noch einmal durchzugehen Wir werden also durch dieses Div iterieren und wir werden durch dieses andere Div iterieren und wir werden sehen, dass wir den Text des Feature-Namens für diese aktuelle Iteration erhalten, wenn der Text oder die Feature-Gruppe in dieser aktuellen Iteration die Zeichenketten-Lotgröße hat in dieser aktuellen Iteration die Zeichenketten-Lotgröße Also nochmal, wir brauchen hier vier Schleifen. Welches wird jede dieser Abteilungen für Spaltengruppen durchlaufen . Es wird also auch auf das Feature-Group-Element und das Feature-Namen-Element zugreifen . also den Feature-Namen der Feature-Gruppe ein und wir müssen dort eine ZIP-Funktion verwenden. Wie Sie sich vielleicht erinnern, wird eine ZIP-Funktion , bei der es sich um eine integrierte Python-Funktion handelt , verwendet , um durch zwei Listen gleichzeitig zu iterieren Hier geben Sie also die Tolist in die Zip-Funktion Und unsere beiden Listen wären die erste, wäre eine Spaltengruppe, die alle Bereiche findet, also eine Spanne mit einem Klassennamen oder einer Feature-Gruppe In ähnlicher Weise müssen wir auf die Spaltengruppe zugreifen , in der Poll gefunden wurde, und wir benötigen erneut das span-Tag Aber dieses Mal benötigen wir eine Klasse von Feature-Namen. Verwechseln Sie diese Variablen also nicht mit diesen Klassennamen. Und hier schließt die Zip-Funktion. Also diese Klammer hier. Also nach den vier Statements brauchst du die Spalte hier. Okay. Nun, was möchten Sie für jede Feature-Gruppe tun? Nun, lassen Sie uns zum Beispiel vorübergehend den Text der Feature-Gruppe ausdrucken . Und auch den Punkttext des Feature-Namens. Und lass mich das löschen. Diese Spaltengruppe hier entspricht also all diesen Unterteilungsblöcken. Also führe das aus. Wir haben hier eine ungültige Syntax und suchen nach dem Pfeil. Ja, hier ist ein kleiner Pfeil. Also dieser hier weist uns auf diesen Charakter hin , der eigentlich eine halbe Spalte ist. Aus irgendeinem Grund habe ich dort eine Semikolon eingefügt, also sollte es eine Spalte sein, kein Okay, lassen Sie mich das noch einmal ausführen. Also hier ist, was wir bekommen. Für die erste Eigenschaft haben wir zum Beispiel die vorherigen Attribute ausgedruckt. Also nein, nein, nein, für diese erste. Und dann haben wir hier den Feature-Gruppentext und hier ist der Feature-Namenstext. Und in ähnlicher Weise haben wir hier den Feature-Gruppentext für die nächste Feature-Gruppe und den Feature-Namen. Und dann haben wir dort die nächste Eigenschaft, die dort tatsächlich ziemlich viele Attribute hat. Heizgas. Und hier ist etwas, das Sie jetzt wissen sollten. Sie sollten sich dessen bewusst sein. Lassen Sie mich noch einmal die Century 21-Website öffnen. Rock Springs. Wie Sie sehen können, hat die zweite Eigenschaft nicht so viele Attribute. Es hat also alte Geräte und Keller, aber keine schlechten Eigenschaften und Kühlung usw. Diese zusätzlichen Attribute sind also irgendwie im Quellcode dieser Webseite versteckt, und Sie können auf sie zugreifen, wenn Sie gehen Also, wenn Sie auf den Link der Webseite der jeweiligen Immobilie klicken . Also hier sind alle Attribute , die wir hier sehen. Also zählen Kamine zwei Kamine. Hier ist die Anzahl der Kamine. Und Sie können auch sehen, dass die Grundstücksgröße auf der Immobilienwebseite aufgeführt ist . Also hier ist es. Was eigentlich eine gute Sache ist. Wir sind also in der Lage, alle Attribute einer Immobilie zu extrahieren , ohne Immobilien-Webseite, den Eigenschaftslink, aufrufen zu müssen. Das ist also eine gute Sache. Und was wir jetzt tun müssen, ist, die gedruckte Abrechnung für eine Weile dort zu lassen, und wir müssen das überprüfen. Also hier unter der Vierer-Schleife, wenn die Losgröße in der Merkmalsgruppe dieser Text ist. Befindet sich zum Beispiel die Zeichenfolge mit der Losgröße innerhalb dieser Merkmalsgruppe? Wenn ja, dann gib mir das Feature mit dem Namen Text. Also wird es mir den Wert hier geben. Wenn nicht, dann tu einfach nichts. Also lassen wir den Loop so wie er ist. Lassen Sie mich jetzt diese Funktion löschen, die Druckfunktion, die wir zuvor ausgeführt haben, und diese ausführen. Also los geht's. Wir haben hier nichts. Das sind frühere Attribute. Und dann haben wir hier vier Attribute und dann haben wir 0,221 Hektar Hier haben wir einen halben Hektar. Okay, das sieht jetzt gut aus, und ich möchte jetzt die nächste Vorlesung durchgehen, in der Sie lernen wie Sie diese Druckanweisungen loswerden und all diese Attribute tatsächlich in einer Tabelle speichern können, also in Pandas Datenrahmen, dann exportieren wir den Datenrahmen einfach in eine CSV-Datei oder Excel-Datei, was auch immer Sie Wir werden dort also eine Preisspalte und eine Adressspalte, eine Bundesstaatenspalte mit einer Postleitzahl und auch Spalten mit diesen Attributen der Losgröße haben. Also lass uns weitermachen. 204. 203. Extrahierte Daten in CSV-Dateien speichern: Lassen Sie uns nun darüber nachdenken, wie wir all diese Werte hinzufügen können. Also diese Werte in einem Datenrahmen, Pandas-Datenrahmen. Also dachte ich darüber nach, etwa eine, zwei, drei, vier, fünf, sechs, sieben plus acht Spalten in dem Datenrahmen zu haben , zwei, drei, vier, fünf, sechs, sieben plus acht Spalten in dem Datenrahmen Und dann hätten Sie für jede Zeile, zum Beispiel für den Preis, 725.000 für diese und dann die nächste für 152.000, und so weiter, bis alle Eigenschaften Ich hoffe also, dass die Struktur klar ist und wie man das jetzt macht. Nun, eine Lösung wäre vielleicht durch den Datenrahmen zu iterieren, aber das ist eine kostspielige Lösung Das nimmt viel Zeit in Anspruch, daher kann der Prozess langsam werden, wenn Sie durch Datenrahmen iterieren , da Datenrahmen nicht dafür ausgelegt sind, sie zu durchlaufen Es ist also wahrscheinlich besser , einen Datenrahmen aus dem Python-Wörterbuch oder vielleicht aus einer Liste von Wörterbüchern zu erstellen Python-Wörterbuch oder vielleicht aus einer Liste von Wörterbüchern zu Und genau das werde ich tun. Bei jeder Iteration füge ich diese Werte einem Wörterbuch hinzu Also fange ich zum Beispiel mit dem ersten Wörterbuch an. In der ersten Iteration habe ich also einen Preisschlüssel und den Wert des Preises als erstes Paar des Wörterbuchs, und dann wäre das nächste Paar desselben Wörterbuchs der Adressschlüssel und der Adresswert Und dann gehen wir zum nächsten Paar über. Also fügen wir hier das dritte Paar und dann ein viertes Paar als fünftes, sechstes und siebtes und achtes. Kombinieren Sie also in der ersten Iteration ein Wörterbuch mit acht Paaren Dann muss ich in der nächsten Iteration ein weiteres Wörterbuch mit denselben Schlüsseln erstellen Wörterbuch mit denselben Wir hätten also wieder den Preis und den Wert für diesen Preis, der dem Wert einer zweiten Immobilie entsprechen würde Also baue ich ein zweites Wörterbuch und dann ein drittes Wörterbuch und so weiter, bis alle zehn Eigenschaften hier verbraucht sind. Also werde ich am Ende zehn Wörterbücher haben. Jetzt müssen Sie diese Wörterbücher auch irgendwo speichern, denn wenn Sie einfach Wörterbücher durchlesen und sie bei jeder Iteration verlieren, dann haben Sie nichts getan. Also werden wir diese Wörterbücher in einer Liste speichern . Das Erste, was Sie vielleicht tun möchten, ist, dass Sie jede Iteration mit einem leeren Wörterbuch beginnen möchten , damit Sie die Schlüssel-Wert-Paare zu diesem Ausdruckswörterbuch hinzufügen können Schlüssel-Wert-Paare zu diesem Ausdruckswörterbuch Sobald Sie also ein leeres Wörterbuch erstellt haben, können Sie diese gedruckten Anweisungen ersetzen Sie würden also sagen der Preis als Schlüssel das erste Wörterbuch verwenden, und das wäre gleich. Wenn wir die Klammern nicht brauchen, diese auch. Also das ist es. Ebenso können Sie dies als Adresse tun. Entferne das hier wieder. Nennen wir diesen Ort. Wir erstellen Schlüssel also spontan, also Preis, Adresse und Lokalität, und wir weisen diesen Schlüsseln wieder spontan Werte zu diesen Schlüsseln wieder Vielleicht wäre es also sinnvoll, den Preis hier unten zu haben. Also beginnen wir mit Adresse, Ort und dann dem Preis Das wären die Betten. Und wenn es keine Betten gibt, dann musst du auch keine für die Betten weitergeben. Und dann wäre das wiederum die Fläche, die wieder diesen entspricht. Das Gleiche gilt für die Fläche, nein, wenn es keine Fläche gibt und hier noch eine. Vollbäder. Lass mich das kopieren. Keiner. Und es wären heiße Bäder. Entspricht keinem. Wir haben hier ein Printsegment, das wir nicht benötigen. Hier gehen wir also den Namen jedes Gruppenmerkmals durch , wenn Losgröße im Merkmalsgruppentext steht, dann nennen wir das Losgröße. Entspricht dem Text des Feature-Namens. Und lassen Sie uns diese Print-Anweisung entfernen. Und so haben Sie am Ende dieser Schleife Ihr erstes Wörterbuch. Am Ende der ersten Iteration haben Sie also Ihr erstes Wörterbuch Jetzt möchten Sie dieses Wörterbuch irgendwo speichern. Also lass es uns in einer Liste speichern. Normalerweise müssen Sie also eine Liste außerhalb der Schleife erstellen , dort eine leere Liste. Und dann wollen Sie am Ende der Schleife , genau hier, das Wörterbuch anhängen Sie erhalten also eine Liste mit mehreren Wörterbüchern. In diesem Fall erhalten Sie eine Liste mit zehn Wörterbüchern . Lass uns das ausführen Wir haben da eine ungültige Syntax, Bads. Ich habe vergessen, den Zuweisungsoperator da zu haben, und richtig. Diesmal kein Fehler. Lass uns L hier drucken. Und es sieht gut aus. Sie können also die Länge überprüfen. Also sind es zehn. Nun, wenn Sie diese Liste von Wörterbüchern in einen Datenrahmen werfen wollen , diese Liste in einen Datenrahmen, nun, Sie müssten Pandas verwenden, und dann entspricht DF dem Pandas-Datenrahmen Und hier müssen wir eine wirklich lange Aussage schreiben . Ich jogge Sie müssen nur die Liste dort übergeben und Sie erstellen einen Datenrahmen aus dieser Liste von Wörterbüchern Lassen Sie uns also den Datenrahmen überprüfen. Und bumm, hier sind die Daten. Und wie Sie sehen können, haben wir sogar Nan-Werte erhalten , wenn es keine große Losgröße gibt. Pandas versteht also, wenn es keine Daten in den Wörterbüchern gibt Also hatten wir hier zum Beispiel keine große Menge, und Pandas weist dem einen Wert zu, der nicht nach Nan ist, den Sie, wenn Sie möchten , einfach durch einen Wert ersetzen können, der kein wenn Sie möchten , einfach durch einen Wert ersetzen können, ersetzen Dann musst du viel arbeiten, um das in einer CSV-Datei zu speichern. Eine wirklich lange Aussage. Okay, ich lege die CSV-Datei rein und sie sollte startklar sein. Lass mich das überprüfen. Hier ist eine Datei. Und hier sind die Daten. Es sieht also gut aus. Großartig. Nun, was kommt als Nächstes, wenn wir, wie Sie sich vorstellen können, die Eigenschaften aller Seiten abrufen müssen . Also zweite Seite und dritte Seite. Also werden wir das in der nächsten Vorlesung machen. Wir sehen uns. 205. 204. Durch mehrere Webseiten crawlen +: Großartig. Also haben wir das Drehbuch für eine Seite zum Laufen gebracht. Also für die erste Seite, aber da haben wir vielleicht mehrere Seiten. Für Rock Springs haben wir also drei Seiten mit 28 Auflistungen. Also 28 Immobilien, die dort zum Verkauf oder für private Zwecke aufgeführt sind. Eigentlich stehen sie zum Verkauf, also Häuser zum Verkauf. Das ist also die zweite Seite mit zehn weiteren Immobilien, und dann haben Sie dort die letzte Seite, die acht Immobilien haben sollte. Wir haben also insgesamt 28. Nun, das ist eine kleine Stadt, also gibt es dort nicht viele Angebote, aber bei großen Städten wirst du viele Seiten haben. Und das Skript, das wir erstellen werden, um Immobiliendaten von diesen Seiten zu extrahieren Immobiliendaten von diesen Seiten funktioniert mit einer beliebigen Anzahl von Seiten. Wie gehen wir vor, um Daten von allen Seiten abzurufen? Nun, da gibt es keine Magie, aber es gibt einen einzigen Trick Weißt du, wenn du erneut nach Rock Springs suchst, wirst du dort eine erste URL sehen, die wir in Python geladen haben. Ich glaube, ohne das wäre K gleich Eins. Es war nur so. Ich bin mir nicht sicher, was das bedeutet hat, aber wie dem auch sei, vielleicht lag es daran, dass ich wieder nach Rock Springs gesucht habe. Also das ist die erste Seite. Die Logik hinter dem Extrahieren von Daten von den anderen Seiten besteht darin , dass wir die anderen Seiten ebenfalls in Python laden müssen , indem wir erneut request verwenden Also, genau wie hier, haben wir die erste Seite geladen Jetzt müssen wir einen Weg finden, die anderen Seiten zu laden. Wir können entweder jede der 300 Seiten, in diesem Fall drei Seiten, manuell durchgehen in diesem Fall drei Seiten und die URL kopieren, oder wir können versuchen, einen Weg zu finden. Um also die Regel herauszufinden, ob es eine Regel gibt, dass sich die URL ändert, wenn Sie zwischen den Seiten wechseln, und da ist es wahrscheinlich immer eine Regel. Also müssen wir das herausfinden. Also bin ich auf die zweite Seite gegangen, und wie Sie sehen, sich die URL jetzt geändert, mit einer Erweiterung. Also ist T gleich Null und C ist gleich Null. Wenn Sie zur dritten Seite gehen, sehen Sie, dass sich die URL vor 20 nicht geändert hat, aber C wurde auf 20 geändert Wenn Sie jetzt erneut zur ersten Seite gehen, werden Sie feststellen, dass S gleich Null ist. Wenn Sie also direkt nach Rock Springs suchen, erhalten Sie dort die Basis-URL ohne diese Erweiterung. Und wenn Sie dann manuell zur ersten Seite wechseln, indem Sie hier auf die Nummer eins klicken, werden Sie in die Regel aufgenommen, die die URL ändert, wenn Sie sich durch alle Seiten bewegen. Das heißt, wir können diese URL verwenden, um die erste Seite abzurufen, und dann können wir die URL durchgehen. Und ändern Sie diesen Wert während der Iteration auf zehn. Erhöhen Sie um zehn. Also ab 010 und 20, und wenn wir mehr Seiten haben, wären das 30 und so weiter. Also hoffe ich, du verstehst die Idee. Lass uns jetzt weitermachen und mal sehen, also lass uns dort eine Basis-URL speichern. Wir sollten so etwas ohne die Nummer sein. Das ist also die Statistik-URL. Und bevor wir nun den Quellcode mit Anfragen anfordern, versuchen wir zunächst, eine URL zu erstellen und sie auszudrucken. Also verwenden wir wie immer eine Print-Anweisung , um Dinge auszuprobieren. Nehmen wir an, für eine Seite im Bereich sollte der Bereich bei Null beginnen, bis wir drei Seiten hatten, und die letzte Seite hatte eine von 20. Geben Sie also vielleicht 30 ein und wiederholen Sie dann mit einem Zehnerschritt Also werden wir bei jeder Iteration um zehn erhöhen Machen Sie sich vorerst keine Gedanken über die Anzahl der Seiten. Im Moment geben wir nur manuell einen Wert ein, damit wir wissen, dass es drei Seiten hat, also gebe ich dort 30 ein. Aber später werden wir dies in eine Variable ändern , die eine Reihe von Seiten von der Website übernimmt Wenn Sie also statt Rock Springs New York hätten und wahrscheinlich 200 Seiten bekommen würden Sie wollen also die Nummer der letzten Seite 200 nehmen und dann etwa 200 mal 20 weitergeben, also erhalten Sie 2000 und Sie erhalten eine Schleife, die auf Null, Zehn und bis zu 2000 geht . Also machen wir das später. Vorerst drucken? Basis-URL plus. Nun, diese Seitenvariable würde eine Ganzzahl erhalten. Also müssen wir diese Ganzzahl mit der String-Methode in eine Zeichenfolge konvertieren . Und dann geht die Seite hinein. Also lass uns das ausprobieren. Ana, das sind die Drei Könige. Lass mich einen von ihnen öffnen. Los geht's. Und das ist die zweite Reihe von Ergebnissen. Es ist also Seite zwei. Großartig. Lass mich das schließen. Aber natürlich interessiert uns das Drucken nicht, also wollen wir die URL nicht drucken. Wir wollen den Quellcode von ihnen bekommen. Was Sie also tun möchten, ist Anfragen zu entsprechen. Sie befinden sich also innerhalb der Schleife, und später werden wir diese Schleife mit dem anderen Code zusammenführen. Konzentrieren wir uns also vorerst darauf. Holen Sie sich die Basis-URL plus die Zeichenfolge der Seitenzahl. Und gleich darauf möchten Sie den Inhalt der Anfrage abrufen und auch die Suppe zubereiten. So schöne Suppe, C- und HTML-Parser. Lassen Sie uns vorerst versuchen, die verschönerte Version des Soup-Objekts auszudrucken . Großartig Und das hat eine Weile gedauert, aber hier ist das Ergebnis. In der ersten Iteration haben wir also die URL von dieser Funktion, von der Druckfunktion, ausgedruckt , und dann haben wir die verschönerte Version des Quellcodes für die erste URL bekommen, die ziemlich lang ist Also wie dem auch sei, du verstehst die Idee. Also das scheint zu funktionieren, aber was wir vom gesamten Quellcode brauchen. Wir haben also den Quellcode aller drei Seiten. Wir müssen also nicht den gesamten Quellcode drucken, sondern wir müssen nur die Unterteilungen der Eigenschaftszeilen extrahieren. Also, genau wie hier, haben wir die Suppe für die erste Seite bekommen und dann haben wir dort eine All-Variable erstellt. Also machen wir hier dasselbe. Aber dieses Mal sollte es eingerückt sein, weil es sich in einer Schleife befindet Also alles und die Aufteilung der Eigenschaftszeilenklassen, das sieht gut aus. Also wenn du es ausdruckst, nur um alles zu überprüfen, hier ist das Ergebnis. Also die erste URL ausgedruckt, und dann haben Sie diese Abteilungen. Und dann haben Sie hier auch ziemlich viele Daten. Also, was Sie jetzt tun möchten, ist, den ganzen Code, den Sie gerade dort gebaut haben, zu holen den ganzen Code, den Sie gerade dort gebaut haben, und vielleicht diesen zu löschen und die gesamte Zelle zu löschen, und Sie möchten den Code hier platzieren . Großartig. Als Nächstes hast du das für eine Seite gemacht und jetzt durchblätterst du alle Seiten Sie möchten also den ganzen Block auf der rechten Seite einrücken , sodass dieser Block Teil der vier Schleifen wird Drücken Sie also die Taste und schließen Sie die Klammer , um den ausgewählten Text einzuziehen Also, diese Schleife hier wird so oft laufen, wie es Seiten gibt Also, was können wir jetzt tun? Nun, wir können den Code ausprobieren. Also lass mich diese Shift Enter ausführen und wir müssen hier ein bisschen warten. Also das sieht so aus, als ob es funktioniert. Also sollten wir an dieser Stelle die L-Liste mit allen Daten haben . Und hier konvertieren wir diese L-Liste in einen Datenrahmen. Also lass uns das ausführen. Und dann führen wir hier den Datenrahmen aus. Also lass uns jetzt sehen. Jep Und so haben wir 425 Zeilen , weil wir bei Null anfangen. Aber wir hatten tatsächlich 28 Angebote. Das bedeutet also, dass diese letzten drei Immobilien hier nicht aufgeführt wurden , weil dort etwas passiert ist. Wir sind hier also auf Seite drei, und die letzte erfolgreiche war Wen Avenue. Also suchen wir nach der Wende Avenue, hier ist die Wende Avenue. Es hat also eine Adresse und den Ort Sook Springs. Und dann die nächste, da ist nur die Lokalität In diesem Fall könnten Sie also versuchen, eine Ausnahme hier im Code zu behandeln Für diesen hier könnten wir also sagen, versuchen, das zu tun und zu akzeptieren, dass dCalit gleich nichts ist Und jetzt führe ich das noch einmal aus. Hoffen wir, dass wir dort keinen Fehler bekommen. Ja, das wurde erfolgreich ausgeführt. Führe das auf dem Datenrahmen aus. Und lass uns sehen. Ja, jetzt scheinen wir dort 28 Reihen zu haben. Also das scheint zu funktionieren. Und das Letzte, was Sie tun möchten, ist, wissen Sie, anstatt diesen Bereich hier manuell zu übergeben, könnten wir tatsächlich eine Variable hinzufügen , die eine Seitenzahl erkennt. Und alles, was wir tun müssen, ist auf unsere Website zu gehen. Lass mich das entfernen. Sie möchten also herausfinden, wo diese letzte Zahl gerendert wird. Das ist also der Indikator für die Anzahl der Seiten. In diesem Fall haben wir also drei Seiten, schauen Sie sich das an und das bringt uns zu diesem Punkt. In diesem Fall heißt es eigentlich Seite, aktuelle Seite. Gehen wir also zur ersten Seite. Und lass mich das schließen. Wir sollten also auf der ersten Seite sein , wenn wir zum ersten Mal am Drehbuch sind . Und auf dieser ersten Seite wollen wir uns den Inhalt der ersten Seite schnappen, und dann wollen wir wissen, welches Element dort in der letzten Zahl steht. Wir sehen also, dass das das A-Element mit der Klassenseite ist. Und hier ist der Text also drei. Das sollte eigentlich das letzte Element mit einer Seitenklasse sein. Sie werden dort also einige Elemente mit Seitenklasse haben , und dies sollte das letzte sein. Ja. Also das sollte der letzte sein. Also behalten wir das im Hinterkopf und gehen hierher, und was wir jetzt tun können ist, oder holen wir uns die Seitenzahl hier drin. Also Seite, nennen wir diese Seitenzahl. Das wäre gleichbedeutend mit Suppe. Die Suppe wird also den HTML-Code der ersten Seite enthalten. Also dieser hier , der keine Ajax-Anfrage ist Es ist also ganz einfach auf dieser Seite. Deshalb wollen wir alle A-Elemente mit einer Klasse finden. Von Seite. Also wenn ich es ausdrucke, nur um zu sehen, was wir bis jetzt haben, Seitennummer, um zu sehen, wo Sie ein paar Elemente haben. Aber die letzte ist die letzte Seitenzahl. Also drei, das brauchen wir. Also müssen wir uns das letzte Element der Liste schnappen, das heißt minus eins, einen Index von minus eins und Text. Und ja, wir haben drei hier. Und deshalb müssen wir diese Zahl jetzt in 30 umwandeln. Und die Art, wie Sie das machen, ist nur Seitenzahl mal Zehn. Das würde dir also 30 geben. Also, fast weil diese Seitenzahl eigentlich eine Zeichenfolge ist, geben Sie hier eine weitere Klammer ein. Also ist es der Typ Zeichenfolge. Und das bedeutet, dass Sie hier eine Ganzzahl hinzufügen müssen. Sie möchten diese Zeichenfolge also in eine Ganzzahl konvertieren und sie dann mit zehn multiplizieren , sodass Sie 30 erhalten. Also das sollte jetzt funktionieren, und alles sollte funktionieren, glaube ich. Also lass mich das ausführen. Die URL wird ausgedruckt und das Script fertig gestellt. Wenn Sie hier also nicht den Busy-Text vor dem Titel Ihrer Datei haben , bedeutet das, dass das Skript ausgeführt wird. Jetzt haben wir das nicht mehr, also ist das Skript fertig. Führe das aus. Und das sind unsere Ergebnisse und exportieren Sie sie in eine CSV-Datei. Und lass uns nachschauen. Also habe ich das CSV eingegeben. Und hier sind die Daten. Wir haben hier also keinen Ruf. Nein, alles sieht einzigartig aus. Damit ist dieser Abschnitt von Web-Scrabbing geschlossen. Also, wenn du andere Lokalitäten finden willst, so habe ich das für Rock Springs versucht, aber du kannst es auch mit anderen Lokalitäten versuchen Sie müssen also nur die URL ändern oder Sie könnten sogar eine Benutzereingabe implementieren, sodass der Benutzer einen Namen eingibt, und dann konstruieren Sie die URL und übergeben die URL dann hier. Also brauchen wir das nicht, räumen Sie das auch auf. Und wenn du willst, kannst du diese Zelle mit dieser verbinden. Sie können also das gesamte Skript in einer Zelle ausführen. Und das kannst du auch speichern. Laden Sie es also als Python-Datei und Sie erhalten den gesamten Quellcode. Also das Python-Skript. Und plus diese Zeilen, aber mit einem Befehls-Hashtag. Und Sie können es als ganzes Skript ausführen. Ich hoffe, dir gefällt das. Ich weiß, das war ziemlich viel zu verdauen. Und wenn Sie Fragen haben, stellen Sie sie bitte. Ich würde mich freuen, dir helfen zu können. Ich hoffe, Sie haben viel daraus gelernt, und wir werden mit den nächsten Abschnitten fortfahren, sodass wir noch sehr interessante Dinge zu tun haben. Und wir sehen uns später. 206. 205. App 9: Django & Bootstrap Blog und Übersetzer-App +: Hallo, willkommen zu einem sehr informativen Vortrag, insbesondere über diejenigen, die daran interessiert sind, Webanwendungen mit Python zu erstellen. Wie Sie vielleicht wissen, wird Python für andere Zwecke verwendet als für die Automatisierung von Routineaufgaben in Ihrem Job Nehmen wir an, Sie möchten automatisch PDF-Berichte generieren, automatische E-Mails versenden usw. Dann können Sie Python für Datenanalyse und -visualisierung, Datenwissenschaft und maschinelles Lernen, aber auch für die Webentwicklung verwenden. Also Webanwendungen mit Python erstellen. Und hier möchte ich aufhören und Ihnen erklären, wie genau Python in der Webentwicklung verwendet werden kann in der Webentwicklung verwendet werden und welche Python-Web-Frameworks Sie verwenden sollten. Also habe ich gerade das Wort Web-Framework erwähnt. Also, was ist ein Web-Framework? Nun, mit Python können Sie Anwendungen entweder mit einfachem Python oder mit einem der Python-Web-Frameworks erstellen Anwendungen entweder mit einfachem Python oder mit einfachem Python oder , denen es sich im Grunde um Python-Bibliotheken handelt , die Sie mit PIP installieren Und diese Web-Frameworks erleichtern das Schreiben von Webanwendungen mit Python. Jetzt kann ich Ihnen sagen, dass das Erstellen einer Web-App ohne Verwendung eines dieser Web-Frameworks so ist, als würde man das Rad neu erfinden Denn wenn Sie kein Web-Framework verwenden, müssen Sie im Grunde den gesamten Code neu schreiben, den die Autoren dieser Web-Frameworks geschrieben dieser Web-Frameworks Stattdessen installieren wir einfach diese Web-Frameworks und verwenden dann diesen Code Das ist in den Web-Frameworks enthalten. Und dieser Code besteht normalerweise aus Dingen wie der Bearbeitung HDP-Anfragen und der Bereitstellung von Webseiten im Browser Also routinemäßige Aufgaben auf niedriger Ebene. Aber anstatt uns mit dieser Aufgabe zu befassen, möchten wir uns darauf konzentrieren , die Funktionalität und Praktikabilität unserer Webanwendung Also das Erstellen der Eingabefelder, zum Beispiel für unsere Formulare, Senden von Benutzern von einer Webseite zur anderen, also solche Dinge Sie sollten also ein Web-Framework verwenden. Ich denke, wir haben den Punkt klargestellt , dass Sie ein Web-Framework verwenden sollten. Die nächste Frage ist nun, welches der Web-Frameworks Sie verwenden sollten? Nun, es gibt viele Web-Frameworks für Python, aber ich werde mich nur auf drei davon konzentrieren, nämlich Flask, Jango und nur Pi Fangen wir mit FLASK an. FLASK ist ein Web-Framework, das normalerweise für die Erstellung kleiner Webanwendungen Nehmen wir zum Beispiel an, Sie möchten nur einen kleinen Übersetzer erstellen , von einer Sprache in eine andere übersetzt Denken Sie an Google Translate. Wenn Sie nur diese Webanwendung wollen, bei der die Leute zu Ihrer Domain gehen , sagen wir, translator.com, und Sie haben nur diese beiden Felder dort, geben die Leute den Text in einer Sprache in das erste Feld ein und erhalten die Ergebnisse Also die Übersetzung in der anderen Box. Also das wäre eine kleine App. Ein anderes Beispiel wäre eine App, in der Sie beispielsweise JPG-Bilder in PNG-Bilder konvertieren . Die Leute laden also ein Bild in JPG hoch oder umgekehrt. FLASK kümmert sich also um all das Hochladen und Verarbeiten im Hintergrund Im Hintergrund benötigen Sie natürlich neben FLASK wahrscheinlich eine Bildverarbeitungsbibliothek Sie müssen also Pip installieren, Flask installieren und vielleicht Pip CV Two installieren, also öffnen Sie CV, um die Verarbeitung Aber das Bereitstellen der Website zur Web-App wird mit FLASK erledigt FLASK erhält also das Originalbild und das Ausgabebild von OpenCV und stellt Ausgabebild zum Herunterladen Das sind also kleine Web-Apps. Verstehen Sie mich jetzt nicht falsch mit FAS, Sie können auch größere Webanwendungen erstellen und was ich mit größeren Webanwendungen meine Größere Web-Apps, ich meine Dinge wie, sagen wir, Sie haben eine Blog-Website, auf der Sie jede Woche oder etwa alle zwei Tage Blogs hinzufügen Sie haben also vielleicht mehrere Autoren , die Inhalte für Ihr Blog schreiben. Für diese Block-Website. Wir werden also verschiedene Blöcke haben, und all diese Blöcke müssen in einer Datenbank gespeichert werden. Nun, Flask kann das natürlich, aber Jango würde das besser machen Jango würde das besser machen weil es einfacher ist, mit Datenbanken mit Jango zu arbeiten , weil es ein besseres Abstraktionsniveau hat Mit FAS können Sie das also auch mit FAS machen, aber es ist mehr aber Sie müssen mehr Routineaufgaben für FAS erledigen. Und Jango würde es Ihnen auch ermöglichen, diesem Website-Projekt weitere Apps hinzuzufügen diesem Website-Projekt weitere Apps Also haben wir das Beispiel von Blöcken genommen. Sie werden Blöcke auf Ihrer Website haben, aber vielleicht möchten Sie eine weitere Funktion hinzufügen. Nehmen wir an, Sie möchten dort einen Übersetzer hinzufügen. So kann Jango auch einen Übersetzer erstellen. Zusätzlich zu dieser bestehenden Website. Aber wenn Sie nur einen Übersetzer alleine bauen wollen, dann wäre Jango übertrieben Was meine ich damit? Damit meine ich, dass Jango für kleinere Web-Apps mehr Arbeit benötigt, um ein Jango-Projekt einzurichten Es erfordert mehr Arbeit. Aber sobald Sie ein Jangle-Projekt eingerichtet haben, laufen die Dinge reibungslos Aber für kleinere Apps ist es gut, einfach eine Fask-Anwendung zu erstellen. Es ist sehr einfach, eine zu erstellen. Das ist also der Unterschied zwischen Jango und FASC. Jetzt kommt Just Pi. Just Pi ist ein sehr neues Framework. Und warum habe ich Just Pi in dieses Set von drei Web-Frameworks aufgenommen? Nun, Just Pi ist etwas ganz Besonderes. Was meine ich damit? Nun, mit FAS und Jango müssen Sie auch HTML und CSS kennen, um Web-Apps erstellen zu können , weil jede Webseite, die Sie im Internet sehen , auf HTML basiert Also der ganze Text und die Eingabefelder und Schaltflächen. All diese sind in HTML-Code eingebaut, was sehr einfach ist. Hab also keine Angst vor HTML. Es ist eine sehr leicht zu erlernende Sprache. Aber ich sage nur , dass Sie das Frontend einer Webseite nicht mit Python erstellen können . HTML ist also für das Frontend. Und dann soll CSS verschönert werden, um das Aussehen dieser HTML-Elemente zu verschönern Also die Textfelder, der Text, die Farben, all das kann mit CSS schöner aussehen CSS ist also auch eine Sprache , die auch sehr einfach zu erlernen ist Sie müssen also etwas CSS- und HTML-Code schreiben und diesen Code in HTML- bzw. CSS-Dateien speichern und diese Dateien in Ihre Web-App einfügen, sei es in Jango oder Flask Nun, hier kommt JSPI ins Spiel. JSPI können Sie Web-Apps erstellen, ohne eine Zeile HTML und CSS schreiben zu Aber Juspi ist sehr neu. Es ist ein neues Framework, ein Web-Framework. Und wie gesagt, das Gute an Jpi ist, dass Sie kein HML und CSS schreiben müssen, da JSPI einige spezifische Python-Objekte hat Nehmen wir an, es hat ein DIF zum Erstellen dieser Abteilungen, in das Sie Texte und ähnliches einfügen können, oder es hat ein Button-Objekt, ein Python-Button-Objekt, um eine Schaltfläche auf der Webseite zu erstellen Der Nachteil dabei ist natürlich, dass Sie nicht sehr flexibel sind, wie Sie es mit FLASK und Jango wären Auch hier würde ich sagen, dass Jpi auch für kleine Webanwendungen geeignet ist auch für kleine Webanwendungen geeignet Wenn Sie eine Blog-Website mit vielen Inhalten erstellen möchten, ist Just Pi nicht die beste Wahl Es funktioniert nicht so gut mit Datenbanken wie Jango oder FLASK Aber auch hier gilt: Wenn Sie nur eine kleine Web-App erstellen möchten und weder CSS noch HTML kennen, dann könnte Juspi besser sein als FLASK Das war also ein Überblick über drei Web-Frameworks für Python. Nun werden all diese drei Web-Frameworks im Kurs dieses Kurses behandelt. Wir werden also mindestens eine Web-App mit jedem dieser drei Web-Frameworks erstellen , und es mag verlockend sein, dass Sie sich nur die Videos des Web-Frameworks ansehen möchten , die Ihnen gefallen, aber ich würde empfehlen, keines dieser Web-Frameworks zu überspringen Das heißt, wenn Sie Webentwicklung mit Python betreiben möchten , ist es eine gute Idee, mit verschiedenen Web-Frameworks vertraut zu sein . Jedes der Frameworks macht die Dinge anders, sodass Sie viel über Webentwicklung lernen werden. Zum Beispiel macht FASC die Dinge etwas niedriger und roher, und das hilft Ihnen, die Webentwicklung aus einer tieferen Perspektive zu verstehen Webentwicklung aus einer tieferen Perspektive Aber dann lernst du etwas über Jango und wirst den hohen Grad an Abstraktion zu schätzen wissen, den Sie werden es zu schätzen wissen, wie einfach es ist, Änderungen an Ihren Web-Apps vorzunehmen Wenn Sie Jango wegen dieser hohen Benutzerfreundlichkeit verwenden. Jango versteckt also einige Dinge vor dir, was die Dinge einfacher macht, aber du wirst einige dieser Dinge nicht verstehen Deshalb solltest du auch Flask lernen. Und es macht auch sehr viel Spaß, Jus Pi zu lernen. Und ich würde Juspi vor allem jemandem empfehlen , der nicht daran interessiert ist, ein wichtiger Webentwickler zu werden Vielleicht sind Sie ein Datenanalyst, möchten aber einfach eine Web-App erstellen in der Sie einige Daten, einige Visualisierungen in dieser Web-App zeigen einige Visualisierungen in dieser Web-App In diesem Fall könnte Jus Pi tatsächlich die beste Wahl sein. Aber wenn du ein reiner Webentwickler sein willst, dann willst du Jangle und Flask lernen Wenn Sie dann eine Web-App erstellen müssen, können Sie einfach eines der Web-Frameworks auswählen, das für dieses Projekt am besten geeignet ist , oder vielleicht das Web-Framework , das Sie besser kennen Warum nicht? Ich hoffe das hilft. Ich rede später mit dir. 207. 206. Eine virtuelle Umgebung einrichten: Hallo. In diesem Video erfahren Sie, wie Sie eine virtuelle Python-Umgebung erstellen und verwenden. Was ist also eine virtuelle Python-Umgebung? Nun, es ist nur eine Kopie Ihrer Python-Installation. Also, mit anderen Worten, eine Kopie Ihres Python-Interpreters. Wenn Sie also Python von python.org oder von Anaconda herunterladen , Sie einen Python-Interpreter herunter Jetzt machen wir eine Kopie davon. Warum machen wir eine Kopie? Denn mit Python können wir verschiedene Programme schreiben. Und für jedes Programm müssen wir möglicherweise unterschiedliche Pakete installieren, also unterschiedliche Bibliotheken. Und normalerweise installieren wir diese Bibliotheken in unserer Python-Hauptinstallation. In dem Interpreter, den wir von python.org oder Anaconda bekommen haben , wird er auch als globaler Interpreter bezeichnet Aber indem wir für jedes Programm, das wir gebaut haben, eine Kopie erstellen, installieren wir Bibliotheken nur für Dies hat vor allem den Vorteil von Webanwendungen, denn wenn Sie eine Webanwendung erstellen, werden Sie sie später auf einigen Online-Servern bereitstellen Und wenn Sie eine Kopie des Interpreters erstellen und dann die Bibliotheken, die Sie in dieser Kopie benötigen, in dieser virtuellen Umgebung installieren Bibliotheken, die Sie in dieser Kopie benötigen, in , haben Sie eine übersichtliche Liste der Bibliotheken, die Sie installiert haben Sie können also eine Liste erstellen und diese Liste dann dem Server geben , auf dem Sie Ihre Webanwendung bereitstellen werden Dieser Server ruft also die Liste der Bibliotheken aus dieser Liste ab und installiert sie. Der Vorteil dabei ist, dass Sie mit Ihrer globalen Python-Installation viele, viele Bibliotheken hätten. Dieser Server müsste also all diese vielen Bibliotheken installieren . Was keine gute Idee ist. Warum also nicht einen Interpreter für jedes Python-Projekt haben einen Interpreter für jedes Python-Projekt Jetzt, wo wir unsere Jango-App erstellen, werden wir zunächst eine virtuelle Umgebung mit Visual Studio-Code erstellen zunächst eine virtuelle Umgebung mit Visual Studio-Code So machst du es. Zuallererst öffne ich Visual Studio-Code. Das ist also die Willkommensseite. Ich habe noch kein Projekt erstellt. Also werde ich ein Projekt erstellen, bei dem Sie im Grunde nur einen Ordner, ein Verzeichnis öffnen. Im Visual Studio-Code. Gehen Sie also zu Datei und dann zu Ordner öffnen oder öffnen, je nachdem , welches Betriebssystem Sie verwenden. Das kann also entweder ein offener oder ein geöffneter Ordner sein. Klicken Sie dort und suchen Sie dann einen leeren Ordner, den Sie vorher hätten erstellen sollen. Ich habe diesen leeren Ordner Jangoblock Translator erstellt. Sie sehen, es ist völlig leer. Also drücke ich auf Öffnen und der Ordner wird geöffnet. Hier siehst du hier in meinem Explorer-Baum auf Visual Studio-Code. Jetzt, wo wir den Ordner haben. In diesem Ordner werden wir also alle Dateien für unser Jango-Projekt ablegen , einschließlich der Kopie des Python-Interpreters Also die virtuelle Umgebung. Um diese Kopie zu erstellen, gehen Sie wie folgt vor. Zuallererst müssen Sie also ein Terminal öffnen und zuerst eine Überprüfung durchführen. Stellen Sie also sicher, welche Python Sie verwenden. In meinem Fall verwende ich also einen Befehl, Python 3.9 , und der öffnet Python. Das ist also ein globales Python, das auf meinem Computer installiert ist. Ich bin mir also sicher, dass dieser Befehl einwandfrei funktioniert. In Ihrem Fall könnte es nur Python ohne 3.9 oder Python drei sein. Es hängt davon ab, was Sie verwendet haben. Also, wo auch immer Sie es benutzt haben , ich werde diese interaktive Shell beenden. Das war also nur, um den Python-Befehl auszuprobieren. Jetzt weiß ich, dass das funktioniert, also kann ich Python 3.9 machen. Also keine Leerzeichen hier. Dann ein Leerzeichen, die Flagge, dann V, dann NV. Also, was ist das? Nun, VNV ist eine Bibliothek , die installiert ist. Standardmäßig ist es eine Standardbibliothek für Python. Es wird mit Python geliefert. Also benutze ich diese Bibliothek. Wenn Sie also diesen Befehl verwenden, Python 3.9 oder Python, und dann dieses Flag verwenden, bedeutet das, dass Sie diese Bibliothek als Python-Skripte ausführen werden . Und dann ist dieses Ende der Ordner , in dem die Kopie des Python-Interpreters abgelegt wird Drücken Sie also die Eingabetaste. Und Sie sehen sofort, dass N dieser Ordner hier erstellt wurde. Und wenn ich diesen Ordner erweitere, werden Sie sehen, dass sich hier mehrere andere Ordner befinden, und in dieser Ablage hier werden Sie sehen, dass wir die ausführbare Python-Datei haben . Das ist also eine Kopie von Python. Es kann entweder nur als Python oder Python Three oder Python 3.9 verwendet werden. Aber ich zeige Ihnen jetzt, wie Sie dieses Python anstelle eines globalen Python verwenden können. Also mach nichts mit diesem Ordner. Denn was wir jetzt tun wollen, ist, einen Standard-Python-Interpreter für dieses spezielle Visual Studio-Code-Projekt auszuwählen einen Standard-Python-Interpreter für dieses spezielle Visual Studio-Code-Projekt Um das zu tun, möchten Sie zur Befehlspalette gehen . Sie können das mit Tastenkombinationen tun, auf dem Mac wäre es Command Shift, P, drücken Sie alle drei gleichzeitig. Unter Windows wären es Strg, Shift, P, sodass dieses Feld angezeigt wird, und dann können Sie dort Select Interpreter eingeben Das wollen wir also mit dem Python Select Interpreter verwenden. Das sind Befehle. Klicke da drauf. Und du wirst diese Liste sehen. Ich habe also verschiedene Pythons in meinem System. Eine davon ist diese visuelle Umgebung hier, die ich gerade installiert habe, und das ist die, die ich wählen möchte. Also drück dort. Und jetzt solltest du hier unten sehen, dass Python 3.9 0.6 in meinem Fall mit diesem Ordner. N ist der Ordner. V ist die Bibliothek für virtuelle Umgebungen. Dies wird jetzt als Standard-Python verwendet. Bedeutet das? Nun, das heißt, wenn du jetzt Python hier eingibst, aber zuerst dieses Terminal schließt und ein neues öffnest, also um eine Aktualisierung von terminal, new terminal zu haben, wirst du sehen, dass jetzt vor diesem Tag hier, der mir sagt, ich soll hier etwas schreiben, ich habe das in Klammern Das bedeutet, dass diese virtuelle Python-Umgebung verwendet wird. Wenn ich jetzt einfach Python eintippe, Python 3.9 0.6 dieser wird Python 3.9 0.6 dieser virtuellen Umgebung verwendet. Lass mich aussteigen. Ich kann auch Python 3.9 eingeben und dasselbe wird verwendet. Jeder dieser Befehle hier, Python, Python drei oder Python 3.9. Stellen Sie also sicher, dass Sie das dort haben. Also, wie funktioniert das? Weil es wie Magie aussieht. Nun, es funktioniert so. Lassen Sie mich dieses Terminal wieder schließen und ein neues, neues Terminal öffnen. Sie sehen also, dass wir hier einen Befehl haben, der vom Visual Studio-Code ausgeführt wird vom Visual Studio-Code ausgeführt , wenn Sie ein neues Terminal öffnen. Es heißt also source, was ein Befehl zur Aktivierung der virtuellen Umgebung ist. Also Quelle und dann der Pfad zur Aktivierungsdatei. Sie sehen, es ist der Jangoblock-Übersetzer, das ist dieser Ordner N B Aktiviert. NBN aktivieren. Diese Aktivierungsdatei wird ausgeführt, und das ist der Befehl, der die Umgebung auf diese virtuelle Umgebung festlegt die Umgebung auf diese virtuelle Umgebung Das bedeutet auch, dass Sie Python sowohl von hier aus als interaktive Python-Shell verwenden können , als auch, wenn Sie jetzt eine Datei schreiben möchten. Sagen wir also, erstellen Sie eine Datei. Also sei vorsichtig hier. Ich werde Hello PY schreiben. Ich sage, seien Sie vorsichtig , denn was passiert, ist, dass diese Datei in meinem NV-Ordner erstellt wurde. Das ist also keine gute Sache. Sie möchten den F-Ordner nicht berühren. Also werde ich diese Datei löschen und neu erstellen. Um zu vermeiden, dass sich die Datei im Nfle befindet, sollten Sie zuerst die Esc-Taste drücken Dadurch wird der Fokus aus dem NF-Ordner entfernt Dann können Sie hierher gehen und die Datei erstellen. Jetzt siehst du, dass die Datei in diesem Stammverzeichnis erstellt wurde, also Jangle Block Translator Hello Dot PY Und wenn ich hier „Print Hello“ sage, dann ist das richtig. Und jetzt kann ich diese Datei mit diesen grünen Dreiecksohren mit rundem Boden ausführen diese Datei mit diesen . Drücken Sie darauf und die Datei wird mit der virtuellen Umgebung Python ausgeführt. Sie sehen hier also, was im Hintergrund passiert ist. Um es noch einmal zusammenzufassen: Die virtuelle Umgebung wurde verwendet, Die virtuelle Umgebung wurde als wir die Python-Shell öffneten. Es wurde auch verwendet, als wir die Python-Datei ausgeführt haben, und es wird auch verwendet, wenn wir Pakete von Drittanbietern installieren. Sagen wir also, PIP installiere Jango, um Jango zu installieren. Dieser Jango wird für dieses spezielle Python installiert, nicht für unser globales Python Und ich kann dir das beweisen, indem ich zu N und dann zu Lip gehe und du wirst sehen, dass Jango gerade zu den Drittanbieter-Paketen hier hinzugefügt wurde zu den Drittanbieter-Paketen hier hinzugefügt Also JangoT ist das, was wir gerade installiert haben. Um diese Warnung zu beseitigen, möchten Sie diesen Befehl möglicherweise wie vorgeschlagen ausführen . Python 3.9 oder Python direkt, PIP install, dash, dash, upgrade, PIP, um sozusagen das virtuelle PIP lokal zu aktualisieren Richtig. Und jetzt, wenn ich dieses Projekt schließe, öffne ich es wieder. Dann kann ich zu meinem vorherigen Projekt zurückkehren , indem ich entweder diesen aktuellen Abschnitt hier verwende, also darauf klicke, oder indem ich zu Datei, Zuletzt geöffnet gehe und das Projekt dort suche. Oder eine dritte Möglichkeit wäre, erneut zu Datei, Öffnen und dann wieder zu diesem Ordner zu wechseln, also zum Stammverzeichnis. Also das sind und hallo Punkt PY und drücke Öffnen. Und dasselbe Projekt wird wieder geöffnet, aber Sie müssen das aktuelle Terminal schließen und ein neues öffnen. Um die virtuelle Umgebung im neuen Terminal zu aktivieren, sehen Sie jetzt dieses Ende hier. Und natürlich können Sie diese Datei jetzt auch erneut ausführen, und die virtuelle Umgebung wird zum Ausführen und Abrufen der Ausgabe verwendet. So können Sie die virtuelle Umgebung im Visual Studio-Code verwenden . Danke. 208. 207. Django-Projekt erstellen: Hallo, willkommen zurück. In diesem Video zeige ich Ihnen, wie Sie ein Jango-Projekt erstellen Was ist ein Jango-Projekt? Nun, wenn Sie eine Web-App mit Jango erstellen, möchten Sie zunächst ein Jango-Projekt erstellen, bei dem es sich um eine Reihe von Dateien handelt, die automatisch von Jango eine Reihe von Dateien handelt, die automatisch von generiert werden Das werde ich dir jetzt zeigen. Das sind also die Projektdateien. Aber dann können Sie diesem Projekt Apps hinzufügen. Sie haben also ein Projekt, aber Sie haben möglicherweise mehrere Apps. In unserem Fall werden wir zum Beispiel ein Projekt haben, aber dann werden wir auch die Block-App und die Übersetzer-App haben . Also zwei Apps, ein Projekt. Lassen Sie mich Ihnen nun zeigen , wie Sie das Projekt erstellen. Dazu müssen Sie Jango installiert haben und vorzugsweise eine virtuelle Umgebung haben Ich habe dir im vorherigen Video gezeigt, wie man eine virtuelle Umgebung erstellt im vorherigen Video gezeigt, wie man eine virtuelle Umgebung Ich habe jetzt diesen Ordner, das Stammverzeichnis, den Ordner , der eine virtuelle Umgebung hat, die LOT-PY-Datei, die ich löschen werde , weil wir sie nicht mehr benötigen. Also habe ich Jango installiert. Das heißt, ich kann jetzt ein Projekt mit dem Befehl jango admin erstellen ein Projekt mit dem Befehl jango admin Jango enthält also einige Befehle, mit denen verschiedene Operationen mit Jango ausgeführt werden können verschiedene Operationen mit Jango ausgeführt werden Also Jango admin erstellt mit diesem Befehl zusammen mit dem Befehl start project ein Jangle-Projekt, und dann müssen Sie einen Namen für ein neues Verzeichnis angeben, das Jango erstellen wird und dann müssen Sie einen Namen für ein neues Verzeichnis angeben , das Sagen wir meine Seite. Und dann Leerzeichen und ein Punkt. Der Punkt bedeutet, dass der aktuelle Ordner , der Jangled Block Translator ist, ein Projektordner ist, sodass die Dateien in diesem Verzeichnis abgelegt werden Also führe diesen Befehl aus. Und dieser Ordner und diese Datei werden erstellt. Und dieser Ordner enthält einige andere Dateien. Also, was sind diese Dateien jetzt? Nun, wir haben diese Init-Datei, die eine leere Datei ist, und hier drin ist sie optional Vielleicht können Sie später Dinge platzieren, die sofort ausgeführt werden sollen, wenn das Programm gestartet wird, wenn die Web-App gestartet wird Also werde ich das jetzt lassen, wir werden es leer lassen. Und dann haben wir diese SG-Datei, sosg dot PY. Dies ist eine Konfigurationsdatei , die Sie möglicherweise später ändern möchten , wenn Sie Ihre Jangle-App auf einem SG-Server bereitstellen, und es gibt auch einen anderen Servertyp Es hängt also davon ab, wo Sie es einsetzen werden. Der andere Typ ist Wiz G Server oder Wiz G, wenn dir dieser hier gefällt Das ist also die andere Konfiguration, abhängig davon auf welcher Art von Server Sie Ihr Jango-Projekt so platzieren , dass es sich auf einem Online-Produktionsserver befindet , sodass es jeder sehen kann Und dann haben wir die Einstellungen dieser PY-Datei. Dies wird alle Einstellungen enthalten, also zum Beispiel die Zeitzone, den Ort der statischen Dateien wie Bilder und CSS-Dateien, wir werden diese behandeln. Also ändere diese nicht. Und dann haben wir die URL, das ist die PY-Datei. Dies wird im Grunde die URL Ihres Projekts enthalten, wie die URL gerootet werden soll und so weiter. Das war also meine Seite, und dann haben wir diese PY verwaltet. Das ist eine Datei, die Sie normalerweise nicht ändern, also wird sie so bleiben. Dies ist jetzt nützlich, wenn Sie Ihre neue Python-Website starten. Also haben wir gerade eine Jangle-Website erstellt und wir können sie sehen, sodass wir die App starten können , indem wir Python Manage ausführen, das ist PY Also führen wir diese Datei mit Python aus und verwenden das Serverargument Run. Führen Sie aus, dass wir diese Warnung haben. Wir werden das gleich beheben. Das ist also die Website URLNow. Wenn Sie Strg oder Command drücken und dann dort klicken , wird Ihre neue Website geöffnet Es gibt jetzt also nicht wirklich eine App und keine benutzerdefinierte App , da wir sie später hinzufügen werden Aber im Grunde bedeutet das , dass es funktioniert. Um die Ausführung der App zu beenden, sollten Sie am Terminal Control C drücken. Und jetzt diese Nachricht hier. Nun, diese Nachricht besagt, dass wir einen SQL-Befehl ausführen müssen. Nun, das ist eine gute Sache mit Jango, weil Sie nicht wirklich eine SQL-Abfragesprache ausführen müssen Sie können einfach Python Manage PY migrieren. Drücken Sie darauf und Jangle führt diese Abfragen für Sie aus. Im Grunde sind dies also Abfragen, die einige Standardtabellen, Datenbanktabellen, erstellen einige Standardtabellen, Datenbanktabellen, Sie können auch sehen, dass eine neue dbdt S Three-Datei erstellt wurde , als wir Python manage PY Migrate ausgeführt haben Mit diesem Befehl wurde also eine SQL-Datenbankdatei erstellt, und Jango verwendet standardmäßig SQL Three, aber Sie können auch Postgrad-SQL verwenden Aber das kannst du tun. Das können Sie ganz einfach auf dem Produktionsserver tun. Lokal ist es gut, SQLite Three zu verwenden, was nur eine Datei ist und alle Daten vorhanden sind, alle Tabellen Ihres Projekts werden da sein Dieser Befehl hat also diese Datei generiert. Außerdem wurden alle Änderungen angewendet, die für die Anfangsphase der JangoPject-Erstellung erforderlich waren Es wurden also einige Tabellen erstellt, und später möchten Sie vielleicht weitere Änderungen an Ihren Tabellen vornehmen Ich zeige Ihnen, wie Sie neue Tabellen mit Jango und nicht mit SQL erstellen neue Tabellen mit Jango und nicht mit SQL erstellen Mit Python ist es also sehr einfach. Und sobald Sie eine Tabelle im Python-Code erstellt haben, müssen Sie diesen Befehl ausführen. Das übersetzt also Ihren Python-Code in SQL-Abfragen. Sie müssen also keine SQL-Abfragen mit Jango schreiben. Sie müssen nur einen einfachen Python-Code schreiben . Ich zeige dir , wie das geht, wenn wir die App später erstellen. Im Moment kann ich Ihnen zeigen, welche Tabellen in dieser Datei erstellt wurden. Wenn Sie darauf doppelklicken, wird es nicht angezeigt da Visual Studio-Code keine SQLite-Datenbanken anzeigt Sie benötigen ein geeignetes Programm , um diese Datenbank zu sehen. Sie müssen es nicht sehen. Ich möchte Ihnen nur zeigen, welche Daten darin zu Lernzwecken enthalten sind. Also habe ich hier ein Programm namens DB Browser for SQL Light. Sie können bei Google danach suchen und es installieren oder einfach hier sehen, was ich tun werde. Sie benötigen dieses Programm nicht nur , um die Daten aus Neugier zu sehen. Sie möchten also die Datenbank öffnen. Also das ist DB Sculi, drei , dass wir die Datei haben. Sie sehen also, dass es hier mehrere Tabellen gibt. Das sind eigentlich Tabellen, die die Admin-Oberfläche betreffen . werden also noch keine Tabellen für Dinge wie Blöcke oder andere Funktionen erstellt Blöcke oder andere Funktionen , die wir für unser Jango-Projekt haben werden Dinge in Jango werden also in Datenbanken gespeichert, und Jango verwendet standardmäßig Culi Three, wie ich Ihnen bereits gesagt habe Jede dieser Tabellen enthält natürlich Daten, sodass Sie Daten durchsuchen und diese Tabellen durchsuchen können und Im Moment sind sie einfach leer, weil Sie sehen, es ist einfach leer. Wir haben der Admin-Oberfläche noch keine Benutzer hinzugefügt. Also, was ist die Admin-Oberfläche? Wie auch immer? Nun, lass mich den Server nochmal starten. Gehe auf die Website. Und wenn du zur URL gehst, also nach dem Port, machst du Slash und dann Admin Geben Sie ein, Sie werden dieses Login-Feld hier sehen. Sie benötigen den Benutzernamen des Administrators und das Passwort des Administrators. Derzeit haben wir noch keinen Admin-Benutzer erstellt. Das ist auch der Grund, warum Sie sehen, dass all diese Tabellen leer sind. Also keine Daten. Es gibt also Tabellen, aber es gibt keine Zeilen in diesen Tabellen. Später werde ich Ihnen zeigen, wie Sie einen Admin-Benutzer erstellen. Warum brauchen wir die Admin-Oberfläche überhaupt? Nun, wir haben gesagt, dass wir eine Website erstellen werden , die Blogs enthält. Nun, wer wird diesen Blogs Inhalte hinzufügen? Sind Sie der Entwickler oder vielleicht einige Autoren , die Inhalte schreiben? Also diese Autoren, es gibt zwei Möglichkeiten, diese Inhalte zu schreiben. Entweder gehen sie zu Ihrem Visual Studio-Code-Projekt und dann zeigen Sie ihnen die Python-Dateien mit dem Inhalt oder die HTML-Dateien, der Inhalt geschrieben wird, oder eine intelligentere Möglichkeit besteht darin, eine benutzerfreundlichere Oberfläche zu haben, in der Sie diese Inhaltsfelder haben und Optionen zum Ändern der Also Schaltflächen und Toolboxen und solche Dinge. Also ein echtes Textverarbeitungserlebnis wie Microsoft Word oder andere Textverarbeitungsprogramme So ist es für Autoren einfach, dieser Website kontinuierlich Inhalte hinzuzufügen . Also gibst du diesen Autoren und mir Login-Benutzernamen und ein Passwort, damit sie dann auf deine Website gehen und hinzufügen können, dass wir uns im nächsten Video die Admin-Oberfläche ansehen werden. Das hatten wir also vorerst. Danke fürs Folgen. Ich werde später mit dir reden. 209. 210. Datenbankmodell für die Blog-App erstellen: Hallo nochmal. In diesem Video werden wir unseren Modellen einige Codes hinzufügen , diese PY-Datei. Wie ich Ihnen erklärt habe, hat eine Seite, eine Webseite, ein Modell, eine Ansicht und eine CML-Vorlage Das Modell ist also in dieser Trio-Struktur niedriger. Deshalb werden wir mit den Modellen beginnen. Was wir erstellen müssen, ist eine Klasse, die einen Blockpost darstellt. Nennen wir das also einen Beitrag. Nun, Post ist kein einfacher Kurs. Post sollte eine Klasse sein, die vom Modellmodul erbt. Das macht diese Klasse also zu einer Modellklasse. Modul ist also eine spezifische Klasse, die von den Jango-Autoren, den Entwicklern von Jango, entworfen wurde und Datenfelder enthalten soll Was meine ich damit? Nun, wir haben zum Beispiel gesagt, dass wir ein Titelfeld wollen. Eine Webseite ist ein Titel. Wenn der Ersteller des Inhalts also einen Titel erstellt , wird dieser Titel im Titelfeld der Beitragstabelle gespeichert . Sie haben also gezeigt, dass ich Ihnen diesen DB Viewer gezeigt habe , ein Programm zum Anzeigen Daten, um die Daten einer SQL-Datenbank anzuzeigen. Die SQL-Datenbank ist also diese hier, DB Q drei, und dieser Beitrag wird eine neue Tabelle in der Datenbank db dot Sculi Three erstellen eine neue Tabelle in der Datenbank db dot Sculi Three Das sind derzeit die Tabellen, also gibt es hier keine Post-Tabelle, aber Sie werden sehen, dass eine erstellt wird , wenn wir diese Tabelle fertig stellen Also Titel ist jetzt Models Was ist ein Titel? Ist es ein Pflegebereich? Ja. Ich denke, dieser Typ würde zu einem Titel passen. Das ist also ein Datenbankfeldtyp, und er erhält ein maximales Längenattribut. Sagen wir, 200 Zeichen. Es wird also ein Lehrbuch geben, das bis zu 200 Zeichen für den Titel des Blogs zulässt bis zu 200 Zeichen für den Titel des Blogs Was haben wir dann noch? Inhalt. Also der Körper des Blocks. Also, hier würde ich mich nicht für das Feld Care entscheiden, weil das eher für Dinge mit kleinen Textstücken konzipiert ist . Das wäre eher wie ein Textfeld. Und das kannst du leer lassen. Und was sonst? Nun, Datum, Erstellt, vielleicht sollten wir Module Dot Date Time Field sein . Sie sehen also, dass dieses Modellmodul von Jango all diese Felder bereit hat Ein Datums-/Uhrzeitfeld wäre also jetzt automatisch hinzugefügt gleich true, was bedeutet, dass wenn der Inhaltsersteller einen neuen Block-Beitrag von der Admin-Oberfläche aus erstellt , also einen Titel, einen Inhalt schreibt Und dann wird es dort eine Schaltfläche zum Speichern geben die sie diese Schaltfläche zum Speichern drücken können und der Beitrag wird live geschaltet. Wenn sie drücken, wenn der Inhaltsersteller diese Taste drückt, wird diese Klasse instanziiert und generiert das aktuelle Datum und die aktuelle Uhrzeit, und das aktuelle Datum und die aktuelle Uhrzeit werden in das Feld Erstellungsdatum der Beitragstabelle in der Datenbank db Suli Three eingefügt das Feld Erstellungsdatum der Beitragstabelle in der Datenbank db Suli Die Datenbank hat mehrere Tabellen, pos ist eine der Tabellen, post hat Eines der Felder ist das. Okay, ich hoffe, das ergibt Sinn. Dann haben wir ein Slunk-Feld, das den Teil der URL nach der Domain aufzeichnet den Teil der URL nach der Domain Also, wie gesagt, wenn deine Domain example.com ist und es in deinem Blogbeitrag um Hunde geht, dann ist die Schnecke Slash Die vollständige URL wäre also example.com slash DGS. Und hier schreibt der Nutzer, der Ersteller der Inhalte, einfach Hund oder wo immer er will Der Ersteller des Inhalts gibt den Slug also in der Admin-Oberfläche ein , genau wie er es mit Titelinhalten und anderen Eingabefeldern dort tut Titelinhalten und anderen Eingabefeldern dort Also Slug wären wieder Models Punkt Slug-Feld. Es gibt also eine spezielle Klasse, die das Slug-Feld in Jangle darstellt und als Slug-Feld Geben wir vielleicht eine maximale Länge von 200 an. Es ist sinnvoll, keine sehr langen Schnecken zu haben. Auf diese Weise kann der Ersteller des Inhalts keine Slugs eingeben, die länger als 200 Zeichen sind Und es muss einzigartig sein, also einzigartig ist gleichbedeutend Wenn admin, also der Ersteller des Inhalts einen Slag eingibt, der schon einmal eingegeben wurde, würde das die Erstellung des neuen Slogs nicht zulassen , da Sie nicht zwei Seiten mit derselben URL haben können Ich würde alles durcheinander bringen. Daher lässt dieses Argument nicht zu, dass doppelte URLs erstellt werden Dann haben wir den Autor die Variablennamenmodule dieses Mal mit vier Punkten verfassen Warum? Weil wir diesen Wert aus einer anderen Datenbanktabelle beziehen werden , die bereits von Jango erstellt wurde, und wir können ihn von jangodt Ctrip dot abrufen von jangodt Ctrip Von Modellen importieren. Also von diesem Import, Benutzer, richtig. Das ist auch eine Klasse, du kannst sie sehen, wenn ich mit der Maus Und deshalb brauchen wir in den beiden Argumenten hier den Benutzer. Ohne die Klammer Im Grunde bedeutet ein Fremdschlüssel-Feldtyp also , dass der Wert dieses Datenbankfeldes aus einer anderen Datenbanktabelle stammt In diesem Fall handelt es sich um eine Benutzerdatenbanktabelle. Und dieses Feld erstellt auf der Admin-Oberfläche eine Dropdown-Liste in der der Inhaltsersteller zwischen verschiedenen Benutzernamen wählen kann . Es passiert also automatisch. Wir möchten jedoch einige Parameter zum Löschen des Verhaltens angeben , das beim Löschen des Benutzers auftritt. Dieser Benutzer wird also aus der ursprünglichen Datenbanktabelle gelöscht. Also kaskadieren, aber du brauchst das nicht, also lösche das und lass es einfach so Also, was bedeutet das? Nun, das bedeutet, dass, wenn ein Benutzer aus der Benutzerdatenbanktabelle gelöscht wird, auch die Benutzerbeiträge gelöscht werden. Das ist es, was Cascade tut. Ich lösche dieses Komma hier, und das letzte Feld, das wir hinzufügen wollen, ist Status, der Status des Beitrags, was Modellen dieses Integer-Felds entsprechen würde Auf der Admin-Oberfläche wird es eine Status-Dropdown-Liste geben , die zwei Optionen enthält Entwerfen und veröffentlichen. Der Ersteller des Inhalts könnte also wählen, ob diesen Artikel entweder als Entwurf oder als veröffentlicht speichern möchte. Das würde es also für Inhaltsersteller einfacher machen , Blogs zu organisieren, weil sie einen Artikel als Entwurf speichern könnten und wir dann in unserem Jangle Bedingung stellen könnten, solche Artikel, die den Status Entwurf haben, nicht zu veröffentlichen , sondern nur diejenigen, die den Status veröffentlicht haben Das wäre also eine gute Möglichkeit, zwischen den beiden Arten von Beitragsartikeln zu unterscheiden Wir müssen also Wahlmöglichkeiten haben, was einer Variablen entspricht, sagen wir, Status und was ist Status? Nun, Status muss eine Variable sein, die wir hier erstellen müssen. Also ein Status, der einem Sturz von zwei Stürzen entspricht. Einer wäre, sagen wir, null Forellen. Die andere wäre eine Veröffentlichung. Und der Standard wäre vielleicht Entwurf. Null steht also für Entwurf und Eins für Veröffentlichen. den Administrator und den Ersteller der Inhalte wird nun entweder Entwurf oder Veröffentlichung in der Drop-down-Liste angezeigt, und damit ist unser Kursbeitrag abgeschlossen Stellen Sie jetzt sicher, dass Sie diese Datei speichern, Datei speichern oder Command S oder Control S, und dann müssen Sie hier etwas tun Wir müssen dieses Modell auf unsere Datenbank anwenden. Also müssen wir einige SQL-Abfragen ausführen. Aber wie ich bereits erwähnt habe, müssen Sie SQL-Abfragen nicht explizit ausführen. Sie müssen lediglich zwei Befehle ausführen Python Manage Punkt PI führen Migrationen durch. Wenn Sie sich also das DB-Browserprogramm ansehen, Wenn Sie sich also das DB-Browserprogramm ansehen dem wir die Daten sehen, haben wir vorerst keine Tabellen namens Posts, auch wenn ich diese Aktualisierung aktualisiere, gibt es keine solchen Aber jetzt sehen Sie, was passieren wird, wenn ich diesen Befehl ausführe. Okay, hier passiert etwas, Migrationen wurden angewendet, also wurde die Datenbankstruktur geändert, und dann müssen wir einen weiteren Befehl hinzufügen, nämlich dass Python Punkt PY verwaltet und diesmal migriert Also diese und jene wenden wir SQUAR-Abfragen an, die diesem Modell entsprechen Wenn ich jetzt hierher gehe, aktualisiere, wirst du sehen diese Tabelle als Blockpost hinzugefügt wurde Der Name dieser Tabelle wurde also unter Verwendung des Anwendungsnamens Block und Unterstrich erstellt, Sol Jango macht das automatisch, und dann nach dem Unterstrich Post, was der Name des Moduls ist Wenn ich also diese Tabelle auswähle, siehst du jetzt, dass wir diese Datenbankfelder haben Hier sehen wir also alle Felder, die wir erstellen. ID ist ein Feld, das automatisch erstellt wird, aber wir haben Titelinhalt, Erstellungsdatum, Slog-Status und Autoren-ID. Richtig. Damit ist die Erstellung unseres Modells abgeschlossen. Jetzt müssen wir eine Ansicht erstellen. Lass uns das im nächsten Video machen. 210. 213. Aufrufe in Djago: Hallo. Zuvor haben wir eine HTML-Vorlage erstellt, die grundsätzlich für die Darstellung des Inhalts im Browser verantwortlich ist. Aber diese HTML-Vorlage sollte irgendwie mit dem Modell verbunden sein , das in der PY-Datei enthalten ist. Diese HTML-Vorlage enthält einige Variablen, die darauf warten, mit Inhalten mit Werten gefüllt zu werden Titel muss also aus der Datenbank kommen, aus der SQL-Datenbank, das ist diese Datei hier. Deshalb müssen wir einen Weg finden, die Vorlage mit dieser Datenbank zu verbinden. Und da in Python dieser Klassenbeitrag der Repräsentant dieser Datenbanktabelle ist , müssen wir Block that HTML mit diesem Klassenbeitrag verbinden . Hier bietet sich die Ansicht eines Zwischenhändlers an. Also gehen wir in Ansichten hinein und erstellen eine Ansicht. Nennen wir das Blockansicht. Du kannst es aufrufen, wo immer du willst. Das ist nur ein Name für die Klasse. Aber ich möchte diesen Namen von den anderen Klassen unterscheiden , damit du die Dinge leichter verstehen kannst. Also Klassenblockansicht. Es ist eigentlich eine sehr einfache Klasse. Sie sollte eine Modellvariable bekommen. Jango erwartet also von dieser Klasse, dass es eine Modellvariable gibt, und diese Modellvariable sollte auf den Namen des Moduls zeigen den Namen des Moduls , das mit dem Block verbunden werden soll Im Grunde haben wir also wieder eine Modulvariable und auch eine Vorlage Namensvariable. Das ist es also, was diese Klasse macht. Das ist alles. Es verbindet das Modell mit der Vorlage. Das Modell wird post sein, aber post ist kein importierter Name in diesem Namensraum, also müssen wir ihn aus Modellen importieren, post importieren. Sie sehen jetzt, dass der Beitrag verfügbar ist. Daher ist diese Zeile jetzt gültig. Und der Vorlagenname, alles was Sie tun müssen, ist einfach den Namen über die Vorlage zu geben, was Blog-Punkt-HTML ist. Und das ist alles. In Ordnung, so weit, so gut. Wenn wir den Server jetzt mit Python betreiben , verwalten Sie diesen PY Run-Server, aber seien Sie vorsichtig. Ich bin hier nicht in einer virtuellen Umgebung, also schließe das und öffne ein neues Terminal und verwalte erneut Python diesen PY Run-Server. Und manchmal bekommst du Fehler wie diesen hier, Templates Dear OS ist in den Einstellungen nicht definiert. Gehen wir also zu den Einstellungen, wir sind einfach hier, und wir brauchen offensichtlich OS die Betriebssystem-Standardbibliothek, die Verzeichnisoperationen mit Ordnern und Dateien durchführt. haben wir gebraucht, als wir die Variable Templates zuvor hier als Liebe deklariert haben. Speichern Sie die Datei und führen Sie sie erneut aus. Diesmal wurde der Server gestartet. Das ist also die Startseite, aber es gibt keine anderen Webseiten als diese. Wenn Sie beispielsweise zu Hunde gehen, erhalten Sie eine Fehlermeldung wegen Hunden oder Katzen. Natürlich haben wir nichts, weil wir keine Einträge in unserer Blocktabelle in der Datenbank haben . Im nächsten Video werde ich einige Dummy-Daten über ein Programm namens DB-Browser für SQL Light in unsere Datenbanktabelle eingeben über ein Programm namens DB-Browser für SQL Light in unsere Datenbanktabelle namens DB-Browser für SQL Light Wenn Sie dieses Programm nicht haben oder es nicht installieren möchten, ist das in Ordnung, da dieses Programm nur optional ist, aber Sie können es kostenlos installieren oder bei Google danach suchen Normalerweise möchten wir die Daten über Admin eingeben, aber nur zum Testen möchte ich jetzt schnell einige Daten haben, möchte ich jetzt schnell einige Daten haben damit ich Ihnen erkläre, was vor sich geht, und Sie verstehen, wie die Dinge funktionieren. Wir sehen uns also im nächsten Video. 211. 214. URL-Muster: Hallo. Zuvor haben wir eine Ansicht erstellt, bei eine Klasse handelt, die das Modell mit einer Vorlage verbindet. In diesem Video möchte ich nun einige Dummy-Daten in unsere Datenbanktabelle eingeben einige Dummy-Daten in unsere Datenbanktabelle Unsere Datenbankdatei ist also DQ drei und enthält mehrere Tabellen Ich möchte den DB-Browser für SQLite verwenden und dann die Datenbank öffnen Und dann ist das ein Stammverzeichnis und gehe zu db cul Three und doppelklicke dort Dann möchten Sie Daten durchsuchen und die Tabelle mit den Blogbeiträgen suchen Das sind also die Felder der Datenbanktabelle. Sie möchten sie etwas erweitern, um sie besser sichtbar zu machen, ebenso wie das Erstellungsdatum, Slug-Status des Beitrags, also Entwurf oder Veröffentlichung, und die Autoren-ID, die eine Zahl sein könnte Der erste Autor, der erstellt wird, hat also eine Vorstellung von einem und so weiter Lassen Sie uns also manuell eine neue Tabellenzeile eingeben. Wie ich Ihnen bereits sagte, sollte dies natürlich über die Admin-Oberfläche eingegeben werden. Aber vorerst wollen wir nur zum Testen zu dieser Schaltfläche gehen, drücken und schon wird eine neue Tabellenzeile eingefügt. Die ID wurde also automatisch generiert. Also für die erste Reihe wird es eine sein. Für die zweite wird es automatisch zwei inkrementieren. Zwei und so eins. Also lass uns etwas für den Titel hinzufügen wie Hunde und Inhalt. Hunde sind gut. Das reicht vorerst. Datum der Erstellung. Das sollte ein Format wie 2022 haben, 12 für den Monat, zehn für den Tag des Monats, Schnecke So wie das. Dogs and Jungle kümmert sich um die Erstellung der kompletten URL. Also example.com, es wird einen Schrägstrich hinzufügen und dann wird es den Hund nach dem Schrägstrich hinzufügen Status, das war Entwurf oder veröffentlicht. Sie sehen also, wir haben Null oder Einsen. Geben wir also eine für die veröffentlichte Autoren-ID ein, den ersten Benutzer der Datenbank, wir haben bereits einen Superuser erstellt. Dieser Benutzer hat also die ID eins. Richtig. Sobald Sie das getan haben, möchten Sie Änderungen in die Datenbankdatei schreiben. Ordnung, und dann können Sie einfach die Datenbank schließen und die Zeile ist da. Lassen Sie uns nun diesen Slug, diese URL , mit unserer Views Blockansicht verbinden URL , mit unserer Views Blockansicht Um das zu tun, musst du in deinen Blockordner gehen und mit der rechten Maustaste klicken und zu Neue Datei gehen und eine L dot-py-Datei-URL erstellen Und hier möchten Sie Import-Ansichten vom aktuellen Standort importieren. Also importieren wir das Views-Modul. Es ist eine Datei, aber wenn Sie Dinge importieren, die ein Modul sind, wird daraus ein Modul. So nennen wir es. Views ist jetzt hier verfügbar, und wir müssen auch etwas anderes aus der Jango-URL importieren, ein Modul, URL ist ein weiteres Modul des Jangoimport-Pfads Und wir brauchen jetzt diesen Pfad , der eine Funktion zum Erstellen einer Liste mit URL-URL-Mustern ist einer Liste mit URL-URL-Mustern Also teile ich das auf , weil es unterschiedliche URL-Muster enthalten kann Das erste Muster, an dem wir interessiert sind, wird also durch die Pfadfunktion erstellt Also, was ist das Muster? Nun, es ist Schnecke, Säule und nochmal Schnecke, mit dieser Klammer zum Öffnen und Schließen Wenn der Benutzer also eine bestimmte URL besucht, lassen Sie mich hier etwas aufschreiben Zum Beispiel example.com Slug, sie schreiben natürlich wie Hunde, aber Hunde, wir sagen Jango, er soll im Schneckenfeld nach Hunden suchen Also geht Jango zu unserer Tabellendatenbanktabelle und sucht in jeder Zeile nach Hunden in jeder Zelle Also wird es in jeder Zeile des Schneckenfeldes nach Hunden suchen Und wenn es eine Zeile mit Hunden findet, wird es Blockansicht ausführen, die Klammer löschen und Blockansicht als Ansicht markieren Also führe diese Klasse als Ansicht aus. Und wir müssen hier noch etwas anderes angeben, das wir später verwenden werden. Es ist ein Name. Was eine Zeichenfolge sein sollte, sagen wir, Blockansicht. Dies ist ein Name, den wir möglicherweise später benötigen, daher ist es eine gute Idee , ihn jetzt hier zu haben. Ich hoffe also, dass du mir bis jetzt folgst. Wir müssen auch etwas anderes in Bezug auf URLs tun. Sie sehen, dass es eine andere URL gibt, die eine PY-Datei ist, aber sie befindet sich auf meiner Website, die die Konfigurationen des Dschungelprojekts enthält, nicht die Jungo-Apps Diese Datei sieht also schon so aus. Sie wird automatisch von Jango erstellt, und hier ist diese hier auch eine URL-Mustervariable, genau wie diese hier, URL-Muster, URL-Muster Aber das will jetzt etwas über die URLs der Block-App wissen Bei jeder App, die Sie erstellen, möchten Sie also das URL-Muster hier deklarieren. Nach dem Komma erstellen wir also ein weiteres Listenelement , diesmal Pfad, es muss so aussehen Also eine leere Zeichenfolge, die das Home-Verzeichnis bezeichnet. Also wenn das Home-Verzeichnis besucht wird und dann etwas anderes nach dem Schrägstrich vom Benutzer in die Adressleiste des Browsers geschrieben wird vom Benutzer in die Adressleiste des Browsers geschrieben und etwas anderes von den Blogs definiert wird Blog ist der Name der App. Blockieren Sie also, dass der Ordnername hier reinkommt, URL. URL ist der Name der URL PyFleo, die Block-App. Also Blog-Punkt-URL. Du könntest hier auch etwas anderes schreiben. Du könntest zum Beispiel MyBlocks schreiben , in diesem Fall würde Jango Benutzer erwarten Kein example.com-Schrägstrich Dogs, sondern example.com-Schrägstrich myBlocksSlash sondern example.com-Schrägstrich Aber das wollen wir nicht, also lassen wir es so . example.com Schrägstrich DOG. Jetzt bekommen wir diesen Fehler. Include ist nicht definiert, und wir müssen es aus den Importpfaden und Include von Jungle URLs eingeben . Speichern. Stellen Sie außerdem sicher, dass Sie alle Dateien speichern. Also speichere das auch. Steuerelemente, speichern Sie auch die Ansichten. Also alles, was Sie mit diesem schwarzen Visual Studio-Code sehen , bedeutet, dass er noch nicht gespeichert wurde Schauen wir uns nun an, welche Fehler wir bekommen: Typ Objektblockansicht hat kein Attribut als Ansicht, schauen wir, was hier vor sich geht Das passiert in dieser Datei, also blockiert USPI den Schrägstrich URL PY, der hier steht Diese Klasse hat dieses Attribut also nicht . Lass uns einen Blick darauf werfen. Diese Klasse hat dieses Attribut natürlich nicht. Sie hat nur Modell- und Vorlagennamenattribute. Keine Methode, die als Ansicht aufgerufen wird. Das liegt daran, dass ich vergessen habe, von einer speziellen View-Klasse zu erben , die wir importieren müssen Von Jango aus also von Jangle Dot Vs Import Generic und dann von Generic aus können wir auf die Detailansicht zugreifen, ohne die Klasse für die Detailansicht zu löschen Also lösche die Klammer. Das bedeutet also, dass diese Klasse tatsächlich eine View-Methode Sie können also mit der rechten Maustaste klicken und zur Definition gehen. Und natürlich gibt es hier keine Methoden, aber es erbt von einigen anderen Methoden Wenn wir also zur Basisdetailansicht gehen, gehen wir zur Definition, das erbt auch von diesen beiden Also vielleicht hat View diese View-Funktion. Ja, wir haben es gefunden. Also das ist die Methode. Es gibt also eine Vererbungskette, und wir haben jetzt über unsere Blogansichtsklasse Zugriff auf diese Methode . Richtig. Speichern Sie diese Datei. Und jetzt ist es an der Zeit, unsere App auszuprobieren und Sie möchten zu dieser URL gehen Das ist also zu erwarten. Die Homepage ist also noch nicht konfiguriert. Wir haben keine URL-Muster, die Jangle sagen, was zu tun ist, wenn Leute die Homepage besuchen Was du stattdessen suchen solltest, ist einer deiner Blöcke. Also momentan haben wir Hunde, die Hunde schlacken. Erinnerst du dich daran? Ich habe es in die Tabelle eingefügt und wir erhalten diesen Fehler. Vorlage existiert nicht. Ein leicht zu behebender Fehler bei Hunden. Also hat Jango erkannt, dass wir einen Hundeeintrag in der Datenbank haben , denn wenn Sie es für Katzen versuchen würden, würden Sie einen weiteren Fehler bekommen Diesmal bekamen Sie also, dass die Seite nicht gefunden wurde, und Jango hat diese Muster ausprobiert und keine Schnecke für Katzen gefunden Hunde sind also etwas anderes, aber die Vorlage wurde nicht gefunden Also Blog-Punkt-HTML. Dies ist normalerweise ein Problem bei Fehlkommunikation mit Jangle Jango ist also nicht in der Lage , den Pfad von Blockpunkt-HTML zu finden den Pfad von Blockpunkt-HTML Also lass uns nachschauen. Blockpunkt-HTML ist hier korrekt. Die Ansicht hat den Namen also korrekt, und dann schauen wir uns die Einstellungen an. Vorlagen. Der Name ist hier korrekt. Das sieht also gut aus, aber wenn Sie hier nach oben scrollen, haben Sie die Template-Variable. Und das hat jetzt einige Parameter für Vorlagen. Und einer dieser Parameter ist DRS. Das sind also Schlüssel dieses Wörterbuches. Bend Derski. Der DrSki erwartet einen Wert, und derzeit ist es eine leere Liste, aber Sie müssen hier die Liste der Vorlagenverzeichnisse deklarieren die Liste der Vorlagenverzeichnisse In diesem Fall haben wir also nur eines, weil Sie mehr haben könnten, aber wir haben eines, also müssen wir das beim Speichern deklarieren und wir erhalten diesen anderen Fehler. Die Vorlage deer is not defined, natürlich, weil wir sie hier verwenden , bevor wir sie definiert haben Also schneide das von dort ab und setze es über seinen Verwendungszweck. also über dieser Template-Variablen Geben Sie sie also über dieser Template-Variablen einfach hier aus. Sicher. Und unser Server wurde unterbrochen, also wollen wir ihn erneut ausführen. Python verwaltet diesen PY Run-Server. Mal sehen, was wir dieses Mal bekommen. Gehe zum Browser. Und hoppla, wir kriegen den Block. Hunde, Hunde sind gut und bearbeite den Namen des Autors. Es funktioniert gut. Damit ist dieses Video abgeschlossen. Lassen Sie mich das zusammenfassen, damit Sie wissen, wo Sie bisher stehen Wir können die Bedenken bezüglich der Benutzer-URL ausräumen. Wenn sie also beispielsweise den Schrägstrich TOC von example.com eingeben, wird dieser URL-Punkt PY ausgelöst, wodurch die Ansichten und Module bereitgestellt Es verbindet also die beiden miteinander, um Daten aus der Datenbank abzufragen abzufragen Diese Daten werden mit geschweiften Klammern in der HTML-Vorlage in diese Variablen eingefügt mit geschweiften Klammern in der HTML-Vorlage in diese Variablen Und diese werden dann natürlich im Browser für den Benutzer gerendert Und wie Sie dieses Mal gesehen haben, habe ich gerade einige Daten manuell mit einem Drittanbieterprogramm eingegeben , das auf drei SQL-Datenbanken zugreift Aber normalerweise wollen wir, wie Sie in den nächsten Videos sehen, Daten über eine Admin-Oberfläche abrufen Also das werden wir als Nächstes tun. Wir werden die Admin-Oberfläche erstellen und dort einige Daten eingeben. 212. 215. Ansichten der Admin-Benutzeroberfläche erstellen: Willkommen zurück. Bisher konnten wir diese Webseite mit Jango erstellen und in diesem Video werden wir an der Admin-Oberfläche arbeiten Insbesondere werden wir eine Option hinzufügen, Blogbeiträge über die Admin-Oberfläche hinzugefügt werden können Dafür benötigen Sie also einen Benutzernamen und ein Passwort. Denken Sie daran, dass wir das zuvor erstellt haben, aber wenn Sie das vermissen , können Sie jetzt mit dem Befehl Python erstellen. Verwalte Punkt PY, erstelle einen Superuser. Ich habe das schon gemacht, also werde ich das nicht noch einmal tun. Deshalb werde ich den Server starten und zur Admin-Oberfläche gehen und mich mit meinen Anmeldeinformationen anmelden. Jetzt siehst du, dass wir hier nur neue Benutzer und neue Gruppen erstellen können , aber keine Beiträge. Was wir also tun müssen, ist, zum Code zu gehen und dann zum Blog und dann zu Admin PY zu gehen. Jetzt wollen wir also ein Modell erstellen. Hier wollen wir unsere Modelle registrieren, was das Postmodell in den Modellen PY ist. Also dieses hier, wir wollen das aus Admin PY importieren, also aus diesem Modell den Beitrag importieren. Dann wollen wir das mit Admin registrieren , die Seite, die sich mit Kleinbuchstaben registriert, und dann geht der Beitrag los. Ohne die Klammern, also nenne nicht post, sondern deklariere es einfach dort Speichern Sie diese Datei und überprüfen Sie die Admin-Oberfläche. Also aktualisiere, und du solltest jetzt Beiträge hier sehen. Wenn Sie also auf AD klicken, fügen Sie den Titel hinzu. Nehmen wir an, CATs Katzen sind auch gut. Die Schnecke könnten Katzen sein oder wo auch immer du willst. Überarbeitet den Autor und lässt ihn veröffentlichen. Sie sehen also, das sind alle Felder von Modellen, die PY mit den Titeln Content Slog, Autor und Status betitelt Also entwerfen oder veröffentlichen. Klicken Sie auf Speichern. Gehen Sie dann zum Browser und gehen Sie diesmal zu CATS, und Sie sehen, dass der neue Beitrag gerade da ist, so einfach ist das. Nun, das ist optional, aber wenn Sie möchten, können Sie hier einige Spalten hinzufügen , um einige Details zu diesen Beiträgen hinzuzufügen. Den Erstellern von Inhalten wird diese Ansicht also angezeigt, wenn sie Beiträge erstellen. Du solltest ihnen also die Arbeit erleichtern, damit sie hier an dieser Stelle neue Blöcke finden können . Zuallererst möchten wir sehen, dass der Name jedes Blogs Post-Objekt eins, Post-Objekt zwei ist. Das macht es sehr schwierig, den gewünschten Beitrag für den Ersteller des Inhalts zu finden . Wie können wir hier also den Titel anstelle dieses wenig hilfreichen Namens anzeigen den Titel anstelle dieses wenig hilfreichen Namens Aber zuallererst, woher kommt das? Was denkst du über das Post-Objekt? Es scheint mir, dass Post Post der Name der Model-Klasse ist. Das ist also eigentlich der Name dieser Klasse. Python, wenn Sie eine Klasse haben und sie einfach ausdrucken, diese Klasse ausdrucken, Python druckt einfach den Namen dieser Klasse aus. Ich glaube, das weißt du. Lass mich dir zeigen, was ich meine. Lassen Sie mich also eine Python-Shell öffnen und Sie haben eine Klasse. Nennen wir diesen Beitrag auch. Einfach bestehen. Wenn Sie also Post drucken, erhalten Sie diese Art von Ausgaben oder sagen Sie einfach Post, das Gleiche. Also versucht Jango, eine String-Repräsentation dieses Klassenposts zu bekommen eine String-Repräsentation dieses Klassenposts Aber wir können das ändern, indem eine magische Methode hinzufügen. Es heißt STR. Eigentlich heißt es Unterstrich, STR, Unterstrich, Unterstrich. Also doppelte führende und nachfolgende Unterstriche. Klammern steht self als erstes Argument, Spalte, und das sollte jetzt eine bessere Repräsentation dieser Klasse liefern , was wäre self self repräsentiert eine Klasse selbst, und title ist ein Attribut Dieser Titel wird ausgedruckt wenn die Pose ausgedruckt wird Also wenn ich das speichere, gehe ich zu Admin. Auffrischen. Wir erhalten die Titel der einzelnen Blogbeiträge, Katzen und Hunde. Wenn du hier nebenbei noch mehr Inhalt hinzufügen möchtest , solltest du zum Adminbereich gehen und hier eine neue Klasse erstellen. Nennen wir diese Klasse Post Admin, die von Admin Model Admin erben sollte Das ist also so, dass es keine Argumente braucht. Model Admin ist eine Art von Klasse, genau wie wir Modelle haben, die für normale Klassenmodelle modellieren. Wir haben spezielle Admin-Modelle, also erben wir davon, und diese erwarten jetzt eine Listenanzeigevariable, falls Sie diese übergeben wollen, die ein Tuple mit Zeichenketten sein sollte, und die Zeichenketten sollten die Namen der Modellfelder sein Also, was möchtest du dort nebenbei zeigen? Hier. Wir haben den Titel schon, also lassen Sie uns die Erstellungsdaten und den Autor zeigen. Ja. Lass uns das machen. Also Datum der Erstellung. Das ist der Name. Ja, Erstellungsdatum und Autor in Admint PY Author. Nein. Okay, das haben wir gemacht, aber das ist nur ein Kurs, der herumschwirrt. Jango weiß nichts über diesen Kurs. Also wollen wir Jango irgendwie sagen , dass Jango das Projekt diese Klasse berücksichtigen muss, also müssen wir diese Klasse registrieren Das versuche ich zu sagen. Also poste dort Admin, nur die Klasse. Du musst es nicht so nennen. Machen Sie dort etwas Platz für die Sichtbarkeit und speichern Sie es und laden Sie es erneut Und das ist die Ansicht, die wir bekommen. Ich weiß also, dass es nicht ideal ist, aber ich werde es reparieren. Das Datum, an dem der Beitrag erstellt wurde, und der Autor. Titel ist also verschwunden, denn wenn Sie diese Listenanzeigevariable angeben, ignoriert die Admin-Oberfläche den Klassennamen, sodass die Klassendarstellung hier nicht ausgedruckt wird, sondern alles, was Sie hier angegeben haben. Daher müssen Sie als ersten Titel diesen Namen hinzufügen. Die Reihenfolge der Saiten hier wird also von Jango respektiert. Jetzt haben wir also Titel, Erstellungsdatum und Autor Falls du dich fragst, warum das Erstellungsdatum für Hunde leer ist, nun ja, das liegt daran, dass ich, wenn du dich erinnerst, manuell ein RO für die Hunde eingegeben habe. Blogbeitrag, und offensichtlich habe ich das richtige Datumsformat nicht manuell eingegeben. Deshalb weiß Jango nicht, was er hier anzeigen soll. Aber wenn du einen Beitrag auf dem richtigen Weg über die Admin-Oberfläche erstellst , kann Jango automatisch das aktuelle Datum generieren, das war's für dieses Video Als Nächstes kümmern wir uns um die Homepage, da sie derzeit nicht existiert Lassen Sie uns die Homepage im nächsten Video erstellen. Sehen Sie hier. 213. 216. Erstellen der Homepage: Hallo, willkommen zurück. Zuvor haben wir zwei Blogbeiträge erstellt, Katzen und Hunde. Unsere Homepage funktioniert jedoch nicht. Wie fügen wir also eine Homepage hinzu? Lass uns das in diesem Video machen. Im Moment werden wir die Dinge einfach halten. Wir werden nur eine Homepage haben steht , dass dies eine Homepage ist. Aber später werden wir automatisch eine Liste von Blogbeiträgen auf der Homepage generieren . Lassen Sie uns vorerst nur eine einfache HTML-Seite , damit Sie das Erstellen neuer Seiten im Dschungel üben können. Oh, Sie wissen mehr oder weniger, wie die Dinge jetzt funktionieren, aber lassen Sie uns das wiederholen. Also wo fangen wir an? Beginnen wir mit der Erstellung eines Moduls, einer Ansicht oder einer HTML-Vorlage, sodass Sie möglicherweise immer noch nicht wissen, wo Sie anfangen sollen. Aber ich würde vorschlagen, dass Sie diesem Ansatz folgen. Denken Sie immer an den Benutzer. Also löse das Problem vom Benutzer aus. Was der Benutzer sieht, ist der HTML-Code. Dann gehen Sie in den Stufen nach unten, bis Sie das Backend erreichen, die Modelle oder die Ansichten. Beginnen wir also mit dem Aufbau der Seite, indem wir an den Benutzer denken. Daher müssen Sie eine HTML-Vorlage erstellen , um diese dem Benutzer zu zeigen. Gehen Sie also zu Vorlagen und klicken Sie mit der rechten Maustaste darauf und gehen Sie zu Newfle. Dann wird die Homepage normalerweise als Indexpunkt-HTML bezeichnet Dies ist eine Standardmethode, aber Sie können auch jeden anderen Namen schreiben, den Sie möchten Also werde ich das Indexpunkt-HTML behalten. Nochmals, das Tok, dann hast du HTML-Tags und solche Body-Tags. Lass uns hier etwas statischen Text schreiben. Das ist die Homepage. Aber wie kann der Benutzer diese HTML-Vorlage bekommen? Was machen sie? Nun, sie geben eine URL direkt in ihren Browser ein. Ich meine, sie könnten diese URL auch bei Google finden oder sie direkt in ihren Browser eingeben . Für uns spielt es keine Rolle, aber sie müssen irgendwie eine URL in ihren Browser eingeben, die wie example.com wäre. Das ist eine Homepage Also müssen wir zu den URLs unserer Blog-App gehen. Also diese URL, das ist PyFile, nicht die URL, das ist eine PY-Datei von meiner Site. Damit sind wir fertig . Wir sind reingegangen. Wir haben Jango von der URL erzählt, das ist PyIL unserer App und das ist alles Wir schließen das jetzt und arbeiten an der App-URL. Also die Blog-URL, die diese Liste von Path-Funktionsaufrufen enthält. Diese Funktion wird also mit zwei Argumenten aufgerufen, einem hier, einem hier , drei, und einem dritten hier drin. Jetzt müssen wir also einen weiteren Aufruf hinzufügen. Pfad. Diesmal ist es nur eine leere Zeichenfolge. Vorher, nach dem Domainnamen, hatten wir den Slug. Aber jetzt, nach dem Domainnamen, haben wir nichts mehr. Also lass es einfach eine leere Zeichenfolge da. Ein Komma Oh, jetzt haben wir Ansichten. Okay? Also gehen wir zu unserer Roadmap über, eine Seite zu veröffentlichen Also Views, wir wollen jetzt eine weitere Ansicht in Views PY erstellen. Also lass es uns einfach zuerst hier schreiben. Wir werden es Home View nennen. Homeview Dots View wird also die Methode dafür sein. Also müssen wir Aview aufrufen. Geben wir ihm einen Namen, damit wir ihn vielleicht später verwenden können Home Underscore-Ansicht, eine Zeichenfolge, richtig? Und dann erstelle eine Ansicht. Also eine neue Klasse. Die Startansicht der Klasse stammt aus der generischen Detailansicht. Eigentlich sollte es nicht daraus kommen, aber lassen wir es vorerst so. Und das Modell jetzt. Nun, diese Seite hat nicht wirklich ein Modell. Es braucht eigentlich kein Modell, denn seht ihr, das ist nur eine statische Seite. Es werden keine Daten aus einer Datenbank wie Blockpunkt-HTML abgerufen. Sie sehen, im Blog-HTML holen wir uns diese Daten aus der Datenbank Dies ist hier nicht der Fall, sodass Sie Ansichten ohne Modelle haben können Alles, was Sie hier tun möchten, ist Vorlagenname, der dem Namen Home entspricht, tut mir leid, Index-Punkt-HTML. Das heißt, wenn Benutzer diese URL aufrufen, ruft diese Ansicht diese Vorlage auf , sodass aufrufen, ruft diese Ansicht diese sie im Browser des Benutzers gerendert wird . Das ist es. Stellen Sie sicher , dass Sie speichern, diese PY verwenden, stellen Sie sicher, dass Sie die URL PY speichern, stellen Sie sicher, dass Sie das Indexpunkt-HTML speichern. Und dann probiere die Seite aus. Das ist also die Homepage, und sie scheint ein Problem zu haben. Jetzt tauchen also Probleme auf. Es heißt, dass in der Startansicht ein Abfragesatz fehlt. Sie müssen also das Home-View-Modell definieren. Das Problem dabei ist, dass dies in Ansichten nicht der richtige Ansichtstyp für Ansichten ist , die einfach eine Vorlage rendern, ohne Daten aus einem Modell abzurufen. Daher möchten Sie in diesem Fall stattdessen eine Vorlagenansicht verwenden. Speichern und aktualisieren. Und das ist die Homepage. Es funktioniert. Du kannst es sehen, wenn ich es vergrößere. Richtig. So können Sie also weitere Seiten hinzufügen. Und Sie können jetzt auch den Unterschied zwischen verschiedenen Ansichtstypen verstehen . Also Detailansicht und Vorlagenansicht. Vorlagenansicht bedeutet , dass Sie nur eine Vorlage rendern müssen , ohne Daten aus meinem Modell Dies ist eine komplexere Ansicht , in der Daten aus Modellen abzurufen. Dies ist eine komplexere Ansicht , in der Daten aus Modellen abgerufen und an Vorlagen weitergegeben werden. Im nächsten Video werde ich Ihnen zeigen, wie Sie einen weiteren Ansichtstyp verwenden, im Grunde dazu verwendet wird , eine Liste von Objekten zu erstellen, in unserem Fall eine Liste von Blogbeiträgen. Wir sprechen im nächsten Video mit dir. 214. 217. Erstelle die Info-Seite: Zuvor haben wir eine Homepage für unsere App erstellt. Jetzt wollen wir diese Homepage entwickeln und die Liste der Blogbeiträge auf der Homepage anstelle einiger statischer Informationen anzeigen die Liste der Blogbeiträge auf . Bevor wir also die Detailansicht für Blogseiten und die Vorlagenansicht für die Indexseite verwenden , möchten wir jetzt einen anderen Ansichtstyp verwenden , um eine Liste von Blogs anzuzeigen. Die Vorlagenansicht ist dafür nicht die beste Wahl. Daher können wir dies löschen oder wir können es behalten und für die Seite „Über uns“ verwenden. Nehmen wir an, unsere Website sollte eine Seite über uns haben , auf der Sie einige Informationen über das Unternehmen oder sich selbst schreiben können . Schauen wir uns also an, wie wir das ändern können. Lassen Sie uns mit dem Index, der HTML-Seite beginnen und sie in Ansichten in etwa umbenennen. Wir wollen den Index in about umbenennen, um den Namen der HTML-Vorlage widerzuspiegeln, und auch die Startansicht vielleicht in die About-Ansicht ändern und dann zu L Punkt py gehen und die Startansicht in About-Ansicht ändern, diese Klammern löschen und die Startansicht zur diese Klammern löschen und die Startansicht Und jetzt wollen wir der Seite „Über uns“ ein anderes URL-Muster geben Über uns“ ein anderes URL-Muster Wir sollten über einen solchen Schrägstrich sprechen. Speichern Sie eine URL, die PY ist, speichern Sie Ansichten, die PY sind, und das ist überall auf dem Server Oh, ich bin nicht in einer virtuellen Umgebung, also schließe das Terminal und öffne ein neues und drücke dann die obere Pfeiltaste, um den Server erneut auszuführen. Die Homepage ist jetzt also nicht mehr gültig, aber die Angabe, mit einem Schrägstrich zu enden, ist gültig Also sollte sie mit einem Schrägstrich enden. Andernfalls erhalten Sie eine Fehlermeldung. Aber diese Seite ist jetzt gültig. Also diese Seite, nehmen wir an, das ist die Info-Seite. Richtig, speichern Sie das, aktualisieren Sie es und wir sehen die Änderung. Es geht also darum, eine weitere Seite hinzuzufügen. Lassen Sie uns im nächsten Video die HTML-Seite mit dem Indexpunkt erneut mit neuen Inhalten erstellen HTML-Seite mit dem Indexpunkt erneut mit neuen Inhalten Ich zeige dir also eine Liste von Blogs. 215. 218. Blog-Beiträge auf der Homepage auflisten: Hallo. In diesem Video werden wir die Homepage hinzufügen und eine Liste von Blogbeiträgen auf dieser Homepage anzeigen . Fangen wir also noch einmal aus der Sicht des Benutzers an. Also wollen wir für den Benutzer einen Index dieser HTML-Vorlage mit einem Doctype, HTML-Tags und Body-Tags haben HTML-Vorlage mit einem Doctype, HTML-Tags und Body-Tags Was fügen wir dann hier ein? Also, Tags mit geschweiften Klammern und Prozentzeichen, und dieses Mal machen wir eine Liste mit vier Schleifen und vier Posts in Posts Und dann machen wir hier etwas, und dann beenden wir diese Schleife und vier hier drinnen, wir machen etwas anderes Ich erkläre dir, was Post-Liste ist und was Post auch ist. Aber im Grunde haben wir dann hier die Variablen, das könnten der Titel des Beitrags und der Inhalt des Beitrags sein. Und vielleicht nein, der Inhalt eines Beitrags wäre zu umfangreich, um ihn zu zeigen, aber wir könnten Autor sagen. Das wird also nur eine Liste von Blöcken sein. Wir wollen den Inhalt in dieser Liste nicht anzeigen , weil er zu viel wäre. Also Beitragstitel, Autor des Beitrags. Nun, was ist eine Beitragsliste? Beitragsliste ist eine Ansicht, die wir in Ansichten definieren müssen, die PY sind. Also noch eine View-Klasse. Liste der Klassenbeiträge, der Name muss sozusagen dasselbe Format haben wie dieser hier. Wir haben hier die Post-Underscore-Liste mit Kleinbuchstaben verwendet hier die Post-Underscore-Liste mit Kleinbuchstaben Jetzt müssen wir Post in Camel verwenden . Die Listen von P und L sind in Großbuchstaben Das erbt von der generischen Punktlistenansicht. Das ist also eine weitere Art von Ansicht. Wir hatten eine detaillierte Ansicht zum Rendern von HTML-Vorlagen, die Daten aus einem Modul abrufen. Wir hatten eine Vorlagenansicht, um HTML-Vorlagen ohne Daten aus einem Modell zu rendern , und wir haben diese Listenansicht, die auf das Rendern mehrerer Datenzeilen, in diesem Fall mehrerer Beiträge, spezialisiert ist . Dieser Klassentyp erwartet nun eine Abfragesatzvariable, die Post entsprechen sollte. Post ist das Modell. Also sei vorsichtig hier. Es ist nicht die Aussicht. Es ist nicht die Blogansicht. Es geht natürlich nicht um die Ansicht, es ist das Modell von Blogs, das Sie bei PY in Modellen finden können. Auf dieses Modell verweisen wir hier also. Wir versuchen hier die Objekte abzufragen. Also die Zeilen dieses Postmoduls. Ohne die Klammern wollen wir einen Filter anwenden und vielleicht alle Objekte abrufen, vielleicht einen Filter wie Status gleich eins anwenden , was für steht Lass es mich dir zeigen. Also Status, wir sprechen über dieses Feld. Wir wollen also diese Beiträge, diese Blogbeiträge, die den Wert Eins für den Status haben. Der Status hat entweder Nullen oder Einsen. Eins steht also für Veröffentlichen, Null steht für Entwurf Wir wollen dort also nur die Beiträge anzeigen , die Statuswert Eins veröffentlicht wurden. Und vielleicht möchtest du sie nach welchem Feld ordnen? Also haben wir vielleicht ein Datum erstellt . Also Datum erstellt. Das ist also die Beziehung zu den Modulen und die Beziehung zu den Vorlagen sind jetzt Vorlagen Nennen Sie Eagle HTML mit zwei Indexpunkten, richtig? Also haben wir die Vorlage erstellt, die so aussieht. Wir haben die Ansicht erstellt, müssen aber auch etwas mit der URL machen. Wir haben hier also einen Artikel, hier zwei Artikel. Wir brauchen hier ein Komma und fügen ein drittes Element hinzu, nämlich die Homepage Also eine leere Zeichenfolge. Und wir wollen von den Ansichten, die wir bekommen wollen, aber die Beitragslistenansicht, die Beitragsliste. Beitragsliste ist eine Klasse, also wollen wir sie als Ansicht haben. Rufen Sie die Methode also als Ansicht aus der Beitragsliste und geben Sie ihr einen Namen wie wen? Jetzt denke ich, dass wir bereit sind, den Browser auszuprobieren und die Homepage zu besuchen. Aber stellen Sie zuerst sicher, dass Sie alles speichern. Diese, die URL, die PyFle, der Index, die HTML-Datei und die Views, die PyFile Speichern Sie diese und sehen Sie, ob die App läuft, sie läuft. Also besuche die Homepage und es funktioniert. Also Hunde, Katzen, haben es getan. Ja, das sind die beiden Blogbeiträge. Nicht sehr ansprechend, aber das kannst du mit etwas HTML ändern. Zum Beispiel möchten Sie hier vielleicht den Titel in zwei H-Tags einfügen . Und der Autor, vielleicht in P-Tags. Also hier drin. Sag Reloads und es sieht ein bisschen besser Die Reihenfolge ist nun, dass die älteren Beiträge oben und die neueren Beiträge am Ende stehen Wenn Sie das also ändern möchten, ist das sehr einfach. Gehen Sie einfach zu Views that PY und Sie wollen den Abfragesatz ändern, die Reihenfolge nach, indem Sie einfach ein Minus hinzufügen , so dass das die Jango-Syntax ist, und dann aktualisieren, und Kats ist jetzt ganz oben, der neueste Blockpost Das sieht also gut aus, aber ich denke, hier fehlen zwei Dinge einen sollte jeder von ihnen einen Link haben , auf den der Benutzer klicken und zu diesem bestimmten Blockbeitrag wechseln kann . Und zweitens fehlt hier etwas Styling. Das sieht also ziemlich schrecklich aus. Wir müssen etwas Styling anwenden, und dafür werden wir Bootstrap verwenden Das ist eine CSS-Bibliothek, und sie macht einfach Dinge Webseiten sehen also viel besser aus. Als Nächstes fügen wir hier eine URL hinzu, die mit URL-Tags zu tun hat. Sie werden also lernen, wie man URL-Tags verwendet, und als Nächstes fügen wir etwas Bootstrap-Stil hinzu. Wir sehen uns 216. 220. Bootstrap zu Django hinzufügen: Hallo, willkommen zurück. In diesem Video erfahren Sie, wie Sie von hier zu diesem gelangen. Also werden wir mithilfe der Bootstrap-Bibliothek, einer CSS-Bibliothek , einige CSS-Stile hinzufügen mithilfe der Bootstrap-Bibliothek, einer CSS-Bibliothek , einige CSS-Stile Bootstrap macht es einfach, Ihre HTML-Dokumente zu stilisieren, und heutzutage ist es ein Muss, eine modern aussehende Website zu haben Gehen wir also dahin, wo wir es mit unserem Code gelassen haben. Dies ist der Index des HTML-Dokuments , das diese Webseite rendert, und mit diesem Dokument werden wir in dieser Vorlesung arbeiten Wir werden das tun, indem wir uns die Bootstrap-Dokumentation ansehen Versuchen Sie also, Bootstrap zu googeln, und das erste Ergebnis sollte die offizielle Bootstrap-Webseite sein die offizielle Bootstrap-Webseite Also ein paar Worte zu Bootstrap. Wissen Sie, CSS ist etwas, das normalerweise irgendwo in einem Ordner abgelegt wird , den Sie statisch nennen werden Sie erstellen also einen Ordner im Projektverzeichnis im Stammverzeichnis und nennen ihn statisch. Und innerhalb der statischen erstellen Sie normalerweise eine Datei wie Main Dot CSS. Und in diese Datei schreibst du etwas CSS-Code. Dieser CSS-Code sieht im Grunde so aus. Sagen wir P und dann haben Sie ein paar geschweifte Klammern wie diese, und dann sagen Sie zum Beispiel Farbe Blau und dann Schriftgröße 17 Pixel Das wäre CSS. Natürlich würde es, wie gesagt, in einer CSS-Datei platziert werden . Es gibt zwar auch eine Möglichkeit, diesen Code einfach einzufügen und ihn in das HTML-Dokument zu integrieren. So oder so, es macht dasselbe. Mit diesem Code erhalten wir zum Beispiel alle P-Tags und färbt sie blau in blau ein. Der Text wird also blau sein und die Schriftgröße des Textes wird 17 Pixel betragen, und so weiter, Sie haben andere Eigenschaften wie diese. Wenn wir jetzt Bootstrap verwenden , verwenden wir Code, der bereits geschrieben wurde Ich spreche also wieder über CSS-Code. Die Bibliothek hat also CSS-Code, und dann verwenden Sie diesen Code einfach, indem Sie auf etwas verweisen, das als Klasse bezeichnet wird. Wenn Sie zum Beispiel Bootstrap verwenden möchten und wir werden das tun, dann würden Sie sagen, dass Klasse gleich P hübsch ist Nehmen wir zum Beispiel an, dass dieser Absatz, dieser Code auch irgendwo einen Namen haben würde Also sagen wir P hübsch. Das wäre also in Bootstrap-Dateien , die wir installieren Und dann müssen wir in unserem Code nur auf diese Bootstrap-Klasse verweisen, um diese Attribute auf diesen Absatz anzuwenden , der in diesem Fall der Name des Autors wäre Sie werden es also in Aktion sehen. Lassen Sie mich das und das auch löschen. Richtig. Und gehen wir zurück zur Bootstrap-Website Es gibt also zwei Möglichkeiten , Bootstrap in Ihr Projekt aufzunehmen entweder um es zu installieren oder Sie können diese schnellere Methode mit JS Deliver verwenden diese schnellere Methode mit JS Und hier haben Sie die Anleitung, wie Sie Bootstrap einbinden können. Also müssen wir die CSS-Datei einbinden, die, wie ich Ihnen gesagt habe, gesamten CSS-Code enthält Also sollten wir diesen Code hier kopieren und einfügen. Ich kann hier einfach auf Kopieren drücken, um den Code zu erhalten. Und platziere es in den Head-Tags vor all den anderen Stylesheets. Also Headtags, wir haben hier keine Headtags, aber wir können sie erstellen. Kopf, so. Also dazwischen fügen wir den Link ein, mit einem Tag, Link-Tags, öffnen dort, schließen hier. Dann müssen wir auch die JavaScript-Datei platzieren. Also Punkt JS, du kannst es sehen. Und um das zu tun, müssen Sie das erneut kopieren. Unter Bundle gibt es also mehrere Optionen, aber Bundle ist die beste. Also kopiere. Und das musst du platzieren. Platzieren Sie also eines der folgenden Skripts am Ende Ihrer Seiten, direkt vor dem schließenden Body-Tag, direkt vor dem schließenden Body-Tag. Also einfach hier. Und das ist es. Speichern Sie nun diesen Index in der HTML-Datei, stellen Sie sicher, dass die App läuft, und besuchen Sie sie, und Sie werden bereits einen Unterschied bei den Telefonen feststellen Die Links sind also etwas hellblau und die Schrift ist größer Und so können Sie Bootstrap in Ihre App aufnehmen. Folgen wir nun noch einmal dem Tutorial. Also hier haben wir eine Starter-Vorlage. Es beginnt also hier mit diesem HTML-Tag vom Typ Dokument, HML-Lang-Deklaration und den Head-Tags Also werde ich das kopieren und das durch das ersetzen. Also das erste HML-Tag, dann haben wir die, das und das Metatags Wir haben diesen Link bereits eingefügt, sodass wir nur diese beiden Metatags benötigen Unter dem Head-Tag, hier unter dem Head-Tag. Also Meta Meta, der Link zu den Bootstrap-CSS-Dateien. Und der Titel, das ist optional. Es hat also nichts mit Bootstrap zu tun, aber wir können auch einen Titel angeben, nennen wir das Blockposts Die Titel-Tags befinden sich auch in den Head-Tags. Die Head-Tags schließen hier und hier, dann haben wir die Body-Tags. Hallo Welt, das ist optional. Hier haben wir das Skript , das wir bereits aufgenommen haben, dieses hier drin, also ist alles okay. Richtig. Also hier unten wird erklärt, was all diese Tags bewirken, falls du das lesen willst. Was ich jetzt tun möchte, ist Bootstrap zu benutzen. Das sind also die Anforderungen, die Links, die wir in die Metatags einfügen, aber jetzt wollen wir die eigentlichen Funktionen von Bootstrap nutzen Also die eigentliche Bibliothek. Was ich normalerweise machen werde, ist Bootstrap. Was Sie tun, ist, dass Sie ein Haupt-DIV-Tag haben Was dort beginnt und dort endet, wo dein Inhalt endet Also hier unten und ich werde das Div ausrichten. Also Div öffnen, Div mit einem Schrägstrich Div und den Klammern schließen mit einem Schrägstrich Div und den Klammern Also das ist unser ganzer Inhalt, richtig, was sich in dem widerspiegelt , von der Katze bis zur letzten, die hier gestorben ist. Und dieses Div sollte jetzt eine Klasse haben , die doppelten Anführungszeichen entspricht. Und in diese Anführungszeichen schreibst du Container. Dies ist eine der Hauptklassen von Bootstrap, und Sie sehen, dass ich die Seite und die Dokumente hier speichere und die Seite aktualisiere, Dokumente hier speichere und die Seite aktualisiere und wir sehen bereits einen Unterschied Was Bootstrap mit diesem Container macht, ist, dass dieser Container ein CSS-Code ist irgendwo in dieser CSS-Datei gespeichert ist, und dieser Container hat im Grunde einen gewissen Rand, gewissen Abstand zwischen dem Text und dem Bereich Die Seite reagiert also auch bereits. Wenn Sie es also sehen, bewegt es sich, es passt die Breite des Browsers Als Nächstes möchte ich jetzt für jeden der Beiträge Folgendes tun, also die Beiträge sind Katzenkot, also das ist ein Beitrag mit einem Link beim Namen des Autors, das ist ein weiterer Beitrag Also möchte ich für jeden dieser Beiträge eine weitere Abteilung erstellen. Also von dort bis vor Ende vier, also hier und vielleicht ist es eine gute Idee, sie einzuziehen, sie beim Tippen so auszuwählen, um sie einzuziehen. Im Grunde sind diese beiden also Teil dieses Div-Elements. Also das ist jetzt ein Element. Also, was ich tun werde, ist, eine Kartenklasse zuzuweisen . Also, wo kriege ich das her? Nun, in Bootstrap können Sie zum Beispiel sehen, ob Sie zum Layout gehen, wie Sie Ihre HTML-Dokumente organisieren, Sie sehen, Sie Container haben und Sie sehen, dass Sie hier die Container-Klasse haben, die wir bereits Wenn Sie dann zu Komponenten und dann zur Karte gehen, werden Sie feststellen, dass Sie Ihre Inhalte in dieser Art von Karten organisieren können Ihre Inhalte in dieser Art von All diese Elemente hier sind also eine Karte. Sie sehen Klassenkarte, und genau das mache ich auch hier. Also lege ich einen Beitrag in die Karte. Wenn ich das jetzt speichere und aktualisiere, siehst du, dass es um jeden Beitrag eine Art Rand gibt. Und das können wir verbessern, indem wir es auch zuweisen. Nach einem Leerzeichen hier machen wir drei, was für „imaginieren“ steht, um jedes dieser beiden Felder herum Stellen Sie sich also vor, 33 ist jetzt eine CSS-Einheit oder besser gesagt, eine Abstandsebene. Sie können also nachlesen, wie die Margen unter Dienstprogramme stehen sollten. Hier geht es um Abstände, also Abstände, Sie werden sehen, M zum Beispiel für Rand steht, und dann haben Sie die Ebenen. Also eins, zwei, drei, vier, fünf, es geht also darum, etwas Platz zu schaffen. Gehen wir nun zurück zum Kartenbeispiel hier. Dann haben wir also dieses Bild. Wir brauchen jetzt keine Bilder. Also dieses Bild hier, das brauchen wir nicht. Aber dann haben wir den Kartenkörper. Es gibt also ein weiteres Div in diesem Kartenklassen-Div. Also Div und wir holen uns das und wir platzieren es hier. Also so, wieder in Delle, diese beiden. Also, diese Klasse entspricht dem Hauptteil der Karte. Und dann haben wir noch einen anderen Kartentitel. Das ist also ein Titel der Karte , in unserem Fall wäre es Katzen und Hunde, was bedeutet, dass wir hier einen Titel hinzufügen könnten. Also schau mal, was ich machen werde, Div. Also das wäre Klasse gleich dem Kartentitel. Und drinnen würden wir diesen Titel posten. Ich weiß, dass ich das duplizieren werde, aber ich werde dir sagen warum Also poste den Titel und aktualisiere ihn. Also, ja, wir haben Katzen hier, Hunde hier. Aber es ist besser, vielleicht H zwei statt DIV zu verwenden. Also H zwei da, und vergiss nicht, das auch auf H zwei zu ändern. Es öffnet sich hier, es schließt sich hier. Also aktualisiere ich und das ist ein Titel, das ist ein Titel. Nach dem Titel hätten wir vielleicht den Text. Also dieser Text hier , der Kartentext bekommt. Ein Div. Und das wäre Post-Dot-Inhalt, richtig. Das ist also unser Text. Wir möchten etwas Text unter dem Titel anzeigen. Und das entspricht, wie gesagt , dem Kartentext. Speichern Sie die Aktualisierung, um die Änderungen zu sehen. Ja, der Inhalt ist also auch hier. Als Nächstes möchte ich diesen Link entfernen, indem ich ihn in eine Schaltfläche ändere. Sie sehen also, dass wir hier diesen Boden haben. Das ist also ein A-Tag und diese Klasse. Also, was können wir damit machen? Lassen Sie uns eine Klasse zuweisen, von der es BTN und dann BTN primär war. Lassen Sie uns das jetzt speichern und aktualisieren, um zu sehen, dass Katzen Katzen auch gut sind und die Schaltfläche Da es sich um eine Schaltfläche handelt, möchten wir den Titel des Beitrags hier nicht mehr anzeigen . Wir wollen so etwas wie „Mehr lesen“ anzeigen. Sicher, aktualisieren. Ja, sieht besser aus. Vielleicht möchten wir unter dem Inhalt ein Div hinzufügen. Vielleicht möchten wir ein anderes Div haben, in dem wir sagen, dass der Autor diesen Autor veröffentlicht, oder? Dieser. Und wir entfernen jetzt den P-Text, da wir keine zwei Autorenfelder wollen . Also entferne das. Und das wäre auch die Kartenklasse, die dem Kartentext entspricht. Sicher. Sieh dir die Änderungen an. Ja, Katzen, Katzen sind gut, um Texte zu verfassen und mehr zu lesen. Jetzt siehst du, dass diese Tauchgänge etwas zu nahe beieinander liegen Also das Inhalts-Div, das Autoren-Div, das Button-Div auch Wenn Sie das ändern möchten, können Sie Divs in Absätze umwandeln Also P statt DF P, P, P auch hier Sicher aktualisieren, und es sieht jetzt ein bisschen besser aus. Die Knöpfe sehen für mich ein bisschen groß aus. Das liegt daran, dass dieser Text hier ein H-Zwei-Element ist. Wenn Sie also möchten, dass der Text kleiner ist, möchten Sie die beiden H-Tags, das öffnende Tag und das schließende Tag, entfernen . Sicher aktualisieren, und es sieht besser aus. Die Seite reagiert auch sodass Sie den Browser verkleinern können Das ist ungefähr dieses Video. Im nächsten werde ich Ihnen die Jangle-Template-Tags vorstellen Ihnen die Jangle-Template-Tags Im nächsten Video erfährst du, worum ihnen geht. Wir sehen uns dort. 217. 222. Vorlagen-Vererbung: Hallo. Bisher haben wir mit unserer Website diese Homepage erstellt. Sie können es auf der Homepage sehen, und wir haben auch die About-Seite. Also Slash aboutSlash Das ist die About-Seite, die natürlich kein Bootstrap-Styling hat, weil wir das Styling nur auf den Index dieser HTML-Vorlage anwenden nur auf den Index Und wir haben auch die Blog-Punkt-HTML-Vorlagen, bei denen es sich um eine dieser Seiten für Katzen oder Hunde handelt Also drei Vorlagen, eins, zwei, drei. Jetzt müssen wir einen Weg finden, durch die Website zu navigieren Das ist zum Beispiel, wie geht man vor, wie kann der Besucher von dieser Seite zur Info-Seite gelangen? Nun, normalerweise wird dies über eine Navigationsmenüleiste implementiert , die sich hier irgendwo oben befinden könnte. Und du könntest auf den Link klicken und zu dieser Seite gehen. Das werden wir jetzt in diesen Videos machen. Wie können wir das umsetzen? Weil die Navigationsmenüleiste auf jeder Seite sein sollte. Eine Möglichkeit, dies zu tun, besteht darin, das Navigationsmenü zu erstellen, das mit HTML erstellt wurde. Eine Möglichkeit besteht darin, den HTML-Code für dieses Navigationsmenü auf jeder dieser HTML-Seiten zu codieren. Aber das widerspricht natürlich den trockenen Prinzipien, also trocken, was für „Wiederhole dich nicht“ steht. Deshalb werden wir die Vererbung von Vorlagen verwenden. Was ist Vorlagenvererbung? Nun, es funktioniert so. Die Komponente, die sich wiederholen wird. In unserem Fall wird die Navigationsmenüleiste also in einer einzigen Datei bleiben Und dann die anderen Dateien, bei denen es um Blog und Index geht, diese Dateien bekommen die andere Datei, in der sich das Navigationsmenü befindet. Und das wird als Vorlagenvererbung bezeichnet. Sehen wir uns also in Aktion an, wie es funktioniert. Klicken Sie also mit der rechten Maustaste auf Vorlagen und gehen Sie zu Neue Datei und schreiben Sie so etwas wie Basispunkt-HTML. Basis-HTML wird die Navigationsmenüleiste enthalten. Um nun ein Navigationsmenü in HTML zu erstellen, verwenden Sie das Nav-Tag Also öffne und schließe es, und dann hast du darin ein anderes Div geöffnet und geschlossen. Und in diesem Div haben wir die UL, die eine Liste von Menüelementen erstellt. Der erste Menüpunkt wäre also L I Right. Und dann haben wir noch einen. Also zu Hause, wir haben über uns. Ja, das ist alles. Also der erste Menüpunkt, der zweite Menüpunkt. Also das wäre für wen. Deshalb platzieren wir in dem ersten LI-Tag, der nach einer Liste sendet , einen Tag , der einen Link erstellt. Das Gleiche gilt für den nächsten hier, ein Tag, richtig? In der ersten befindet sich ein Etikett. Also genau hier sagen wir HRF, diese Eigenschaft, die als Wert in Anführungszeichen die URL zur ersten Seite haben wird , also dieses Tag URL. Einzelner Code. Nun, jetzt müssen wir uns die Blog-URL ansehen und den Namen der URL für die Homepage ermitteln, nämlich Home. Das gehört also hier rein, nach Hause. Das Gleiche tun wir für so about View. Lassen Sie uns das auch hier kopieren und in das erste H-Tag einfügen. Vorsichtig. Hier ist ein Leerzeichen, etwa bei Underscore-Ansicht Jetzt müssen wir etwas anderes tun. Wir müssen zu Indexpunkt-HTML gehen und vom ersten Body-Tag bis zur allerersten Zeile ausschneiden, sie ausschneiden und hier oben einfügen . Machen Sie etwas Platz und fügen Sie sie dort ein. Gehen Sie erneut, um den HTML-Code zu indizieren, und schneiden Sie erneut ab, beginnend mit dem schließenden HTML-Tag, einschließlich des schließenden Body-Tags, einschließlich des Skript-Tags von Bootstrap Schneide sie aus, gehe zur Basis des HTML-Codes und gehe bis zum Ende. Machen Sie etwas Platz, fügen Sie es ein. Jetzt wird Basispunkt-HTML das übergeordnete Element sein. Also haben wir über die Vererbung von Vorlagen gesprochen. Das ist jetzt das übergeordnete Element und der Index, dass HML das Kind ist, das das aus dem Basispunkt-HTML beziehen wird Eigentlich ist jede Seite, nicht nur der Index, sondern auch was HTML betrifft, Blockpunkt-HTML Alle Blogbeiträge werden also all diese Informationen aus dem Basis-HTML erhalten. Dadurch können wir Bootstrap auch auf jeder einzelnen Webseite anwenden Bootstrap auch auf jeder einzelnen Und jetzt müssen Sie jeder Ihrer Seiten, wie zum Beispiel dem Index, mitteilen , dass HTML erweitert werden muss, also sagen Sie, durch ein Template-Tag wie dieses, erweitern Sie einfache Anführungszeichen auf den Grundpunkt Also kopiere das und füge es auch in etwa HTML ein. Und auch hier müssen wir die Body-Tags darauf löschen und das einfach sagen und zu Blockpunkt-HTML übergehen. Löschen Sie außerdem Body-Tag, HTML-Tags, Doc-Tags, fügen Sie das ein, löschen Sie das schließende HTML-Tag und das schließende Body-Tag löschen, speichern, speichern. Dann gehen wir zu Basispunkt-HTML und am Ende, also nach dem Navigationsmenü, wollen wir wieder ein Template-Tag machen und sagen Inhalt blockieren. Und auch das Gleiche. Also ein Template-Tag und blockierter Inhalt. Also, was ist das? Nun, im Grunde, H-Webseite. Denken Sie also daran, was der Besucher auf der Website sieht. Sie sehen oben eine Navigationsmenüleiste, die hier drin ist, oder? Und dann sehen sie den Inhalt, bei dem es sich um den Beitrag über Katzen, den Katzeninhalt oder, im Fall von etwa, um den Inhalt der A-Seite handeln könnte sich um den Beitrag über Katzen, den Katzeninhalt oder, im . Unter dem Menü befindet sich also der Inhalt. Das ist also der Inhalt. Und jetzt müssen wir uns diesen variablen Inhalt merken und zum Beispiel diesen HTML-Code indexieren, und dann sagen wir darunter Inhalt blockieren. Und es endet wieder mit Blockinhalten. Das heißt, wie Sie sehen, wird das Basispunkt-HTML erweitert, sodass es die Daten aus dem Basis-HTML bezieht, und dann dieses Ding zwischen den Blöcken, die Inhalts-Tags von dort bis dorthin, werden irgendwie mit dieser Basis-HTML-Seite kombiniert, sodass es im Browser als komplette Seite gerendert wird mit dieser Basis-HTML-Seite kombiniert, werden irgendwie mit dieser Basis-HTML-Seite kombiniert, sodass es im Browser als komplette Seite gerendert Und hier geht es um die Vererbung von Vorlagen. Es ist ein bisschen schwer zu verstehen. Schauen wir uns also an, ob wir jetzt einige Fehler gemacht haben. Wir werden das Ergebnis sehen. Ja, natürlich. Es heißt also, erweitern, hast du vergessen, dieses Tag zu registrieren oder zu laden? Nun ja, erweitern liegt daran, dass Jangos darin nicht erkannt werden, weil es erweitert Blog-Punkt-HTML wird also erweitert, Basispunkt-HTML. Lassen Sie uns dasselbe für die anderen Seiten tun und diese ebenfalls speichern und speichern. Ja. Dies ist eine Base-Dot-HTML-Vorlage Suchen wir nach dem nächsten Fehler. Okay, nicht schlecht. Also wir sehen hier etwas, aber wir sehen keinen Text. Also gehen wir zurück und reparieren das. Ich basiere auf Punkt-HTML. Also hier haben wir den Link. Aber wir haben keinen Text. Also lasst uns dafür zu Hause sagen und dafür über uns. Also wenn aktualisieren. Und ja, wenn wir jetzt etwas sehen, lesen Sie weiter über uns. Es bringt uns zur Seite Über uns. Geh nach Hause. Über uns geht es nach Hause. Großartig. Wir sehen den Inhalt hier nicht, also korrigieren wir das für die Seite At HTML Weil wir es nicht sehen , weil wir diese Blockinhalts-Tags nicht haben diese Blockinhalts-Tags Also blockiere Inhalte hier und hier, aber dieser sollte mit Block, sicher, sehr frisch sein, und das ist der Inhalt eines Bootes. Nun, wenn du willst, dass das hübscher ist, musst du es natürlich in das div-Tag einfügen und Class Container, Safe, Refresh sagen , und jetzt geht es irgendwo dazwischen Und du kannst es auch noch besser machen. Das ist also ein Hauptunterschied , der alles enthält . Das wäre so etwas wie H zwei. Und dann könnten wir weitere Unterschiede mit Inhalten hinzufügen. Das ist der Inhalt wie dieser. Das Navigationsmenü sieht jetzt also nicht sehr hübsch aus, weil wir kein Bootstrap-Klassen-Stil auf dieses Element angewendet haben kein Bootstrap-Klassen-Stil auf dieses Element Sie haben also NAF ohne Klasse, D ohne Klasse, UL, LI und A, außerdem ohne Klassen, kein Bootstrap-Styling Also lass uns das im nächsten Video machen. Wir sehen uns dort. 218. 223. Bootstrap-Styling auf das Navigationsmenü anwenden: Wir kommen wieder. Lassen Sie uns dem Navigationsmenü jetzt etwas Styling hinzufügen. Also kehren wir zu Basispunkt-HTML zurück. Und der erste Artikel ist NOV. Zuallererst wollen wir all diese auswählen und sie eins und zwei einrücken Es sollte also unter dem Body-Tag eingerückt sein. Stimmt? Fangen Sie also mit NAV und der gleichen Klasse an, ich kenne einige Klassen von Bootstrap, und Sie können Beispiele auch online finden Also Nov Bar, es gibt an, dass es sich um einen Nov-Balken handelt. Verwenden Sie also das Nov-Balkenlicht im Navbar-Stil für die Farbe und das Hintergrund-BG-Licht, haben Sie etwas Schatten und dann müssen Sie auch angeben, dass Klasse eine Eigenschaft von NOV ist und auch nach dem Mantel, hier müssen Sie eine weitere ID angeben, die der Haupt-NOV entspricht hier müssen Sie eine weitere ID angeben, die der Haupt-NOV entspricht Das wird also von JavaScript von Bootstrap verwendet. Dann wird das nächste Div eine Klasse von Collapse Nova Collapse haben von Collapse Nova Collapse Das sind also verschiedene Klassen und eine Idee von Nov Boar Responsive Dann haben wir die UL-Klasse. Nvbnuvt. ML steht für Margin Left und hat einen Wert von zwei. Schließlich ist die LI-Klasse ein NOV-Item. Das ist also ein Menüpunkt und das war's. Speichern Sie das und sehen Sie , was sich ändern wird. Okay. Nicht schlecht. Nun, die A-Tags, damit die Links nicht besonders gut aussehen, aber der Balken selbst sieht mit einem Schatten gut aus. Lassen Sie uns also das Styling der A-Tags vornehmen. Also eine Klasse, die der Marke Navbar entspricht, sicher. Erneut laden. Zuhause sieht gut aus, aber über uns nicht Also lass uns dasselbe für den anderen so machen. Ja, es sieht gut aus. Ja, wir müssen es ein bisschen nach rechts stellen. Und eine Klasse P drei, die dem ersten A-Tag hinzugefügt wurde, sollte funktionieren. Also speichern, aktualisieren und schon geht es weiter nach rechts. P drei bedeutet also, dass Sie es diese A-Klasse herum auffüllen, und Sie sollten dasselbe für die anderen tun. Also P drei, speichern, aktualisieren. Das ist das Navigationsmenü. Jetzt, hier unten, wollen wir mehr Platz zwischen dem Navigationsmenü und diesem Inhalt haben. Lass uns das reparieren. Ich denke, das würde funktionieren, indem das Navigationselement zur Klasse des Navigationselements hinzugefügt wird. Wir könnten ein MB von drei hinzufügen. B steht also für Margin Bottom. Auffrischen. Und ja, jetzt ist es besser. Also ist jetzt etwas Platz unter dem Menü, der Navigationsmenüleiste. Und das war es auch schon. Ich hoffe, das macht Sinn, und ich werde dir später eine SMS schreiben. Danke. 219. 224. Demo der Django-Übersetzungs-App: Hallo, willkommen zurück zu einer weiteren Videoserie. In der Serie werden wir eine Übersetzer-Web-App mit Jango erstellen eine Übersetzer-Web-App mit Jango Diese Web-App, Jango-App, wird also Teil unseres Jango-Website-Projekts sein unseres Jango-Website-Projekts Die Website hat bereits eine Block-App, auf die wir über die Startseite zugreifen können Das ist also nur eine Skizze der Website. Und wir hatten auch diese Seite über uns, die auch Teil dieser Block-App ist. Nein, Translator wird eine zweite App sein , die wir dieser Jango-Website hinzufügen Und es gibt drei Gründe, warum ich diese Übersetzer-App in unser JangoPject Der erste Grund ist, das, was Sie bisher gelernt haben, noch einmal zurückzuspulen. Sie lernen also, wie Sie diese Block-App erstellen. Aber jetzt möchte ich den Prozess der App-Erstellung noch einmal durchgehen Prozess der App-Erstellung noch einmal , weil wir bereits eine App erstellt haben, aber wenn man eine weitere App erstellt, sieht man die Dinge aus einer anderen Perspektive und lernt besser, da bin ich mir sicher. Das ist also ein Grund, den Prozess der App-Erstellung zu überarbeiten. Der zweite Grund ist dann, etwas über Jango-Formen zu lernen , denn in dieser Jango-App werden wir zwei Textfelder haben In einem gibt der Benutzer den Begriff ein, die Sätze, die übersetzt werden sollen Und im zweiten Fall werden sie den übersetzten Text sehen. Also werden wir Englisch als erste Sprache und dann eine andere Sprache als übersetzte Sprache verwenden . Wir werden später über dieses Detail sprechen. Die Idee hier ist also, dass Sie etwas über Formulare lernen werden. In Jango, weil dieses Ding hier eigentlich ein Formular ist. Also ein Formular, das es Benutzern ermöglicht , einige Daten, etwas Text, einzugeben und dann eine Anfrage auszuführen, bei der es sich eine Post-Anfrage handelt Also posten sie einige Daten auf den Server. In diesem Fall wird es der Text sein, in den sie hier schreiben werden. Also wird der Server, Jango, diesen Text abrufen und eine Python-Bibliothek verwenden, um diesen Text in eine andere Sprache zu übersetzen Dann wird Jango die Daten an den Benutzer zurücksenden. Also das hier wird das Eingabefeld des Formulars sein, und das wird das Ausgabefeld des Formulars sein Auch hier war die Überarbeitung des App-Erstellungsprozesses ein Grund und das Kennenlernen von Formularen ein weiterer Grund Und der dritte Grund, warum ich diese Videos haben möchte, ist, Ihnen zu zeigen, wie Sie Inhalte verarbeiten, die der Benutzer an unsere Jangle-App sendet Ähm, also in diesem Fall wird es der Text sein, und du wirst sehen, wie man die Bibliothek organisiert , die diesen Text in Dateien verarbeitet , und wie man diesen Text bekommt und wie man ihn an den Benutzer sendet, denn mit unserer Block-App verarbeiten wir nicht wirklich Benutzerinhalte, aber dieses Mal werden wir Also mach dich bereit und ich werde in den nächsten Videos mit dir sprechen. Es ist hier. 220. 225. Der Schritt der Django-App-Entwicklung: Hallo. In diesem Video werde ich die Schritte erwähnen, die Sie unternehmen sollten, um diese spezielle Übersetzer-App zu erstellen. Und diese Schritte gelten auch für alle anderen Apps, die Sie erstellen möchten. , möchten Sie zunächst Was Sie also tun möchten, wenn Sie eine Idee oder einige Anforderungen zum Erstellen einer App haben , herausfinden, ob es möglich ist , diese bestimmte Web-App zu erstellen. Zum Beispiel wollen wir diese App erstellen, die, sagen wir, vom Englischen ins Deutsche übersetzt sagen wir, vom Englischen ins Deutsche Zuallererst möchten Sie die Frage beantworten, ob es möglich ist, einen Text zu übersetzen, also eine Zeichenfolge, die auf Englisch ist Kannst du es in einen deutschen Text übersetzen? Also füge ich noch einmal eine Saite ein, aber die deutsche Version dieser Originalzeichenfolge. Kannst du also Text mit Python übersetzen? Und dafür sollten Sie im Internet und vielleicht in oscoFMS recherchieren , bis Sie vielleicht ein Python-Paket finden, das leicht machen würde Oder Sie könnten auch Ihr eigenes Paket erstellen, was für diese spezielle Aufgabe eine Menge Arbeit bedeuten sollte , da das Übersetzen von Sprachen Also habe ich bei Google recherchiert und herausgefunden, dass eine gute Paketbibliothek dafür Google Trans ist, die im Grunde auf der Google Translate-API aufbaut auf der Google Translate-API Mit Google Trans können Sie also eine Zeichenfolge angeben und Google Trans erhält die Übersetzung von Google Translate und gibt eine Zeichenfolge in der Zielsprache zurück. Also Problem gelöst. Es ist möglich, über Python zu übersetzen. Wir haben also grünes Licht, um unsere App weiter zu erstellen. Als Nächstes möchten Sie eine leere Jango-App erstellen eine leere Jango-App , was wir im nächsten Video tun werden Und danach möchten Sie dem Top-Bottom-Ansatz folgen, der darin besteht , vom Standpunkt des Benutzers aus zu denken Anstatt also Ihre Module durchzugehen, ein Modell zu erstellen oder vielleicht eine Ansicht zu erstellen, möchten Sie das erstellen, was der Benutzer sehen möchte, nämlich die HTML-Vorlage Der erste Schritt wäre also, eine HTML-Vorlage zu erstellen, und dann diese Vorlage, dieser HTML-Code muss auf eine bestimmte URL gerendert werden. Als Nächstes möchten Sie also die URL Ihrer App konfigurieren , und danach möchten Sie die URLs verbinden und diese URL möchte eine bestimmte Ansicht auslösen. Als Nächstes möchten Sie eine Ansicht erstellen. Für die Ansicht wird im Grunde die in diesem Schritt erstellte HMLU erstellt und an diese URL gesendet Dann möchten Sie ein Modell erstellen, das die Daten enthält , die in die HDML-Vorlage eingefügt werden Und in diesem Schritt sollten wir die Struktur unserer Web-App bereits mit HTML erstellt haben unserer Web-App bereits mit HTML und das Textfeld ist bereit für Text Dann können wir diesen Text abrufen, damit wir diesen Text abrufen und ihn übersetzen und in eines der Textfelder zurückgeben können diesen Text abrufen und ihn übersetzen und . Das sind also die Schritte , die wir unternehmen werden. Im nächsten Video werden wir also die Jango-Web-App in unserem bestehenden JangoPject erstellen die Jango-Web-App in unserem bestehenden JangoPject Ich werde im nächsten Video mit dir sprechen. 221. 224. Eine leere App-Struktur für die Übersetzer-App erstellen: Hallo. In diesem Video werden wir eine neue App in unserem bestehenden Janga-Projekt erstellen eine neue App in unserem bestehenden Janga-Projekt Schauen wir uns zunächst an, wie die Website aussieht. also in meinem Terminal sicher, dass Ihre virtuelle Umgebung aktiviert ist. Meins liegt nicht daran, dass ich diese Klammer hier nicht vorne habe diese Klammer hier nicht vorne Aber wenn ich ein neues Terminal erstelle, das Plus-Symbol verwende oder zu EminalNW gehe , ist meine virtuelle Umgebung jetzt aktiviert, sodass ich Python sagen und diesen PY-Run-Server verwalten kann diesen PY-Run-Server verwalten Gehen Sie zu dieser Website, und so sieht die Website jetzt aus, und wir werden hier einen weiteren Menüpunkt haben, der die Übersetzer-App enthalten wird Also lasst uns an die Arbeit gehen. Lassen Sie uns die App erstellen, den Server daran hindern, mit Control C zu laufen und Python ausführen, Punkt PY verwalten, die App starten und der App dann einen Namen geben. Führen Sie zum Beispiel Translator aus und ein neues Übersetzer-Verzeichnis wird erstellt. Sie können es hier sehen. Es ist also im selben Verzeichnis wie Block. Block befindet sich im Stammverzeichnis. Translator befindet sich auch im Stammverzeichnis, wie Sie hier sehen können. Sobald Sie eine App mit der Start-App erstellt haben, möchten Sie diese App in den Einstellungen meiner Website registrieren. Gehen Sie zu den Einstellungen Punkt PY JangoPject-Einstellungen und Sie möchten zu Installierten Apps gehen Bevor wir hier bei der Erstellung der Blog-App einen Block hinzugefügt haben, möchten wir jetzt nach dem Komma ein jetzt nach dem Komma ein weiteres Element zu dieser Liste der installierten Apps hinzufügen Es ist also eine Zeichenfolge, und der Name ist oder Translator, ja Das sollte also den Namen deiner App und den Namen des Verzeichnisses hier widerspiegeln . Speichern Sie die Einstellungen, die ich mache. Und so erstellt man eine neue leere App in Jungo. Im nächsten Video werden wir mit der Erstellung unserer HTML-Vorlage beginnen . Also wir sehen uns dort. 222. 222: Zuvor haben wir in unserem Jangle-Projekt eine neue leere App erstellt . Der nächste Schritt ist nun. Dieser Schritt ist also abgeschlossen. Erstellen Sie eine leere Jangle-App. Die nächste besteht darin, HTML zu erstellen. Also, wie gesagt, was wir wollen, ist, dass wir hier einen neuen Menüpunkt haben wollen , den wir später erstellen werden, aber zuerst wollen wir die Seite erstellen. Dann fügen wir diese Seite zur Menüleiste hinzu. Die Seite wird also einfach sein. Es wird hier ein Textfeld und rechts ein weiteres Textfeld und irgendwo darunter eine Schaltfläche Es wird also erwartet, dass der Benutzer einen Text auf Englisch eingibt, und wenn er dann die Taste drückt, wird dieser Text sagen wir, ins Deutsche übersetzt Also werden wir Deutsch als unser Beispiel wählen. Natürlich können Sie die App später verbessern, indem eine Option hinzufügen, um auch andere Sprachen auszuwählen. Aber vorerst werden wir es einfach halten, uns auf Formulare zu konzentrieren. Das wird ein Formular sein , das wir erstellen werden. Beginnen wir mit der Erstellung einer HTML-Datei unter Vorlagen. Klicken Sie also mit der rechten Maustaste auf Vorlagen und gehen Sie zur Datei. Also neue Datei. Vielleicht wäre Translator Dot HTML ein guter Dateiname. Jetzt wollen wir diese beiden Textfelder und die Schaltfläche erstellen. Aber anstatt den HTML-Code hier einzugeben , während Sie sich das Video ansehen, kopiere ich einfach den Code, den ich bereits erstellt habe, und füge ihn hier ein und erkläre ihn Ihnen Damit es gut aussieht, füge ich jetzt auch den Link zum Bootstrap Quelle, damit die Textfelder gut aussehen. Und Sie finden diesen Code im Anhang zu dieser Vorlesung. Also speichere ich ihn und klicke dann mit der rechten Maustaste hier und gehe im Finder oder im Windows Explorer zu Reveal Dann kann ich darauf doppelklicken. Und so sieht es aus. Wir haben also diese beiden Textfelder, die vom Benutzer erweitert werden können vom Benutzer erweitert werden Der Benutzer kann hier Text eingeben, kann hier auch Text eingeben. Aber dieser hier wird im Grunde dazu dienen, die Ausgabe zu zeigen. Aber wie dem auch sei, der Benutzer kann dort auch Text eingeben und die Ausgabe ändern, wenn er möchte und so weiter. Und die Schaltfläche „Senden“ übersetzt diesen Text in diesen Also jetzt funktioniert es natürlich nicht. Erwarte nicht, dass dieser Button etwas tut , weil er nicht mit Jango verbunden Lassen Sie mich Ihnen erklären, was der Code macht. Also dieser Link hier ist nur vorübergehend in dieser Datei , weil wir ihn normalerweise nicht brauchen. Also werde ich es löschen. Wir brauchen es nicht , weil dieser Link bereits in Basispunkt-HTML ist . Also dieser hier drin. Und dieses Bootstrap-Stil wird auf alle Vorlagen angewendet , die Basispunkt-HTML erweitern Derzeit erweitert der Übersetzer HML diese Vorlage jedoch nicht Fügen wir also das Tag hinzu, das erweitert, sodass es in Anführungszeichen als Basispunkt HTML erweitert Und dann wollen wir den Text auch noch einmal machen und Blockinhalt sagen. Da und hier drin schließen und Inhalt blockieren. Einfach so. Diese Datei erhält also den Code von Base Dot ML, und dieser Code wird mit diesem Code kombiniert , um die gesamte Seite, einschließlich der Navigationsleiste, bereitzustellen. Also die Menüelemente auf der Webseite. Also das haben wir hier. Wir haben diesen Klassencontainer, das Haupt-Div, das alles enthält, also fängt es hier an und endet hier. Und im Inneren enthält dieses Div ein Formular. Das Formular beginnt also hier und es endet hier. Das Formular beinhaltet also sowohl die Textfelder als auch die Schaltfläche. Also das hier ist eine Reihe. Es fängt hier an. Es endet hier. Also im Grunde ist diese Zeile hier eine Abteilung, die all diese beiden Boxen und nochmal die Schaltfläche enthält . Und innerhalb dieser Division mit der Klassenzeile haben wir auch diese Division, die der erste Textbereich ist. Dieser Aufruf SM six definiert also, dass dies tatsächlich eine Spalte dieser Zeile dieser Zeile ist. Das ist also die erste Spalte, die diesem Textfeld entspricht , dieser Spalte hier. Und dann enthält die nächste Spalte, die hier ist, das andere Textfeld und die Schaltfläche Textbereich bedeutet hier also dieses Textfeld, und Eingabe mit der Klasse BTN bedeutet hier diese Schaltfläche. Also Textbereich, erster Textbereich, Textbereich, zweiter Textbereich und Eingabe der Schaltfläche. Das ist es. Also nochmal, das Formular hat jetzt, Sie sehen, es hat eine Aktionseigenschaft, die dieses Template-Tag hat , das ich hier geschrieben habe. Also, was hier vor sich geht , ist , dass, wenn die Taste gedrückt wird, also diese Senden-Taste gedrückt wird, etwas passieren wird. Und was passiert, ist, dass diese URL besucht wird. Das ist keine URL. Es ist der Name eines URL-Musters, das wir später erstellen werden. Sie werden sehen, wie das funktioniert. Und die Methode ist eine Post-Methode, was bedeutet, dass der Benutzer einige Daten sendet und erwartet, dass Datenprozess vom Server zurückerhält. Den Rest haben wir bereits erklärt. Also die Abteilungen und der Textbereich mit dieser Klasse Bootstrap-Klasse Zeilen bedeutet, dass es standardmäßig drei Textzeilen hat, also eine, zwei und drei Textzeilen Also die Höhe dieses Textbereichs. Dieser Name wird später verwendet, um auf diesen Textbereich von Jango zu verweisen , um den Text dieses Textbereichs abzurufen und ihn im Dschungel zu verarbeiten , sodass wir den anderen Textbereich und die Eingabeschaltfläche mit dieser Klasse von Bootstrap haben den anderen Textbereich und die Eingabeschaltfläche , der Typ ist submits, was bedeutet, dass, wenn diese Taste gedrückt wird, dieses Formular, das Formular gesendet wird Also senden wir die Daten, in diesem Fall den Originaltext des Benutzers, und value ist der Name der Schaltfläche. Also einreichen, einreichen. Und das war's. In Ordnung. Wir haben also HTML, aber wir müssen eine URL definieren , über die der Benutzer auf diese bestimmte HTML-Webseite zugreift. Lassen Sie uns also auch die URLs im nächsten Video konfigurieren. 223. Benutzereingaben über ein Formular erhalten und verarbeiten: Hallo, willkommen zurück. Zuvor haben wir diese Webseite erstellt, die gut aussieht, aber im Moment macht sie nicht viel. Welchen Text Sie auch immer dort eingeben, Sie drücken auf Senden und nichts passiert. Der Text verschwindet also. Also lasst uns das umsetzen. Aber zuerst müssen Sie die beiden HTTP-Anfragen verstehen , die hier stattfinden. Die erste HTTP-Anfrage erfolgt, wenn der Benutzer die URL eingibt, sagen wir example.com slash translate Slash oder diese IP des lokalen Hosts, wie es in diesem Fall ist, und das ist Und diese Anfrage wird von diesem URL-Muster bearbeitet, und natürlich auch von Diese beiden werden also zu einer URL zusammengeführt, nämlich example.com slash translate slash Es wird aber auch eine weitere Anfrage gestellt, und zwar, wenn der Benutzer die Schaltfläche Senden drückt Es wird auf eine andere URL zugegriffen, und das ist die , die Sie in Translator Dot HTML in dieser Zeile hier sehen . Sie sehen also, dass diese URL besucht wird, wenn die Taste gedrückt wird. Also Übersetzer-Ansicht, was wiederum dieselbe URL ist, also Übersetzer-Rezension, was dem Schrägstrich translataS von example.com entspricht, richtig? also die URL derzeit über eine GT-Anfrage wie diese aufrufen, wenn Sie einfach Ihren Browser aktualisieren oder die URL eingeben und die Submin-Schaltfläche drücken, wird der Benutzer zu derselben müssen wir ändern . Wir müssen die beiden Anfragen trennen und unterschiedliche Aktionen ausführen , je nachdem ob der Benutzer eine GET-Anfrage oder eine Post-Anfrage stellt. Wenn der Benutzer eine Post-Anfrage stellt, möchten wir den Text von hier abrufen und die großgeschriebene Version in diesem anderen Feld anzeigen Also lass uns das machen. Was wir tun müssen, ist, uns in unseren Ansichten zu unterscheiden. Wir müssen unterscheiden, ob Methode Request Dot um eine Post-Anfrage handelt. Wenn das der Fall ist, wollen wir den Originaltext oder den Eingabetext abrufen , den der Benutzer hier eingibt. Und wir bekommen es über das Anforderungsobjekt Dot Post und hier, was kommt hier rein? Nun, hier sollten wir den Namen dieses Textbereichs eingeben , der in meinem Fall mein Textbereich ist. Also hier geht mein Textbereich als Zeichenfolge hinein. Also, wenn das der Fall ist, tun Sie das, sonst geben Sie die Seite so zurück, wie sie ist. Also sonst heißt es, wenn es sich bei der Anfrage um eine Get-Anfrage handelt. Wenn es sich also um eine Post-Anfrage über die Schaltfläche handelt, holen wir uns den Originaltext aus dem Textbereich und drucken ihn aus, nur um zu sehen, wie er Originaltext aussieht. Andernfalls geben wir bei einer Abrufanfrage die Seite einfach so zurück, wie sie ist. Also Übersetzer-Punkt HTML. Speichern. Und schauen wir uns zuerst das Neuladen Und wir bekommen diesen Fehler. Es hat keine Attributmethode, weil es Methode sein sollte. Es tut uns leid. Speichern und erneut besuchen. Translate ist unser UL Translate. Und lass uns etwas schreiben, einreichen. Und lass uns sehen, was wir jetzt im Terminal bekommen. Ich sehe also, dass AAAA ausgedruckt ist, oder? Diese Zeile wurde ausgeführt. Aber danach haben wir einen Fehler bekommen. Es heißt, dass der Übersetzer die Übersetzeransicht ansieht. Diese Ansicht, diese View-Funktion hat also kein HTTP-Objekt zurückgegeben, was wahr ist. Wir erhielten also eine Post-Anfrage , als wir auf die Schaltfläche „Senden“ drückten, aber hier wurde nichts zurückgegeben. Also sollten wir etwas zurückgeben. Und das ist auch ein Render-Funktionsaufruf , der eine Anfrage als Argument zur Übersetzung des HTML-Codes erhält. Und jetzt müssen wir hier auch noch etwas anderes übergeben, nämlich die Ausgabe. Bisher haben wir gesehen, dass das funktioniert. Wir haben die Texte des Benutzers erfolgreich abgerufen, aber wir wollen etwas mit diesem Text anfangen. Sagen wir zum Beispiel Ausgabe, Sie gehen zum Originaltext. wir zunächst an, wir setzen es, wie Nehmen wir zunächst an, wir setzen es, wie gesagt, in Großbuchstaben Was wir dann hier in der Render-Funktion übergeben , ist ein Wörterbuch, das so aussieht Sagen wir Ausgabe, Text. Das ist also ein Schlüssel, eine Zeichenfolge, und sie hat als Wertausgabe. Also diese Variable, der Text in Großbuchstaben. Jetzt speichern wir das und gehen dann zu Translator Dot HTML. Und in diesen zweiten Textbereich, zwischen dem ersten Angriff auf den Textbereich und dem Angriff auf den schließenden Textbereich, fügen wir hier eine Vorlagenvariable ein, es sich um ausgegebenen Text handelt. Also dieses Ding hier drin. Also der Wert davon, das wird in diesen Textbereich eingefügt. Mal sehen, ob das funktionieren wird. Stellen Sie also eine Get-Anfrage. Wir erhalten die Webseite erfolgreich, schreiben etwas, reichen es ein und wir erhalten die großgeschriebene Version dieses Textes. Es funktioniert also Diese großgeschriebene Version des Textes stammt also aus diesem Ausgabetext Und so benutzt man HTML-Formulare mit Jango. Bevor wir dieses Video schließen, möchte ich Ihnen ein Problem mit unserer App zeigen . Wie Sie sehen können, schreiben Sie hier einen Text, senden ihn ab, aber der Originaltext verschwindet, nachdem der Benutzer den Text eingereicht Also lass uns das beheben. Es ist sehr einfach zu machen. Lassen Sie uns zunächst verstehen, warum das passiert. Wenn Sie also erneut zu Views gehen, müssen wir „Ich bitte um Gleichberechtigte“ posten, und in diesem Fall senden wir die Ausgabe zurück an die Seite, aber wir senden nichts anderes Das wird also ein neues Rendering sein. Es werden die Textfelder, die beiden Textbereiche des Übersetzer-HML, gerendert , aber einer davon bleibt leer , da dies sozusagen eine Aktualisierung der Seite sein wird Wenn Sie also den Originaltext auch auf der Webseite haben möchten , müssen Sie hier im Wörterbuch ein neues Paar hinzufügen hier im Wörterbuch ein neues Paar Nehmen wir an, das wäre Originaltext. Als Zeichenfolge. Der Schlüssel und der Wert davon wären also Originaltext, die Variable. Also dieser hier drin. Kopiere diese Zeichenfolge und gehe zu Translator Dot HTML. Und hier, im ersten Textbereich, platzieren wir eine Vorlagenvariable. Darin befindet sich der Originaltext. Also genau wie dieses Textfeld haben wir auch dieses. Und so einfach ist das, speichern Sie im übersetzten HTML, speichern Sie auch die Ansichten H Punkt PY und der Server wird neu gestartet Also jetzt wurde der Server neu gestartet. Wir wissen also, dass die Änderungen jetzt übernommen werden Aktualisieren Sie die Seite, schreiben Sie etwas hier, senden Sie sie ab, und sowohl der Originaltext der Ausgabetext verbleiben auf der Webseite Damit ist der Jango-Teil abgeschlossen. Wir haben also eine funktionierende Web-App. Und jetzt müssen wir den Text nur noch mit einem anderen Paket übersetzen, anstatt ihn mit Großbuchstaben ihn mit In diesem Fall werden wir das Google Trans-Paket verwenden das Google Trans-Paket Also lass uns das im nächsten Video machen. Danke, dass du mir bisher gefolgt bist. Wir sehen uns dort. 224. Fertigstellen der Übersetzer-App: Willkommen zurück und lassen Sie uns mit dem letzten Push unserer App beginnen. Derzeit gibt diese App die großgeschriebene Version eines Textes zurück die großgeschriebene Version eines Textes Lassen Sie uns nun den Text übersetzen, den der Benutzer hier eingibt. Dazu öffnen wir ein neues Terminal, um Google Trans zu installieren. Derzeit gibt es jedoch ein Problem mit dieser Bibliothek, die Installation einer Alpha-Version der Bibliothek behoben werden kann durch die Installation einer Alpha-Version der Bibliothek behoben werden kann. Sie können die Alpha-Version mit dem, was ich gerade eintippe, installieren . Sie könnten also versuchen, haben Sie keine Angst davor, eines von beiden auszuprobieren. Also entweder Google Trans oder was auch immer funktioniert. Wenn Sie also eine installieren und ausprobieren, funktioniert sie nicht. Installieren Sie dann die Alpha-Version, und diese Alpha-Version überschreibt die vorherige Version, die Sie installiert haben. Also kein Schaden angerichtet. Was auch immer funktioniert, benutze es. Für mich habe ich herausgefunden, dass diese Version funktioniert. Also 4.0 0.0 Dash R C eins ausführen. Und ja, es wurde installiert. Dann kann ich versuchen, es zu benutzen. Also habe ich es für meine virtuelle Umgebung installiert. Also sei vorsichtig damit. Sie sehen NFR. Es wurde aktiviert, als ich es mit PIP installiert habe. Also jetzt kann ich das ausprobieren. Ich kann eine Python-Shell öffnen. Und das funktioniert so, dass Sie die Übersetzerklasse aus Google Import importieren. Dann erstellen Sie eine Übersetzungsinstanz. Wenn Sie diese Übersetzerklasse verwenden und dann aus dieser Instanz herauskommen, sagen Sie Übersetzung, die Text gleich übersetzt. Nehmen wir an, wie hast du Python in Anführungszeichen gelernt? Es wird also als Zeichenfolge und als Test für die Zielsprache geliefert . Sagen wir DE für Deutsch, du findest diese Abkürzungen bei Google, also Sprachabkürzungen D steht für Deutsch. Und wenn Sie einen Text daraus aufrufen, erhalten Sie die deutsche Version dieses Begriffs dieses Satzes. Die Bibliothek arbeitet also für mich. Jetzt möchte ich diesen Code irgendwo in meiner Jangle-App in der Übersetzer-App schreiben in meiner Jangle-App in der Übersetzer-App In solchen Fällen möchten Sie also eine separate Datei in der Übersetzer-App erstellen eine separate Datei in der Übersetzer-App sie vielleicht Translate That PY nennen Hier drin möchten Sie aus Google Import importieren, Übersetzer. Was wir tun wollen, ist vielleicht eine Funktion, translate, zu erstellen , die einen Text als Parameter erhält. Diese Funktion wird in den Ansichten PY verwendet. Wir werden diese Funktion hier aufrufen, was ungefähr so sein wird. Übersetzen Sie aus Punkt Import. Dann wird die Ausgabe diesmal Translate Dot Translate sein. Der Text wird Originaltext sein. Übersetzen ist also diese Funktion. Translate ist also ein Modulname, also translate dot PY und translate ist eine Funktion. Also Text, dann, sagen wir Übersetzer, gleich Übersetzer, die Instanz, dann Übersetzung gleich Übersetzer Punkt übersetzen Text gleich Text, Ziel entspricht der Zeichenfolge DE und dann Übersetzungspunkttext zurückgeben Dies ist ein Übersetzungsobjekt, und Sie müssen die Texteigenschaft daraus extrahieren , um die tatsächliche Zeichenfolge zu erhalten Speichern Sie das und speichern Sie auch das. Und lass uns die App ausprobieren. Und es funktioniert. Also haben wir die Übersetzung auf Deutsch bekommen, wie Sie sehen können. Richtig. Schließlich wollte ich hier jetzt auch einen Menüpunkt für unseren Übersetzer hinzufügen, damit wir einfach darauf zugreifen können. Um das zu tun, gehen Sie zu Base HTML und kopieren Sie einfach eines davon, eine Steuer, kopieren Sie es und fügen Sie es hier ein. Das wird also ein Übersetzer sein. Und das ist der Name der URL, die Sie von hier abrufen können, URL ist PY, kopieren Sie sie, gehen Sie zur Basis des HTML-Codes, fügen Sie sie dort ein, speichern Sie und hier ist der Artikel. Das ist also die Website. Damit ist dieses Jangle-Projekt abgeschlossen. Ich hoffe, Sie haben daraus gelernt, und ich glaube, das sollte ausreichen , um Ihnen den Einstieg in Jango zu Also haben wir einige der sehr wichtigen Funktionen von Jango behandelt der sehr wichtigen Funktionen , nämlich den Umgang mit Datenbanken und das Abrufen von Benutzereingaben aus den Formularen, die Verarbeitung dieser Eingaben und die anschließende Rückgabe der Ausgabe an den Also vielen Dank fürs Folgen und wir sehen uns wieder. Tschüss. 225. 230. Demo von App 10: Geocoder Web App +: Großartig. Wie Sie vielleicht wissen, nähern wir uns dem Ende des Kurses, und dieser, das ist der letzte Abschnitt des Kurses, in dem Sie Ihre zehnte Anwendung erstellen. Dieser spezielle ist etwas Besonderes. Das Besondere ist nicht die Anwendung selbst, denn jede Anwendung ist eigentlich etwas Besonderes. Das Besondere an dieser Anwendung ist , dass Sie diese eigenständig erstellen werden. Das ist also in Form eines Projekts. Du musst das von Grund auf neu erstellen. Und Sie haben im Laufe des Kurses alle Fähigkeiten erlernt , also die Fähigkeiten, die für die Erstellung dieser speziellen Anwendung erforderlich sind . Und in diesem Video wollte ich Ihnen zeigen, was diese Anwendung macht, und dann können Sie nach diesem Video sofort mit der Erstellung beginnen . Im nächsten Video zeige ich Ihnen dann die Lösung. Ich zeige Ihnen also den Code auf dem Video und erkläre, was der Code bewirkt und welchen Ansatz ich beim Erstellen der Anwendung verwendet habe. Aber nein, ich hätte diese Videos genauso aufnehmen können, wie ich es mit den anderen neun Anwendungen im Kurs gemacht habe, aber ich wollte wirklich, dass du etwas selbst machst, und das wird dir für zwei Dinge dienen. Zum einen machst du etwas eigenständig, und du wirst eine Menge daraus lernen. Und zweitens können Sie das als Portfolio verwenden. Das ist eine ziemlich nette Webanwendung. Aber das ist schwierig. Ich meine, ich wäre überrascht, jemanden zu sehen , der das zu 100% machen würde, es sei denn, Sie sind ein Genie. Ich meine das wirklich ernst. Aber Sie sollten in der Lage sein, das, sagen wir, bei etwa 50% zum Laufen zu bringen . Wenn Sie dafür sorgen, dass es zu 50% funktioniert, dann haben Sie aus dem Kurs wirklich gelernt. Also, was meine ich mit 50%? Also, du kannst irgendwo anhalten und um Hilfe bitten. Vielleicht haben Sie dort einen Fehler und können ihn nicht verstehen und für die Zukunft nicht lösen , oder Sie wissen einfach nicht, was Sie als Nächstes tun sollen. In solchen Szenarien können Sie also einspringen und eine Frage im Q&A-Bereich Also im Diskussionsbereich des Kurses. Ich sage, frag mich nicht sofort. Ich meine, ich mag Fragen, aber es ist gut für dich, die Probleme selbst zu lösen. Weißt du, Programmieren ist schwer. Ich meine, oft braucht man nur eine Pause, wie einen Kaffee oder Tee, um sein Gehirn zu erfrischen und es zum Nachdenken zu bringen. Und dann könnten Sie plötzlich feststellen, dass Sie dieses Problem lösen Aber wenn das nicht funktioniert, bin ich hier, um dir zu helfen. Stellen Sie einfach eine Frage und ich antworte innerhalb eines Tages. Und meine Empfehlung: Versuchen Sie jetzt, bei Null anzufangen. Schauen Sie sich nicht sofort den Code oder die Vorlesungen an , die wir im Kurs durchgemacht haben. Versuchen Sie stattdessen, Ihre Gedanken auf einem Blatt Papier festzuhalten. Schreiben Sie einige Schritte auf, z. B. Schritt eins, erstellen Sie die Benutzeroberfläche, Schritt zwei, ein bisschen Skript, das mit den Daten zusammenhängt und eine Ausgabe generiert, und erstellen Sie dann die Flasche, Struktur und so weiter Und dann gehst du und implementierst sie Schritt für Schritt. Wenn Sie dann auf Lager sind, ist es völlig in Ordnung, sich die Ressourcen anzusehen. Ich mache es die ganze Zeit. Also, was ist diese Anwendung? Nun, das ist eine FLASK-Anwendung , die vom Benutzer eine CSV-Datei erwartet, die mindestens eine Spalte mit dem Namen Adresse haben sollte Hier ist zum Beispiel eine CSV-Datei. Und Sie können sehen, dass wir dort eine Adressspalte haben, also sollte der Benutzer dort eine Spalte namens Adresse, benannte Adresse haben. Entweder mit einem Klein- oder Großbuchstaben A, es spielt keine Rolle. Sie sollten Ihre Anwendung also so aufbauen, dass sie sowohl Adressen mit einem kleinen A als auch Adressen mit einem großen A erkennt sowohl Adressen mit einem kleinen A als auch Adressen mit einem . Jetzt kann der Benutzer eine solche Datei hochladen, indem er hier auf die Schaltfläche „ Datei auswählen Und Sie können sehen, dass Supermärkte dort hochgeladen wurden. Und sobald der Benutzer diese Datei hochgeladen hat, drückt er auf Senden Und diese Tabelle wird angezeigt. Sobald der Benutzer also eine solche Datei hochlädt, das Backend Ihrer Anwendung, liest das Backend Ihrer Anwendung, also das Python-Skript diese Datei fügt eine Breite - und Längengradspalte hinzu, die aus der Adressspalte berechnet werden Wir sprechen also über Geokodierung und Sie wissen, wie man Das lernst du im Kurs im Bereich Pandas. Und wie Sie sehen, wird die Ergebnistabelle auf der Webseite angezeigt , sobald der Benutzer auf die Schaltfläche „Senden“ klickt, und Sie können die beiden Spalten darin sehen Und schließlich möchten Sie dem Benutzer auch ermöglichen , die CSV-Version herunterzuladen. Also eine Datei, die diese Daten enthält. Und deshalb müssen Sie hier wie ich einen Download-Button anzeigen. Sobald der Benutzer auf Herunterladen klickt, wird eine Datei heruntergeladen. Das ist eine Datei. Wir haben dort auch einige leere Zellen, weil Python nicht in der Lage war, sodass der Geokodierungsdienst diese Adresse nicht nach Breiten- und Längengrad geokodieren konnte diese Adresse nicht nach Breiten- und Längengrad geokodieren Also ja, dafür musst du zählen und dann einfach ein paar Nicht-Werte an diese Zellen übergeben Nun, bald könnten Sie auf Probleme stoßen, zum Beispiel, wenn der Benutzer andere Dateien hochlädt, also ändern wir das so, dass wir statt Adresse hinzufügen , und ich werde das speichern Ich habe also keine Adressspalte mehr in dieser Datei, lassen Sie mich sie erneut hochladen. So wie das. Einreichen. Und in diesem Fall möchten Sie dort eine Nachricht mit der Aufschrift anzeigen , dass Sie bitte sicherstellen, dass Sie eine Adressspalte in Ihrem CSV-Ordner haben oder etwas Ähnliches. Sie möchten also nicht, dass das Programm abstürzt, um dort einen Flaschenfehler anzuzeigen Also ja, du musst versuchen, einige Fehler darin zu akzeptieren . Und das ist es. Zu diesem Zeitpunkt haben Sie einen Geokodierungsdienst erstellt. Ich hoffe, ich habe mich mit den Erklärungen klar ausgedrückt. Aber wenn Sie Fragen haben, stellen Sie sie bitte. Ich wünsche dir viel Glück bei diesem Projekt. Es wird hart sein, aber Spaß machen, und es geht nur um Beharrlichkeit Wenn Sie sich also dazu verpflichten, werden Sie es tun. Das nächste Video ist gefährlich , weil ich dir dort die Lösung zeigen werde. Bitte schauen Sie es sich als letzten Ausweg oder schauen Sie es sich an, um Ihre fertige Bewerbung mit meiner zu vergleichen. Und wenn Sie Ihre Lösung mit meiner Lösung vergleichen, sollten Sie auch Ihre Lösung mit meiner Lösung vergleichen, nicht erwarten, dass sie identisch sind. Das werden sie niemals sein. Ich meine, es gibt verschiedene Möglichkeiten, eine Bewerbung zu stellen, und meine kann besser sein als deine oder umgekehrt. Also bitte behalte das im Hinterkopf. Und ja, genau das wollte ich sagen. Ich hoffe, dir hat mein Kurs gefallen. Ich freue mich auch, wenn Sie die Bewertung hinterlassen haben. Ich sehe mir alle Bewertungen an und schätze sie sehr. Also ja, vielen Dank, und ich werde später mit dir sprechen. 226. 231. Teil 1 von Aufbau der Geocoder-Web-App: Hallo, willkommen zu dieser neuen Vorlesung. Ich hoffe, es fiel Ihnen leicht die Geokodierungs-App zu erstellen Ich weiß, das hätte schwierig sein sollen, aber wenn du einen bestimmten Punkt durchgemacht hast , ist das auch toll In dieser Vorlesung erfahren Sie jetzt zwei Dinge. Die erste Sache ist, dass Sie den Anhang in den Ressourcen dieser Vorlesung finden . Dort finden Sie alle Dateien , die den Code für diese Web-App enthalten. Insbesondere finden Sie vier Verzeichnisse, also statische Vorlagen, Uploads und visuelle Dateien sowie eine App Dot Py-Datei Jetzt habe ich hier zufällig vier App-Dateien. Aber im Grunde ist die letzte Version die endgültige Version. Das ist also die erste Version, in der ich nur ein paar Funktionen im Python-Skript hinzufüge, und dann habe ich noch mehr zu diesen Funktionen hinzugefügt und dann noch ein paar mehr, und dann habe ich hinzugefügt. Und dann habe ich schließlich etwas mehr Code hinzugefügt , der die Anwendung vervollständigte. Das ist es also, was du bekommst. Und das findest du in einer Zip-Datei. Also bitte laden Sie das herunter. Ja, das ist das Erste, was Sie in dieser Vorlesung bekommen werden, die Zip-Datei des Lösungscodes. Und die zweite Sache ist, ich werde jetzt weitermachen und erklären wie ich dieses Problem angehe, und ich werde dir den Code zeigen und was ich zuerst baue und zweitens drittens und so weiter. Das sind also die vier Versionen. Ich habe Version eins, als ich etwas Code hinzugefügt habe, zwei, drei und vier. Lassen Sie uns das für einen Moment ignorieren, denn das Erste, was ich erklären möchte, ist die Benutzeroberfläche. Also fangen wir zuerst am Frontend an. Als Erstes habe ich jedoch eine Verzeichnisstruktur erstellt. Also habe ich einen leeren statischen Ordner, Vorlagen und Uploads und einen virtuellen Ordner erstellt Vorlagen und Uploads und einen virtuellen Statik und Vorlagen sind also Standard für FLASK-Anwendungen Und der Upload-Ordner wird nur der Ordner sein , in dem ich diese Zwischendateien generiere , die die Anwendung Benutzern zum Herunterladen zur Verfügung stellt Das werden Sie gleich sehen. Ich habe auch dieses virtuelle Ordnerlabor erstellt, das eigentlich das Verzeichnis der visuellen Umgebung ist. Also habe ich das mit Python mit dem N-Flag Virtual Virtual für den Namen des Verzeichnisses gemacht. Wenn Sie das also ausführen, erhalten Sie dieses Verzeichnis mit einer Neuinstallation von Python und PIP und anderen eingebauten Bibliotheken Und dann habe ich Flask installiert und Pandas installiert, weil Sie Pandas benötigen , um die Daten zu lesen, die der Benutzer übermittelt, und Sie möchten dort einige Spalten berechnen. Außerdem benötigen Sie Geopy, um diese Werte aus dem Pandas-Datenrahmen übermittelt, und Sie möchten dort einige Spalten berechnen. Außerdem benötigen Sie Geopy, um zu geokodieren Und das sind die drei Bibliotheken von Drittanbietern Bibliotheken von Drittanbietern Nachdem ich diese leeren Verzeichnisse erstellt hatte , bestand der zweite Schritt darin, die Benutzeroberfläche zu erstellen. Also habe ich im Vorlagenordner eine HEML-Vorlage mit Indexpunkt erstellt Vorlagenordner eine HEML-Vorlage mit Indexpunkt Das war also zunächst ganz einfach. Es enthielt also nicht so viel Gutes. Das enthielt einfach so etwas wie einen Titel und einige Überschriften und auch ein Grundformular Und anfangs habe ich nichts in die Handlung eingebaut. Wenn der Benutzer also etwas abschickt, hatte ich diese Schaltfläche zum Abschicken und ich hatte auch diesen Dateityp für Eingaben drin Wenn Sie sich also an die Datei erinnern können, ist das ein Formular. Wir haben diese Dateieingabe und die Schaltfläche „Senden“. Also diese beiden und auch eingeschränkte Einreichung von Dateien nur im CSV-Format. Und das ist ein Formular. Ich hatte das am Anfang nicht, also werde ich es vorerst nicht erklären. Ich werde das später durchgehen. Ja, das war Interface. Später habe ich diese Haupt-CSS-Datei erstellt. Also hier findest du das CSS-Styling für die Webseite. Ich werde jetzt nicht darauf eingehen. Das ist ziemlich selbsterklärend. Also haben wir CSS zu Beginn des Kurses gemacht. Und diese Datei ist unter den anderen Dateien auch in den Ressourcen enthalten , aber ich erwarte nie, dass Sie dasselbe Design haben. Sie haben also vielleicht verschiedene Dinge, einige Farben oder Größen und so weiter Und dann machst du weiter und referenzierst den CSS-Bezug zu den Head-Tags Ja, im Grunde habe ich das in diesem zweiten Schritt gemacht. Also im ersten Schritt ein Verzeichnis erstellen und im zweiten Schritt die Basisschnittstelle erstellen und das CSS-Tolling hinzufügen Wenn Sie einfach den HTML-Code erstellt haben und später, wenn Sie Ihre Anwendung fertiggestellt haben, haben Sie eine CSS-Datei erstellt Das ist auch völlig okay. Oder selbst wenn Sie direkt mit der Python-Datei angefangen haben, ist das auch in Ordnung. Einige Entwickler beginnen am Frontend und andere am Backend. Das ist völlig okay. Sobald ich die Oberfläche hatte , habe ich eine App-Datei erstellt. also Diese vier Versionen sind also nur zur Demonstration für dieses Video gedacht Also habe ich es für verschiedene Dateien gemacht, um Ihnen die Phasen zu zeigen , die ich durchlaufen habe, um meinen endgültigen Code zu erstellen Also Version eins, das habe ich im Grunde gemacht. Ich habe diese Bibliotheken importiert. Also habe ich aus FAS die übliche FLASK-Klasse und normalerweise die Render-Template-Methode importiert , um HTML-Vorlagen zurückzugeben Und ich wusste, dass meine Bewerbung einige Benutzereingaben beinhaltete, also einige also einige Daher habe ich dort auch die Request-Methode und dann die Sent-File-Methode eingefügt , mit der eine Datei zum Herunterladen an den Browser gesendet wird . Und ja, das ist über FAS, und dann wollen wir Daten geokodieren, oder? Also lade ich es von Geo Pi auf Programmierer hoch, ich gebe es nominierend ein Sobald ich die Abhängigkeiten eingegeben habe, habe ich hier eine FAS-Instanz erstellt und dann drei Funktionen , die vorerst nichts tun Die erste wäre also die Homepage, wie Sie hier mit diesem Backslash Und ich nenne diesen Index, die Funktion, und ich gebe einfach die Rendervorlage zurück Und hier ist natürlich Index Dot HML. Dadurch wird also die Homepage gerendert, bei der es sich um Indexpunkt-HML handelt Das nächste, was Sie erwarten könnten, ist, dass sich der Benutzer auf Ihrer Webseite befindet Und sobald der Benutzer die Herbst-Auswahltaste drückt, eine Datei auswählt eine Datei auswählt und dann auf Senden drückt. Was Sie tun möchten, wenn sie auf die Schaltfläche Senden klicken , ist, dass Sie diese Datei jetzt in Python laden und das als Pandas-Datenrahmen lesen möchten, und Sie möchten eine Koordinatenspalte berechnen, in der Sie den Breiten - und Längengrad aus der Adressspalte mit Geo Pi berechnen - und Längengrad aus der Adressspalte mit Geo Pi Dann möchten Sie aus der Koordinatenspalte den Breiten- und Längengrad berechnen Das haben wir bereits im Kurs im Panel-Bereich gemacht , und dann möchten Sie irgendwann einen Datenrahmen zurückgeben und diesen Datenrahmen über eine Rendervorlagenmethode senden . Sie möchten diesen Datenrahmen hier unten senden. Wir sprechen hier also davon eine Funktion zu erstellen, die all das tut. Es liest also den CZ-Fall und verarbeitet es mit Panels, und dann zeigt es die Tabelle an. Die ASO-Tabelle für den Datenrahmen. Und ich habe die Sutter-Funktion erstellt und die Erfolgstabelle aufgerufen Wenn Sie sich erinnern, muss der Methodenparameter post entsprechen, da wir eine Post-Anfrage erwarten Und dann haben wir noch eine weitere Funktion. Ich nenne diesen Download Herbst. Das ist also die URL, Erfolgs-Dash-Tabelle, und das ist ein Funktionsname. Dass wir noch eine weitere URL und eine weitere Funktion an diese URL angehängt haben. Also nenne ich das Download. Wie gesagt, jedes Mal, wenn der Benutzer etwas tut, möchten Sie einen Dekorator und eine damit verbundene Funktion erstellen und eine damit verbundene Funktion Also zuerst macht der Benutzer eine Einreichung, und Sie möchten diese in dieser Funktion erfassen Erfolgstabelle, und als Nächstes drückt der Benutzer drückt die Download-Schaltfläche, die hier unten angezeigt wird. Und das muss eine weitere Funktion in Python auslösen, und das muss die Methode send file in Python auslösen, damit wir die Datei an den Benutzer senden. Das heißt, wir brauchen hier eine weitere Funktion namens Download. Zumindest habe ich es so benannt. Wie dem auch sei, lass uns zu Version zwei gehen, Null. Sehen Sie sich also den Unterschied hier und hier an. Die Indexfunktion bleibt dieselbe. Das ist also alles, was wir für den Index tun. Es ist ziemlich einfach. Wir geben einfach den ursprünglichen Index zurück, der eine ML-Vorlage ist. Und dann habe ich hier eine Menge Code hinzugefügt. Und im Grunde suchen wir nach der Anfrage. Wenn wir eine Post-Anfrage erhalten haben, erhalte ich die Datei mit dem Punkt, an dem die Anfrage fällt, und die Datei hier ist der Name. Die ganze Eingabe ist hier drin. Also ja, was passiert ist, dass, wenn der Benutzer auf die Schaltfläche „Senden“ klickt, eine URL ausgelöst wird, und dann ist diese URL die URL für die Funktion „Erfolgreiche Unterstrichtabelle Also diese Funktion hier. Das heißt diese Funktion wird ausgeführt, und dann erstellen wir dort einen Datenrahmen , der den Herbst dieses Jahres liest , den wir vom Benutzer bekommen, aus dem Benutzerformular. Und dann nominieren wir das und erstellen dort eine Datenrahmenspalte. Sie kennen das aus dem Abschnitt Pandas mit der Apply-Methode und wenden dann den Geocode auf die Adressspalte Und dann erhalte ich aus der Koordinatenspalte eine Breitengradspalte, und ich verwende eine Lambda-Funktion, um den Breitengrad aus jeder Koordinatenzeile zu extrahieren und dort auch nach n Werten zu zählen Und dann brauche ich diese Koordinatenspalte nicht. Also lösche ich das einfach mit der Drop-Methode und konvertiere es dann in eine CSV-Datei. Hier generiere ich eine CSV-Datei. Dies ist die Ausgabe, die wir dem Benutzer geben möchten. Und ich sortiere das im Upload-Ordner. Sie müssen also nur den Pfad dorthin übergeben, der relative Pfad lädt So nenne ich das. Im Moment später werde ich etwas Fortgeschritteneres tun. Nennen wir es vorerst geokodiert, dieses CSV. Und was das dann tun wird, es wird eine Vorlage zurückgeben, also wird es den Index dieser Vorlage zurückgeben Aber wenn Sie dann hier nachschauen, lassen Sie mich das für eine andere Ansicht öffnen. Ja, hier haben wir eine Abteilung. Ordne den Ingwer der Syntax zu , die ich dort verwende. Also füge ich die BTN-Variable hinzu und ignoriere , wenn sie fehlt Nun, das ist anders als hier oben. Hier gebe ich HML als Zeichenfolge zurück. Und hier gebe ich eine HML-Vorlage zurück. Die Syntax ist also anders. Und das unterscheidet sich auch von der Verwendung von Extend. Wenn wir also ein Layout erweitern, erweitern Sie ein Layout, wenn Sie möchten, dass, sobald der Benutzer die HD Melt-Vorlage besucht, den Index , den HM Meltem Plate aufruft, sagen wir, den Index, den HM Meltem Plate andere HML-Vorlagen anzeigt Es wird also erweitert, sobald der Benutzer diesen Index und nicht die HTML-Seiten der Homepage besucht Das ist anders , weil wir nicht möchten, dass dies sofort angezeigt wird Deshalb sagst du, ignoriere Fehlendes, also ignoriere es, wenn es fehlt. Und fügen Sie es nur ein , wenn der Benutzer diese URL der Erfolgs-Dash-Tabelle besucht. Und wenn der Benutzer das besucht, also wenn der Benutzer auf Senden drückt, nachdem er eine Datei eingereicht hat, dann möchten Sie diese Download-HTML-Vorlage rendern. Was das also enthält, ist eine Schaltfläche hier. Sie möchten dort eine Schaltfläche generieren, die, Sie wissen schon, im Herbst, abschicken sollte . Also ja, du bekommst diese Download-Datei da drin und du bekommst auch die HTML-Tabelle Der Datenrahmen hat also eine HML-Tabelle. Also die erste Zeile, die zweite Zeile, die erste Zeile, die zweite Zeile Wie dem auch sei, dieser untere Teil ist jetzt an eine Referenz angehängt, die darauf hindeutet, dass, wenn der Benutzer auf Herunterladen drückt, die URL für die Python-Download-Funktion besucht wird Also gehen wir hierher und diese URL der Download-Funktion wird aufgerufen Ich weiß, was wir tun wollen, wenn der Benutzer diese URL besucht ist, dass wir die Methode Datei senden zurückgeben möchten Eigentlich sollten das geokodierte CSV-Dateien mit Punkten hochladen. Also wollen wir dem Benutzer die Datei schicken, die wir hier oben in dieser Funktion generiert haben hier oben in dieser Funktion generiert Wir möchten das unter dem Namen youfle dot CSV an den Benutzer senden unter dem Namen youfle dot CSV an den Benutzer Und auch als Anlage dazu, ihr kennt diesen Code aus den vorangegangenen Vorlesungen Und das ist ungefähr der Download dieser SML-Vorlage. Und wir sind im Grunde fertig. Ich meine, Sie können mit dieser Version des Programms durchkommen , und es wäre fast ausgezeichnet, wenn Sie so weit gehen würden. Möglicherweise haben wir damit jedoch einige kleine Probleme. Das Problem wäre, wenn Sie eine Datei wählen, eine CZ-Datei, die keine Adressspalte enthält, also eine Spalte mit dem Namen Adresse, dann könnten Sie diese Datei als Datenrahmen laden, und wenn Sie dann versuchen, eine neue Spalte mit dem Namen Koordinaten im Datenrahmen zu erstellen, und dann versuchen, auf eine bestehende Spalte mit dem Namen Adresse im Datenrahmen zuzugreifen eine bestehende Spalte mit dem Namen Adresse im ein Python wirft einen Pfeil und stoppt die Anwendung. Das heißt, wenn der Benutzer die URL der Erfolgstabelle besucht, wird ihm eine Fehlerseite angezeigt. Und das ist nicht sehr benutzerfreundlich. Stattdessen könnten Sie hier einige Funktionen hinzufügen, die prüfen, ob es sich bei dem Datenrahmen eine vom Benutzer eingegebene Datei handelt, sodass Sie die Datei als Datenrahmen lesen möchten. Sie dann im Datenrahmen, Prüfen Sie dann im Datenrahmen, ob Sie eine Adressspalte haben. Wenn Sie eine haben, machen Sie weiter und führen die Berechnungen durch. Wenn Sie dies nicht tun, geben Sie dem Benutzer etwas zurück. Anstatt also DF in HTML zurückzugeben, geben Sie eine Nachricht zurück, die besagt, dass Sie leider keine solche Spalte oder so standardmäßig haben. Also ja, ich werde dir den Code dafür in der nächsten Vorlesung zeigen . Also, sieh mal 227. 232. Teil 2 von Aufbau der Geocoder-Web-App +: Großartig. Wir sind in Version zwei, und ich werde jetzt versuchen, schnell zu sein und Ihnen Version drei zu zeigen . Das ist Version drei. Ich habe diese Funktionalität implementiert, bei der ich überprüfen möchte, ob Datenrahmen eine Adressspalte enthält, indem ich eine Try-and-Expect-Anweisung hinzugefügt habe. Im Grunde genommen, wenn Sie den Unterschied sehen können ist, dass ich die Datei erhalte und dann versuche, diese Datei zu lesen. Oder das könnte auch außerhalb eines Try-Schlüsselworts liegen. Das wäre kein Problem und C auch außerhalb eines Try-Schlüsselworts. Dies ist jedoch immer noch besser, da Sie möglicherweise auch nach Benutzern suchen möchten, die keine CSV-Dateien senden. Hier überprüfen wir also tatsächlich , ob der Benutzer eine CSV-Datei einreicht. bedeutet jedoch nur, dass die Datei in der Dateispur eine punktuelle CSV-Erweiterung hat. Das bedeutet jedoch nicht, dass es sich bei der Datei tatsächlich um CSV handelt. Sie haben also vielleicht, sagen wir, eine MP Four-Datei und Sie haben die Erweiterung in CSV geändert, aber das ist immer noch eine MP Four-Datei. Sie wollen also, ähm, Sie wollen DF in den Try-and-Expect-Block aufnehmen . Wenn Python nicht in der Lage ist einen Datenrahmen aus einer Epi-Datei zu erstellen, wird ein Fehler ausgegeben Das passiert also tatsächlich, wenn Sie EpiourFle übergeben, Sie könnten es nicht als Datenrahmen lesen Also ja, du willst das hier einfügen, dann gibst du dasselbe zurück, also habe ich hier nichts geändert Sie geben den gleichen Vorlagenindex bei HML und senden die HML dorthin und die Schaltfläche Sofern nicht ein Fehler vorliegt, geben Sie den Index zurück, nicht HML, sondern möchten dann anstelle der HML-Tabelle diese Meldung Und natürlich möchten Sie dort keine Download-Schaltfläche zurückgeben . A, das sollte reichen. Und das ist ungefähr Version drei. Das waren also die Unterschiede. Also, Version vier, was ich da habe. Nun, wenn Sie hier sehen, haben wir diesen geokodierten CSV-Herbst Nun, das ist eine Zeichenfolge. Das bedeutet, dass für alle Benutzer, die Daten einreichen, eine Geocode-CZ-Datei erstellt wird Das kann zu Problemen führen, denn wenn zwei Benutzer gleichzeitig Daten senden, kann es zu Namenskonflikten kommen. Was Sie hier also tun könnten, ist, ein Datat-Modul zu verwenden , um eindeutige Namen für jede generierte Datei zu generieren Und genau das habe ich getan. Also hier ist Version vier. Ich habe das Tageszeitmodul hier eingefügt und dann generiere ich hier die geokodierte CSV-Datei, also DF zu CSV-Dateiname Und ich habe diesen Dateinamen hier global gemacht, weil ich auch über die Download-Funktion hier darauf zugreifen möchte die Download-Funktion hier darauf zugreifen Also nochmal, ich möchte das hier generieren, ich generiere einen Dateinamen. Dann haben wir im Dateinamen die Upload-Zeichenfolge, die das Verzeichnis verweist , in dem sich diese Datei befinden wird. Und dann haben wir den Schrägstrich. Und dieses Plus sollte eigentlich nicht da sein. Also direkt nach dem Schrägstrich haben wir den Dateinamen. Und das wäre, wissen Sie, wir haben das Jahr und dann den Monat und dann den Tag und dann die Stunde und die Minuten und Sekunden und Millisekunden Und dann die Punkt-CSV-Erweiterung im Dateinamen. Also ja, das ist für jeden Benutzer ziemlich einzigartig , weil wir da Millisekunden haben Aber lassen Sie mich Ihnen zeigen, wie das tatsächlich aussieht. Auch hier wählt der Benutzer eine Datei aus, sendet, und wenn er auf Senden drückt, generiert ein Python den Datenrahmen und generiert auch die CC-Datei. Also in dieser Zeile hier. Und Sie können diese CC-Datei jetzt im Upload-Ordner finden. Das wurde also früher generiert, und das ist die Datei Das ist die Datei, die wir gerade generiert haben. Wenn der Benutzer dann auf Herunterladen klickt, wird diese Datei heruntergeladen, aber mit Ihrem Dateinamen , der hier dieser ist. Was jedoch passiert, ist, dass die Funktion den Pfad der Datei, die sie im Browser herunterladen muss, abruft und den Fallnamen aus dieser globalen Variablen bezieht Deshalb übergebe ich das als globale Variable , damit ich auf den Wert zugreifen kann , der hier generiert wird Ich kann auf diesen Wert von einer anderen Funktion aus zugreifen Und ja, das ist meine Version der Anwendung. Ich weiß, dass das nicht wie deine Version ist. Ich hoffe, du warst so nah wie möglich dran, und es wäre toll, wenn du es besser machen würdest als ich. In beiden Fällen bin ich mir sicher, dass der Versuch, diese Anwendung zu lösen, Ihre Fähigkeiten zur Problemlösung in Python hätte verbessern sollen Ihre Fähigkeiten zur Problemlösung in Python hätte verbessern , denn das wird Sie zumindest positionieren, also definieren wir Ihr Level, Ihr Python-Level, damit Sie die Lücken füllen können , von denen Sie wirklich denken, dass sie nicht Ihre Stärken sind . Es ging um diesen Vortrag, und wir sehen uns.