Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2018/2018. Inhaltsverzeichnis 1

Ähnliche Dokumente
Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Abschnitt 2: Daten und Algorithmen

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Vorkurs Informatik WiSe 16/17

Java I Vorlesung Imperatives Programmieren

Variablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15

Informatik Vorkurs - Vorlesung 2

Hello World! Eine Einführung in das Programmieren Variablen

Teil II. Datentypen. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2017/

Informatik I: Einführung in die Programmierung

Operatoren in C/C++ und Java:

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Semantik von Ausdrücken

2.5 Primitive Datentypen

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Kapitel 2: Ausdrücke. 1. Sorten und abstrakte Datentypen. 2. Ausdrücke 2.1 Syntax 2.2 Semantik 2.3 Ausdrücke in Java. 3. Funktionale Algorithmen

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Daten und Algorithmen

Ausdrücke der Programmiersprache Java

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Programmieren in Python

Grundlagen der Programmierung - Datenstrukturen

Programmierkurs C++ Variablen und Datentypen

Intensivübung zu Algorithmen und Datenstrukturen

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

2.1 Fundamentale Typen

Zwischenklausur Informatik, WS 2016/17. Lösungen zu den Aufgaben

Abschnitt 5: Grundlagen der funktionalen und imperativen Programmierung

Grundlagen der Programmierung

EIGENSCHAFTEN VON SPRACHEN

Quick-Start Informatik Programmieren in Python Teil 1

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

4. Zahlendarstellungen

Einstieg in die Informatik mit Java

JAVA-Datentypen und deren Wertebereich

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Einstieg in die Informatik mit Java

Tag 3 Repetitorium Informatik (Java)

Java Einführung Operatoren Kapitel 2 und 3

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

Kapitel 15: Von dynamischen zu statischen Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Programmiervorkurs Einführung in Java Tag 1

Übung Praktische Informatik I

Projekt 3 Variablen und Operatoren

Kapitel 3: Variablen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1. Abbildungsverzeichnis 2

Operatoren und Ausdrücke

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

WS2018/ Oktober 2018

Grundlagen der Programmierung

Programmierkurs Python I

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

3 Syntax von Programmiersprachen

Modellierung und Programmierung 1

Algorithmen und Datenstrukturen (für ET/IT)

Software Entwicklung 1

Abschnitt 5: Grundlagen der funktionalen Programmierung

Übungsblatt 1. Java Vorkurs (WS 2017)

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

4. Zahlendarstellungen

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Vorlesung Programmieren

Kapitel 5: Daten und Operationen

Abschnitt 11: Korrektheit von imperativen Programmen

Tag 2 Repetitorium Informatik (Java)

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Einstieg in die Informatik mit Java

3 Syntax von Programmiersprachen

Werkzeuge zur Programmentwicklung

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza)

Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen Darstellung ganzer Zahlen

II. Grundlagen der Programmierung

Zahlendarstellungen und Rechnerarithmetik*

Überblick. Ausdrücke. 3. Mathematische Grundlagen 3.1 Mengen und Abbildungen 3.2 Induktion und Rekursion 3.3 Ausdrücke

Einführung in die Programmierung Wintersemester 2008/09

5.3 Auswertung von Ausdrücken

Abschnitt 4: Daten und Algorithmen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Die Klasse MiniJava ist in der Datei MiniJava.java definiert:

Grundlagen der Informatik 2. Operatoren

Motivation und Überblick

Programmieren in Java

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Funktionen nur wenn dann

Transkript:

Kapitel 2: Python: Ausdrücke und Typen Grundlagen der Programmierung 1 Holger Karl Wintersemester 2018/2018 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2 2.1 Überblick............................... 3 2.2 Python interaktiv.......................... 3 2.3 Zahlen................................ 4 2.4 Ausdrücke.............................. 6 2.5 Typen................................. 8 2.6 Typen in Programmiersprachen.................. 14 1

2.7 Zusammenfassung......................... 15 Abbildungsverzeichnis 2.1 Read-Evaluate-Print-Schleife................... 4 2.2 Syntax-Fehler............................ 5 Liste von Definitionen u.ä. 2.1 Definition (Interpreter)...................... 3 2.2 Definition (Arithmetischer Ausdruck).............. 7 2.3 Definition (Semantik von + bei Zeichenketten)......... 8 2.4 Definition (Datentyp)....................... 9 2.1 Beispiel (Datentyp: Ganze Zahlen)................ 9 2.2 Beispiel (Datentyp: Reelle Zahlen)................ 9 2.3 Beispiel (Datentyp: str)...................... 10 2.4 Beispiel (Datentyp: bool)..................... 10 2.5 Beispiel (Datentyp: Ganze Zahlen (ergänzt))........... 11 2.1 Achtung (Semantik von Operatoren ist typabhängig)...... 13 2.5 Definition (Typisierte Programmiersprache)........... 14 2

2.1. Überblick 3 2.1 Überblick 2.1.1 Dieses Kapitel Erste Schritte mit Python Interaktive Nutzung Grundkonzepte: Zahlen, Ausdrücke,... Fehler 2.2 Python interaktiv 2.2.1 Interaktiv? Interaktive Software: Eingabe während der Ausführung entgegennehmen und verarbeiten Interaktive Programmierung? Die Sprache wird ausgeführt? Genauer: Ein Interpreter Definition 2.1 (Interpreter). Ein Interpreter ist ein Programm, das Programme (oder Programmfragmente) entgegennimmt und ausführt. Die Ergebnisse der Ausführung werden unmittelbar ausgegeben. Beispiele für Interpreter Beispiele für Interpreter gibt es viele, wenn man den Begriff des eingegebenen Programms etwas weiter fasst. Tabellenkalkulationen sind typische Beispiele: Man gibt ein Programm ein, das aus Formeln besteht. Die Berechnungsergebnisse werden sofort angezeigt. Fasst man den Begriff noch offener, dann ist auch eine Textverarbeitung (wie etwa OpenOffice oder Word) ein Interpreter. Web-Browser sind ebenfalls typische Interpreter: Sie interpretieren die Beschreibung der anzuzeigenden Seite (in HTML aufgeschrieben) oder auch kleine, in die Web-Seite integrierte Programme (z.b. in Javascript). 2.2.2 Python als Interpreter Graue Box erwartet Eingaben: In

4 Liste von Definitionen u.ä. Result wird darunter erscheinen: Out Mit # werden Kommentare markiert 1 # Ihre Anweisungen? 2.2.3 Read-Evaluate-Print (REPL) Verhalten des Interpreters: Warte auf Eingabe, lies sie ein (read) Werte die Eingabe aus, berechne ein Ergebnis (evaluate) Gib das Ergebnis aus (print) Beginne wieder von vorne (Schleife, loop) Abbildung 2.1: Read-Evaluate-Print-Schleife Abbildung 2.1 zeigt die Read-Evaluate-Print-Schleife eines Interpreters. Beachten Sie die Analogie zu einem Maschinenmodell: Ein Interpreter ist in gewissem Sinne eine (sehr abstrakte) Form einer Maschine. 2.3 Zahlen 2.3.1 Eingaben? Zahlen 1 # Zahlen? Gültige Zahlen (Version 1) Jede Ziffer ist eine Zahl: 0, 1,..., 9 Jede Folge von Ziffern ist eine Zahl Aber nicht mit einer Null beginnen Eine Zahl darf einen Dezimalpunkt. enthalten

2.3. Zahlen 5 Eine Zahl darf mit einem Vorzeichen + oder - beginnen 2.3.2 Ungültige Zahlen Mehrere Dezimalpunkte 1 234.3451.213 Fehlermeldung SyntaxError: Eine Regel der Sprache wurde verletzt Abbildung 2.2: Syntax-Fehler 2.3.3 Ungültige Zahlen Führende Null 1 0464 2.3.4 Ungültige Zahlen Mehrere Vorzeichen 1 1+2+3 Ungültig? Nein... aber unerwartet? Text wie 1+2+3 wird nicht als Zahl interpretiert Sondern als arithmetischer Ausdruck Wert wird ausgerechnet 2.4 Ausdrücke

6 Liste von Definitionen u.ä. 2.4.1 Arithmetischer Ausdruck Syntax Jede Zahl ist ein arithmetischer Ausdruck Verbindet man zwei arithmetische Ausdrücke durch +, -, * oder /, so entsteht ein arithmetischer Ausdruck Setzt man um einen arithmetischen Ausdruck ein Klammerpaar (... ), so entsteht ein arithmetischer Ausdruck Beispiel 1 (5*3)+5 2.4.2 Arithmetischer Ausdruck Syntax Was ist dann ((627)(223++-+))? Definition vorherige Folie: Keine Aussage Was fehlt? Und nur das sind arithmetische Ausdrücke Typische rekursive Definition Details: VL Modellierung 2.4.3 Arithmetischer Ausdruck Semantik? Bis jetzt: Nur Syntax, aber keine Bedeutung der Ausdrücke Was ist der Wert eines Ausdrucks? Beispiel: Ist 5 + 2 3 = 21? Oder 5 + 2 3 = 11? 1 5+2*3 2.4.4 Arithmetischer Ausdruck Semantik Klar für Zahlen: Der Wert einer Zahl ist die Zahl Klar für binäre Ausdrücke Sind a 1 und a 2 arithmetische Ausdrücke und besteht der arithmetische Ausdruck a aus a 1 + a 2, so ist der Wert von a die Summe der Werte von a 1 und a 2.

2.4. Ausdrücke 7 2.4.5 Eindeutigkeit? Und analog für -, *, / Ist 5 + 2 3 ein binärer Ausdruck? Ja, mit zwei möglichen Interpretationen * Einerseits: a 1 = 5, a 2 = 2 3 * Andererseits: a 1 = 5 + 2, a 2 = 3 Problem: tertiäre Ausdrücke a 1 a 2 a 3 Vorrangregeln: Punkt vor Strich * Also: 5 + (2 3) Links-nach-rechts: Bei gleichem Vorrang, von links lesen Formal durch Vorrangregeln festgelegt Details: Kompliziert; später 2.4.6 Arithmetischer Ausdruck Definition Definition 2.2 (Arithmetischer Ausdruck). Arithmetische Ausdrücke verknüpfen Zahlen und arithmetische Ausdrücke zu neuen arithmetischen Ausdrücken. Dazu legt eine Programmiersprache syntaktisch Verknüpfungen fest und beschreibt semantisch den Wert eines solchen verknüpften Ausdrucks. Verknüpfungen werden häufig durch spezielle Zeichen wie +, * u.ä. angegeben. Diese Zeichen heißen Operatoren. 2.4.7 Nur Zahlen? Text? Zahlen sind toll, aber was ist mit Text? Text direkt? 1 Hallo Text mit Anführungszeichen 1 "Hallo" 1 'Hallo' 2.4.8 Syntaxregel: Text als Zeichenkette Text wird durch eine Kette von einzelnen Zeichen, kurz Zeichenkette, dargestellt

8 Liste von Definitionen u.ä. Zeichenkette muss in Anführungszeichen eingeschlossen sein 2.4.9 Ausdrücke mit Zeichenketten? Zahlen kann man addieren - was ist mit Zeichenketten? Erwartung? 1 "Hallo" + " GP1" Definition 2.3 (Semantik von + bei Zeichenketten). Sind t 1 und t 1 Zeichenketten, so ist t 1 +t 2 eine Zeichenkette. Der Wert von t 1 +t 2 ist die Zeichenkette die entsteht, indem an t 1 unmittelbar t 2 angehängt wird. 2.4.10 Andere Verknüpfungen für Zeichenketten Subtraktion? 1 "Hallo" - " GP1" Multiplikation? 1 "Hallo" * " GP1" Division? 1 "Hallo" / " GP1" Nein, nur Addition! Keine sinnvolle Semantik, also Fehler 2.5 Typen 2.5.1 Fehlermeldungen: TypeError Bei den sinnlosen Kombinationen gab es die Fehlermeldung: TypeError: unsupported operand type(s) TypeError: can t multiply sequence by non-int

2.5. Typen 9 Type? 2.5.2 Datentypen Was könnte ein Typ bedeuten? Die Fehlermeldung bei Multiplikation klingt interessant Offenbar sind Zahlen und Zeichenketten ja etwas unterschiedliches Unterschiedliche Werte, unterschiedliche Verknüpfungen erlaubt, unterschiedliche Interpretation (+ bei Zahlen vs. bei Zeichenketten) Beobachtung formalisiert in der Vorstellung eines Datentyps Definition 2.4 (Datentyp). Ein Datentyp oder kurz Typ legt eine Menge möglicher Werte fest. Literale sind die konkreten Notationen möglicher Werte. Zusätzlich legt ein Datentyp erlaubte Verknüpfungen fest. Er erklärt sowohl die Syntax als auch die Semantik dieser Verknüpfungen. 2.5.3 Datentyp: Ganze Zahlen Beispiel 2.1 (Datentyp: Ganze Zahlen). Ganze Zahlen haben den Wertebereich { -,..., -3, -2, -1, 0, 1, 2, 3,...+ }. Die Verknüpfungen +, -, * sind nach üblichen Rechenregeln erklärt. Die Verknüpfung / ist als ganzzahlige Division erklärt. 2.5.4 Literale für ganze Zahlen Üblicherweise bestehen Literale für ganze Zahlen aus arabischen Ziffern: 0, 1, 2,..., 42,..., 4711,... Denkbar wäre auch, römische Zahlen zu benutzen: I, II, III, IV,... 2.5.5 Datentyp: Reelle Zahlen Beispiel 2.2 (Datentyp: Reelle Zahlen). Reelle Zahlen sind die rationalen, algebraischen und transzendenten Zahlen. Die arithmetischen Verknüpfungen sind wie üblich erklärt. 2.5.6 Datentypen: Zahlen in Rechnern Problem: Die gerade definierten Datentypen können in einem realen Rechner nicht dargestellt werden Jeder Rechner ist endlich

10 Liste von Definitionen u.ä. Kann keine unendlich großen Zahlen speichern Endliche Ausschnitte Datentypen in vielen (nicht allen) Programmiersprachen sind immer nur endliche Ausschnitte aus entsprechenden, konzeptionellen Datentypen. Oft ist die Unterscheidung egal Aber manchmal wichtig: Endliche Präzision, endliche Werte Verletzung von Rechenregeln Beispiel: Assoziativitätsgesetz gilt nicht mehr! 2.5.7 Zahldarstellung Darstellung von numerischen Datentypen in Rechnern nicht trivial Vorzeichen? Genauigkeit? Platzbedarf?...? Details: Vorlesung Grundlagen technische Informatik 2.5.8 Datentyp: str Beispiel 2.3 (Datentyp: str). Strings (kurz: str) sind Aneinandereihungen einzelner Zeichen; sie formalisieren Zeichenketten. Die leere Reihe ist ebenfalls ein String. Zeichen sind durch eine Aufzählung definiert (a, b, c,...). Zwei Strings können durch Addition miteinander verknüpft werden. 2.5.9 Datentyp: bool Beispiel 2.4 (Datentyp: bool). Der Datentyp bool kennt nur die beiden Werte wahr und falsch, notiert als Literale True bzw. False. Zwei Werte dieses Types können mit den Operatoren and, or,!= verknüpft werden; dies liefert einen Wert vom Typ bool. Auf einen Wert bool kann not angewendet werden. Die Semantik dieser Verknüpfungen ist in den folgenden Tabellen definiert. Siehe auch Details.

2.5. Typen 11 2.5.10 Datentyp: bool Semantik der Verknüpfungen Verknüpfung: and Siehe auch Vorlesung Modellierung. 2.5.11 Vergleiche zwischen Werte b 1 b 2 b 1 and b 2 False False False False True False True False False True True True Viele Datentypen erlauben Vergleiche zwischen Werten Meist: Gleichheit ==, Ungleichheit!= Oft: Kleiner/größer Vergleich Strikt: <, > Mit Gleichheit: <=, >= Definition der Datentypen von oben: ergänzen! 2.5.12 Datentyp mit Vergleich Beispiel 2.5 (Datentyp: Ganze Zahlen (ergänzt)). Ganze Zahlen haben den Wertebereich { -,..., -3, -2, -1, 0, 1, 2, 3,...+ }. Die Verknüpfungen +, -, * sind nach üblichen Rechenregeln erklärt. Die Verknüpfung / ist als ganzzahlige Division erklärt. Zwei Zahlen können mit <, <=, >, >=, ==,!= miteinander verglichen werden. Das Resultat eines Vergleichs ist ein Wert des Datentyps bool. 2.5.13 Beispiel: Vergleich arithmetischer Ausdrücke 1 pingo_title = "Was ist ((5+3*2) < 17-5) and ((1*1) > -1)" 2 pingo_type = "single" 3 pingo_questions = ["Wahr (True)", "Falsch (False)"] 4 5 %pingo 2.5.14 Vereinfachen? Darf man das vereinfachen zu: 1 5+3*2 < 17-5 and 1*1 > -1

12 Liste von Definitionen u.ä. Was fehlt? Welche Festlegung fehlt für so eine Vereinfachung? 2.5.15 Zusammenfassung: Einfache Datentypen Numerisch: int, float, complex Mit üblichen arithmetischen Operationen Unterschiedliche Repräsentation im Speicher Und bit-für-bit Operationen für int Siehe Details Zeichenkette: str Folge von Unicode-Zeichen Siehe Details Wahrheitswerte: bool Folgen von Bytes,... 2.5.16 Verknüpfungen unterschiedlicher Typen? Bisher: nur typreine Verknüpfungen betrachtet str und str, int und int Was passiert, wenn wir mischen? Beispiel: Zeichenkette und Zahl 1 "Hallo GP1" + 5 2.5.17 Sinnvolle Verknüpfungen? Was wären denn Verknüpfungen mit sinnvoller Semantik? Zeichenkette und Zahl? Multiplikation: Zeichenkette mehrfach hintereinander Zeichenkette oder Zahl und bool???? Zahl und Zahl, genauer: unterschiedliche Zahlen? Ja... 2.5.18 Zeichenkette und Zahl str und int 1 "Hallo GP1!" * 5

2.5. Typen 13 str und float 1 "Hallo GP1!" * 3.1415 Semantik? Sinnlose Semantik, also Fehler 2.5.19 Operatoren: Verschiedene Semantik! Achtung 2.1 (Semantik von Operatoren ist typabhängig). Der gleiche Operator kann in Kombination mit unterschiedlichen Typen auftreten. Dadurch erhält der Operator jeweils eine andere Semantik. Man spricht dann von Operator Overloading. Beispiel: Multiplikation 1 3 * 5 1 "Hallo" * 5 2.5.20 Arithmetik? int und float? Implizite Umwandlung, weitgehend problemlos In Python3; andere Programmiersprachen hier ggf. kompliziert Explizite Umwandlung: Runden u.ä. später 1 10 * 0.3 1 10 / 3 1 10 // 3

14 Liste von Definitionen u.ä. 2.6 Typen in Programmiersprachen 2.6.1 Typen in Python 3 Alles hat einen Typ in Python 3 Literale haben stets einen eindeutigen Typ Verknüpfungen zwischen zwei Werten produzieren Wert mit Typ Eindeutig durch Typ der Werte und Verknüpfung bestimmt Folge: Man kann nichts ohne Typ hinschreiben... Typ eines Werts wird im Interpreter explizit repräsentiert Man muss den Typ aber nicht explizit hinschreiben 2.6.2 Typisierte Programmiersprache Definition 2.5 (Typisierte Programmiersprache). Eine Programmiersprache heißt typisiert wenn für jeden Wert und Ausdruck nicht nur der Wert selbst sondern auch der Datentyp bekannt ist. Beispiel Python (2 & 3) Java... 2.6.3 Konvertierung zwischen Typen Typen sind unterschiedlich, aber was, wenn das gleiche Datum repräsentiert wird? Beispiel: int: 9 string: 9 Wie kommt man von string 9 zu int 9? Umgekehrt? Möglich Details: später 2.6.4 Ausdrücke und Zustand? Und was ist mit Zustand? Vorheriges Kapitel: Lange Diskussion, Ausführungsmodell,... Ausdrücke verändern den Zustand nicht Mit einer kleinen Ausnahme (welcher?)

2.7. Zusammenfassung 15 2.7 Zusammenfassung 2.7.1 Zusammenfassung Datentypen legen Werte und Verknüpfungen fest Werte werden durch Literale angegeben Durch Verknüpfungen werden Ausdrücke gebildet Ausdrücken erzeugen neue Werte aus vorhandenen Werten Python ist ein Beispiel für eine Sprache/Umgebung mit einer read-evaluate-print-schleife eine dynamisch typisierte Programmiersprache