Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Modul: Programmierung B-EPI Einführung in die Programmierung EPR WS 2021/2022 VE00 Programmieren – (Aller-)Erste Schritte in Python Prof. Dr. Franziska Matthäus / Prof. Dr. Matthias Kaschube / Dr. Karsten Tolle Institut für Informatik Fachbereich Informatik und Mathematik (12)
Unsere heutigen Lernziele EPI - Organisatorisches Folie 2 Wir wollen unser „erstes“ Python-Programm schreiben. Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Wichtig für Anfänger*innen und auch „Könner*innen“. Dr. Karsten Tolle ‣ Erste grundlegenden Mechanismen der imperativen Programmierung kennenlernen. ‣ Erste Schritte zum „Programmieren als Methode zur Problemlösung“ kennenlernen. ‣ Erste Syntaxregeln kennenlernen. ‣ Erste Python Konventionen kennenlernen. ‣ Fehlermeldungen interpretieren lernen.
Übersicht EPI - Organisatorisches Folie 3 1. Auswahl von Programmiersprachen Prof. Dr. Franziska Matthäus (… darüber können nur DUMME streiten!) Prof. Dr. Matthias Kaschube Dr. Karsten Tolle 2. Beginnen wir mit einem Programmier-Beispiel! 3. Regeln und Konventionen beim Programmieren 4. Kernkonzepte: Variable – Zuweisung – Literal a. Variable b. Zuweisungsoperator c. Ausdrücke und Operatoren 5. (Variablen-) Namen 6. Die Sache mit den Fehlermeldungen 7. Zusammenfassung und Ausblick
Programmiersprachen Es gibt keine optimale universelle Programmiersprache. EPI - Organisatorisches Wichtig für Sie: Folie 4 ‣ Sie müssen verschiedene Programmier-Paradigmen kennenlernen: Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube hier: imperatives, strukturiertes + modulares sowie Dr. Karsten Tolle objektorientiertes Programmieren ‣ Dynamisches versus statisches Typing erfahren. ‣ Interpreter- und Compiler-(Sprachen) kennenlernen. ‣ Lernen, wie man sich eine neue Programmiersprache selbständig erarbeitet, sie erlernt – Docs lesen (und verstehen)! ‣ Gefühl für einen guten Programmier-Stil entwickeln. ‣ Programme so zu schreiben, dass sie von anderen verstanden werden können ( Teamarbeit). ‣ Denken in Strukturen und Algorithmen, in Entwurfsmustern! ‣ Wissen erwerben: Wie lese ich größere Programme (was ist wichtig, was unwichtig).
Python EPI - Organisatorisches Folie 5 ‣ Interpretersprache: schnelles Programmieren / Ausprobieren möglich Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ‣ Im Interpreter wird Zeile für Zeile des Programms Dr. Karsten Tolle gelesen – analysiert – ausgeführt genau in der angegebenen Folge der Zeilen. ‣ Python hat dynamisches Typing. ‣ Wir schreiben nur „kleine“ Programme -- KLEIN ist natürlich relativ. ‣ Sehr wichtig inzwischen für Bioinformatiker, Naturwissenschaftler, … Data Science. ‣ Python wird aktiv weiterentwickelt (lebende Sprache!). ‣ Zitat: „Python ist in der Tat eine aufregende und mächtige Sprache. Sie hat die richtige Kombination von Leistung und Funktionsumfang, die das Schreiben von Python-Programmen zugleich einfach und zu einem Vergnügen macht.“ aus: A Byte of Python … Deutsche Übersetzung: http://abop-german.berlios.de/ Aber ACHTUNG: Die deutsche Version übersetzt V.1.2 aktuell V.3.7 .
EPI - Organisatorisches Python „lebt“ ! (siehe: https://www.python.org/downloads/) Folie 6 Version 3.X: Seit 2008 (Auszug) Prof. Dr. Franziska Matthäus Release version Release date Version 2.7: Clean-up! Prof. Dr. Matthias Kaschube Python 3.10 2021-10-04 Release version Release date Dr. Karsten Tolle Python 3.9 2020-10-05 Python 2.7.18 is the last release! Python 3.8.6: 2020-09-14 End of Development! Python 3.8.5 2020-07-20 Python 2.7.18 2020 April 20 Python 3.8.4 2020-07-13 Python 2.7.17 2019-10-19 Python 3.8.3 2020-05-13 Python 2.7.16 2019-03-04 Python 3.8.0 2019-10-14 Python 2.7.15 2018-05-01 Python 3.7.4 2019-07-08 Python 2.7.14 2017-09-16 Python 3.6.9 2019-07-02 Python 3.4.10 2019-03-18 Python 2.7.13 2016-12-17 Python 3.5.7 2019-03-18 Python 2.7.12 2016-06-25 Python 3.7.1 2018-10-20 Python 2.7.11 2015-12-05 Python 3.7.0 2018-06-27 Python 2.7.10 2015-05-23 … Python 3.0.0 2008-12-03 Python 2.7.0 2010-07-03 erstes 20. Februar 1991 Erscheinungsjahr:
So nebenbei: Beispiel: Analyse der Python Version EPI - Organisatorisches Folie 7 Prof. Dr. Franziska Matthäus 3.7.4 Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Revisionsnummer . (patch level) häufig für Fehler- behebungen genutzt Nebenversionsnummer (minor release): kennzeichnet meist funktionale Erweiterungen des Programms. Hauptversionsnummer (major release) Aber: dies sind lediglich grobe Hinweise. Marketing- und Release-Timing- Aspekte, etc. verändern diese ggf. Während der Entwicklung und Pflege meist noch weitere Nummerierungen, z.B. sogenannte „Build-Nummern“.
Python 3.10 installieren (Windows) EPI - Organisatorisches Folie 8 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Übersicht EPI - Organisatorisches Folie 9 1. Auswahl von Programmiersprachen Prof. Dr. Franziska Matthäus (… darüber können nur DUMME streiten!) Prof. Dr. Matthias Kaschube Dr. Karsten Tolle 2. Beginnen wir mit einem Programmier-Beispiel! 3. Regeln und Konventionen beim Programmieren 4. Kernkonzepte: Variable – Zuweisung – Literal a. Variable b. Zuweisungsoperator c. Ausdrücke und Operatoren 5. (Variablen-) Namen 6. Die Sache mit den Fehlermeldungen 7. Zusammenfassung und Ausblick
Unser Beispiel EPI - Organisatorisches Folie 10 Wir lösen unser Problem indem wir Software und Hardware nutzen! Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Ein Programm zu schreiben heißt: Dr. Karsten Tolle 0. das “Problem” (die Aufgabe) zu beschreiben. 1. Die Beschreibung analysieren und eine Lösungsidee entwickeln mit Auswahl / Entwicklung und Beschreibung der benötigten Algorithmen und Datenstrukturen. 2. Umsetzung (das eigentliche Programmieren) in einer Programmiersprache = "Coden“ (Programmieren im engeren Sinn). 3. Test des Programms. 4. Dokumentation des Programms (zusätzlich zu den Kommentaren im Code). IMMER diese Schritte!
[0. Schritt Unser "kleines" Problem beschreiben]: EPI - Organisatorisches Folie 11 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ‣ Beispiel: "Schreiben Sie ein Programm, dass den Flächeninhalt eines Kreises Dr. Karsten Tolle berechnet. Der Radius des Kreises soll vom Benutzer eingegeben werden.“ ‣ In unseren Übungsfällen macht dies i.d.R. der Aufgabensteller. Das steht so im Übungsblatt. ‣ Ganz normal: I.d.R. müssen Sie Verfeinerung / Spezialisierungen Ergänzung festlegen und dokumentieren Schritt 1. Sie haben auch immer die Zeit um nachzufragen! ‣ Nicht wie in der Schule: Alles vollständig angegeben (manchmal sogar: jede Angabe ist notwendig zu benutzen).
1. Schritt: Der wichtige Schritt - „Analyse“ auf Papier. EPI - Organisatorisches Folie 12 Typische Ergänzungen: Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Woher einlesen? Dr. Karsten Tolle 0. Verfeinerung / Ergänzung der Beschreibung er- In welchem Format? In welchem Intervall? stellen. Ggf. Annahmen treffen und dokumentieren! Wohin ausgeben? In welchem Format? 1. Erfrage die Größe des Radius beim Benutzer über die Eingabe (Input) Konsole. 2. Berechnen Sie die Kreisfläche mit folgender Formel: Verarbeitung (Process) Algorithmen und Kreisfläche = Radius * Radius * π Datenstrukturen 3. Zeige den errechneten Wert für die Kreisfläche auf Ausgabe (Output) der Konsole an. Das EVA (IPO)-Prinzip.
Das EVA-Prinzip (als Entwurfsmuster) EPI - Organisatorisches Folie 13 Prof. Dr. Franziska Matthäus Verabeitungseinheiten Prof. Dr. Matthias Kaschube Prozessor, CPU Dr. Karsten Tolle Controller Alle Einheiten und Geräte bestehen heute Eingabe Verarbeitung Ausgabe aus Software und Hardware! Eingabegeräte Ausgabegeräte Schlüsselfragen: Tastatur Monitor /Display • Was ist die Eingabe und Maus Lautsprecher wie/womit soll sie erfolgen? Touchpad Kopfhörer Joystick Speicher Beamer • Was ist die Ausgabe und Scanner Drucker Barcode-Leser Plotter wie/womit soll sie erfolgen? … Speichermedien und -geräte … • Was ist die Verarbeitung Hauptspeicher /Arbeitsspeicher RAM / ROM, SD-Karten USB-Sticks und wie soll sie erfolgen? Festplatte CD / DVD-laufwerk • Was muss zwischen- … gespeichert werden: wie + wo?
2. Schritt: Das "Coden" (oder Programm schreiben) So entsteht Python-Code, die Software EPI - Organisatorisches Folie 14 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube E radius = eval(input("Bitte geben Sie den Radius ein: ")) Dr. Karsten Tolle V area = radius * radius * 3.141 A print("Die Kreisfläche ist: ", area) Ein Python Quellprogramm ist ein Textfile (Textdatei ohne Auszeichnungen: kein Fett, kursiv, … ) mit der Dateiendung .py. Erstellen, verändern und ausführen kann man solche Dateien mit ‣ Texteditor (und Interpreter) ‣ Integrated Development Environment ‣ Notebook Environments
Schritt 2a Das "Coden" in einem Texteditor, wie z.B. Notepad++ EPI - Organisatorisches Folie 15 Texteditoren gibt es sehr viele: Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube aber Word, Writer (Open Office) etc. sind NICHT geeignet Dr. Karsten Tolle sind Textverarbeitungsprogramme mit Formatierung, … Eher solche, die fürs Programmieren vorbereitet sind, z.B. Notepad++, Emacs, Atom, Sublime Text, … wenn, dann mit Syntax (Sprachregeln)-Highlighting, … Notepad++
Schritt 2b Das "Coden" in einer IDE, zum Beispiel IDLE EPI - Organisatorisches Folie 16 Prof. Dr. Franziska Matthäus ‣ IDE = Integrated Development Environment Prof. Dr. Matthias Kaschube Dr. Karsten Tolle = Integrierte (Software-)Entwicklungsumgebung ‣ Integriert bedeutet hier: Programmierwerkzeuge, wie z.B. Beispiel: Texteditor, Compiler bzw. Interpreter, Linker, Debugger, Beautifier, Linter, usw. sind in einem System einheitlich verfügbar gemacht. ‣ Häufig für eine Programmiersprache entwickelt. ‣ Beispiele: ‣ Eclipse (hauptsächlich Java) ‣ Netbeans (hauptsächlich Java) ‣ IDLE (für Python, Teil der Distribution, ist vergleichsweise einfach und eignet sich für Anfänger. Kaum komplizierte Funktionalitäten.) ‣ PyCharm (für Python, (Edu Edition)) ‣ Spyder (für Python, insbesondere im naturwiss. Umfeld)
Schritt 2b mit IDLE EPI - Organisatorisches Folie 17 Prof. Dr. Franziska Matthäus IDLE Prof. Dr. Matthias Kaschube Dr. Karsten Tolle An diesem Beispiel identifizieren wir essentielle Elemente eines Programms: Variablen "Behälter im Speicher" radius, area Zuweisung = Operatoren * Datentyp String " x y z" "Bitte geben Sie …" Datentyp Float (Gleit-)Punktzahl 3.141 Funktionen erledigen Teilaufgaben eval(), input(), print() haben ggf. Parameter
IDLE live EPI - Organisatorisches Folie 18 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Schritt 2c „Notebook Environments“ EPI - Organisatorisches Folie 19 ‣ Sogenannte Lab Notebooks werden traditionell in naturwissenschaftlichen Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Laboren genutzt um Vorgehensweisen, Daten, Berechnungen und Dr. Karsten Tolle Ergebnisse zu dokumentieren. ‣ Virtuelle Notebooks werden für das sogenannte literate programming (Donald Knuth, 1984) genutzt. ‣ Virtuelle Notebooks erlauben eine Mischung von formatierten Texten, Pro- grammteilen einer oder mehrerer Programmiersprachen, Visualisierungen, usw. In sogenannten “Zellen” unter einer Benutzungsoberfläche. ‣ Jupyter Notebook (früher IPython Notebook) ist eine Web-basierte interaktive Umgebung um Jupyter-Notebook-Dokumente zu erstellen. ‣ Ein Jupyter Notebook File kann in diversen Formaten ausgegeben werden: (HTML, presentation slides, LaTeX, PDF, ReStructuredText, Markdown, Python)
EPI - Organisatorisches Folie 20 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Schritt 3: Test des Programms EPI - Organisatorisches Folie 21 Prof. Dr. Franziska Matthäus ‣ Oftmals unter Entwicklern ein ungeliebter Job – leider! unvollständig Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Eine betrübliche Wahrheit: Den Nachweis, dass keine Fehler (mehr) vorhanden sind, kann das Softwaretesten nicht erbringen. Edsger W. Dijkstra schrieb hierzu: „Program testing can be used to show the presence of bugs, but never show their absence!“ ‣ Aus diesem Grund beschäftigen sich verschiedene Teststrategien und - konzepte mit der Frage, wie mit einer möglichst geringen Anzahl von Testfällen eine große Testabdeckung zu erreichen ist. ‣ Professionell erfolgt dies mit entsprechenden Testsystemen. Zunächst machen wir dies aber von Hand (genauer: „durch scharfes Denken“).
Schritt 4: Programm dokumentieren (von Programmierer*innen fast immer ungeliebt!) EPI - Organisatorisches Folie 22 Prof. Dr. Franziska Matthäus ‣ Kurzgefasst aus Schritt 2 dieser Anleitung: Das Besondere kurz Prof. Dr. Matthias Kaschube Dr. Karsten Tolle darstellen: Das was man wissen sollte, um das Programm weiterzuentwickeln: Bei größeren Programmen entsteht ein Handbuch. ‣ Wenn Sie ein interaktives Programm schreiben, gehört ein Nutzerhandbuch / eine Benutzungsanleitung dazu. (oft ist dies der alleinige Teil des Handbuchs). ‣ Denn: Die technische Dokumentation versucht man möglichst nahe am Quelltext (Programmtext) zu halten, also oft im Programm selbst zu dokumentieren, damit die Dokumentation aktuell gehalten wird. ‣ Ggf. eine README-Datei, häufig einfache Textdateien, die das absolut Notwendige enthält, um das Programm zu installieren und zu nutzen.
Zusammenfassung: Programmieren heißt: EPI - Organisatorisches Folie 23 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Immer Dr. Karsten Tolle Vier [fünf] Schritte gehen: erst denken, dann coden! [0. Das Problem/die Anforderungenbeschreiben (“Lastenheft”).] 1. Das Problem analysieren und Anforderungen ergänzen! – ggf. Entwurfsmuster finden. Auswahl / Entwicklung und Beschreibung der benötigten Algorithmen und Datenstrukturen (Design). 2. Umsetzung des Konzepts in eine Programmiersprache – "coden". 3. Test des Programms (auch dieses dokumentieren). 4. Dokumentation des Programms (Handbuch!) Beide 3 + 4: gehören immer dazu!
Unsere Hilfsmittel „Vorschlag“ EPI - Organisatorisches Folie 24 Prof. Dr. Franziska Matthäus ‣ NEIN Source Code-Editor (Texteditor), z.B. Notepad++ Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Integrated Software Development Environment IDE IDLE Integrated Development and Learning Environment ‣ NEIN Jupyter Notebook (werden als Lösung nicht akzeptiert: nur .py) ‣ IDLE Shell nennt man die "Konsole" der IDLE (Funktionen wie der Interpreter, nur dass der Editor Syntax-gesteuert ist) etwas mehr Komfort, weniger Tippfehler, Autocompletion. Oft weißer Hintergrund
Übersicht EPI - Organisatorisches Folie 25 1. Auswahl von Programmiersprachen Prof. Dr. Franziska Matthäus (… darüber können nur DUMME streiten!) Prof. Dr. Matthias Kaschube Dr. Karsten Tolle 2. Beginnen wir mit einem Programmier-Beispiel! 3. Regeln und Konventionen beim Programmieren 4. Kernkonzepte: Variable – Zuweisung – Literal a. Variable b. Zuweisungsoperator c. Ausdrücke und Operatoren 5. (Variablen-) Namen 6. Die Sache mit den Fehlermeldungen 7. Zusammenfassung und Ausblick
Erste Sprachelemente – systematisch vorgestellt Was ist ein imperatives Programm? EPI - Organisatorisches Folie 26 ‣ Es besteht aus einer Folge von Anweisungen (statements), Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube dem Programm! Dies nennt man Quelltext (Source Code). Dr. Karsten Tolle ‣ Die Anweisungen sind eine logische Zeile lang (häufig auch eine physikalische Zeile lang); bestimmt durch die Art der Anweisung. ‣ Die Anweisungen werden durch ein Trennsymbol ( oder Semikolon) voneinander getrennt. ‣ Diese Anweisungen werden bei der Programmausführung der Reihe nach, von der ersten bis zur letzten Anweisung ausgeführt. … man coded also das „wie“. ‣ Dies ist die Regel: Abweichungen davon kommen später! ‣ Nach der Ausführung der letzten Anweisung im Programm(-text) hält der Interpreter an – das Programm ist beendet.
Syntaxregel in Python: Trennsymbol EPI - Organisatorisches Folie 27 ‣ Zwischen zwei Anweisungen steht meist einfach das „Return-Zeichen“ als Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Trennsymbol. Dr. Karsten Tolle ‣ Zulässig als Trennsymbol ist aber auch das Semikolon. Beispiel: Anweisung1 erlaubt auch Anweisung1; Anweisung2; Anweisung2 Anweisung3; Anweisung3 ... ... Nicht (oder nur selten) nutzen ! ‣ Anweisung nennt man in (D_english ;-) ) statement.
Regeln und Konventionen EPI - Organisatorisches ‣ Regeln = Syntaxregel der Sprachdefinition (Hauptziel: Programme müssen eindeutig sein!) Folie 28 Prof. Dr. Franziska Matthäus ‣ Interpreter (Compiler) überwacht dies, meldet ggf. Verletzungen (Fehler). Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Konventionen sind Vereinbarungen zwischen Programmierern, um die Lesbarkeit und Übersichtlichkeit eines Programms zu verbessern. ‣ Insbesondere für die Teamarbeit wichtig: Sie müssen auch Programme anderer Programmierer*innen lesen. ‣ Unsere Konventionen entsprechen PEP 8 (PEP = Python Enhancement Proposal), siehe https://www.python.org/dev/peps/pep-0008/ oder besser für uns Menschen aufbereitet: https://pep8.org/ (derselbe Text). https://pep8.org/
Zwischenruf: Syntax, Semantik … Was ist das eigentlich? EPI - Organisatorisches Folie 29 Prof. Dr. Franziska Matthäus ‣ Unter der Syntax einer Programmiersprache (formale Syntax), versteht man Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ein System von Regeln, nach denen wohlgeformte (= „syntaktisch korrekte“) Sprachkonstrukte (= Ausdrücke, Formeln, …, Programmtexte) aus einem grundlegenden Zeichenvorrat gebildet werden. ‣ Die Regeln können in natürlicher Sprache formuliert sein, sind meist aber formal in einer Metasprache, z.B. einer Variante der BNF (= Backus-Naur-Form) formuliert. ‣ Alle Regeln zusammen nennt man auch Grammatik der Sprache. ‣ Die Semantik (= Bedeutungslehre) einer Programmiersprache beschreibt die Bedeutung der wohlgeformten Sprachkonstrukte: ‣ Sie kann formal erfolgen, wird meist aber informal (als Freitext) formuliert.
Kernfrage: Was ist ein Python Programm? EPI - Organisatorisches Folie 30 … als Source (Quelle): Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube 1. Ein Textfile das den Syntax- und Semantik-Regeln der Programmiersprache Python Dr. Karsten Tolle entspricht. 2. Wir fordern zusätzlich: Das Programm muss unseren Konventionen, d.h. PEP 8 entsprechen. 3. Ein Source-File ist sowohl vom Menschen ( der Programmierer*in) als auch von der Maschine (dem Computer) les- und verstehbar. 4. Das Programm soll so wenig wie möglich falsche Resultate oder unerwartetes/unerwünschtes Verhalten (Abbrüche, Abstürze, „hängen“ bleiben, …) zeigen.
Zeilenlänge und Leerzeilen EPI - Organisatorisches Folie 31 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ‣ Begrenzen Sie eine Anweisungszeile auf maximal 79 (oder 99 Zeichen). Dr. Karsten Tolle (Man darf diskutieren! - Bitte die Anmerkungen in PEP 8 beachten). ‣ Falls nötig (SELTEN) \ (Backslash) am Ende einer Zeile. Verlängert diese Zeile „logisch“ mithilfe der nächsten Zeile 0 79 < \ Diese zwei Zeilen sind dann eine „logische“ Zeile. ‣ Für den Python Interpreter haben Leerzeilen (Achtung: sehr wohl aber manchmal Leerzeichen) keine Bedeutung. Er überliest diese einfach. ‣ Also: Strukturieren Sie Ihren Programmtext in „logische Blöcke“, gewissermaßen „Absätze“, durch die Verwendung von „Leerzeilen“, aber angemessen, bitte auch nicht zu viele!
Übersicht EPI - Organisatorisches 1. Auswahl von Programmiersprachen (… darüber können nur DUMME streiten!) Folie 32 Prof. Dr. Franziska Matthäus 2. Beginnen wir mit einem Programmier-Beispiel! Prof. Dr. Matthias Kaschube Dr. Karsten Tolle 3. Regeln und Konventionen beim Programmieren 4. Kernkonzepte: Variable – Zuweisung – Literal a. Variable b. Zuweisungsoperator c. Ausdrücke und Operatoren 5. (Variablen-) Namen 6. Die Sache mit den Fehlermeldungen 7. Zusammenfassung und Ausblick
Essentielle Elemente eine Programms EPI - Organisatorisches Folie 33 Wir hatten dies ja schon extrahiert: Prof. Dr. Franziska Matthäus ‣ Variablen "Behälter im Speicher" radius, area Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Zuweisung = ‣ Operatoren * ‣ Datentyp String "x y z" "Bitte geben Sie …" ‣ Datentyp Float (Gleit-)Punktzahl 3.141 ‣ Funktionen erledigen Teilaufgaben eval(), input(), haben ggf. Parameter print()
Variable (konzeptionell) - ist ein Container (im Speicher) EPI - Organisatorisches Zwischenspeicher(-zelle) im EVA-Prinzip Folie 34 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube … ist ein Tripel: name Typ Wert Dr. Karsten Tolle name: oder Bezeichner (identifier). Darunter versteht man einen in einem Namensraum (hier zunächst das gesamte Programm) eindeutiges Wort (eindeutig = wohlunterscheidbar von allen anderen), unter dem die Variable im Programmtext angesprochen werden kann … gleich mehr! Typ oder Datentyp (type): Zusammenfassung konkreter Wertebereiche von Variablen (z.B. ganze Zahlen) und darauf definierten Operationen zu einer Einheit. Wert: „Inhalt“ (value) der Variable – wird durch die Angabe des Typs eindeutig: DIX (Nachnamen von Otto DIX oder „römische Zahl“ = 509?)
Der Typ ist sehr wichtig! EPI - Organisatorisches Folie 35 Für jeden Datentyp müssen wir genau betrachten: Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ den zulässigen Wertebereich, ‣ die spezifisch definierten Literale, (= Zeichenfolgen, die zur Darstellung der Werte im Programm benutzt werden: Wie schreibe ich Daten dieses Typs in meiner Programmiersprache), ‣ die für diesen Typ definierten Operatoren, ‣ die spezifischen Funktionen auf diesem Datentyp, ‣ die spezifischen Eigenarten.
Wichtige Typen sind: EPI - Organisatorisches Folie 36 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ‣ Integer Ganze Zahlen Bsp. -13, 0, 1, 42 Dr. Karsten Tolle ‣ Float „Kommazahlen" Bsp. -5.38, 0.0, 1.0 Rationale Zahlen: Dezimalbrüche, nur haben diese einen Dezimalpunkt. ‣ String Zeichenkette (=Text) Bsp. "Hallo Welt", 'Hallo‘ gekennzeichnet durch die Anführungszeichen " oder Apostrophs ' Diese und einige weitere Typen behandeln wir in GPR im Detail! Im wesentlichen verhalten sich diese Typen aber wie gewohnt, als Ganze Zahlen, Kommazahlen oder Zeichenketten (unformatierter Text).
Der Zuweisungsoperator EPI - Organisatorisches Folie 37 Prof. Dr. Franziska Matthäus das Gleichheitszeichen „=“ Beispiel: anton = 5 Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ist der Zuweisungsoperator Literal (Typ + Wert) Durch den Zuweisungsoperator = wird in Python der Typ und der Wert einer Variablen verändert, d.h. name Typ Wert Typ und Wert werden dem Namen zugewiesen, ersetzen ggf. den alten Wert. anton Integer 5 nach Ausführung unseres Beispiels: anton = 5 In Python müssen Sie nichts weiter machen: Jegliche Speicherverwaltung (anlegen, freigeben, …) von Speicherbereichen macht der Python-Interpreter für Sie.
Unser Beispiel im Interpreter (1) EPI - Organisatorisches Folie 38 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle >>> anton = 5 >>> id(anton) 140717947122048 >>> type(anton) >>> anton 5 >>> anton = 6 >>> id(anton) 140717947122080 (in der Standard C – Implementierung ist die id >>> anton die Adresse der Variablen im Speicher – 6 dies ist "eigentlich" unbedeutend, weil über den Namen zugegriffen wird. Wichtig ist die Eindeutigkeit).
Unser Beispiel im Interpreter (2) EPI - Organisatorisches Folie 39 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Fortsetzung: >>> Anton # Names are “case sensitive” Traceback (most recent call last): File "", line 1, in Anton NameError: name ‘Anton' is not defined
Die rechte Seite des Zuweisungsoperators = dürfen sein: EPI - Organisatorisches Folie 40 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ‣ Ausdrücke (expressions) (in der Mathematik Terme genannt) Dr. Karsten Tolle Beispiele: 3+5, 7*3, B*3 … (=einfache Ausdrücke, Achtung B*3 ≠ B3) Diese bestehen aus: ‣ Gültigen Operanden sind Literale wie 3, 5.0, 7 oder Variablen(-namen) wie B ‣ Gültige Operatoren: +, -, *, / : siehe Auszug aus Programmierhandbuch (in Moodle) aber auch Funktionen (Prozeduren) wie input(), eval() oder mathematische Funktionen wie math.sin(0.5) (sin() nur verfügbar nach dem Import des Moduls math … später) ‣ Aber ≠, ≤, , , , … können wir nicht tippen werden zu Zeichenketten, z.B. != ,
Auszug 0 aus Programmierhandbuch (Achtung: Dies sind Regeln!) EPI - Organisatorisches Folie 41 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Kurzbeschreibung Integer Dr. Karsten Tolle String Operatoren Float (...) (Vorrang) Klammerung x x x f(...) Funktionsaufruf x x x x ** y Exponential-Bildung xy x x (Achtung: rechts-assoziativ) x * y Multiplikation (Wiederholung) x x x x / y Division 1) x x Bei Ausdrücken: x % y Modulo (-Division) = Rest 2) x x Fast alles so, wie x // y Restlose Division (Floor Division) 2) x x in der Mathematik x + y Addition (Konkatenation) x x x üblich! x - y Subtraktion x x Anmerkungen: Oben stehen die Operatoren mit höherer Priorität. x bedeutet zulässig für diesen Typ.. 1) In Python 3 ist das Ergebnis der Division / (immer) vom Typ »float«.. 2) siehe Folgefolie.
EPI - Organisatorisches Anmerkung 2) Zur Ganzzahldivision (Division mit Rest) Folie 42 Etwas tricky! Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle q = x // y ist die Ganzzahldivision (Division mit Rest). r = x % y nennt man die Modulo-Operation und dieser Operator liefert den Rest r >>> 4 // 3 und zwar in Python so, dass 1 >>> 4 % 3 0 ≤ r < y für y > 0 (also positiv) 1 x = q∗y + r mit ቊ (floor division) >>> -4 // 3 # -4 = -2*3+2 y < r ≤ 0 für y < 0 (also negativ) -2 >>> -4 % 3 # -4 = -2*3+2 2 >>> 4 // -3 # 4 = -2*-3+(-2) Achtung: Dies ist in C, C++, Java, usw. anders geregelt. -2 >>> 4 % -3 # 4 = -2*-3+(-2) -2 >>> Siehe auch: https://stackoverflow.com/questions/3883004/the-modulo-operation-on-negative-numbers-in-python
Regeln zur Ganzzahldivision EPI - Organisatorisches Folie 43 q = x // y div Prof. Dr. Franziska Matthäus r= x%y mod Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Das Vorzeichen des Quotienten q ergibt sich x y q r wie bei der normalen Division. + + + + Der Rest r hat dasselbe Vorzeichen wie y. Siehe Tabelle. + - - - Also: Es wird in Richtung - auf den nächsten ganzzahligen Wert gerundet (floor division). - + - + Rundung Rundung - - + - - -4 -3 -2 -1 0 1 2 3 4 q ist wertmäßig eine ganze Zahl z.B. 4 oder 4.0: Die ganzzahlige Division und Modulo ergeben int-Werte, Achtung! wenn beide Operanden den Typ »int« haben, aber float-Werte, wenn mindestens einer der Operanden den Typ »float« hat.
Beispiele zur „Ganzzahligen Division“ // und dem Modulo-Operator % EPI - Organisatorisches Folie 44 Prof. Dr. Franziska Matthäus ‣ Achtung: Dies ist in C, C++, Java, usw. anders geregelt, siehe Prof. Dr. Matthias Kaschube Dr. Karsten Tolle https://en.wikipedia.org/wiki/Modulo_operation ‣ In http://python-history.blogspot.com/2010/08/why-pythons-integer- division-floors.html finden Sie eine Erläuterung von Guido van Rossum warum er dies so gewählt hat. >>> 4 // 3 >>> 4 // -3 >>> 4.0 // 3 1 -2 1.0 >>> 4 % 3 >>> 4 % -3 # 4 = -2*-3-2 >>> 4 % 3.0 1 -2 1.0 >>> -4 // 3 >>> -4 // -3 >>> 4.0 // 3.0 -2 1 1.0 >>> -4 % 3 # -4 = -2*3+2 >>> -4 % -3 # -4 = 1*-3-1 >>> 4.0 % 3.0 2 -1 1.0
Auswertereihenfolge eines Ausdrucks ist sehr wichtig! Das "erweiterte Punkt vor Strich". EPI - Organisatorisches Folie 45 ‣ bei mehreren Operatoren: „Punkt vor Strichrechnung“, im Handzettel Vorrang von Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube oben nach unten Dr. Karsten Tolle ‣ d.h. die „Punktoperatoren“ (*, /, %, //) binden stärker (werden zuerst ausgeführt) als die Strichoperatoren (+ und - ). ‣ Klammern steuern die Auswertereihenfolge (nur runde abzählen) ‣ Bei gleichstark bindenden Operatoren im allgemeinen von links nach rechts (linksassoziativ) ‣ z.B. bei Subtraktion: 4-3-2 wäre nicht eindeutig: (4-3)-2 = -1 () während 4-(3-2) = 3. aber die Vereinbarung „linksassoziativ“ sichert Eindeutigkeit ‣ aber (leider) eine Ausnahme hierzu: 4**3**2 = 4**(3**2) = 262144 ≠ (4**3)**2 = 4096 , also rechtsassoziativ, wie in der Mathematik üblich (?!!)
Zuordnungsvarianten EPI - Organisatorisches Folie 46 ziel = ausdruck # normal einfach Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube zwei weitere Zuordnungsvarianten, nämlich Dr. Karsten Tolle ziel1 = ziel2 = ... = ausdruck weist ziell1, ziel2,… denselben Wert (von ausdruck) zu ziel1, ziel2, ... = ausdruck1, ausdruck2, ... Dabei werden zunächst die Werte beider Ausdrücke berechnet und dann den Zielen zugewiesen, also: ziel1 = ausdruck1; ziel2 = ausdruck2, ...
Erweiterte Zuweisung EPI - Organisatorisches Folie 47 ‣ Python verfügt über weitere Varianten der Zuweisung, nämlich die sogenannte Prof. Dr. Franziska Matthäus „erweiterte Zuweisung“ Prof. Dr. Matthias Kaschube Dr. Karsten Tolle (augmented assignments oder in-place assignments). ‣ Vor dem Gleichheitszeichen steht dabei ein zweistelliger (binärer, binary) Operator ? (siehe unten). Folgende Anweisungen liefern dasselbe Ergebnis: ‣ x ?= y entspricht x=x?y ‣ Die Nutzung der erweiterten Zuweisung ist etwas effizienter, weil der Interpreter den Namen x nur einmal „auflösen“ muss.
Zum Programmierstil (style) … nur Konvention! EPI - Organisatorisches Folie 48 Prof. Dr. Franziska Matthäus ‣ Vor und nach einem Operator (=, +,-, …) steht ein Blank (Leerzeichen). Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Nach einem Komma steht ein Leerzeichen. ‣ Vor und nach einer Klammer () steht kein Leerzeichen. ‣ Wenn in einem Ausdruck Operatoren verschiedener Bindungsstärke (Prioritäten) genutzt werden, so sollte man die höhere Bindungsstärke dadurch visualisieren, dass man das Blank weglässt, also Bitte so:: x = x*2 - 1 oder c = (a+b) * (a-b) und nicht so: x = x * 2 - 1 oder c = (a + b) * (a - b)
Übersicht EPI - Organisatorisches 1. Auswahl von Programmiersprachen Folie 49 (… darüber können nur DUMME streiten!) Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube 2. Beginnen wir mit einem Programmier-Beispiel! Dr. Karsten Tolle 3. Regeln und Konventionen beim Programmieren 4. Kernkonzepte: Variable – Zuweisung – Literal a. Variable b. Zuweisungsoperator c. Ausdrücke und Operatoren 5. (Variablen-) Namen 6. Die Sache mit den Fehlermeldungen 7. Zusammenfassung und Ausblick
Namen / Bezeichner (Regeln) EPI - Organisatorisches Folie 50 ‣ Von der Programmierer*in definierte Namen beginnen mit einem Buchstaben (a, ..., z, A, Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ... Z) oder einem Unterstrich (underscore) (_). Namen können beliebig lang sein und ab Dr. Karsten Tolle dem 2. Zeichen zusätzlich auch Ziffern (0,...,9) enthalten. ‣ Kommentar hierzu: Groß- und Kleinschreibung ist immer relevant, also spam und Spam sind verschiedene Namen. ‣ Umlaute wie ä,ö,ü oder Ä,Ö,Ü oder das ß oder ‣ andere Sonderzeichen wie !,§,$, ... sind als Zeichen in Namen nicht erlaubt.
Namen / Bezeichner (2) EPI - Organisatorisches Folie 51 In Python sind die folgenden 35 Wörter (für die Sprache als Schlüsselworte Prof. Dr. Franziska Matthäus (Keywords)) reserviert und als Variablennamen verboten, weil diese eine Prof. Dr. Matthias Kaschube Dr. Karsten Tolle spezielle Bedeutung in der Sprachsyntax haben: False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield Fehlermeldung: >>> False = 1 SyntaxError: can't assign to keyword
Namenskonventionen für einfache „normale“ Variablen und Konstanten (1) EPI - Organisatorisches Folie 52 ‣ Variable nomen_mit_unterstrich Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Beispiel: current_index Dr. Karsten Tolle ‣ In Python gibt es keine syntaktische Möglichkeit Konstanten zu deklarieren (wie „final“ in Java). Konstanten sind in Python Variablen, die zur Laufzeit des Programmes nicht verändert werden sollen/dürfen. ‣ Konstanten: NOMEN_IN_GROSSBUCHSTABEN Beispiel: MAX_LENGTH ‣ Gewöhnen Sie sich gleich an: Namen (Bezeichner) in Englisch ‣ Englisch ist nun einmal die "Lingua Franca" (Umgangssprache) der Informatik.
Namenskonventionen für einfache normale Variablen und Konstanten (2) EPI - Organisatorisches Folie 53 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ‣ Machen Sie den Datentyp nicht zum Teil des Namens (dieses sieht Dr. Karsten Tolle man manchmal als „falsch verstandene“ „Ungarische Notation“, also benutzen Sie nicht int_number, currency_string. ‣ Underscore am Namensanfang oder CamelCasing (Großbuchstaben) in der Wortmitte sind in Python für spezielle Nutzungsfälle (Sichtbarkeit und Klassennamen – kommt später) reserviert, also für normale Variablen/Konstante nicht benutzen. Natürlich gilt: „A Foolish Consistency is the Hobgoblin of Liitle Minds.“ (PEP 8) Wir halten uns trotzdem dran!
Namen Hinweise/Tipps (1) EPI - Organisatorisches Folie 54 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ‣ Wählen Sie Namen, aus denen das Bezeichnete wahrscheinlich richtig Dr. Karsten Tolle erraten wird: current_line ist viel besser als c oder cl. Dies ist sicher nicht immer leicht. Wer weiß, in ein paar Monaten sind Sie es vielleicht selbst, die/der die Bedeutung dieses Namens erraten muss? ‣ Benutzen Sie den Singular für einzelne Objekte (Variablen) und den Plural für Kollektionen (z.B. Listen, kommt später). Ich nehme an, wenn Sie name lesen erwarten Sie einen Namen, wenn Sie names lesen mehrere. ‣ Wählen Sie die Namen so präzise wie möglich: Wenn eine Variable eine eingelesene Zahl ist, nennen Sie diese readin_value oder in_value und nicht nur input oder value.
Namen Hinweise/Tipps (2) EPI - Organisatorisches Folie 55 ‣ Ein-Buchstaben Bezeichner sollten nur in sehr überschaubaren Zusammenhängen Prof. Dr. Franziska Matthäus vorkommen (wo die Variable i oder k) nur eine oder zwei Zeilen „überlebt“, das heißt Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Bedeutung hat und dann nicht mehr, zum Beispiel als einfacher Index. ‣ Strenger: Benutzen Sie NIE „l“ (kleines L) oder I (großes i) oder O (großes o) als „Ein Buchstaben Bezeichner“. In einigen Fonts sind diese Zeichen nicht oder kaum unterscheidbar von den Ziffern „1“ (Eins) oder „0“ (Null).
Namen Hinweise/Tipps (3) EPI - Organisatorisches Folie 56 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Benutzen Sie so wenig wie möglich Abkürzungen, insbesondere keine Dr. Karsten Tolle selbst erfundenen wie zum Beispiel: finutowo für „final number to work on“. Aber allgemein übliche Abkürzungen sind erlaubt, wie curr für „current“, eof für „end of file“, eol für „end of line“, … Und dabei sagte Goethe doch: „Ich habe keinen Namen dafür! Gefühl ist alles; Name ist Schall und Rauch …“. [aus Faust: Eine Tragödie - Kapitel 19 Marthens Garten], aber nicht so in der Programmierung.
Übersicht EPI - Organisatorisches 1. Auswahl von Programmiersprachen Folie 57 (… darüber können nur DUMME streiten!) Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube 2. Beginnen wir mit einem Programmier-Beispiel! Dr. Karsten Tolle 3. Regeln und Konventionen beim Programmieren 4. Kernkonzepte: Variable – Zuweisung – Literal a. Variable b. Zuweisungsoperator c. Ausdrücke und Operatoren 5. (Variablen-) Namen 6. Die Sache mit den Fehlermeldungen Bugs – huuu! 7. Zusammenfassung und Ausblick Quelle:
Fehler beim Programmieren sind normal! EPI - Organisatorisches Folie 58 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Sobald Sie programmieren, wird es sicher sehr bald zu Fehlermeldungen kommen, d.h. der Interpreter (oder das zugehörige Laufzeitsystem) erkennen, dass etwas an ihrem Code nicht richtig sein kann. Diese vom Interpreter gemeldeten Fehler sind meist nicht schlimm und nicht problematisch! Schlimmer und schwerwiegender sind dynamischen Semantik-Fehler oder Logische Fehler.
Die Sache mit den Fehlermeldungen des Interpreters EPI - Organisatorisches Folie 59 ‣ Sie müssen lernen, diese zu lesen. – Der Interpreter versucht, genaue Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Hinweise zu den Fehlern zu geben (,das muss nicht immer gelingen). Dr. Karsten Tolle ‣ Beispiel für eine Fehlermeldung zu dem folgenden Quelltext: Radius = 5 Eine Interpretation des gemeldeten area = 3.14 * radius Fehlers ist immer nötig! In der IDLE Shell erscheint nach dem Starten dieses Moduls folgendes: Traceback (most recent call last): File "C:/Users/kroemker/example_2.py", line 2, in area = 3.14 * radius NameError: name 'radius' is not defined von hinten lesen! 1. Welcher? Wiederholt die Fehlerhafte Zeile: 2. Was? 3. Wo?
Klassifikation von (Programmier-)Fehlern (errors, bugs) EPI - Organisatorisches Folie 60 Prof. Dr. Franziska Matthäus ‣ Bugs sind: Jegliches „Fehlverhalten“ von Computerprogrammen. Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Je nach aktueller Situation und auch Sichtweisen unterscheidet man: 1. Funktions-(Analyse) 2. Zeitpunkt“ des 3. Methodik der stufen eines Auftretens SW-Entwicklung Interpreters / Compilers des Fehlers • Lexikalischer Fehler • Übersetzungsfehler „Fehler“ können in • Syntaktischer Fehler • (vom Compiler / jeder Entwicklungs- • Semantischer Fehler Interpreter stufe eines Programms • statisch erkennbar) vorkommen: : • Design Fehler • dynamisch • Laufzeitfehler • Fehler im Bedien- • Logischer Fehler konzept …
4. Klassifikation von Fehlern in Python (1) EPI - Organisatorisches Folie 61 ‣ Die Compiler und Laufzeitsysteme oder Interpreter haben in der Regel Prof. Dr. Franziska Matthäus ihre eigene Fehler-Klassifikation. In Python gibt es dazu eine Hierarchie. Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Alle Fehlermeldungen sind in die Exception-Hierarchie eingeordnet Hier nur die Wichtigsten. ‣ Exception ► Exception ‣ ArithmeticError ► OSError ‣ OverflowError ► ReferenceError ‣ ZeroDivisionError ► RuntimeError ‣ EOFError ► RecursionError ‣ ImportError ► SyntaxError ‣ LookupError ► IndentationError ‣ IndexError ► TypeError ‣ KeyError ► ValueError ‣ NameError ► Warnings
Die klassische Einteilung Fehlerklassen EPI - Organisatorisches Folie 62 Prof. Dr. Franziska Matthäus V Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Dies folgt den klassischen Analysestufen eines Übersetzers: 1. lexikalische Analyse 2. syntaktische Analyse 3. (statische) sematische Analyse Ziel ist es, mögliche Fehler so früh wie möglich zu finden.
Lexikalische Fehler V EPI - Organisatorisches Folie 63 ‣ Lexikalische Fehler sind nicht interpretierbare Zeichenketten, z.B. weil nicht erlaubte Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Zeichen im Programmtext enthalten sind. Dr. Karsten Tolle ‣ Die lexikalische Analyse setzt den Quelltext (mit einem Scanner/Lexer/Tokenizer) in sogenannte Token um: Schlüsselwörter, Bezeichner, Zahlen, Zeichenketten oder Operatoren. ‣ Nur sehr einfache Fehler erkennbar, z.B. im Quelltext nicht erlaubte Zeichen, wie §, ², €. Python subsummiert diese unter Syntax Fehler. ‣ Sind oft Tippfehler: z.B. bei Variablennae
Syntaxfehler (Fehler im Satzbau!) V EPI - Organisatorisches Folie 64 ‣ sind Verstöße gegen die grammatischen Regeln der benutzten Programmiersprache, Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube zum Beispiel die falsche Verwendung reservierter Symbole, fehlende Klammern, falsche Dr. Karsten Tolle Anzahl Parameter bei Funktionen u.s.w.. ‣ Z.B. geben die Schlüsselworte oft eine bestimmte Struktur vor. ‣ Der syntaktische Analysierer wird oft auch Parser genannt. ‣ Falls der Quellcode nicht zur Grammatik der Quellsprache passt, gibt der Parser einen Syntaxfehler aus. ‣ Übrigens: Syntaxfehler gibt es auch in natürlichen Sprachen: „Hund Katze Pferd grün“ ist kein deutscher Satz (Grammatik), es fehlt mindestens ein Verb.
Behandlung von lexikalischen und Syntaxfehlern EPI - Organisatorisches Folie 65 ‣ Lexikalische Fehler und Syntaxfehler verhindern die Übersetzung des fehlerhaften Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Programms und werden daher frühzeitig erkannt. Bei Programmiersprachen, die Dr. Karsten Tolle sequentiell interpretiert werden (wie Python), bricht das Programm üblicherweise an der syntaktisch/lexikalisch fehlerhaften Stelle ab. ‣ Das Verstehen und Korrigieren von Fehlern ist ein notwendiger und wichtiger Teil des Programmierens, leider am Anfang manchmal mühsam! ‣ Der Python-Interpreter wird - soweit möglich - alles ausführen, was er meint "verstanden" zu haben. Nur wenn es nicht mehr weitergehen kann, versucht Python zumindest ein paar Informationen über den Fehler zu nennen, damit die Programmierer*in den Fehler möglichst einfach findet!
"Echte" Syntaxfehler EPI - Organisatorisches Folie 66 Prof. Dr. Franziska Matthäus In der Interpreter-Konsole: In der IDLE-Shell: Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Beachten Sie bitte die leicht verschiedenen Ausgaben, insbesondere auch die Stelle, wo der Interpreter den Fehler erkannt hat: ^ links und "roter Balken" rechts. Die Vermutung muss nicht immer stimmen. Der Fehler kann vorher erfolgt sein! … liegt aber meist kurz davor.
Semantik (einer Programmiersprache) EPI - Organisatorisches Folie 67 Prof. Dr. Franziska Matthäus ‣ Die semantische Analyse überprüft die statische Semantik, also über die syntaktische Analyse hinausgehende Bedingungen an das V Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Programm. ‣ Semantische Fehler sind Fehler, in denen eine programmierte Anweisung zwar syntaktisch fehlerfrei ist (also der Grammatik entspricht), aber inhaltlich fehlerhaft ist. Wir unterscheiden: ‣ Fehler der statischen Semantik (können zur Übersetzungszeit entdeckt werden). Sind ggf. schwer von syntaktischen Fehlern zu trennen. „Gute Übersetzer finden und melden diese!“, z.B. ‣ Andere Fehlerursachen, wie beispielsweise das Auftreten einer Division durch 0 sind in der Regel zur Compilezeit nicht zu erkennen und werden den dynamischen Semantikfehlern zugeordnet. – liefern fehlerhafte Ergebnisse.
Beispiele für statische semantische Fehler EPI - Organisatorisches Folie 68 Prof. Dr. Franziska Matthäus ‣ die Verwendung eines vorher nicht definierten Bezeichners erzeugt in Python einen (NameError). V Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ die Anwendung eines Operators auf eine Variable, für deren Typ dieser Operator nicht definiert ist (TypeError). >>> print(value) Traceback (most recent call last): File "", line 1, in print(value) NameError: name 'value' is not defined >>> b = 'Beispiel' >>> b - 1 Traceback (most recent call last): File "", line 1, in b-1 TypeError: unsupported operand type(s) for -: 'str' and 'int'
Beispiele für dynamische semantische Fehler EPI - Organisatorisches Folie 69 Prof. Dr. Franziska Matthäus ‣ Division durch Null (ZeroDivisionError) V Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Versuch auf nicht vorhandene Werte in der Liste zuzugreifen (ValueError) ‣ Versuch über einen Index zuzugreifen der nicht belegt ist (IndexError). >>> a = 0 >>> b =10 / a Traceback (most recent call last): File "", line 1, in b =10 / a ZeroDivisionError: division by zero >>> liste = [0, 1, 2] >>> liste = [0, 1, 2] >>> liste.remove(4) >>> liste[3] Traceback (most recent call last): Traceback (most recent call last): File "", line 1, in File "", line 1, in liste.remove(4) liste[3] ValueError: list.remove(x): x not in list IndexError: list index out of range
Probleme mit semantischen Fehlern (1) EPI - Organisatorisches Folie 70 ‣ Die statischen semantischen Fehler können vom Übersetzer Prof. Dr. Franziska Matthäus abgefangen werden und sind damit vergleichsweise harmlos, weil sie V Prof. Dr. Matthias Kaschube Dr. Karsten Tolle gut lokalisiert (Zeilennummer) werden können und damit auch schnell behebbar sind. ‣ Fehler der dynamischen Semantik werden vom Compiler ohne Beanstandung übersetzt; ‣ Verstöße gegen die dynamische Semantik äußern sich als "Laufzeitfehler“: Das Programm erzeugt fehlerhafte Ergebnisse oder „stürzt ab“. ‣ Die Grenze zwischen statischer und dynamischer Semantik ist fließend, weil bestimmte Zusammenhänge theoretisch vom Compiler entdeckt werden könnten, wenn er nur „gründlich genug“ zu Werke ginge;
Probleme mit semantischen Fehlern (2) EPI - Organisatorisches Folie 71 Prof. Dr. Franziska Matthäus Die Behandlung von Laufzeitfehlern ist oft problematisch, weil z.B. ‣ der Fehler nicht immer auftritt, sondern nur in einem bestimmten V Prof. Dr. Matthias Kaschube Dr. Karsten Tolle Kontext (Benutzereingaben, Kommandozeilen-Parameter, Eingabe- daten, Uhrzeit und Datum etc.). Ist dann ggf. nicht reproduzierbar. ‣ der Fehler an ganz anderer Stelle zum tragen kommt (sich auswirkt) als an der eigentlich fehlerhaften Stelle. ‣ Der Bezug zwischen Quelltext und z.B. Absturzstelle durch die Übersetzung „verloren“ gegangen ist. (Ist bei einem Interpreter wie Python nicht der Fall: Man weiß immer, welche Quellzeile aktuell ausgeführt wird, aber ggf. bei übersetzten Programmen.) Da muss aber nicht der Fehler liegen! Ein weiterer Grund für die Nutzung eines Interpreters bei Programmieranfänger*innen.
Weitere Fehlertypen EPI - Organisatorisches Folie 72 ‣ Selbst ein syntaktisch und (im Sinne der Programmiersprache) Prof. Dr. Franziska Matthäus semantisch korrektes Programmliefert kann falsche Ergebnisse liefern. V Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Solche Fehler sind logische Fehler Sie bestehen in einem im Detail falschen Problemlösungsansatz, beispielsweise auf Grund eines Fehlschlusses, einer falsch interpretierten Aufgabe oder einfach eines Versehens oder Schreibfehlers. ‣ Logische Fehler äußern sich nicht in Fehlermeldungen, sondern in falschen Resultaten oder unerwartetem/unerwünschtem Verhalten. ‣ ‣ Beispiele: plus statt minus getippt, kleiner statt kleiner-gleich usw. ‣ Logische Fehler sind adhoc oft nicht von dynamischen semantischen Fehlern zu unterscheiden.
Weitere übliche Bezeichnung: Laufzeitfehler EPI - Organisatorisches Folie 73 ‣ Laufzeitfehler (runtime error) sind Fehler, die während der Laufzeit eines Prof. Dr. Franziska Matthäus Computerprogramms auftreten. V Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Abgrenzung: Nicht als Laufzeitfehler gelten Programmfehler, die bereits während der Übersetzung vom Compiler oder Interpreter festgestellt werden. (Bei einem Interpreter ist diese Unterscheidung adhoc manchmal schwer entscheidbar!). ‣ Das Programm zeigt bei Laufzeitfehlern unerwünschtes (= fehlerhaftes) Verhalten: ‣ Falsche Ergebnisse aber auch: ‣ im Extremfall Abbruch der Ausführung (Fehlermeldung, „Absturz“ wg. z.B. „Division durch Null“), ‣ das Programm geht in einen Zustand über, in dem es keine Benutzereingaben mehr akzeptiert („Einfrieren“, „Hängen“).
Style-Fehler (Verletzung unserer Programmierrichtlinien) EPI - Organisatorisches Folie 74 ‣ Programmierrichtlinien (Style Guide, Konventionen) Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube ‣ Sind ein Teilaspekt der Softwarequalität, mit dem Ziel insbesondere Dr. Karsten Tolle Lesbarkeit, Verständlichkeit und Wartbarkeit von Software zu sichern. ‣ Regelt „wie“ ein Programm, d. h. sein Quellcode, in formaler und struktureller Hinsicht gestaltet sein soll. ‣ Dies führen wir Zug-um-Zug ein … immer zusammen mit der Grammatik. ‣ Für Python machen wir das Dokument PEP 8 (Python Enhancement Proposal) für EPI verbindlich: https://www.python.org/dev/peps/pep-0008/ ‣ Verletzungen dieser Regeln sind für uns gleichermaßen schlimm, genau so wie „echte“ Programmierfehler!
Programmierfehler (geordnet nach ihrer „Schwere“) EPI - Organisatorisches Folie 75 Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube 1. Verletzungen gegenüber unserem Programmierhandbuch (abgeleitet Dr. Karsten Tolle aus PEP 8), also unseren Konventionen, werden durch ein Zusatzprogramm sichtbar, z.B. pylint oder flake8 (Behandeln wir später!) 2. Lexikalische Fehler Kennzeichen: Der Python-Interpreter Syntaktische Fehler gibt eine detaillierte Fehlermeldung, Statische Semantikfehler Interpreter bricht Bearbeitung ab. Oft als Semantikfehler zusammengefasst. 3. Dynamische Semantikfehler Manchmal kann der Interpreter ein uner- Logische Fehler wartetes Verhalten melden, z.B. ‚Division durch Null‘ (+ Abbruch), oft aber auch nicht: Da gibt es „nur“ falsche Ergebnisse. Nur durch methodisches und ausführliches Testen auffindbar.
Übersicht EPI - Organisatorisches 1. Auswahl von Programmiersprachen Folie 76 (… darüber können nur DUMME streiten!) Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle 2. Beginnen wir mit einem Programmier-Beispiel! 3. Regeln und Konventionen beim Programmieren 4. Kernkonzepte: Variable – Zuweisung – Literal a. Variable b. Zuweisungsoperator c. Ausdrücke und Operatoren 5. (Variablen-) Namen 6. Die Sache mit den Fehlermeldungen 7. Zusammenfassung und Ausblick
Fragen und (hoffentlich) Antworten EPI - Organisatorisches Folie 77 ‣ Voraussichtlich haben Sie die eine oder andere Frage Foren Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle ‣ Jeden Montag um 12-14 Uhr in ZOOM.
Also: als „Hausaufgaben“ bitte erledigen: EPI - Organisatorisches Folie 78 … Lernmaterialien in Moodle ansehen: Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle mit IDLE spielen „Ein Tag Spielerei mit IDLE“ Quiz (nicht immer alles in der VL besprochen) … … ÜE00 (das erste Hausübungsblatt)
EPI - Organisatorisches Herzlichen Dank für Ihre Folie 79 Aufmerksamkeit Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle und gutes Gelingen bei den allerersten Schritten! „Happy Pythoning“ Based upon: Prof. Dr. Detlef Krömker
Sie können auch lesen