Programmierkurs Python I

Ähnliche Dokumente
Programmierkurs Python I

Programmierkurs Python I

WS2018/ Oktober 2018

WS2017/ Oktober 2017

Programmierkurs Python I

Informatik I. Informatik I Dictionaries Mengen Dictionaries. Dictionaries. 11. Dictionaries & Mengen.

Einführung in die Computerlinguistik

Programming 101. Carl Herrmann IPMB & DKFZ

4 Daten in Python. Primäres Ziel: Daten zu Containern zusammenfassen, insbesondere Vektoren etc., um vernünftige Beispiele rechnen zu können.

Python 2. Vorlesung Computerlinguistische Techniken Alexander Koller. 28. Oktober 2014

Crashkurs Python und Sage U23 Krypto-Mission

Informatik I. Informatik I Iteratoren Generatoren Das Modul itertools. Iterierbare Objekte Iteratoren. Python-Interpreter

Funktionen in Python

Algorithmik und Programmieren

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

1 def Anweisung. 2 Argumentübergabe. 3 Lokale Variablen. 4 Default Argumente. 5 Aufruf mit Schlüsselwort. 6 Variable Argumente. Funktionen in Python

Funktionen in Python

Sequenzen - Listen. Sequenzen Listen: Definition Listen: veränderliche Sequenzen Methoden Attribute Eine Liste von ganzen Zahlen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

B6.1 Introduction. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Introduction. B6.3 Analyse. B6.4 Ordnungsbasierte Methoden

Informatik II, SS 2014

Programmierkurs Python I

A2.1 Python. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. A2.1 Python. A2.2 Kurzer Sprachüberblick. A2.3 Selectionsort in Python

Quick-Start Informatik Programmieren in Python Teil 2

2. Programmierung in C

Algorithmen und Datenstrukturen

Informatik für Schüler, Foliensatz 18 Rekursion

Einstieg in die Informatik mit Java

Programmierung I Einführung in Python, Beyond the Basics

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Einführung. B6.2 Symboltabellen. B6.3 Einfache Implementationen

3. Übungsblatt zu Algorithmen I im SoSe 2017

Programmieren in Python

Verkettete Datenstrukturen: Listen

Python für Linguisten

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Informatik I. Informatik I. 4.1 Funktionsaufrufe. 4.2 Mathematische Funktionen. 4.3 Funktionsdefinitionen. 4.4 Variablengültigkeitsbereich

Rekursive Funktionen (1)

3.3 Entwurf von Datentypen

Programmierung in Python

Informatik I. 19. Schleifen und Iteration für verlinkte Listen. Jan-Georg Smaus. Albert-Ludwigs-Universität Freiburg. 27.

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

Programmieren in Python

hue05 November 25, 2016

Einstieg in die Informatik mit Java

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

PYTHON. 03 for-schleifen, Funktionen

Programmierkurs Python I

Rekursive Funktionen (1)

Informatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I.

Datenstrukturen und Algorithmen. Vorlesung 5

Termin 6: Medienprogrammierung in Python Bildverarbeitung (3)

Programmierkurs Python I

4.4 Imperative Algorithmen Verzweigung und Iteration

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

Programmieren lernen mit Groovy Kollektionen: Listen und Abbildungen

Informatik I: Einführung in die Programmierung

Programmieren in Python 4. Sequenzen: Strings, Tupel, Listen

Algorithmen und Datenstrukturen (für ET/IT)

1 Funktionsaufrufe. Informatik I: Einführung in die Programmierung 4. Funktionen: Aufrufe und Definitionen. Standardfunktionen: Typen-Konversion

pue06 November 25, 2016

Algorithmen und Datenstrukturen 2. Stefan Florian Palkovits, BSc Juni 2016

Programmieren in Python

EWS, WS 2016/17 Pfahler I-1

Listenverarbeitung in Python

Programmierung und Angewandte Mathematik

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

Nützliche Utility-Klassen des JDK

4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)

2. Programmierung in C

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

6 Speicherorganisation

Gültigkeitsbereich. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/

Vorlesung Skriptsprachen Duale Hochschule Stuttgart Sommersemester Dipl.-Ing. (FH) Volker Schepper

PostScript -Sprache. Frank Richter

Algorithmen & Datenstrukturen Midterm Test 2

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Inhalt Kapitel 2: Rekursion

Einführung in die Informatik

Advanced Programming in C

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.

JAVA KURS COLLECTION

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2

Kapitel 4: Bäume i. 1. Einleitung. 2. Ein Datenmodell für Listen. 3. Doppelt-verkettete Listen. 4. Bäume. 5. Das Collections-Framework in Java

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

19 Collections Framework

Algorithmik und Programmieren Brückenkurs Informatik Benedikt Hupfauf

Transkript:

Programmierkurs Python I Michaela Regneri 2009-11-12 (Folien basieren auf dem gemeinsamen Kurs mit Stefan Thater) Übersicht Funktionen Rekursion Sammeltypen: - Listen, Tuples - Mengen - Dictionaries for-schleifen 2

Funktionen Funktionen sind (hier) zusammengehörende Code-Blöcke, die wiederverwendbar sind wird eine Funktion aufgerufen, wird all ihr Code ausgeführt die die Funktion zugreifen kann Funktionen haben Parameter, auf Funktionen können Rückgabewerte haben; x = fun() heißt, x bekommt den Wert, den fun() mit return zurück gibt def fakultaet(n): fak = 1 i = n while i > 0: fak *= i i -= 1 return fak Funktionskörper >>> fakultaet(4) 24 3 Funktionen - Syntax Funktionsdefinitionen beginnen mit def beliebig viele (evtl. 0) Parameter, werden mit Kommata getrennt Rückgabewert mit return markiert; Funktionen ohne Rückgabewert haben keine return-zeile def fun(n,m,k):... return ret 4

Funktionen - Aufrufe Aufruf mit Parameter p1-n: funktionsname(p1,p2,...) Funktionsaufrufe sind Ausdrücke, die zum Rückgabewert der Funktion auswerten im Funktionsablauf selbst werden die Parameter-Variablen mit den Werten aus dem Aufruf (in der angegebenen Reihenfolge) instantiiert: def fun(n,m,k): print( var,n,m,k) return m > fun(1,2,3) var 1 2 3 2 Rückgabewert 5 Funktionen - Variablen Funktionen können u.a. auf lokale Variablen zugreifen - die Parameter - in der Funktion neu definierte Variablen außerhalb der Funktion sind die lokalen Variablen nicht sichtbar Manipulation von Variablen innerhalb einer Methode funktionieren nur mit lokalen Variablen kompiliert nicht def fakultaet(n): fak = 1 i = n while(i > 0): fak *= i i -= 1 return fak counter = 0 def countup(): counter += 1 6

Rekursion Funktionen können andere Funktionen aufrufen aufrufen, das nennt man Rekursion viele Algorithmen elegant ausdrücken kann im Speziellen können Funktionen auch sich selbst Rekursion ist ein mächtiges Werkzeug, mit dem man Vorsicht: Wie auch bei Schleifen muss man darauf achten, dass die Rekursion irgendwo endet! 7 Rekursion - Fakultätsfunktion die Fakultäts-Funktion rekursiv: Rekursionsabbruch def fakultaet(n): für 0 und 1 if n <= 1: return 1 else: return n * fakultaet(n-1) Rekursion mit absteigendem n 8

Rekursion - Fibonacci Die Fibonacci-Zahlen ist eine Zahlenfolge, die rekursiv für natürliche Zahlen definiert ist: fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fib(n-1) + fib(n-2) def fibonacci(n): if n <= 1: return n else: return fibonacci(n-1) + fibonacci(n-2) 9 Sammeltypen Sammeltypen sind eingebaute Datenstrukturen, die verschiedene Elemente kombinieren können - Listen: Sammlung von Elementen, feste Reihenfolge - Mengen: ungeordnete Sammlung von Elementen - Wörterbücher: Abbildungen von Schlüssel auf Werte für Objekte s von irgendeinem Sammeltyp: - len(s): Anzahl der Elemente in s - s.clear(): entfernt alle Elemente aus s - s1 == s2: (Wert-)Gleichheit von s1 und s2 10

Listen: list eine Liste ist eine geordnete Sammlung von Werten man kann sie als literal aufschreiben: liste = [ a, Hallo, 1, 3.0, [1,2,3]] die Listenelemente müssen nicht den gleichen Typ haben (s.o.) Zugriff auf Listenelemente mit Indizes : > liste[0] a > liste[-1] [1,2,3] > liste[-1][1] 2 > liste[5] IndexError: list index out of range 11 Listen - Methoden und Operatoren (1) Elemente hinzufügen: - Element anhängen: list.append(elem) - Element an Stelle i einfügen: list.insert(elem,i) Listen konkatenieren: - entweder: newlist = list1 + list2 - oder: list1.extend(list2) Elemente löschen: - li.remove(el) löscht das erste el in der Liste li - del li[n] löscht das Element mit Index n Zugehörigkeit und Nicht-Zugehörigkeit: elem in list bzw. elem not in list 12

Listen - Methoden und Operatoren (2) Index des ersten Auftretens von elem in list: list.index(elem) Wie oft ist elem in list? list.count(elem) Liste invertieren: list.reverse() > li Liste sortieren: list.sort() (nur bei Typgleichheit) > li = [5,2,7] > li.reverse() [7, 2, 5] > li = [5,2,7] > li.sort() > li [2, 5, 7] > li = [[1,2],[1,2,3], [3,2], [1,3]] > li.sort() > li [[1, 2], [1, 2, 3], [1, 3], [3, 2]] 13 Listen - Methoden und Operatoren (3) Man darf Listen auch mit ganzen Zahlen multiplizieren : > li = [1,2,3] > li = li * 3 > li [1,2,3,1,2,3,1,2,3] Bei liste*n erscheint der Inhalt von liste n mal in der Ergebnis-Liste; n <= 0 ergibt die leere Liste Achtung: es werden keine sog. tiefen Kopien erzeugt! (Mehr dazu später) > li = [[]] * 3 > li[0].append(1) > li [[1],[1],[1]] 14

Listen - Slicing (1) mit dem Slicing-Operator kann man sich Teillisten einer Liste zurückgeben lassen - liste[i:] ist die Teilliste von i bis zum Ende von liste - liste[i:j] ist die Teilliste von i bis (ausschließlich) j - liste[i:j:k] macht dabei immer k-er Schritte > zahlen = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] > zahlen[2:8] [2, 3, 4, 5, 6, 7] > zahlen[2:8:2] [2, 4, 6] > zahlen[8:2:-1] [8, 7, 6, 5, 4, 3] 15 Listen - Slicing (2) mit Slicing lassen Listen sich elegant modifizieren del liste[0:3] löscht die ersten 3 Elemente in liste del liste[0:5:2] list1[0:3] = list2 löscht jeden zweiten Eintrag ab dem 1. bis zum 5. Element in list ersetzt die ersten 3 Elemente von list1 durch die Elemente von list2 ersetzt jeden zweiten Eintrag ab dem 1. list1[0:5:2] = list2 und bis zum 5. Element in list durch aufeinanderfolgende Einträge von list2 (list2 muss genauso viele Elemente enthalten wie list1[0:5:2]!) 16

Listen - Slicing (3) > zahlen = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] > zahlen[2:5] = [2,2,3,3,4,4] > zahlen [0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9, 10] > zahlen[0:9:2] = [ a, a, a, a, a ] > zahlen ['a', 1, 'a', 2, 'a', 3, 'a', 4, 'a', 6, 7, 8, 9, 10] 17 Tupel: tuple ähnlich wie Listen: ( a,1, b ), aber unveränderlich Intialisierung: - 0 Elemente: tupel =() - 1 Element elem: tupel = elem, - mehr Elemente: tupel = elem1, elem2, elem3 Zugriff auf Elemente mit, sonst keine Methoden effizienter als Listen > tu = a, 2, [2,3] > x,y,z = tu sequence unpacking: (funktioniert auch mit Listen) > z [2,3] 18

Mengen: set Mengen sind ungeordnete Sammeltypen, die jedes Element höchstens ein mal enthalten > numbers = [1, 2, 3, 1, 1] > menge = set(numbers) > menge {1, 2, 3} als Literal: menge ={1,2,4,5} (leere Menge: set()) oder Definition über einen anderen Sammeltyp doppelte Elemente werden eliminiert effizient Werte auf (Listen-)Zugehörigkeit testen in Mengen dürfen nur unveränderliche Typen enthalten sein! (Zahlen, Strings, Booleans,...) 19 Mengen - Methoden und Operatoren (1) elem hinzufügen: set.add(elem) elem entfernen: - set.remove(elem) (Fehler wenn elem nicht vorhanden) - set.discard(elem) (entfernt elem falls vorhanden) alle Elemente aus set2 zu set1 hinzufügen: set1.update(set2) Zugehörigkeit und Nicht-Zugehörigkeit: elem in set bzw. elem not in set 20

Mengen - Methoden und Operatoren (2) Teilmenge / Obermenge (Rückgabe: True/False): - set1.issubset(set2) bzw. set1.issuperset(set2) - set1 <= set2 bzw. set1 >= set2 Vereinigungsmenge / Schnittmenge (Rückgabe: die neue Menge) Methoden können auch andere Sammeltypen als 2. Argument haben, Operatoren benötigen zwei Mengen. - set1.union(set2) bzw. set1.intersection(set2) - set1 set2 bzw. set1 & set2 21 Mengen - Methoden und Operatoren (3) Differenzmenge (Rückgabe: neue Menge mit Elementen, die in set1 aber nicht in set2 sind) - set1.difference(set2) - set1 - set2 set1 set2 Symmetrische Differenzmenge (Rückgabe: neue Menge mit Elementen, die entweder in set1 oder in set2, aber nicht in beiden sind) - set1.symmetric_difference(set2) - set1 ^ set2 set1 set2 22

Mengen - Methoden und Operatoren (4) alle Mengen-Operationen gibt es auch als update - Methode / Operator kein Rückgabewert, in set1 wird das resultierende Set behalten: - set1.difference_update(set2) set1 -= set2 - set1.symmetric_difference_update(set2) set1 ^= set2 - set1.intersection_update(set2) set1 &= set2 - set1 = set2 23 Unveränderliche Mengen: frozenset es gibt eine unveränderliche Mengenvariante, das frozenset funktioniert wie set: fs = frozenset(sammelt) aber: alle Methoden, die Elemente hinzufügen, Löschen oder verändern sind verboten (add, remove, discard, alle update-methoden) Alle anderen Methoden und Operatoren funktionieren wie bei set (und geben ggf. frozenset statt set zurück) 24

Initialisierung von Listen, Mengen etc. die Sammeltypen, die keine Wörterbücher sind ( :) ) kann man direkt ineinander konvertieren das geht mit typname(sammel_instanz) - siehe Mengen > menge = set([1,2]) > liste = list(menge) > tupel = tuple(menge) > tupel2 = tuple(liste) > menge2 = set(liste *5)... 25 Wörterbücher: dict (Dictionaries, Maps) Wörterbücher bilden (eindeutige) Schlüssel auf Werte ab; Schlüssel müssen einen unveränderlichen Typ haben Zugriff auf Werte über die Schlüssel Beispiel: ein Telefonbuch > tel = { Mueller : 7234, Meier : 8093} > tel[ Meier ] 8093 > tel[ Schmidt ] = 2104 > tel { Mueller : 7234, Meier : 8093, Schmidt : 2104} 26

Wörterbücher als Literale {} ist ein leeres Dictionary (!), genau wie dict() einige Alternative Schreibweisen mit dem gleichen Ergebnis: > tel = { Mueller : 7234, Meier : 8093} > tel = dict([[ Mueller, 7234], [ Meier,8093]]) > tel = dict([( Mueller, 7234), ( Meier, 8093)]) > tel = dict(mueller=7234, Meier=8093) nur mit gültigen Variablennamen als Schlüssel 27 Wörterbücher - Schlüssel (1) Schlüssel müssen unveränderliche Werte haben (siehe Mengen) frozenset ist demnach erlaubt (auch in Mengen) > tel = {} > tel[['peter','sophie']] = 7473 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type > tel[frozenset(['peter','sophie'])] = 7473 > tel {frozenset(['peter','sophie']):7473} 28

Wörterbücher - Schlüssel (2) Schlüsel, die beim Vergleich mit == True ergeben, gelten als gleich wenn man einen Schlüssel belegt, der schon im Dictionary steht, kriegt er den neuen Wert (der alte wird gelöscht) > tel[ Peter ] = 7473 > tel[ Peter ] = 9999 > tel { Peter :9999} Vorsicht: 1 und 1.0 sind somit der gleiche Schlüssel 29 Wörterbücher - Methoden (1) Test, ob ein Schlüssel key in dict existiert: - key in dict Löschen eines Schlüssel-Wert-Paares (key:value): - del dict[key] (gibt nichts zurück) - dict.pop(key) (gibt value zurück) Setzen des Schlüssels key auf den Wert value, falls key noch nicht existiert: dict.setdefault(key,value) (wenn key existiert, wird der alte Wert von key zurückgegeben, sonst value) 30

Wörterbücher - Methoden (2) dict1 mit Werten aus dict2 ergänzen dict1.update(dict2) (Schlüssel, die in beiden sind, bekommen den Wert aus dict2) View aller Schlüssel: dict.keys() View aller Werte: dict.values() View aller Schlüssel-Wert-Paare: dict.items() Vorsicht: die Reihenfolge ist hier nicht deterministisch! Einzige Garantie: zwei Aufrufe hintereinander auf dem gleichen System ohne Veränderung von dict liefern die gleiche Reihenfolge, korrespondierend bei Schlüssel und Werten. 31 Wörterbücher - Views Views sehen z.b. so aus: >>> map {'a': 1, 'l': 3, 'o': 4} >>> map.keys() dict_keys(['a', 'l', 'o']) sie spiegeln jeweils den aktuellen Zustand des Dictionaries wir betrachten sie als Sammeltypen, die wir nicht verändern können (nicht als unveränderlich) zur weiteren Verarbeitung (wenn nötig) geht z.b. liste = list(map.keys()) 32

Listen - Tupel - Mengen? feste Reihenfolge, alle Methoden zum verändern von Elementen: list feste Reihenfolge, keine Methoden oder Manipulation (unveränderlich): tuple keine feste Reihenfolge, manipulierbar: set (viel effizienter für Zugehörigkeits-Tests als Listen) unveränderliche Mengen: frozenset unmanipulierbare Typen als Schlüssel (in dict) und Mengenelemente (in set und frozenset) 33 for S ist ein Sammeltyp es wird über alle Elemente in S iteriert i ist das aktuell betrachtete Element bei jeder Iteration wird block ausgeführt break, continue und else funktionieren wie bei while for i in S: block > liste = [1, a,true] > for i in liste:.. print(i).. 1 a True 34

for Durchschnitt aller Listenelemente mit for: def durchschnitt(liste): ergebnis = 0.0 for zahl in liste: ergebnis += zahl return ergebnis / len(liste) Alphabetisch geordnete Schlüssel-Wert-Paare: def sortedprint(map): schluessel = sorted(map.keys()) for key in schluessel: print(str(key) + : + str(map[key])) sorted(map) und sorted(map.keys()) sind äquivalent 35 for mit Wörterbüchern auch über die View -Objekte der Wörterbücher (keys,items,values) kann man mit for iterieren oft will man über alle Paare in einem Wörterbuch iterieren, dank sequence unpacking geht das kurz so: def onelineoerentry(map): for key, val in map.items(): print(str(key) + : + str(val)) 36

Exkurs: range Um Listen mit aufeinanderfolgenden Zahlen zu erzeugen, gibt es den Typ range range gibt nicht (mehr) direkt eine Liste zurück, sondern einen Iterator-ähnlichen Sammeltyp Iteratoren kann man mit For-Schleifen benutzen - range(m) entspricht den Elementen [0,1,...,m-1] - range(n,m) [n, n+1,..., m-1] - range(n,m,k) macht dabei k-er Schritte (vgl. Slicing) 37 Vielfache berechnen mit for nächstes Vielfaches von x nach n-1 n -1 + (x + x - -(n(n-1 % x)) % x).. 9 10 11 12 13 14 15 16 17.. x = 3 n m def vielfache(x,n,m): start = (n-1) + x -((n-1)%x) for i in range(start,m,x): print(i) > vielfache(3,11,24) 12 15 18 21 38

Zusammenfassung Funktionen Rekursion Sammeltypen: List, Tupel, Mengen, Wörterbücher neue Kontrollstruktur: for-schleife 39