Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022

Die Seite wird erstellt Lenny-Stefan Berndt
 
WEITER LESEN
Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022
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)
Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022
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.
Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022
Ü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
Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022
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).
Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022
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 .
Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022
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:
Modul: Programmierung B-EPI Einführung in die Programmierung EPR - WS 2021/2022
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