Programmierkurs Python I

Ähnliche Dokumente
Programmierkurs Python I

Programmierkurs Python I

Programmierkurs Python I

Einführung in die Programmierung

Einführung in die Java- Programmierung

Objektorientierte Programmierung

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Grundlagen von Python

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung

Import und Export von Übergängern

AutoCAD Dienstprogramm zur Lizenzübertragung

Erstellen von x-y-diagrammen in OpenOffice.calc

Eine Anwendung mit InstantRails 1.7

Scala kann auch faul sein

Vorkurs C++ Programmierung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

affilinet_ Flash-Spezifikationen

Mediator 9 - Lernprogramm

Stand: Adressnummern ändern Modulbeschreibung

Programmierung I Einführung in Python, Beyond the Basics

Process4.biz Release Features Übersicht. Repository. Das Schützen von Diagrammen wurde optimiert (check-in, check-out)

Primzahlen und RSA-Verschlüsselung

Java: Vererbung. Teil 3: super()

Barcodedatei importieren

Zählen von Objekten einer bestimmten Klasse

Enigmail Konfiguration

ecaros2 - Accountmanager

Computeranwendung und Programmierung (CuP)

Elexis-BlueEvidence-Connector

WPF Steuerelemente Listbox, ComboBox, ListView,

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Anleitung über den Umgang mit Schildern

Arge Betriebsinformatik GmbH & Co.KG, CAP News 40, Februar CAP-News 40

Professionelle Seminare im Bereich MS-Office

Programmierkurs Java

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Hilfen zur Verwendung der Word-Dokumentvorlage des BIS-Verlags

Attribut-Zertifikat importieren zur Nutzung in Sign Live! CC

Kurzanleitung. Toolbox. T_xls_Import

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Sichern auf den zentralen TSM-Servern unter Windows. Sichern auf den zentralen TSM-Servern unter Windows

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Import des Out of Office Status von Exchange in LANDESK Service Desk

SUDOKU - Strategien zur Lösung

1. Einführung Erstellung einer Teillieferung Erstellung einer Teilrechnung 6

Programmierkurs Java

Anleitung für die Formularbearbeitung

NODELOCKED LIZENZ generieren (ab ST4)

3D-Konstruktion Brückenpfeiler für WinTrack (H0)

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

Betriebssysteme Arbeiten mit dem Windows Explorer

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Schuljahreswechsel im Schul-Webportal

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Zwischenablage (Bilder, Texte,...)

Informatik Kurs Simulation. Hilfe für den Consideo Modeler

Umleiten von Eigenen Dateien per GPO

1 Mathematische Grundlagen

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Handbuch ECDL 2003 Professional Modul 3: Kommunikation Kalender freigeben und andere Kalender aufrufen

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

teamsync Kurzanleitung

Software- und Druckerzuweisung Selbstlernmaterialien

Modellierung und Programmierung 1

Dateimanagement in Moodle Eine Schritt-für

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang Effretikon

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

10 Objektorientierte Programmierung, Teil 1

Internet online Update (Mozilla Firefox)

Arbeiten mit UMLed und Delphi

Installation OMNIKEY 3121 USB

Wie halte ich Ordnung auf meiner Festplatte?

Programmieren in Java

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Vorgehensweise bei Lastschriftverfahren

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

Informationen zu den regionalen Startseiten

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

CodeSaver. Vorwort. Seite 1 von 6

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Hilfedatei der Oden$-Börse Stand Juni 2014

Access [basics] Rechnen in Berichten. Beispieldatenbank. Datensatzweise berechnen. Berechnung im Textfeld. Reporting in Berichten Rechnen in Berichten

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

AW: AW: AW: AW: Kooperationsanfrage anwalt.de

Historical Viewer. zu ETC5000 Benutzerhandbuch 312/15

7 Rechnen mit Polynomen

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Datenaufbereitung in SPSS. Daten zusammenfügen

Kostenloser Apple-Softclient zur Nutzung von TeSign

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

S7-Hantierungsbausteine für R355, R6000 und R2700

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Dokumentenverwaltung

Objektorientierte Programmierung OOP

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Transkript:

Programmierkurs Python I Stefan Thater & Michaela Regneri Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Übersicht Objektorientierte Programmierung (Grundlagen) - Klassen - Module mehr zu Sammeltypen - Mengen - Dictionaries - mehr Operationen 2

Objektorientierte Programmierung Prozedurale Programmierung: Daten und Operationen sind separat Objektorientiere Programmierung: Daten und Operationen werden in Klassen zusammengefasst - Daten werden in Feldern (! Variablen) gespeichert - Methoden (! Funktionen) definieren Operationen auf den Feldern - Felder und Methoden werden auch Attribute genannt Objekte sind Instanzen von Klassen: Klassen definieren gleichartige Objekte mit ihren Operationen 3 Ein erstes Beispiel: Rationale Zahlen Daten - Zähler und Nenner Operationen - in einen String konvertieren - Addieren - Multiplizieren - [ ] 4

Rationale Zahlen: Prozedural def rat_make(num, den): return (num, den) def rat_tostring(rat): return rat[0] + "/" + rat[1] def rat_mul(rat1, rat2): num = rat1[0] * rat2[0] den = rat1[1] * rat2[1] return rat_make(num, den)... 5 Rationale Zahlen: Objektorientiert class Rat: def init (self, num, den): self.num = num self.den = den def tostring(self): return str(self.num) + "/" + str(self.den) def mul(self, other): num = self.num * other.num den = self.den * other.den return Rat(num, den) 6

Rationale Zahlen: Objektorientiert Rationale Zahlen instantiieren (erzeugen) und an r1 bzw. r2 binden: r1 = Rat(1,2) r2 = Rat(2,3) r1 mit r2 multiplizieren; Ergebnis an r3 binden: r3 = r1.mul(r2) Als String ausgeben print(r3.tostring()) 7 Klassen Klassen in Python brauchen nichts außer einem Namen; definiert werden sie mit dem Schlüsselwort class Klassen können Methoden class <name>: definieren; das sind def fun1(self[,...]): Funktionen innerhalb der... Klasse, die als erstes Argument self haben (self ist später das Objekt, das die Methode gerade aufruft) Die Klasse hat ihren eigenen Namensraum class <name>: [statement1]... [statementn] 8

Klassen Die Klassendefinition muss im Python-Programm ausgeführt werden, bevor man die Klasse verwenden kann Im globalen Namensraum befindet sich dann ein Klassen- Objekt, das den Namen der Klasse hat Klassen (genauer: Klassen-Objekte) unterstützen genau zwei Operationen: - Referenzieren von Attributen - Instantiierung (erzeugen von Instanz-Objekten) 9 Klassen class K: a = 83 def fun(self):... Instantiierung: mit k = K() erzeugt man ein Instanz- Objekt von K (und bindet es an k). Referenzieren von Attributen: Wenn K ein Klassen-Objekt ist, kann man mit K.a auf das Attribute a zugreifen Zuweisungen sind erlaubt (so wie K.a = 8) k = K() k.fun() 10

Ein einfaches Beispiel class MyClass: i = 123 def f(self): print(myclass.i) >>> MyClass.i 123 >>> MyClass.f <unbound method MyClass.f> 11 Instanz-Objekte Instanz-Objekte können Attribute der Klasse benutzen Wir unterscheiden: - Daten-Attribute ( Instanz-Variablen ) - Methoden Methoden werden nach dem referenzieren direkt aufgerufen Namensraum-Auflösung: wenn das Attribut nicht in der Instanz gefunden wir, wird in der Klasse gesucht 12

Methodenaufrufe Die im Klassenkörper definierten Funktionen sind die Methoden der Instanz Das erste Argument (self) der Funktion ist an die Instanz gebunden: - Im Beispiel ist k.f() äquivalent zu MyClass.f(k). class MyClass: i = 123 def f(self): print(myclass.i) >>> k = K() >>> k.f() 123 >>> MyClass.f(k) 123 13 init 2 underscores! Instantiierung erzeugt zunächst ein leeres Objekt. Die Methode init wird automatisch mit den bei der Instantiierung verwendeten Argumenten aufgerufen. Typischer Code: class SomeClass: def init (self, x, y): self.x = x self.y = y... inst = SomeClass(1, 2) entspricht einem sog Konstruktor 14

Zusammenfassung Klassen (1. Teil) class Rat: def init (self, num, den): self.num = num self.den = den def mul(self, other): num = self.num * other.num den = self.den * other.den return Rat(num, den) r1 = Rat(1,2) r2 = r1.mul(rat(2,3)) Klassen werden definiert mit Schlüsselwort class Klassenmethoden mit self -Parameter init-methode als Konstruktor Instanz-Erzeugung mit Klassen-Name ruft init auf Funktionsaufruf mit instanz.methode() 15 Module Module sind Sammlungen von Klassen / Funktionen oder Code im allgemeinen (= *.py-dateien) Module sind wiederverwertbar; man kann auf Code von anderen Modulen zugreifen Python hat (neben builtins ) einige Standard-Module, auf die man bei Bedarf zurückgreifen kann (wie sys) Um die Module bzw. deren Elemente benutzen zu kennen, muss man sie importieren (mit import <modulname>) > import sys [...] > a = sys.argv[0] Modulname 16

Module Um die Datei foo.py als Modul zu benutzen, importiert man das Modul foo Funktion Man kann auch einzelne Klassen oder Funktionen > from math import sqrt eines Moduls importieren, [...] Modul mit from a = sqrt(25) Python findet die Module ohne zusätzliche Angaben nur, wenn - sie im gleichen Ordner liegen wie das aktuelle Modul - sie im Python-Bibliotheksverzeichnis liegen (unter UNIX z.b. oft /usr/local/lib/python/ ) 17 Module Man kann Module importieren, indem man den Pfad zu einem Unterverzeichnis explizit angibt: wenn module im Unterordner foo/baar des aktuellen Verzeichnisses liegt import foo.bar.module mit dem Schlüsselwort as darf man Modulnamen an Variablen binden und später benutzen (praktisch für lange Namen) import foo.bar.blah.blubb.module as fb i = fb.methode() 18

Sammeltypen - Fortsetzung Listen (Klasse: list) und Tupel (Klasse: tuple) kennen wir schon Heute: - Mengen (Klassen set und frozenset) - Wörterbücher (Dictionaries, Maps,... Klasse: dict) - mehr Methoden aller Sammeltypen 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 19 Listen - Methoden und Operatoren (1) Elemente hinzufügen: - Element anhängen: li.append(elem) - Element an Stelle i einfügen: li.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 20

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() Liste sortieren: list.sort() (nur bei Typgleichheit) > li = [5,2,7] > li.reverse() > li [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]] 21 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 n mal der Inhalt von liste 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]] 22

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] 23 Listen - Slicing (2) mit Slicing lassen Listen sich elegant modifizieren del liste[0:3] del liste[0:5:2] list1[0:3] = list2 list1[0:5:2] = list2 löscht die ersten 3 Elemente in liste 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. und bis zum 5. Element in list durch aufeinanderfolgende Einträge von list2 (list2 muss genauso viele Elemente enthalten wie list1[0:5:2]!) 24

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] 25 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 e"zient Werte auf (Listen-)Zugehörigkeit testen in Mengen dürfen nur unveränderliche Typen enthalten sein! (Zahlen, Strings, Booleans,...) 26

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 27 Mengen - Methoden und Operatoren (2) Methoden können auch andere Sammeltypen als 2. Argument haben, Operatoren benötigen zwei Mengen. 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) - set1.union(set2) # bzw. set1.intersection(set2) - set1 set2 ## bzw. # set1 & set2 28

Mengen - Methoden und Operatoren (3) Di$erenzmenge (Rückgabe: neue Menge mit Elementen, die in set1 aber nicht in set2 sind) - set1.difference(set2) - set1 - set2 Symmetrische Di$erenzmenge (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 set1 set2 set2 29 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 30

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) 31 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)... 32

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 Zugri$ 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} 33 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 34

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} 35 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} Anmerkung: 1 und 1.0 sind somit der gleiche Schlüssel 36

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) 37 Wörterbücher - Methoden (2) dict1 mit Werten aus dict2 ergänzen: dict1.update(dict2) (Doppelte Schlüssel 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. 38

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 unmittelbar verändern können (nur durch Ändern des zugrunde liegenden Dictionaries) zur weiteren Verarbeitung kann man die Views in andere Sammeltypen konvertieren: liste = list(map.keys()) 39 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 e"zienter für Zugehörigkeits-Tests als Listen) unveränderliche Mengen: frozenset unveränderliche Typen als Schlüssel (in dict) und Mengenelemente (in set und frozenset) 40