Einführung in die Programmierung mit Python PDF

Summary

Dieses Skript bietet eine Einführung in die Programmierung mit Python. Es behandelt Themen wie Installation, Variablen, Datentypen, Anweisungen, Funktionen und Module. Es ist ein Lehrbuch für IU Internationale Hochschule.

Full Transcript

EINFÜHRUNG IN DIE PROGRAMMIERUNG MIT PYTHON DLBDSIPWP01_D EINFÜHRUNG IN DIE PROGRAMMIERUNG MIT PYTHON IMPRESSUM Herausgeber: IU Internationale Hochschule GmbH IU International University of Applied Sciences Juri-Gagarin-Ring 152 D-99084 Erfurt Postanschrift: Albe...

EINFÜHRUNG IN DIE PROGRAMMIERUNG MIT PYTHON DLBDSIPWP01_D EINFÜHRUNG IN DIE PROGRAMMIERUNG MIT PYTHON IMPRESSUM Herausgeber: IU Internationale Hochschule GmbH IU International University of Applied Sciences Juri-Gagarin-Ring 152 D-99084 Erfurt Postanschrift: Albert-Proeller-Straße 15-19 D-86675 Buchdorf [email protected] www.iu.de DLBDSIPWP01_D Versionsnr.: 001-2024-0906 N.N. Coverbild: Adobe Stock. © 2024 IU Internationale Hochschule GmbH Dieses Lernskript ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Dieses Lernskript darf in jeglicher Form ohne vorherige schriftliche Genehmigung der IU Internationale Hochschule GmbH (im Folgenden „IU“) nicht reproduziert und/oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet wer- den. Die Autor:innen/Herausgeber:innen haben sich nach bestem Wissen und Gewissen bemüht, die Urheber:innen und Quellen der verwendeten Abbildungen zu bestimmen. Sollte es dennoch zu irrtümlichen Angaben gekommen sein, bitten wir um eine dement- sprechende Nachricht. 2 INHALTSVERZEICHNIS EINFÜHRUNG IN DIE PROGRAMMIERUNG MIT PYTHON Einleitung Wegweiser durch das Studienskript................................................. 6 Literaturempfehlungen............................................................ 7 Übergeordnete Lernziele.......................................................... 9 Lektion 1 Einführung in Python 11 1.1 Warum Python?.............................................................. 12 1.2 Download und Installation von Python......................................... 15 1.3 Der Python-Interpreter, IPython und Jupyter................................... 16 Lektion 2 Variablen und Datentypen 33 2.1 Variablen und Wertzuweisungen.............................................. 34 2.2 Collections.................................................................. 47 2.3 Zahlen...................................................................... 55 2.4 Strings...................................................................... 60 2.5 Dateien..................................................................... 72 Lektion 3 Anweisungen 79 3.1 Zuweisungen und Ausdrücke.................................................. 80 3.2 Bedingte Anweisungen und boolesche Ausdrücke............................... 89 3.3 Schleifen.................................................................... 99 3.4 Iteratoren und List Comprehensions.......................................... 106 Lektion 4 Funktionen 113 4.1 Funktionsdeklarationen..................................................... 115 4.2 Gültigkeitsbereiche (scopes)................................................. 121 4.3 Argumente................................................................. 132 3 Lektion 5 Fehler und Ausnahmen 141 5.1 Fehler..................................................................... 142 5.2 Ausnahmebehandlung...................................................... 144 5.3 Logging: Protokollierung des Programmablaufs............................... 153 Lektion 6 Module und Pakete 161 6.1 Einbindung und Erstellung................................................... 162 6.2 Namensräume............................................................. 163 6.3 Kommentierung und Dokumentation......................................... 167 6.4 Gängige datenwissenschaftliche Pakete....................................... 171 Anhang Literaturverzeichnis............................................................. 184 Abbildungsverzeichnis.......................................................... 185 4 EINLEITUNG HERZLICH WILLKOMMEN WEGWEISER DURCH DAS STUDIENSKRIPT Dieses Studienskript bildet die Grundlage Ihres Kurses. Ergänzend zum Studienskript ste- hen Ihnen weitere Medien aus unserer Online-Bibliothek sowie Videos zur Verfügung, mit deren Hilfe Sie sich Ihren individuellen Lern-Mix zusammenstellen können. Auf diese Weise können Sie sich den Stoff in Ihrem eigenen Tempo aneignen und dabei auf lerntyp- spezifische Anforderungen Rücksicht nehmen. Die Inhalte sind nach didaktischen Kriterien in Lektionen aufgeteilt, wobei jede Lektion aus mehreren Lernzyklen besteht. Jeder Lernzyklus enthält jeweils nur einen neuen inhaltlichen Schwerpunkt. So können Sie neuen Lernstoff schnell und effektiv zu Ihrem bereits vorhandenen Wissen hinzufügen. In der IU Learn App befinden sich am Ende eines jeden Lernzyklus die Interactive Quizzes. Mithilfe dieser Fragen können Sie eigenständig und ohne jeden Druck überprüfen, ob Sie die neuen Inhalte schon verinnerlicht haben. Sobald Sie eine Lektion komplett bearbeitet haben, können Sie Ihr Wissen auf der Lern- plattform unter Beweis stellen. Über automatisch auswertbare Fragen erhalten Sie ein direktes Feedback zu Ihren Lernfortschritten. Die Wissenskontrolle gilt als bestanden, wenn Sie mindestens 80 % der Fragen richtig beantwortet haben. Sollte das einmal nicht auf Anhieb klappen, können Sie die Tests beliebig oft wiederholen. Wenn Sie die Wissenskontrolle für sämtliche Lektionen gemeistert haben, führen Sie bitte die abschließende Evaluierung des Kurses durch. Die IU Internationale Hochschule ist bestrebt, in ihren Skripten eine gendersensible und inklusive Sprache zu verwenden. Wir möchten jedoch hervorheben, dass auch in den Skripten, in denen das generische Maskulinum verwendet wird, immer Frauen und Män- ner, Inter- und Trans-Personen gemeint sind sowie auch jene, die sich keinem Geschlecht zuordnen wollen oder können. 6 LITERATUREMPFEHLUNGEN ALGEMEIN Barry, P. (2016). Head First Python: A Brain-Friendly Guide (2. Aufl.). O’Reilly. http://search.e bscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat05114a&AN=ihb.28830 &site=eds-live&scope=site Ernesti, J. & Kaiser, P. (2020). Python 3. Das umfassende Handbuch (6. Aufl.). Rheinwerk Computing. http://search.ebscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&d b=cat05114a&AN=ihb.50687&site=eds-live&scope=site Mark, L. (2013). Learning Python: Powerful Object-Oriented Programming (5. Aufl.). O’Reilly. h ttp://search.ebscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat05114a& AN=ihb.28832&site=eds-live&scope=site Steyer, R. (2018). Programmierung in Python. Ein kompakter Einstieg für die Praxis. Springer Vieweg. http://search.ebscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=ca t05114a&AN=ihb.37823&site=eds-live&scope=site LEKTION 1 VanderPlas, J. (2016). Python Data Science Handbook. O’Reilly. Kapitel 1. http://search.ebs cohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat05114a&AN=ihb.46711&s ite=eds-live&scope=site Perkel, J.M. (2018). Why Jupyter is data scientists’ computational notebook of choice. Nature, 563, 145–146. (Im Internet verfügbar). LEKTION 2 Python (2013). PEP 8 – Style Guide for Python Code. (Im Internet verfügbar). Sweigart, A. (2019). Automate the Boring Stuff with Python. No Starch Press. Kapitel 4 und 5. http://search.ebscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat0511 4a&AN=ihb.50688&site=eds-live&scope=site LEKTION 3 Sweigart, A. (2019). Automate the Boring Stuff with Python. No Starch Press. Kapitel 2. http: //search.ebscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat05114a&AN= ihb.50688&site=eds-live&scope=site 7 LEKTION 4 Downey, A. (2015). Think Python: How to Think Like a Computer Scientist. O’Reilly. Kapitel 4. h ttp://search.ebscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat05114a& AN=ihb.50686&site=eds-live&scope=site Sweigart, A. (2019). Automate the Boring Stuff with Python. No Starch Press. Kapitel 3. http: //search.ebscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat05114a&AN= ihb.50688&site=eds-live&scope=site LEKTION 5 Sweigart, A. (2019). Automate the Boring Stuff with Python. No Starch Press. Kapitel 11. http ://search.ebscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat05114a&AN =ihb.50688&site=eds-live&scope=site LEKTION 6 VanderPlas, J. (2016). Python Data Science Handbook. O’Reilly. Kapitel 2–4. http://search.e bscohost.com.pxz.iubh.de:8080/login.aspx?direct=true&db=cat05114a&AN=ihb.46711 &site=eds-live&scope=site 8 ÜBERGEORDNETE LERNZIELE Python ist innerhalb kurzer Zeit zu einer der weltweit beliebtesten und gängigsten Pro- grammiersprachen für die Softwareentwicklung geworden. Vor diesem Hintergrund soll Ihnen der Kurs Einführung in das Programmieren mit Python sowohl die Gründe für seine wachsende Verbreitung als auch ein umfassendes Verständnis seiner Vor- und Nach- teile vermitteln. Dabei erfahren Sie nicht nur, wie Sie Python herunterladen und installie- ren können, sondern lernen anhand von Beispielen auch verschiedene Einsatzbereiche kennen, die mit den Themenschwerpunkten Ihres Studiengangs korrespondieren. Nach Abschluss des Kurses werden Sie mit grundlegenden Python-Konzepten wie Variab- len, Konstanten, Strings und Collections sowie der Datei-Eingabe und -Ausgabe vertraut sein. Darüber hinaus sind Sie fortan in der Lage, verschiedene Arten von Python-Anwei- sungen zu erläutern und zu verwenden, darunter Zuweisungen, Ausdrucksanweisungen und Funktionsanweisungen. Zudem können Sie die Nutzung von bedingten Ausdrücken, Schleifen und Iteratoren erklären und an Beispielen demonstrieren. Ergänzend werden im weiteren Verlauf des Kurses die Einsatzmöglichkeiten und Zwecke von Funktionen in Python sowie die für die Erstellung eigener Funktionen geltenden Syn- taxregeln erörtert. Auf diese Weise erlangen Sie die nötigen Kenntnisse, um Funktionen mit verschiedenen Parametern und Rückgabetypen zu implementieren und die Gültigkeit von Variablen und Funktionen zu beschreiben. Des Weiteren werden Sie in der Lage sein, Techniken der Fehlerbehandlung anzuwenden und die Verwendung von Logdateien zu erklären sowie die wichtigsten Gründe für die Nut- zung von Modulen, Namensräumen und verschiedenen datenwissenschaftlichen Paketen zu nennen. Wir verwenden in diesem Kurs Python in der Version 3. 9 LEKTION 1 EINFÜHRUNG IN PYTHON LERNZIELE Nach Abschluss dieser Lektion werden Sie in der Lage sein, … – die Gründe für die wachsende Beliebtheit von Python in der Softwareentwicklung zu nennen. – die Stärken und Schwächen von Python zu erläutern. – Python herunterzuladen und zu installieren. – die verschiedenen Komponenten einer Python-Entwicklungsumgebung zu beschrei- ben und einzusetzen. 1. EINFÜHRUNG IN PYTHON Aus der Praxis Die beiden Freunde Mehmet und Lea unterhalten sich angeregt über ihre neueste Geschäftsidee. Obwohl sie schon in der Vergangenheit verschiedene Ideen diskutiert haben, sind sie sich sicher: Dieses Mal ist alles anders! Als sie beim gemeinsamen Mittag- essen über ihren neuesten Einfall sprechen, herrscht Aufbruchsstimmung, denn Mehmet und Lea haben die feste Absicht, diese Idee zu verwirklichen. Worum genau geht es dabei? Da Lea und Mehmet beide im Fußballteam ihrer Universität gespielt haben, kreisen viele ihrer Geschäftsideen der letzten Jahre um das Thema „Fuß- ball“. Dabei hat sich keiner ihrer diesbezüglichen Einfälle als marktfähig und profitabel erwiesen – bis jetzt! Mehmet möchte aus Leas Statistikkenntnissen und seinem eigenen Know-how im Bereich Softwareentwicklung Kapital schlagen, um eine Anwendung zur Spielerentwicklung zu erstellen. Ein solches Programm würde Spieler- und Trainer:innen dabei helfen, Leistungsdaten der Spieler und Spielerinnen zu erfassen, über längere Zei- träume zu analysieren und individuelle Verbesserungsschwerpunkte zu identifizieren. Die beiden haben keinen Zweifel daran, dass diese Idee als Grundlage für ein erfolgreiches Start-up-Unternehmen taugt, weil die fertige Anwendung für viele Aktive interessant und damit äußerst einträglich sein wird. Doch damit sich die Software möglichst breit vermark- ten lässt, sollte sie problemlos auf verschiedenen Plattformen laufen. Außerdem stellt sie hohe Anforderungen in puncto Rechenleistung, da sie umfangreiche Datenanalysen und komplexe statistische Berechnungen durchführen muss. Um sicherzustellen, dass ihre Anwendung diesen Ansprüchen gerecht wird und es keine Probleme mit der Funktionsfä- higkeit und Umsetzung gibt, halten Mehmet und Lea verschiedene Fragen fest, die vor dem Start ihres Entwicklungsprojekts beantwortet werden müssen: Programmiersprache Welche Programmiersprache eignet sich am besten für die Erstellung der Anwendung Python ist eine interpre- und aus welchen Gründen? tierte Programmierspra- che, die häufig im Lehrbe- Wie kann eine Anwendung plattformübergreifend lauffähig sein? trieb sowie für Was genau bedeutet „Plattform“ in diesem Zusammenhang eigentlich? datenwissenschaftliche Sind manche Programmiersprachen besser für datenwissenschaftliche und mathemati- Projekte und zahlreiche andere Zwecke eingesetzt sche Anwendungen geeignet als andere? Falls ja, welche Sprachen weisen hier beson- wird. dere Stärken auf und sollten deshalb von Mehmet und Lea in Betracht gezogen werden? Wo können die beiden nach der Wahl einer geeigneten Programmiersprache die dazu- gehörigen Werkzeuge herunterladen? Und wie sollten sie ihr Projekt angehen? 1.1 Warum Python? Herzlichen Glückwunsch zu Ihrem Einstieg in die Softwareentwicklung mit Python! Wenn Sie eine Karriere in diesem Bereich anstreben, stehen Ihnen vielfältige Möglichkeiten offen. Doch auch wenn Sie sich nicht für eine Karriere in der Informatik interessieren, 12 lohnt die Beschäftigung mit dem Thema. Erfolgreiche Branchengrößen wie Bill Gates und Softwareentwicklung Steve Jobs haben immer wieder betont, dass Angestellte mit Kenntnissen im Bereich Soft- Dieser Begriff bezeichnet den gesamten Prozess zur wareentwicklung für ihre Unternehmen von großem Nutzen sind – unabhängig davon, Erstellung von Softwa- welchen Karriereweg sie einschlagen. reanwendungen oder Softwarekomponenten und umfasst als Kernakti- Python bietet einen guten Einstieg in die Softwareentwicklung, insbesondere für diejeni- vitäten das Requirements gen, die bisher noch keine Erfahrungen im Programmieren gesammelt haben. Die Sprache Engineering, den Softwa- reentwurf, die Program- wird von vielen Bildungsinstitutionen im Rahmen der Ausbildung genutzt und hat im Jahr mierung und das Testen 2014 Java als gängigste Programmiersprache für einführende Informatikkurse an US-Uni- von Software. versitäten abgelöst (Guo, 2014). Abbildung 1: Häufigkeitsverteilung der von den führenden 39 US-Universitäten für Lernzwecke genutzten Programmiersprachen Quelle: Guo, 2014. Weitere Belege für diesen Aufwärtstrend liefert der Popularity of Programming Languages Index (PYPL-Index), dessen Programmiersprachenranking auf der Zahl der Google-Suchen nach einschlägigen Tutorials basiert. Er ist ein guter Indikator für die Zahl der Personen, die die verschiedenen Programmiersprachen erlernen möchten. Im August 2019 belegte Python hier den ersten Platz vor Java, JavaScript und C# (PYPL Index 2019). Zudem zeigt der Vergleich der jährlichen PYPL-Rankings, dass der Anteil von Python zwischen August 2018 und August 2019 um 4,5 Prozent gestiegen ist und es damit als einzige Programmier- sprache unter den Top Ten einen Zuwachs verzeichnete. Doch wird Python nicht nur von Programmieranfänger:innen zu Lernzwecken eingesetzt, sondern ist auch in der industriellen Praxis weit verbreitet. So zählt es aktuell zu den gän- gigsten Programmiersprachen der Softwareentwicklungsbranche. Dies belegt beispiels- weise der TIOBE Programming Community Index, ein weltweites Ranking der beliebtesten Sprachen für die Softwareentwicklung, in das unter anderem Angaben zur Zahl der in der Sprache ausgebildeten Fachleute, zum Angebot an einschlägigen Einführungskursen und 13 zur Anzahl kommerzieller Anbieter von Softwarelösungen für die jeweilige Sprache einflie- ßen (TIOBE 2022). Hier konnte Python in den letzten Jahren konstant zulegen und klet- terte schließlich im Januar 2022 auf den ersten Platz, vor C und Java. Außerdem verzeich- nete die Programmiersprache in der Gruppe der Top 20 mit 1,84 Prozent das höchste Wachstum, gefolgt von C# (auf Platz 5, mit einer Wachstumsrate von 1,73 Prozent). Abbildung 2: TIOBE-Index, Januar 2022 Quelle: TIOBE, 2022. Wie ist das zu erklären? Warum ist Python als Programmiersprache für Anfänger:innen so beliebt? Auf diese Frage gibt es viele Antworten, von denen die folgenden besonders häu- fig genannt werden: Python und viele dazugehörige Tools, Module und Bibliotheken sind kostenlos erhält- lich. Syntax Verglichen mit vielen anderen Programmiersprachen ist die Syntax von Python knap- Die Regeln und Symbole, per und präziser. Dadurch lassen sich mehr Funktionen mit weniger Zeilen realisieren, die bei der Erstellung von Programmen in einer was das Programmieren spürbar vereinfacht. bestimmten Program- Python-Code wurde gezielt so konzipiert, dass er der englischen Alltagssprache ähnelt. miersprache zur Anwen- Daher lässt er sich leichter lesen als Programme in vielen anderen Sprachen. dung kommen, bilden die Syntax dieser Sprache. Python hat eine aktive Entwickler-Community, die vielfältige Ressourcen für angehende und erfahrene Entwickler:innen bereitstellt. Python unterstützt das prozedurale, objektorientierte und funktionale Programmierpa- radigma. Da Python eine interpretierte Programmiersprache ist, können die geschriebenen Programme sofort ausgeführt und getestet werden, ohne dass die betreffende Anwen- dung zuerst kompiliert werden muss. 14 Angesichts der zahlreichen Vorteile, die Python für den Einstieg in die Programmierung Interpretierte Program- bietet, lässt sich leicht nachvollziehen, warum diese Programmiersprache häufig in der miersprache Python wird als interpre- Lehre für einführende Informatikkurse genutzt wird. Doch warum ist Python auch bei tierte Programmierspra- Fachleuten und kommerziellen Anbietern so beliebt? Hier sind nicht nur die oben aufge- che bezeichnet, weil führten Gründe, sondern auch die im Folgenden genannten Punkte ausschlaggebend: Python-Code direkt aus- geführt werden kann und nicht erst durch einen Python-Code lässt sich nicht nur relativ einfach schreiben und lesen, sondern ist außer- Compiler in Befehle einer Maschinensprache über- dem extrem robust und leistungsstark. setzt werden muss. Als benutzerfreundliche, kompakte Programmiersprache ist Python eine naheliegende Option für die schnelle Erstellung funktionsfähiger Prototypen. Python ist die Sprache der Wahl im Bereich Data Science und kommt bei vielen Projek- Data Science/Datenwis- ten rund um die künstliche Intelligenz zum Einsatz. senschaften In diesem akademischen Wegen der weiten Verbreitung der Sprache in den Bereichen Data Science und KI sind Feld werden wissen- zahlreiche Python-Bibliotheken für mathematische und statistische Anwendungen schaftliche Ansätze für die sowie Deep Learning und andere Varianten des maschinellen Lernens verfügbar. Organisation, Darstellung und Analyse von Daten Es gibt außergewöhnlich leistungsstarke Bibliotheken und Frameworks für die Entwick- mithilfe von Algorithmen lung von Webanwendungen in Python (wie beispielsweise Django und Flask). und Automatisierung erarbeitet. Da sich Python sowohl in der akademischen Lehre als auch in der beruflichen Praxis einer wachsenden Beliebtheit erfreut, steigt die Zahl gut bezahlter Stellen für Python- Entwickler:innen. Somit lohnt sich das Erlernen der Programmiersprache auch unter finanziellen Aspekten! 1.2 Download und Installation von Python Grundsätzlich ist die neueste Version der Programmiersprache mitsamt diverser nützli- cher Ressourcen auf der Python-Website zum Download verfügbar. Eine Möglichkeit besteht also darin, dass Sie zunächst Python installieren und dann gewünschte Pakete und Tools manuell hinzufügen. Doch gehen wir hier einen etwas anderen Weg über eine Distribution, um die Installation und Verwaltung zu vereinfachen. Distribution Eine Python-Distribution bezeichnet eine Samm- Eine der gängigsten Python-Distributionen für datenwissenschaftliche Anwendungen und lung von Python-Softwa- das maschinelle Lernen - beides ist heutzutage in vielen Bereichen relevant - ist Anaconda. repaketen, Interpreter, Diese Distribution enthält zahlreiche Bibliotheken, die in diesem Kontext häufig Verwen- und oft zusätzlichen Tools und Bibliotheken, die dung finden. Drei der wichtigsten seien hier exemplarisch genannt: darauf abzielen, die Installation und Verwal- tung von Python sowie NumPy: eine äußerst effiziente Bibliothek für die Verarbeitung großer Datensätze und dessen Abhängigkeiten mehrdimensionaler Arrays und Anwendungsumge- SciPy: eine für wissenschaftliche Berechnungen konzipierte Bibliothek mit Funktionen bungen zu vereinfachen. für lineare Algebra, Interpolation und Signal- und Bildverarbeitung Pandas: eine Bibliothek mit Funktionen für die Verwaltung und Analyse von numeri- schen Tabellen und Zeitreihendaten 15 Neben Anaconda gibt es weitere Distributionen für den datenwissenschaftlichen Einsatz von Python. Eine mögliche Alternative ist Python(x,y) für wissenschaftliche Projekte, numerische Berechnungen, Datenanalyse und -visualisierung. Abgesehen davon werden von der Python-Community viele weitere interessante Open-Source-Lösungen entwickelt. Für diesen Kurs beziehen wir uns jedoch auf die Anaconda-Distribution. Auf der Anaconda-Website (www.anaconda.com) kann eine freie Version der Distribution auf Basis von Python 3.x für verschiedene Plattformen (Windows, Mac, Linux) herunterge- laden werden. Wie jede moderne Software wird auch Python in regelmäßigen Abständen aktualisiert. Wir beziehen uns hier auf die Syntax der aktuellen Version 3. Nachdem Sie die passende Version von Anaconda heruntergeladen haben, führen Sie das Installationspro- gramm aus und folgen dessen Schritten. Damit haben Sie die Einrichtung von Anaconda- Python erfolgreich abgeschlossen! Beachten Sie, dass Anaconda für kommerzielle Ziele unter bestimmten Bedingungen kos- tenpflichtig sein kann. Alternativ zu Anaconda können Sie auch Miniconda, eine freie Mini- malversion von Anaconda, die nur den Paketmanager Conda, Python, die Pakete, von denen beide abhängen, sowie eine kleine Anzahl weiterer nützlicher Pakete (wie pip, zlib und einige andere) enthält, installieren. Mittels Conda können Sie dann weitere gewünschte Pakete hinzufügen. Miniconda ist ebenfalls auf der Anaconda-Website abruf- bar. 1.3 Der Python-Interpreter, IPython und Jupyter Nach der Installation von Python können wir unsere erste Anwendung erstellen: ein klassi- sches Hallo-Welt-Programm. Dazu müssen Sie zunächst die Python-Umgebung starten. Auf einem Windows-Rechner klicken Sie dazu auf den Startbutton, dann auf „Anaconda3“ und anschließend auf „Ana- conda Prompt“ (oder auf „Anaconda Powershell Prompt“). Daraufhin erscheint eine Einga- beaufforderung: 16 Abbildung 3: Anaconda Powershell Prompt Quelle: erstellt im Auftrag der IU, 2023. Falls Sie MacOS nutzen, öffnen Sie zunächst Launchpad und klicken dann auf das Termi- nal-Symbol. Ähnliches gilt für Linux, wo ebenfalls ein Terminalfenster für die Eingabe des restlichen Codes geöffnet werden muss. In allen drei Fällen starten Sie als Nächstes den Python-Interpreter (dessen Funktion wir näher erläutern werden, sobald das Hallo-Welt-Programm fertiggestellt ist). Dazu geben Sie in der Eingabeaufforderung „python“ ein, woraufhin die folgende (oder eine ähnliche) Ausgabe auf dem Bildschirm erscheint: 17 Abbildung 4: Eingabeaufforderung - Start des Python-Interpreters (MacOS) Quelle: erstellt im Auftrag der IU, 2023. Da der Python-Interpreter jetzt läuft, können Sie in der Eingabeaufforderung Code einge- ben. Sobald Sie die Eingabe mit Enter bestätigen, führt der Interpreter den Code aus und zeigt die Ausgabe des Programms an. Für Ihre erste Python-Anwendung tippen Sie einfach print("Hello, World!") ein und betätigen dann die Eingabetaste. 18 Abbildung 5: Eingabeaufforderung - Hallo-Welt-Programm in Python (MacOS) Quelle: erstellt im Auftrag der IU, 2023. Herzlichen Glückwunsch: Sie haben soeben das klassische Hallo-Welt-Programm geschrieben! Ihre erste Anwendung zeigt bereits einen der wichtigsten Vorteile von Python. Wie ein- gangs erwähnt ist Python-Code äußerst kompakt, sodass Sie mit weniger Zeilen mehr Fea- tures realisieren können. Genau das zeigt sich hier: Eine kurze Zeile genügt! Werfen wir zum Vergleich einen kurzen Blick auf entsprechende Hallo-Welt-Programme In Java und C. Abbildung 6: Hallo-Welt-Programm in Java Quelle: erstellt im Auftrag der IU, 2023. 19 Abbildung 7: Hallo-Welt-Programm in C Quelle: erstellt im Auftrag der IU, 2023. Wie Sie sehen, ist das Hallo-Welt-Programm in Python deutlich besser lesbar, leichter ver- ständlich, einfacher zu programmieren und schneller zu erstellen. All diese Prinzipien waren Leitlinien für die Entwicklung von Python. Insofern ist es kein Wunder, dass Python weltweit beliebt ist und immer mehr Zulauf erhält. Doch wie ist das möglich? Der Hauptunterschied besteht darin, dass viele andere Pro- grammiersprachen einen Compiler nutzen. Dabei wird der Code an den Compiler übermit- telt, der das gesamte Programm zunächst in eine mit dem Zielgerät (oder Host) kompa- tible Maschinensprache übersetzt. Der Maschinencode wird anschließend ausgeführt und der Output ausgegeben. Im Gegensatz dazu laden interpretierte Programmiersprachen einen Interpreter, der den Output ohne vorherige Erstellung von Maschinencode als eige- nes Artefakt ausgibt. Dieser wichtige Unterschied zwischen kompilierten und interpretier- ten Programmiersprachen wird durch das nachstehende Diagramm illustriert: Abbildung 8: Kompilierte und interpretierte Programmiersprachen im Vergleich Quelle: Smith, 2022. In Python wird der eingegebene Code dementsprechend vom Interpreter empfangen, der das Programm zunächst liest, in sogenannten Bytecode übersetzt, dann die Ausführung in einer Python Virtual Machine veranlasst und so die Ausgabe des Outputs übernimmt. Auch bei unserem Hallo-Welt-Programm wurde die Zeile print("Hello, World!") zuerst 20 vom Interpreter gelesen und als gültiger Python-Befehl identifiziert. Anschließend wurde sie in Bytecode übersetzt und ausgeführt, woraufhin auf dem Bildschirm die Ausgabe erschien: Hello, World! IPython und Jupyter Eine attraktive Erweiterung der klassischen Python-Kommandozeileneingabe ist die inter- aktive Shell-Umgebung IPython. Das IPython-Terminal unterstützt die meisten Linux- Befehle wie ls oder cd, und verfügt außerdem über einen Befehlsspeicher, Funktionen zur automatischen Vervollständigung von Python-Befehlen und viele weitere nützliche Features. Eine vollständige Liste finden Sie in der IPython-Dokumentation. Sie können die IPython-Shell starten, indem Sie die Anaconda-Eingabeaufforderung öff- nen und dort „IPython“ anstelle von „Python“ eingeben. Dadurch erhalten Sie unter ande- rem Zugriff auf: Debugging-Funktionen für Python-Programme, Hilfen, die durch die Eingabe eines Fragezeichens (?) neben den betreffenden Befehlen oder Objektnamen im Code aufgerufen werden können, erweiterte Feedbackfunktionen, die relevante Eingabe- und Ausgabe-Zeilen grafisch hervorheben, die automatische Vervollständigung von unvollständig eingegebenen Befehlen mit der Tabulatortaste – und eine Vielzahl weiterer Tools. Eines der interessantesten Features von IPython ist das IPython-Notebook, das Entwick- lungsteams die Möglichkeit bietet, formatierten Text, Inlinecode, mathematische Formeln, Kurvenplots, Diagramme und andere Medien in einem Dokument zu kombinieren. Hierauf aufbauend entstand im Jahr 2014 ein Spin-off namens Jupyter, das IPython als Backend bzw. Python-Kernel nutzt und sich auf die Weiterentwicklung der Notebook-Oberfläche Kernel konzentriert. Ein Jupyter-Kernel ist ein Programm, das die auf der Notebook-Oberfläche Werfen wir also einen Blick auf Jupyter Notebook. Dazu rufen wir zunächst die Anaconda- vorgenommenen Einga- Eingabeaufforderung auf und geben dort „jupyter notebook“ ein, gefolgt von der Eingabe- ben verarbeitet. Dabei kommunizieren das Note- taste. Beim daran anschließenden Startprozess wird auf Ihrer Konsole Text ausgegeben, book und der Kernel über der den erfolgreichen Start des Jupyter-Servers dokumentiert und in etwa folgenderma- das ZeroMQ-Protokoll. ßen aussieht: 21 Abbildung 9: Jupyter Notebook - Start des Servers (MacOS) Quelle: erstellt im Auftrag der IU, 2023. Zugleich öffnet sich ein Browser-Fenster mit der Jupyter-Startseite, auf der Sie ein vorhan- denes Notebook auswählen oder ein neues Notebook erstellen können: 22 Abbildung 10: Jupyter Notebook - Auswahl/Erstellung eines Notebooks Quelle: erstellt im Auftrag der IU, 2023. Die angezeigte Verzeichnisliste sollte Ihnen bekannt vorkommen: unter Windows ent- spricht das Stammverzeichnis der Liste dem aktuellen Ordner, aus dem Sie die Anwen- dung in der Eingabeaufforderung gestartet haben. Beachten Sie, dass es bei unterschiedlichen Versionen und Plattformen zu Unterschieden kommen kann, so dass die folgenden Abbildungen vielleicht nicht exakt ihrer Oberfläche entsprechen. Nun erstellen wir ein neues Notebook über „New“, welches im Browserfenster ungefähr so aussieht: 23 Abbildung 11: Jupyter Notebook - Leeres Notebook Quelle: erstellt im Auftrag der IU, 2023. Notebooks wie dieses bieten Ihnen die Möglichkeit, Code und formatierten Text in ein und demselben Dokument zu kombinieren, indem Sie Sektionen bzw. „Zellen“ einrichten, auf die Sie dann Ihre Inhalte verteilen. Wenn eine Zelle ausgewählt und hervorgehoben ist, können Sie deren Inhaltstyp über das Drop-down-Menü der Werkzeugleiste wie hier dar- gestellt festlegen: Abbildung 12: Jupyter Notebook - Inhaltstyp einer Zelle festlegen Quelle: erstellt im Auftrag der IU, 2023. 24 Nun können wir mit der Arbeit an unserem ersten Notebook beginnen. Da unser Hallo- Welt-Programm ein so durchschlagender Erfolg war, scheint es angemessen, dass wir eine spezielle Seite dafür erstellen. In unserem Beispiel ist die erste Zelle unseres – noch leeren – Dokuments bereits ausgewählt, was Sie daran erkennen können, dass sie mit einer Umrandung versehen und mit einem blauen Balken an ihrer linken Seite markiert ist. Wäh- len Sie nun im Drop-down-Menü die Option „Markdown“, um den Inhaltstyp dieser Zelle Markdown entsprechend festzulegen. Eine gängige Auszeich- nungssprache mit einfa- cher Syntax Markdown-Zellen bieten uns die Möglichkeit, den dort eingegebenen Text unter Verwen- dung der Markdown-Syntax auf verschiedene Weise zu formatieren. Beispielsweise kön- nen Sie hier mithilfe des Rautezeichens (#) Inhalte als Überschriften kenntlich machen, damit diese in einem größeren Font und in Fettschrift dargestellt werden: Eine einzelne Raute kennzeichnet die Überschriften der ersten Ebene, zwei aufeinanderfolgende Rauten kennzeichnen die Überschriften der zweiten Ebene und so weiter. Dabei sollten Sie stets darauf achten, dass Sie nach der (letzten) Raute ein Leerzeichen einfügen – ansonsten geht Markdown davon aus, dass die Raute Teil des darauffolgenden Wortes ist. Erstellen wir also zunächst eine Überschrift, indem wir den folgenden Text in die Zelle eingeben: # My Hello World Page Anschließend fügen wir eine neue Zelle unterhalb der ersten hinzu, indem wir in der Tool- bar auf den Button mit dem Plussymbol und der Bezeichnung „Insert Cell“ klicken. Danach setzen Sie den Inhaltstyp dieser Zelle ebenfalls auf „Markdown“, damit wir dort ein paar Kontextinformationen zu unserer neuen Seite eingeben und sie mit ein paar wei- teren Markdown-Tricks formatieren können. So nutzen wir erstens ein Paar doppelter Sternchen (**), um den davon eingeschlossenen Textabschnitt fett darzustellen. Zweitens erstellen wir einen Hyperlink, indem wir den Titel des Links in eckige Klammern setzen und die verlinkte URL in runden Klammern angeben, gemäß dem Format: [Titel](URL). Kombinieren Sie beide Formatierungsanweisungen, indem Sie die neue Zelle mit folgen- dem Inhalt füllen: Welcome to my **Hello World** page. To learn more about Python, click [here](http://www.python.org). Überlegen wir noch einmal kurz, was diese Texteingabe bewirkt: Nach allem, was wir bereits über Markdown wissen, können wir davon ausgehen, dass der von doppelten Sternchen eingeschlossene Textabschnitt (Hello World) in Fettschrift umgewandelt wird. Zugleich ist klar, dass der zweite Satz als „To learn more about Python, click here“ ausgegeben wird, wobei es sich bei dem Wort „here“ um einen Hyperlink zur Python- Homepage handelt. Nun erstellen wir mithilfe des „Insert Cell“-Buttons eine dritte Zelle, deren Inhaltstyp wir mithilfe des oben erwähnten Drop-down-Menüs aus der Toolbar als „Code“ definieren. Grundsätzlich können Sie in eine solche Code-Zelle beliebigen Python- Code eingeben. Im Fall unserer Hallo-Welt-Seite jedoch beschränken wir uns auf die fol- gende altbekannte Zeile: print("Hello, World!") 25 Damit ist die Eingabe der Inhalte abgeschlossen und wir können uns der Ausführung der Zellen unseres Dokuments bzw. der darin enthaltenen Inhalte zuwenden. Hier gilt: Wenn es sich um eine Markdown-Zelle handelt, wird der dort vorfindliche Text durch den Mark- down-Parser verarbeitet und entsprechend formatiert. Analog dazu wird der Inhalt von Code-Zellen durch den Python-Interpreter gelesen und ausgeführt, genau wie bei der Ein- gabe in der Python-Eingabeaufforderung. Und da Jupyter, wie Sie bereits wissen, IPython als Interpreter nutzt, stehen Ihnen in der Notebook-Umgebung sämtliche Features von IPython zur Verfügung. Möchten Sie nun eine einzelne Zelle ausführen, können Sie diese einfach auswählen und dann auf den „Run“-Button in der Werkzeugleiste klicken. Alternativ haben Sie die Mög- lichkeit, sämtliche Zellen Ihres Dokuments über das Menü (im Regelfall über der Werk- zeugleiste) auszuführen. In unserem Beispiel wird daraufhin die folgende Seite angezeigt: Abbildung 13: Jupyter Notebook - Ausführung der Hallo-Welt-Seite Quelle: erstellt im Auftrag der IU, 2023. Herzlichen Glückwunsch, Sie haben soeben Ihr erstes Jupyter-Notebook mit Python-Code und formatiertem Text erstellt! Im Idealfall sollten Sie jetzt ein durchweg positives Fazit ziehen können: Die Formatierung der Markdown-Zellen hat genau wie vorgesehen funktioniert. Falls die Ausgabe auf Ihrem Bildschirm nicht wie oben dargestellt aussieht, sollten Sie die Plat- zierung Ihrer Rautezeichen und Doppel-Sternchen nochmals überprüfen und dabei auch sicherstellen, dass jeder Raute ein Leerzeichen folgt. Der Hyperlink funktioniert. Wenn Sie ihn anklicken, sollten Sie direkt zur Python-Home- page gelangen. Die Code-Ausführung in Jupyter gleicht der Code-Ausführung im IPython-Terminal dahingehend, dass hier wie dort Input-Zeilennummern angegeben werden und die jeweilige Konsolenausgabe direkt unter den ausgeführten Codezeilen erscheint. 26 Es ist erstaunlich einfach, Dokumente zu erstellen, die sowohl Python-Code als auch for- matierten Text beinhalten. Damit bleibt nur noch eines zu tun: Unser Dokument braucht einen Namen, da es aktuell als „Untitled“ gespeichert ist. Wie Sie sehen, wird das Wort „Untitled“ oberhalb der Menü- leiste, neben dem Jupyter-Logo angezeigt – dies ist der Dokumentenname. Klicken Sie also auf das Wort und geben Sie stattdessen „HelloWorld“ ein. Abbildung 14: Jupyter Notebook - Umbenennung der Hallo-Welt-Seite Quelle: erstellt im Auftrag der IU, 2023. Anschließend können Sie die Bearbeitung des Dokuments beenden, indem Sie die ent- sprechende Registerkarte Ihres Browsers schließen. Die Inhalte des Dokuments werden von Jupyter automatisch gespeichert (mit Ausnahme der gerade editierten Zelle). Wenn wir also zu einem späteren Zeitpunkt zur Verzeichnisliste von Jupyter zurückkehren, kön- nen wir uns davon überzeugen, dass unser Hallo-Welt-Dokument als „HelloWorld.ipynb“ gespeichert worden ist. Hier gibt die Dateierweiterung „ipynb“ an, dass es sich um eine Notebook-Datei (NB) handelt, die IPython (IPY) als Interpreter nutzt. Nun können Sie nach Belieben neue Notebooks erstellen oder vorhandene Notebooks zur Bearbeitung aufrufen. 27 Abbildung 15: Jupyter Notebook - Verzeichnisliste mit Hallo-Welt-Seite Quelle: erstellt im Auftrag der IU, 2023. JupyterLab Wie bereits erwähnt wird das aus IPython hervorgegangene Jupyter-Projekt kontinuierlich weiterentwickelt. Die derzeit neueste Version ist unter der Bezeichnung JupyterLab ver- fügbar und enthält neben der im letzten Abschnitt diskutierten Notebook-Umgebung noch einige andere nützliche Tools für die Entwicklung von Python-Anwendungen. Um Jupyter- Lab zu starten, öffnen Sie einfach die Anaconda-Eingabeaufforderung und geben dort „jupyter lab“ ein, gefolgt von der Entertaste. Daraufhin werden auf Ihrer Konsole – genau wie beim Start von Jupyter Notebook – Informationen zur Initialisierung der Serversitzung ausgegeben, während die JupyterLab-Startseite in einem neu geöffneten Browserfenster erscheint: 28 Abbildung 16: JupyterLab - Startseite Quelle: erstellt im Auftrag der IU, 2023. Bei einem genaueren Blick auf den Startbildschirm von JuypterLab werden Sie feststellen, dass die Oberfläche Jupyter Notebook ähnelt, weil auch hier eine Verzeichnisliste (auf der linken Seite) angezeigt wird. Wurde JupyterLab in demselben Stammverzeichnis wie Jupy- ter Notebook gestartet, so sollte nun auch das oben erstellte Notebook „Hello- World.ipynb“ aufgeführt sein. Zusätzlich finden sich im Hauptfenster einige Icons, unter „Notebook“ etwa „Python 3“, mit dem Sie (genau wie im vorherigen Beispiel) ein neues Notebook mit IPython 3 als Interpreter erzeugen können. Darüber hinaus bietet Ihnen das Menü „File“ die Möglichkeit, ein geöffnetes Notebook in verschiedenen Dateiformaten zu exportieren. Allerdings müssen für einige Formate zunächst zusätzliche Bibliotheken installiert werden. Wenn Sie nun auf der Startseite von JupyterLab unter „Console“ das Icon „Python 3“ anklicken, öffnet sich ein Konsolenfenster, das der oben besprochenen IPython-Einga- beaufforderung ähnelt. Hier können Sie unten in der Eingabezeile erneut den Hallo-Welt- Code eingeben und diesen (diesmal) mit der Shift-Taste in Kombination mit der Eingabe- taste bestätigen. Die Ausgabe sieht dann etwa folgendermaßen aus: 29 Abbildung 17: JupyterLab - Python-3-Konsole Quelle: erstellt im Auftrag der IU, 2023. Analog dazu öffnet ein Klick auf das Icon „Terminal“ ein Terminalfenster, in dem Sie, wie unten dargestellt, mit dem ls-Befehl die Inhalte des aktuellen Verzeichnisses abrufen, oder nach Start des IPython Interpreters einmal mehr unser bekanntes Hallo-Welt-Programm eingeben und starten können. 30 Abbildung 18: JupyterLab - Terminal Quelle: erstellt im Auftrag der IU, 2023. Die Verwendung eines Notebooks ist für unsere Zwecke aber sicherlich die angenehmste Art und Weise, Python zu programmieren. Außerdem bieten Ihnen die restlichen Icons auf der Jupyter-Startseite die Möglichkeit, spezielle Dateien für unformatierten Text oder Markdown-Inhalte zu erstellen oder die Kontexthilfe aufzurufen. Letztere versetzt die Benutzer:innen in die Lage, durch einen Klick auf Funktionen oder Objekte im Python-Code nützliche Informationen zu diesen Ele- menten anzuzeigen. All diese Vorteile lassen erkennen, dass JupyterLab als robuste, integrierte Entwicklungs- umgebung für große Python-Entwicklungsprojekte konzipiert wurde. Zugleich zeigt sich, dass die Open-Source-Anwendung wegen ihrer Nutzerfreundlichkeit ideal als Plattform zum Erlernen der Programmiersprache geeignet ist. Damit stehen Ihnen nun sämtliche Tools zur Verfügung, die Sie für Ihren Einstieg in das Programmieren mit Python benötigen. In den folgenden Lektionen lassen wir das einfache Hallo-Welt-Programm hinter uns und lernen die Grundlagen der Anwendungsentwicklung mit Python kennen, indem wir dynamischeren Code mit komplexeren Funktionen erstel- len. 31 ZUSAMMENFASSUNG Python gewinnt in der Softwareentwicklung immer mehr an Popularität, nicht zuletzt wegen seiner leicht lesbaren, kompakten Syntax. Die Pro- grammiersprache wird also nicht nur von Lehrkräften und Studierenden der Informatik geschätzt, sondern hat innerhalb kurzer Zeit auch in der globalen Softwareentwicklung weite Verbreitung gefunden. In beiden Bereichen besticht Python zum einen durch Benutzerfreundlichkeit, robuste Lauffähigkeit und vielfältige Features, zum anderen durch ein breites Angebot an kostenlos verfügbaren Tools und die Unterstützung einer ebenso großen wie aktiven Entwickler-Community. Insbesondere ist Python heute die Programmiersprache der Wahl für datenwissenschaftliche und KI-bezogene Projekte, da die Python-Com- munity extrem leistungsstarke und effiziente Bibliotheken für mathema- tische und statistische Anwendungen, die Verwaltung, Verarbeitung und Visualisierung von Daten sowie Deep Learning und andere Formen des maschinellen Lernens entwickelt hat. Python ist eine interpretierte Programmiersprache, was bedeutet, dass der Python-Interpreter den eingegebenen Code liest, ausführt und die Ausgabe an die Benutzer:innen zurückliefert. Dabei stehen den Letzt- eren mit IPython und Jupyter einige attraktive Erweiterungen der klassi- schen Python-Installation zur Verfügung. So nutzen Jupyter Notebook und JupyterLab die leistungsstarke IPython-Shell zur Bereitstellung einer funktionsstarken Entwicklungsumgebung, die Projektteams die Möglichkeit bietet, an mehreren Dateien parallel zu arbeiten, und sowohl Python-Code und formatierten Text als auch Terminalfenster und andere Tools miteinander zu kombinieren. 32 LEKTION 2 VARIABLEN UND DATENTYPEN LERNZIELE Nach Abschluss dieser Lektion werden Sie in der Lage sein, … – Variablen in Python zu benutzen und ihnen verschiedene Werte zuzuweisen. – verschiedene numerische Datentypen zu verwenden. – Strings und andere zeichenbasierte Datentypen einzusetzen. – Collections anzulegen und zur Verwaltung von Daten zu nutzen. – grundlegende Datei-Eingabe- und -Ausgabe-Operationen durchzuführen. 2. VARIABLEN UND DATENTYPEN Aus der Praxis Mehmet und Lea haben sich entschieden: Sie möchten ihre Fußball-App zur Spielerent- wicklung und -analyse mit Python erstellen. Ausschlaggebend war dabei zum einen die Nutzerfreundlichkeit der Programmiersprache, die die zügige Entwicklung eines funktion- ierenden Prototyps erleichtert. Zum anderen überzeugte sie die enorme Leistungsfähig- keit von Python, weil sie sich davon die Möglichkeit versprechen, nach Abschluss der Pro- totyp-Phase nahtlos mit der Erstellung des Endprodukts fortzufahren, anstatt nochmals ganz von vorn mit einer anderen Programmiersprache zu beginnen. Und selbstverständ- lich wissen die beiden Neulinge auch das breite Angebot an von der Python-Community bereitgestellten Ressourcen zu schätzen. Vor allem aber besticht Python aus ihrer Sicht durch die umfangreichen Bibliotheken für die Datenverarbeitung und -visualisierung, mathematische Berechnungen, künstliche Intelligenz und das maschinelle Lernen. Denn Mehmet und Lea wissen, dass ihre Anwen- dung riesige Mengen von Spiel- und Spielerdaten – wie beispielsweise die jeweiligen Platz- und Wetterbedingungen sowie die Laufgeschwindigkeit – erfassen und verarbeiten muss und dass die Identifizierung der zu verbessernden Bereiche ausgeklügelte Analyseverfah- ren sowie ein hohes Maß an Rechenleistung erfordert. All diese Herausforderungen sind ihrer Ansicht nach am besten mit Python zu bewältigen. Damit scheinen die Anfangsschwierigkeiten zunächst überwunden. Doch als die beiden mit der Planung ihres Projekts beginnen, erkennen sie schnell, dass sie bei der Entwick- lung ihrer Anwendung kompetente Unterstützung benötigen. Deshalb wenden sich Meh- met und Lea vertrauensvoll an Sie – mit der Bitte, ein Modul zur Speicherung und zur Anzeige von Spielerdaten zu programmieren. In diesem Zusammenhang stellen sich Ihnen unter anderem die folgenden Fragen: Wie lassen sich Angaben wie Name, Größe, Gewicht, Laufgeschwindigkeit und Alter in Python-Anwendungen ablegen? Wie können Daten verschiedener Spieler:innen gleichzeitig abgelegt werden? Wie lassen sich einmal eingegebene Daten dauerhaft speichern, sodass sie beim nächs- ten Aufruf der App weiterhin verfügbar sind? 2.1 Variablen und Wertzuweisungen In Ihrer neuen Rolle als Mitglied des Entwicklungsteams sind Sie also zunächst aufgefor- dert, effektive Methoden zur Speicherung von Spielerdaten ausfindig zu machen. Dabei besteht das gängigste und grundlegendste Verfahren in der Nutzung sogenannter Variab- len, die gewissermaßen als Behälter oder Umschläge für Informationen dienen. Ist bei- spielsweise bekannt, dass ein bestimmter Spieler 73 kg wiegt, und diese Angabe als Grundlage für weitere Berechnungen genutzt werden soll, kann dieser Zahlenwert einfach 34 an allen hierfür relevanten Stellen in den Programmcode geschrieben werden. Doch was passiert, wenn sich das Gewicht des Spielers ändert und wir die Angabe aktualisieren müssen? Diese Art der festen Angabe von Zahlen- oder anderen Werten wird als Hard- Coding (hartkodierte Werte) bezeichnet und gilt zurecht als riskante Praxis. Denn wenn Hartcodiert das Gewicht des Spielers hartcodiert ist, müssen wir bei jeder Gewichtsänderung alle rele- Ein hartcodierter Wert ist fix und kann nur durch vanten Stellen im Code ausfindig machen und die sich dort befindenden Angaben anpas- eine Modifikation des sen. Programmcodes selbst verändert werden. Alternativ bietet es sich an, eine Variable zur Speicherung der Gewichtsangabe zu nutzen. Das ist in etwa so, als würden Sie dem fraglichen Spieler einen Umschlag mit der Aufschrift „Gewicht“ zuteilen und eine Karteikarte mit der Aufschrift „73 kg“ hineinstecken. Wenn wir dann später die Gewichtsangabe erneut benötigen, können wir einfach den Umschlag her- vorholen und einen Blick auf das darin enthaltene Kärtchen werfen. Wenn sich das Gewicht ändert, ersetzen wir einfach die alte Karteikarte durch eine neue, damit sicherge- stellt ist, dass allen Interessierten von nun an der aktualisierte Wert vorliegt. So lässt sich die Logik hinter dem Konzept der Variablen zusammenfassen. In Python wird eine Variable durch die Eingabe eines beliebigen Bezeichners erzeugt. Die- ser Bezeichner darf nicht bereits für andere Variablen vergeben oder als Schlüsselwort Schlüsselwort klassifiziert sein. Beispielsweise hat das Wort „def“ eine spezielle Bedeutung: Es wird zur In jeder Programmier- sprache gibt es Deklaration eigener Funktionen verwendet. Daher ist das Wort „def“ in Python ein Schlüs- bestimmte Wörter, die selwort und kein gültiger Variablenname. Abgesehen davon gelten die beiden folgenden bereits bestimmte Bedeu- Regeln für die Benennung von Variablen: tungen haben und des- halb nicht im Rahmen von Programmen als Ein Variablenname muss entweder mit einem Buchstaben oder einem Unterstrich (_) Name für Variablen oder Funktionen gewählt wer- beginnen. den können. Ein solches Der Rest des Variablennamens kann aus Buchstaben, Zahlen und Unterstrichen beste- Wort wird als Schlüssel- hen. wort (auch: reserviertes Wort) bezeichnet. Dementsprechend sind die Bezeichner „weight“ und „_weight“ gültige Variablennamen in Python, während der Bezeichner „5weight*)“ unzulässig ist. Auf dieser Grundlage können wir nun zur Übung einige Variablen erstellen. Öffnen Sie dazu zunächst JupyterLab, indem Sie in der Anaconda-Eingabeaufforderung „juypter lab“ eingeben. Anschließend öffnen Sie auf dem Startbildschirm von JupyterLab eine Python-3-Konsole. Daraufhin sollte die Anzeige auf Ihrem Bildschirm in etwa folgenderma- ßen aussehen: 35 Abbildung 19: Geöffnete Python-3-Konsole in JupyterLab Quelle: erstellt im Auftrag der IU, 2023. Geben Sie nun in der Eingabezeile am unteren Rand der Konsole weight = 73 ein und drücken Sie dann Shift + Enter, um den Code auszuführen. Als Ergebnis wird die eben ein- gegebene Zeile – wie nachfolgend dargestellt – in der oberen Hälfte der Konsole angezeigt: 36 Abbildung 20: Python-3-Konsole - Erstellung der Variable „weight“ Quelle: erstellt im Auftrag der IU, 2023. Sie haben soeben Ihre erste Python-Variable erzeugt! Mit dieser Codezeile (Anweisung) haben Sie dem Python-Interpreter mitgeteilt, dass Sie eine neue Variable mit dem Namen weight erstellen und ihr den Wert 73 zuweisen möchten. Die Anweisung wurde vom Inter- preter als gültig erkannt, da keine Fehlermeldung angezeigt wird. Was würde passieren, wenn bei der Vergabe von Variablennamen die dafür geltenden Regeln verletzt werden? Geben Sie dazu in der Eingabezeile der Konsole $weight = 73 ein und drücken Sie dann Shift + Enter, um den Code auszuführen. Auf dem Bildschirm sollte nun die Fehlermeldung „invalid syntax“ erscheinen: 37 Abbildung 21: Python-3-Konsole - Fehlermeldung „invalid syntax“ Quelle: erstellt im Auftrag der IU, 2023. Wie ist es zu dieser Fehlermeldung gekommen? Rufen wir uns zunächst einige Dinge ins Gedächtnis: Erstens hat der von uns eingegebene Code die oben genannten Regeln für die Vergabe von Variablennamen verletzt, weil die gewählte Bezeichnung nicht mit einem Buchstaben oder Unterstrich, sondern mit einen Dollarzeichen beginnt. Zweitens wissen wir bereits, dass unsere Eingabe bei Betätigung der Tastenkombination Shift + Enter an den Python-Interpreter übermittelt und von diesem auf ihre Richtigkeit hin überprüft wird. Ist der Code gültig, übernimmt der Interpreter sowohl die Ausführung der Zeilen als auch die Darstellung der Ausgabe auf dem Bildschirm. Ist der eingegebene Code jedoch ungül- tig, wird eine Fehlermeldung ausgegeben. Genau das ist hier geschehen. Drittens sollten wir uns daran erinnern, dass der Ausdruck „Syntax“ die für die Erstellung von Code gelten- den Regeln bezeichnet. In unserem Beispiel wird also die Fehlermeldung „invalid syntax“ ausgegeben, weil unsere Eingabe die Regeln für die Benennung von Variablen verletzt hat. Damit ist die Erstellung der ungültigen Variable $weight gescheitert, während die gültige Variable weight mit dem Wert 73 weiterhin Bestand hat. Die Konsole hält sämtlichen im Rahmen einer Sitzung eingegebenen Code im Arbeitsspeicher. Haben Sie eine Idee, wie wir das überprüfen können? 38 Wie wäre es mit dem print-Befehl? Wir haben diesen Befehl bereits in unserem Hallo-Welt- Programm genutzt, um den Text „Hello, World!“ auf dem Bildschirm erscheinen zu lassen. Der Befehl sollte also auch hier geeignet sein, um den Wert eine Variable anzuzeigen. Pro- bieren wir es aus: Geben Sie in der Konsole print(weight) ein und drücken Sie dann Shift + Enter. Abbildung 22: Python-3-Konsole - Ausgabe des Variablenwerts von „weight“ Quelle: erstellt im Auftrag der IU, 2023. Es funktioniert! Der Interpreter erkennt automatisch, dass das Wort weight hier eine Vari- able bezeichnet. Daher ruft er den der Variable zugewiesenen Wert ab und gibt diesen auf dem Bildschirm aus. Gute Arbeit! An dieser Stelle sollten wir uns noch ein wenig genauer mit der Benennung von Variablen beschäftigen, da bei der Auswahl entsprechender Namen neben den oben genannten Syn- taxregeln auch bestimmte Standards zu beachten sind. Zur besseren Lesbarkeit von Python-Code hat die Python-Community einen Styleguide erstellt, der unter anderem Best Practices für die Vergabe von Bezeichnern enthält. Damit soll erreicht werden, dass alle Python-Programme weltweit eine ähnliche Struktur aufweisen und bestimmten Kon- ventionen folgen. In unserem Fall gibt diese Konvention vor, dass Variablennamen erstens ausschließlich aus Kleinbuchstaben bestehen und zweitens durch Unterstriche in die ver- schiedenen konstitutiven Wörter unterteilt werden sollten (falls sie aus mehreren Begrif- fen zusammengesetzt sind). Den vollständigen Styleguide finden Sie auf der Python-Web- site. 39 Wenn Sie vor diesem Hintergrund den Variablennamen weight beurteilen, werden Sie wahrscheinlich zu dem Schluss kommen, dass dieser in puncto Lesbarkeit zu wünschen übrig lässt, weil er nicht selbsterklärend ist. Unter Berücksichtigung der Vorgaben aus dem Styleguide wäre der Bezeichner player_weight eine für unsere Zwecke passendere Wahl. Unterscheidet man zwischen gültigen (syntaxkonformen) und ungültigen (nicht syntax- konformen) Variablennamen, sowie zwischen solchen, die den Konventionen des Python- Styleguides entsprechen bzw. nicht entsprechen, so kann man Variablennamen in vier Kategorien einteilen: Abbildung 23: Kategorien potenzieller Variablennamen Quelle: erstellt im Auftrag der IU, 2023. In dem Schema umfasst die Spalte „ungültig“ alle Bezeichner, die unzulässig sind und – wie der Name $weight – Fehlermeldungen verursachen. Dabei bleibt das Feld am Schnitt- punkt der Kategorien „Ungültig“ und „entspricht der Konvention“ leer, weil die Einhaltung der Konvention die Beachtung der Syntaxregeln voraussetzt und folglich jede ungültige Variable per Definition nicht der Konvention entspricht. Im Gegensatz dazu beinhaltet die Spalte „gültig“ sowohl der Konvention entsprechende als auch nicht entsprechende Bezeichner. Obwohl es den Regeln der Programmiersprache Python entspricht, gültige, aber nicht der Konvention entsprechende Variablennamen zu wählen, ist es doch empfeh- lenswert, sich an die Konventionen zu halten und damit besser lesbare Bezeichner zu ver- geben. Dementsprechend sollten sämtliche verwendeten Variablennamen folgenden Regeln genügen: mit einem Buchstaben oder Unterstrich beginnen (Python-Syntaxregel), ausschließlich Buchstaben, Ziffern und Unterstriche enthalten (Python-Syntaxregel), nur Kleinbuchstaben verwenden (Python-Konvention), mit einem Kleinbuchstaben beginnen (Python-Konvention), selbsterklärend sein, auch wenn dafür Kombinationen aus mehreren Wörtern erforder- lich sind (Python-Konvention), und Unterstriche zur Trennung der verschiedenen Bestandteile von aus mehreren Wörtern zusammengesetzten Bezeichnern enthalten (Python-Konvention). 40 In der nachfolgenden Tabelle finden Sie verschiedene Beispiele mitsamt ihrer jeweiligen Zuordnung im Vierfelderschema: Abbildung 24: Klassifizierung potenzieller Variablennamen Quelle: erstellt im Auftrag der IU, 2023. Damit ist klar, dass player_weight eine bessere, aussagekräftigere Bezeichnung für unsere Variable ist. Geben Sie also in der Eingabezeile der Konsole player_weight = 73 ein und drücken Sie dann Shift + Enter. Abbildung 25: Python-3-Konsole - Erstellung der Variable „player_weight“ Quelle: erstellt im Auftrag der IU, 2023. 41 Bitte beachten Sie, dass wir uns hier immer noch in der gleichen Konsolensitzung befin- den, in der wir zuvor die Variable weight erstellt haben. Bitte beachten Sie auch, dass der Interpreter nicht weiß, dass wir player_weight als alternativen Variablennamen gewählt haben, der den alten Bezeichner weight ablösen soll. Daher wird die alte Variable weight bei der Erstellung der neuen Variable player_weight nicht ersetzt. Stattdessen existiert im Rahmen der Sitzung nun eine Variable mit der Bezeichnung weight und eine weitere mit der Bezeichnung player_weight. Grundsätzlich sollte die Erstellung überflüssiger Variablen vermieden werden – auch wenn es hier keine große Rolle spielt, weil wir ja nur üben. Dennoch wirft das Beispiel eine interessante Frage auf: Was passiert, wenn Sie versehent- lich eine zusätzliche Variable erstellen? Um das herauszufinden, geben Sie in Ihre Konsole player_wieght = 73 gefolgt von Shift + Enter ein (bitte achten Sie darauf, den hier angegebenen Schreibfehler zu reproduzieren und vertauschen Sie das i und e in der Bezeichnung der Variable: also player_wieght anstelle von player_weight). Abbildung 26: Python-3-Konsole - Erstellung der Variable „player_wieght“ Quelle: erstellt im Auftrag der IU, 2023. Was passiert? Wie auf dem obigen Screenshot zu sehen, gibt es nun drei Variablen: die alte Variable weight, die nicht länger gebraucht wird; die neue Variable player_weight, die von nun an Gewichtsangaben enthalten soll; und die Variable player_wieght, deren Erstellung Folge eines Schreibfehlers ist. Auch die falsch geschriebene Variable funktio- niert also tadellos und verursacht keine Fehlermeldung. 42 Der Python-Interpreter verlangt hier keine Korrekturen. Jeder gültige Bezeichner, der ein- gegeben wird, wird als Variable behandelt – ganz gleich, ob er zuvor schon einmal im Code aufgetaucht ist oder nicht. Im letzteren Fall wird einfach eine neue Variable mit dem einge- gebenen Namen erstellt. Wenn wir also eine Variable mit dem Bezeichner player_weight und dem Wert 73 an ver- schiedenen Stellen in unserem Programm verwenden, bei einer späteren Aktualisierung der Gewichtsangabe dann aber versehentlich den oben genannten Schreibfehler machen und player_wieght = 74 eingeben, führt dies zu unangenehmen Konsequenzen: Wir haben nun sowohl eine Variable mit der Bezeichnung player_weight und dem Wert 73 als auch eine weitere Variable mit der Bezeichnung player_wieght und einem Wert von 74. Dadurch entsteht folgendes Problem: Bei jedem Aufruf der Variable player_weight erhalten wir nun statt des erwarteten Ergebnisses von 74 das unerwartete Resultat 73. Trotzdem besteht für Sie kein Grund zur Sorge, schließlich gehört die Suche nach schwer zu entdeckenden Fehlern im Code zum Arbeitsalltag aller Programmierer:innen. Verges- sen Sie nie, dass Python als kompakte Sprache die Programmierung unter anderem dadurch beschleunigt, dass Variablen ohne vorherige Deklaration verwendet werden kön- nen. Die umsichtige Nutzung dieses Features liegt in Ihrer Verantwortung. Seien Sie sich also stets der Tatsache bewusst, dass ein Computer genau das tut, was Sie ihm befehlen – nicht mehr, aber auch nicht weniger. Das gilt selbst dann, wenn die eingegebenen Anwei- sungen nicht die intendierte Wirkung haben, weil Sie unabsichtlich eine neue Variable namens player_wieght erstellen, anstatt den Wert der bestehenden Variable player_weight zu ändern. Ein Computer fragt nicht, sondern führt aus. Daher ist beim Programmieren in Python besondere Vorsicht geboten, um Inkonsistenzen bei der Benen- nung und Nutzung von Variablen zu vermeiden. Bevor wir nun zum nächsten Thema übergehen, müssen wir uns noch mit der Frage beschäftigen, was bei der Ausführung der Code-Zeile player_weight = 73 eigentlich passiert. So wissen wir bereits, dass der Interpreter nach dieser Eingabe eine Variable mit der Bezeichnung „player_weight“ erstellt und ihr den Wert 73 zuweist. Dabei fungiert das Gleichheitszeichen (=) als sogenannter Zuweisungsoperator, von denen es in Python meh- rere gibt (wie Sie später im Detail erfahren werden). Die Verwendung dieses Operators bewirkt immer eine Zuweisung von rechts nach links. Der Interpreter liest also den Wert auf der rechten Seite des Gleichheitszeichens (in die- sem Fall die Zahl 73) und weist ihn der Variable auf der linken Seite des Operators zu (in diesem Fall „player_weight“). In diesem Zusammenhang sind gleich mehrere Punkte zu beachten: Erstens können die Ausdrücke auf der linken und der rechten Seite des Gleichheitszei- chens nicht einfach miteinander vertauscht werden. So ist beispielsweise die Umkehrung der obigen Zuweisung, 73 = player_weight, kein gültiger Python-Code, weil der Inter- preter nicht angewiesen werden kann, einer Zahl (73) den Wert einer Variablen (player_weight) zuzuweisen. Das gilt auch dann, wenn player_weight einen gültigen Wert hat – zum Glück! Können Sie sich das Chaos vorstellen, das entstünde, wenn die Zahl 73 in Ihrem Code mit einem Mal etwas ganz anderes bedeuten könnte und beispielsweise den Wert 6 oder 991.421 oder „leckere Pizza“ hätte? Unter diesen Umständen würde die 43 Fehlersuche im Programm oder der Versuch, die darin enthaltenen Funktionen nachzu- vollziehen, zu einer wahren Sisyphusarbeit. Deshalb gelten Zahlen in Python (und ande- ren Programmiersprachen) als sogenannte Literale: Sie haben lediglich ihren Nominalwert und können nicht mit einem anderen Wert belegt werden. Auch hiervon können Sie sich wieder selbst überzeugen, indem Sie in Ihrer Konsole 73 = player_weight eingeben und dann die ausgegebene Fehlermeldung betrachten. Zweitens führt der Interpreter alle auf der rechten Seite des Gleichheitszeichens angege- benen Rechenoperationen aus, bis er schließlich einen (einzelnen) Ergebniswert erhält, den er dann der Variable auf der linken Seite zuweist. Das bedeutet, dass der Ausdruck auf der linken Seite des Operators nur ein Element umfassen darf, während auf der rechten Seite umfangreichere Ausdrücke zulässig sind. Beispielsweise handelt es sich bei der Anweisung player_weight = 70 + 3 um gültigen Python-Code, der den Interpreter veranlasst, 70 + 3 zu berechnen, das Ergebnis 73 zu erhalten und diesen Wert anschlie- ßend der Variable player_weight zuzuweisen. Doch anders als bei mathematischen Gleichungen ist player_weight = 70 + 3 in Python nicht dasselbe wie player_weight − 3 = 70 Die zweite Zeile wird nicht als gültiger Python-Code anerkannt, da auf der linken Seite des Zuweisungsoperators mehr als ein Element zu finden ist. Drittens ist zu beachten, dass auf der rechten Seite des Zuweisungsoperators nicht nur Literale, sondern auch Variablennamen oder eine Kombination aus Literalen und Variab- len stehen können. Dementsprechend ist in Python jede der unten aufgeführten Zuwei- sungen gültig: 44 Abbildung 27: Python-3-Konsole - Zuweisungen Quelle: erstellt im Auftrag der IU, 2023. Außerdem haben Sie die Möglichkeit, ein und dieselbe Variable auf der linken und der rechten Seite zu benutzen. Dabei ist lediglich zu berücksichtigen, dass der Interpreter bei der Bearbeitung einer entsprechenden Anweisung von rechts nach links voranschreitet und zunächst den Ausdruck auf der rechten Seite des Gleichheitszeichens mitsamt des darin enthaltenen Variablenwerts verarbeitet und das Ergebnis anschließend der Variab- len auf der linken Seite zuweist. Das lässt sich an dem folgenden Beispiel illustrieren: 45 Abbildung 28: Python-3-Konsole - Weitere Zuweisungen Quelle: erstellt im Auftrag der IU, 2023. Hier wird in der ersten Codezeile zunächst die Variable player_weight mit dem Wert 73 erstellt. Danach taucht dieselbe Variable (in der zweiten Zeile) sowohl auf der rechten als auch auf der linken Seite des Zuweisungsoperators auf. Da die Bearbeitung des Codes auf der rechten Seite beginnt, ruft der Interpreter zunächst den Wert von player_weight ab (der zu diesem Zeitpunkt 73 beträgt) und addiert ihn zur Zahl 5. Daraufhin wird das Ergeb- nis dieser Berechnung der Variable auf der linken Seite des Gleichheitszeichens zugewie- sen, bei der es sich ebenfalls um player_weight handelt. Abschließend wird im Zuge der Ausführung der dritten Zeile der Wert von player_weight ausgegeben. Wie wir sehen, beträgt dieser nun 78. Probieren Sie nun eigene Beispiele aus, um Ihr Know-how in diesem Bereich weiter zu ver- tiefen und die Einsatzmöglichkeiten des Gleichheitszeichens als Zuweisungsoperators auszuloten. 46 2.2 Collections Wir sind nun in der Lage, Variablen für Ganzzahlen, Gleitkommazahlen, andere numeri- sche Datentypen und jede denkbare Art von String zu erstellen. Wie wir gesehen haben, ist dieses Know-how nutzbringend anwendbar, wenn es um die Speicherung des Namens, der Trikotnummer, der Größe, des Gewichts und diverser anderer Merkmale einzelner Spieler:innen geht. Doch angesichts der Tatsache, dass ein Fußballteam üblicherweise aus mindestens elf Personen besteht, droht hier ein enormer Arbeitsaufwand. Wenn wir bei- spielsweise alle Mitglieder eines Teams erfassen, müssten wir allein 11 verschiedene Vari- ablen für deren Namen anlegen – und diesen Vorgang dann für jede relevante Eigenschaft wiederholen. Das ist ziemlich umständlich. Zum Glück bietet Python verschiedene Möglichkeiten, zusammengehörige Daten in soge- nannten Collections zu speichern. In diesem Zusammenhang interessieren uns zunächst einmal Collections des Typs „Set“. Der Datentyp „Set“ bezeichnet in Python eine Daten- struktur zur Verwaltung unsortierter Daten. Zur Erstellung eines Sets geben Sie zunächst einen Variablennamen ein, gefolgt von einem Gleichheitszeichen und einer Reihe von durch Kommata getrennten Daten in geschweiften Klammern {}: 47 Abbildung 29: Python - Sets Quelle: erstellt im Auftrag der IU, 2023. Wie der obige Screenshot zeigt, lassen sich auf diese Weise verschiedenartige Sets definie- ren: Das erste Set wird mit dem Befehl set() als leeres Set erzeugt. Im Gegensatz dazu beinhaltet das zweite Set drei Strings, das dritte verschiedene Zahlen. Das vierte enthält schließlich einen Mix aus verschiedenen Datentypen (eine ganze Zahl, einen String, eine Gleitkomma- und eine komplexe Zahl). Hier zeigt sich einmal mehr die enorme Flexibilität von Python! Wenn Sie bereits Erfahrungen mit anderen, in dieser Hinsicht restriktiveren Programmiersprachen gesammelt haben, werden Sie es sicherlich zu schätzen wissen, dass Python die Speicherung verschiedener Datentypen in ein und derselben Collection unterstützt. Zugleich ist zu beachten, dass die mithilfe der print-Funktion ausgegebenen Set-Inhalte durch Kommata getrennt und in geschweifte Klammern eingeschlossen sind. Außerdem sei erwähnt, dass ein leeres Set von der print-Funktion als set() dargestellt wird, nicht aber mit leeren geschweiften Klammern. 48 Darüber hinaus erleichtert Python die effektive Nutzung von Sets durch die Bereitstellung von sogenannten Methoden, mit denen Sie bestimmte Operationen auf dem Set durchfüh- ren und beispielsweise einzelne Elemente hinzufügen oder entfernen können. Einige besonders nützliche Methoden werden in der nachstehenden Aufstellung näher erläutert: Tabelle 1: Python – Methoden für Sets Methode Verwendungszweck add(element) Hinzufügung eines Elements zum Set remove(element) Entfernung eines spezifischen Elements aus dem Set clear( ) Entfernung aller Elemente aus dem Set Quelle: erstellt im Auftrag der IU, 2023. Weiteren Aufschluss über die korrekte Verwendung dieser Funktionen bietet das folgende Beispiel: 49 Abbildung 30: Python - Verwendung der Set-Methoden Quelle: erstellt im Auftrag der IU, 2023. In dem Beispiel-Code wird zunächst ein Set mit der Bezeichnung player_names erstellt, das anfangs die Namen von drei bekannten Fußballspielern enthält. In Zeile 11 wird die Liste mithilfe der Methode add um den Eintrag „Manuel Neuer“ erweitert, bevor in Zeile 12 der Name „Lothar Matthäus“ mithilfe der Methode remove aus dem Set entfernt wird. Danach wird der Inhalt des Sets mithilfe der print-Funktion angezeigt, damit die Richtig- keit der vorgenommenen Änderungen überprüft werden kann. Anschließend werden in Zeile 14 mithilfe der Methode clear alle Elemente aus dem Set entfernt (was daraufhin ebenfalls mit der print-Funktion überprüft wird). Es ist zu beachten, dass Sets keine Duplikate desselben Werts enthalten können. Wenn Sie versuchen, ein bereits vorhandenes Element erneut in ein Set einzufügen, wird keine zweite Instanz angelegt, obwohl Sie keine Fehlermeldung erhalten. Das liegt schlicht und ergreifend daran, dass jedes Element nur einmal im Set vorkommen kann und das betref- fende Element bereits enthalten ist. 50 Sie können sich mit der Funktionsweise der verschiedenen Methoden vertraut machen, indem Sie diese mit unterschiedlichen Datentypen verwenden. In bestimmten Fällen kann es sinnvoll sein, alle weiteren Modifikationen eines einmal angelegten Sets auszuschließen und dieses gewissermaßen einzufrieren. Tatsächlich kön- nen Sie in Python solche unveränderlichen Sets erstellen, indem Sie die in geschweifte Klammern gefasste Aufzählung der Elemente nochmals in runde Klammern einschließen und ihr dann das Schlüsselwort frozenset voranstellen: Abbildung 31: Python - Unveränderliches Set Quelle: erstellt im Auftrag der IU, 2023. Wie Sie sehen, gibt der Interpreter eine Fehlermeldung aus, wenn einem auf diese Weise „eingefrorenen“ Set ein neues Element hinzugefügt werden soll. Deshalb eignet sich ein unveränderliches Set insbesondere dann, wenn Sie in Ihrem Programm mit Daten arbei- ten, die über den gesamten Programmablauf nicht verändert werden dürfen. Als weiterer Datentyp zum Verwalten mehrerer Elemente steht Ihnen in Python der Collec- tion-Typ Liste zur Verfügung. Listen unterscheiden sich in zweierlei Hinsicht von einem Set: 1) eine Liste kann mehrere Instanzen desselben Elements umfassen und 2) Listen sind geordnet, d. h. jedes Element hat eine ganz bestimmte Position in der Liste. Des Weiteren müssen die in einer Liste enthaltenen Elemente – anders als bei der Erstellung eines Sets – nicht in geschweifte, sondern in eckige Klammern [] eingeschlossen werden. Wegen dieser abweichenden Charakteristika gibt es eigene Methoden für Listen, darunter die nachfolgend aufgeführten: 51 Tabelle 2: Python – Methoden für Listen append(element) Anfügen eines Elements am Ende der Liste insert(i, element) Einfügung eines Elements am Index i remove(element) Entfernung eines Elements aus der Liste clear( ) Entfernung aller Elemente aus der Liste count(element) ermittelt, wie häufig ein bestimmtes Element in der Liste enthalten ist Quelle: erstellt im Auftrag der IU, 2023. Wenn Sie sich näher mit der Erstellung und Nutzung von Listen vertraut machen möchten, sollten Sie außerdem einen genaueren Blick auf folgende Beispiele werfen: Abbildung 32: Python - Listen Quelle: erstellt im Auftrag der IU, 2023. 52 In diesem Zusammenhang sind zwei Dinge zu beachten: Erstens können Listen (genau wie Sets) verschiedene Datentypen umfassen. Zweitens fehlt in der obigen Aufstellung die add-Methode, weil die in einer Liste enthaltenen Daten geordnet sind. Dementsprechend können neue Einträge entweder mit der append-Methode an das Ende der Liste ange- hängt oder mit der insert-Methode an einem festgelegten Index eingefügt werden. Möglicherweise wundern Sie sich jetzt trotz der aufgezeigten Unterschiede darüber, dass es in Python sowohl Sets als auch Listen gibt. Der wichtigste Grund für diese vermeintliche Doppelung rührt von der Tatsache her, dass Sets darauf ausgelegt sind, möglichst effektiv und schnell herauszufinden, ob ein bestimmtes Element in dem Set enthalten ist, wäh- rend die Struktur einer Liste ein sehr viel effizienteres Durchlaufen aller Elemente ermög- licht (z. B. um diese anzuzeigen oder zu verändern). Es kommt also vor allem auf das jeweilige Einsatzszenario an, ob ein Set oder eine Liste besser geeignet ist. Die richtige Entscheidung kann Ihnen entscheidende Vorteile in puncto Geschwindigkeit bescheren. Dieser Aspekt wird uns in späteren Kapiteln noch ausführlicher beschäftigen, wenn wir tie- fer in die Verwendung von Listen und Sets einsteigen. Neben unveränderlichen Sets gibt es auch unveränderliche Listen: die sogenannten Tupel. Um ein solches Tupel zu erstellen, müssen Sie die aufgezählten Elemente in runde Klam- mern (statt in eckige oder geschweifte) einschließen, wie auf dem folgenden Screenshot abgebildet: Abbildung 33: Python - Tupel Quelle: erstellt im Auftrag der IU, 2023. Eine weiterer wichtiger Collection-Typ in Python ist das Dictionary. Collections dieser Art sind veränderlich und umfassen ungeordnete Elemente, die jeweils aus einem Schlüssel- Wert-Paar bestehen. Ihre Erstellung erfolgt weitgehend analog zur Erstellung von Sets – mit dem zentralen Unterschied, dass bei einem Dictionary zwischen dem Schlüssel und Wert jedes Elements ein Doppelpunkt (:) stehen muss, wie im Folgenden dargestellt: 53 Abbildung 34: Python - Dictionarys Quelle: erstellt im Auftrag der IU, 2023. Der Befehl {} erzeugt ein leeres Dictionary (nicht ein leeres Set, wie oben angemerkt). Nach der erfolgreichen Erstellung eines Dictionarys können Sie durch die Eingabe eines Schlüs- sels den dazugehörigen Wert abfragen. Geben Sie hierzu in der Eingabezeile den Namen des Dictionarys ein und fügen Sie diesem die Bezeichnung des Schlüssels in eckigen Klam- mern hinzu []. Wahlweise können Sie auch die auf dem nachstehenden Screenshot illust- rierte get-Methode benutzen: 54 Abbildung 35: Python - Verwendung von Dictionarys Quelle: erstellt im Auftrag der IU, 2023. Das waren ziemlich viele Informationen auf einmal! Machen Sie sich keine Sorgen, wenn Sie noch nicht alle Einzelheiten zu den Collection-Datentypen verstanden haben. Wichtig ist an dieser Stelle vor allem die Erkenntnis, dass es in Python vielfältige Arten von Collec- tions gibt, die beim Umgang mit großen Datenmengen und zur Erstellung leistungsfähiger Software-Anwendungen äußerst nützlich sind. 2.3 Zahlen In den vorangegangenen Beispielen und Übungen haben wir verschiedene Variablen zur Speicherung von Gewichtsangaben erstellt und ihnen den Wert 73 (stellvertretend für 73 kg) zugewiesen. Für ganzzahlige numerische Werte steht in Python der Datentyp int zur int Verfügung, der positive und negative Ganzzahlen (Englisch: integer) sowie den Wert 0 In Python umfasst der Datentyp int alle positi- umfasst. In vielen anderen Sprachen werden hier nur Zahlen innerhalb eines bestimmten ven und negativen ganzen Intervalls unterstützt und auch Python 2 unterlag in dieser Hinsicht noch gewissen Zahlen sowie die Zahl Null. Beschränkungen. Doch in Python 3 können Ganzzahlen beliebig lang sein. Als Program- mierer:innen können wir also int-Variablen nutzen, um beliebig große ganzzahlige Werte darzustellen. So weit, so gut. Aber wie sieht es aus, wenn wir genauere Angaben verarbeiten und bei- spielsweise ein Gewicht von 73,6 kg erfassen möchten? Diese und andere Dezimalzahlen mit Nachkommastellen werden in Python als Gleitkommazahl (Englisch: floating-point 55 float number) oder float abgebildet. Auch Gleitkommazahlen können über den Zuweisungs- Dieser numerische Daten- operator einer Variablen zugewiesen werden. Außerdem können Gleitkommazahlen – typ umfasst in Python alle Dezimalzahlen mit Nach- genau wie Ganzzahlen – beliebige positive oder negative Werte haben. kommastellen. Im Folgenden finden Sie einige Beispiele, die die Zuweisung von Gleitkommazahlen zu verschiedenen Variablen demonstrieren: Abbildung 36: Python - Zuweisung und Ausgabe von Gleitkommazahlen Quelle: erstellt im Auftrag der IU, 2023. Bei Bedarf können Sie alternativ den Buchstaben e oder E benutzen, um Gleitkommazah- Wissenschaftliche len in wissenschaftlicher Schreibweise darzustellen. Dabei gibt die auf e oder E folgende Notation Ganzzahl den Exponenten zur Basis 10 an, das heißt die Zehnerpotenz, mit der die e oder In dieser Form der Expo- nentialdarstellung wird E vorausgehende Gleitkommazahl multipliziert werden soll. Dementsprechend ist 4.5e7 jede Zahl als Produkt aus identisch mit 4,5 · 107 oder 45.000.000. Detailliertere Beispiele zur Nutzung von Gleitkom- einer Dezimalzahl zwi- schen 1 und 10 und der mazahlen in wissenschaftlicher Schreibweise finden Sie auf dem folgenden Screenshot: jeweils passenden Zeh- nerpotenz abgebildet. 56 Abbildung 37: Python - Gleitkommazahlen in wissenschaftlicher Schreibweise Quelle: erstellt im Auftrag der IU, 2023. Abgesehen davon können in Python mithilfe des Datentyps complex auch komplexe und imaginäre Zahlen abgebildet werden. Das entsprechende Zahlenformat hat die Form a + Imaginäre Zahlen bJ, wobei es sich bei a und b um Gleitkommazahlen handelt und der Buchstabe J für die Zahlen, deren Quadrat eine nicht positive reelle Quadratwurzel aus –1 (die sogenannte imaginäre Einheit) steht. Zahl (typischerweise –1) ist, werden als imaginär bezeichnet. 57 Abbildung 38: Python - Zuweisung und Ausgabe von komplexen Zahlen Quelle: erstellt im Auftrag der IU, 2023. Neben der Darstellung von Dezimalzahlen können in Python auch Hexadezimal- und Oktalzahlen als Literale dargestellt werden. Für das Hexadezimalsystem gilt die Notation 0x, wobei ein Platzhalter für die jeweils gewünschte hexadezimale Zahl ist. Analog werden Oktalzahlen im Format 0o angegeben. Auch dazu finden Sie nach- stehend wieder einige Beispiele: 58 Abbildung 39: Python - Zuweisung und Ausgabe von Oktal- und Hexadezimalzahlen Quelle: erstellt im Auftrag der IU, 2023. Bitte beachten Sie, dass Sie Zahlen aller gängigen Datentypen mithilfe der gängigen Rechensymbole zu mehrgliedrigen arithmetischen Ausdrücken kombinieren können. Unter anderem stehen hier das Pluszeichen (+) für die Addition, das Minuszeichen (–) für die Subtraktion, der Schrägstrich (/) für die Division und das Sternchen (*) für die Multipli- kation zur Verfügung. Dabei lassen sich all diese (und viele weitere) Operatoren auch auf Kombinationen aus verschiedenartigen Datentypen anwenden, sodass beispielsweise eine ganze Zahl mit einer Gleitkommazahl multipliziert werden kann. Im letzteren Fall ist das Ergebnis ebenfalls eine Gleitkommazahl, wie das Produkt 5 * 6.5 mit dem Ergebnis 32.5 zeigt. Sollten Sie sich nur für den ganzzahligen Wert des Resultats interessieren, so können Sie alle Nachkommastellen abschneiden, indem Sie den arithmetischen Ausdruck in Klammern einschließen und ihm das Schlüsselwort „int“ voranstellen. Die Zeile int(5 * 6.5) liefert den ganzzahligen Wert des Ergebnisses, also 32. Ähnliches gilt für Divisionen. Betrachten wir den Ausdruck 15 / 6, der als Ergebnis eine Gleitkommazahl (mit dem Wert 2,5) liefert. Auch hier können Sie wieder alle Nachkomma- stellen abschneiden, indem Sie das Schlüsselwort „int“ auf die oben beschriebene Weise benutzen. Und falls Sie nur am Rest der ganzzahligen Division von 15 durch 6 interessiert sind, können Sie einfach den Modulo-Operator (%) verwenden und durch die Eingabe von 15 % 6 das Ergebnis 3 erhalten. Diese und weitere Operationen werden im Folgenden anhand verschiedener Beispiele demonstriert: 59 Abbildung 40: Python - Einfache Rechenoperationen Quelle: erstellt im Auftrag der IU, 2023. 2.4 Strings Im vorigen Abschnitt haben wir uns mit verschiedenen numerischen Datentypen befasst, die sich für Gewicht, Größe, Geburtsjahr, Trikotnummer, Summe der geschossenen Tore, Anzahl der vorhandenen Haustiere und andere personenbezogene Zahlenangaben eig- nen. Doch wie verfahren wir mit Informationen wie etwa den Namen der Spieler:innen? Hierfür benötigen wir eine Möglichkeit, Textelemente in unser Programm aufzunehmen. Dies geschieht in Python – wie in anderen gängigen Programmiersprachen – mithilfe des Datentyps „String“ (kurz: str). Grundsätzlich handelt es sich bei Strings um Zeichenketten, die nicht nur aus Groß- und Kleinbuchstaben, sondern auch aus Zahlen sowie Satz- und Leerzeichen zusammengesetzt sein können. Um eine String-Variable zu erstellen, wählen Sie einfach einen neuen Variablennamen und weisen diesem einen in Anführungszeichen eingeschlossenen String-Wert zu. Dieser Vorgang wird auf dem folgenden Screenshot anhand von Beispielen illustriert: 60 Abbildung 41: Python - Einfache Strings Quelle: erstellt im Auftrag der IU, 2023. Dabei ist zu beachten, dass Strings in Python unveränderlich sind und nach ihrer Zuwei- Unveränderlich sung zu einer Variable nicht mehr modifiziert werden können. Allerdings ist es möglich, In Python werden Objekte als unveränderlich eine bereits vorhandene String-Variable mit einem neuen String zu belegen. Beispiels- bezeichnet, wenn sie weise wird der Variablen another_string im obigen Screenshot der String „This is a nicht geändert oder string! I love it!” zugewiesen. Dieser Text kann nun nicht mehr verändert, sondern nur modifiziert werden kön- nen. durch die Zuweisung eines neuen Werts abgelöst werden. Mit anderen Worten: String-Vari- ablen wie another_string sind veränderlich, weil wir sie durch die Zuweisung neuer Werte modifizieren können. Der jeweils zugewiesene String ist jedoch unveränderlich, weil er nach der Zuweisung nicht mehr geändert werden kann. In Python können sowohl einfache als auch doppelte Anführungszeichen zur Kennzeich- nung eines Strings verwendet werden können. Sie müssen lediglich darauf achten, dass Sie am Anfang und am Ende des Strings dieselbe Art von Hochkomma setzen: 61 Abbildung 42: Python - Strings in einfachen und doppelten Anführungszeichen Quelle: erstellt im Auftrag der IU, 2023. Es gibt einige wichtige Zeichen, die nicht Teil eines normalen Strings sein können. Dazu zählen zum Beispiel die Anführungszeichen, da die Hinzufügung eines einfachen oder doppelten Hochkommas in der Mitte eines Strings vom Interpreter als Ende-Markierung des Strings gelesen wird. Um dies zu vermeiden, müssen wir das sogenannte „Escape-Zei- chen“ benutzen: den Backslash (\). Wenn Sie dem Zitat in der Mitte Ihres Strings dieses Zeichen voranstellen (\”), erscheint an der entsprechenden Stelle der Ausgabe das gewünschte doppelte Anführungszeichen. Diese Kombinationen aus dem Backslash und dem Anführungszeichen wird als Escape-Sequenz bezeichnet. Näheren Aufschluss über ihre korrekte Verwendung bietet das folgende Beispiel: 62 Abbildung 43: Python - Strings mit maskierten Anführungszeichen Quelle: erstellt im Auftrag der IU, 2023. Darüber hinaus gibt es noch zahlreiche weitere Escape-Sequenzen, von denen einige in der nachstehenden Tabelle aufgeführt sind: Tabelle 3: Python –Escape-Sequenzen Escape-Sequenz Ausgabe \\ einfacher Backslash \’ einfaches Hochkomma \” doppeltes Hochkomma \n ASCII-Steuerzeichen für Zeilenvorschub (neue Zeile) \r ASCII-Steuerzeichen für Wagenrücklauf (Sprung zum Anfang der aktuellen Zeile) \t ASCII-Steuerzeichen für horizontalen Tabulator Quelle: erstellt im Auftrag der IU, 2023. 63 Wenn Sie den Interpreter anweisen wollen, alle Escape-Zeichen in einem String zu ignorie- ren, können Sie diesen als sogenannte Rohzeichenfolge auszeichnen. Dazu stellen Sie dem einführenden Anführungszeichen Ihres Strings einfach den Buchstaben r voran, wie im folgenden Beispiel zu sehen: Abbildung 44: Python - Kennzeichnung eines Strings als Rohzeichenfolge Quelle: erstellt im Auftrag der IU, 2023. Außerdem haben Sie die Möglichkeit, dreifache Anführungszeichen (""" oder ''') zu benutzen, um einen String zu kennzeichnen, der sich über mehrere Zeilen erstreckt: 64 Abbildung 45: Python - Strings in dreifachen Anführungszeichen Quelle: erstellt im Auftrag der IU, 2023. Daneben gibt es noch einige wichtige String-Operationen, deren Syntax und Funktion in der nachstehenden Tabelle beschrieben und anhand von Beispielen demonstriert wird: Tabelle 4: Python – String-Operationen Zweck Beispiel Ausgabe Ermittlung der Länge eines len("Hello, World!") 13 Strings Ermittlung des Indexwerts eines my_string = "Hello, 1 im String enthaltenen Zeichens World!" my_string.index('e') Zählen der Instanzen eines my_string = "Hello, 2 bestimmten Zeichens im String World!" my_string.count('o') Umwandlung sämtlicher Zei- my_string = "Hello, 'hello, world!' chen in Kleinbuchstaben World!" my_string.lower() 65 Zweck Beispiel Ausgabe Umwandlung sämtlicher Zei- my_string = "Hello, 'HELLO, WORLD!' chen in Großbuchstaben World!" my_string.upper() Quelle: erstellt im Auftrag der IU, 2023. Zusätzlich können Sie durch die Verwendung des Pluszeichens (+) zwei Strings aneinan- derfügen, wie hier dargestellt: Abbildung 46: Python - Zusammenfügen von Strings Quelle: erstellt im Auftrag der IU, 2023. Eine weitere Möglichkeit zur Zusammenführung von Strings bietet die Funktion „format“. Hierfür definieren Sie zunächst einen String mit eingebetteten temporären Variablen. Die Variablen werden dazu in geschweifte Klammern {} gefasst. Mithilfe der format-Funktion können diesen Variablen anschließend bestimmte Werte aus anderen Variablen oder in Form von Literalen zugewiesen werden. Das entsprechende Verfahren wird im Folgenden am Beispiel erläutert: 66 Abbildung 47: Python - Konkatenation mit der format-Funktion Quelle: erstellt im Auftrag der IU, 2023. Falls Sie einen String mehrmals nacheinander ausgeben möchten, steht Ihnen das Stern- chen (*) als Multiplikationsoperator zur Verfügung, wie im folgenden Beispiel dargestellt: 67 Abbildung 48: Python - Vervielfachen eines Strings Quelle: erstellt im Auftrag der IU, 2023. Darüber hinaus ist es manchmal erforderlich, einen Teil bzw. ein Segment eines längeren Strings abzurufen. Zu diesem Zweck gibt es in Python einen aus zwei eckigen Klammern bestehenden Operator [], der an den Originalstring angefügt wird. Dabei lassen sich Art und Umfang der String-Operation durch die Eingabe von bis zu drei Parametern innerhalb der Klammern genau bestimmen. So bezeichnet der erste dort angegebene Wert die Posi- tion, an dem die Erfassung des Teilstrings beginnen soll. Falls Sie keine weiteren Parame- ter spezifizieren, wird nur das Zeichen mit diesem Index ausgegeben. Die in einem String enthaltenen Zeichen werden beginnend mit dem Index 0 vom ersten bis zum letzten Zei- chen durchnummeriert (indiziert). Der Zugriff auf das zweite Zeichen eines Strings erfolgt dann also über den Index 1: 68 Abbildung 49: Python - Abrufen eines Teilstrings (1) Quelle: erstellt im Auftrag der IU, 2023. Der zweite Teilstring-Parameter bezeichnet den Index des Zeichens, an dem die Abfrage enden soll. Er wird vom ersten Parameter durch einen Doppelpunkt (:) getrennt. Bitte beachten Sie, dass das Zeichen mit dem

Use Quizgecko on...
Browser
Browser