Vorwort Bernd Klein Einführung in Python 3 In einer Woche programmieren lernen ISBN (Buch): 978-3-446-43547-6 ISBN (E-Book): 978-3-446-43717-3 Weitere Informationen oder Bestellungen unter http://www.hanser-fachbuch.de/978-3-446-43547-6 sowie im Buchhandel. © Carl Hanser Verlag, München Vorwort Bedingt durch den traumhaften Anstieg der Bedeutung von Python in der Wissenschaft und Wirtschaft in den letzten Jahren gibt es auch ein wachsendes Interesse an geeigneten Python-Büchern. Gerade für Programmieranfänger besteht die Schwierigkeit darin, ein geeignetes Buch zu finden. Der unüberlegte Griff ins Bücherregal führt schnell zum Kauf eines Buches, was zwar viele Vorzüge haben mag, aber für Anfängerinnen und Anfänger völlig ungeeignet ist. Dies ist besonders schade, da es sich bei Python ja um eine einfache Programmiersprache handelt. Das war bereits beim anfänglichen Design der Sprache eines der wesentlichen Ziele ihres „Erfinders” Guido van Rossum, als er Python Anfang der 1990er Jahre am Zentrum für Mathematik und Informatik (Centrum voor Wiskunde en Informatica) in Amsterdam entwarf. Python ist einfach, weil es mit erstaunlich wenigen Schlüsselwörtern auskommt und seine Syntax, also der Aufbau der Sprache, auf Übersichtlichkeit optimiert ist. Auch im Bereich objektorientierte Programmierung ist Python sehr konsequent, in manchen Dingen sogar konsequenter als Java. So sind in Python alles Objekte, d.h. es gibt keine primitiven Typen. Selbst Integer und Float-Zahlen sind in Python als Klassen realisiert. Ein weiterer Unterschied zu Java besteht darin, dass in Python Mehrfachvererbung möglich ist. Auch Programme in anderen Sprachen lassen sich einfach als Module in Python einbetten. So kann man beispielsweise zeitkritische Algorithmen in C programmieren und sie dann in Python einbinden. Zusammenfassend kann man sagen, dass es sich bei Python um eine Programmiersprache handelt, die sich bestens zum Einstieg in die Programmierung eignet, aber auch die optimale Lösung für Spezialisten aus zahlreichen Problemfelder ist. In diesem Sinne finden Sie in diesem Buch den idealen Einstieg. Brigitte Bauer-Schiewek, Lektorin Leseprobe Bernd Klein Einführung in Python 3 In einer Woche programmieren lernen ISBN (Buch): 978-3-446-43547-6 ISBN (E-Book): 978-3-446-43717-3 Weitere Informationen oder Bestellungen unter http://www.hanser-fachbuch.de/978-3-446-43547-6 sowie im Buchhandel. © Carl Hanser Verlag, München 2 2.1 2.1.1 Kommandos und Programme Erste Schritte Linux Bei den meisten Linux-Distributionen ist Python bereits vorinstalliert, und damit ist auch die interaktive Python-Shell direkt verfügbar. Der Interpreter wird üblicherweise im Verzeichnis /usr/bin/ (aber manchmal auch in /usr/local/bin) installiert, aber diese Information benötigen wir jetzt noch nicht. Der einfachste Weg, um mit Python unter Linux zu arbeiten, besteht darin, dass man zuerst ein Terminal startet wie beispielsweise ein „xterm” oder ein „gnome-terminal”. BILD 2.1 Gnome-Terminal In diesem Terminal – im Bild sehen Sie ein Gnome-Terminal – tippen Sie „python3” ein und drücken die Eingabetaste. Damit starten Sie die interaktive Python-Shell. Python meldet sich mit Informationen über die installierte Version. Der Interpreter steht nun mit dem sogenannten Eingabeprompt (»>) für Eingaben bereit. Man kann jetzt beliebigen PythonCode eingeben, der nach dem Quittieren mit der Eingabetaste (Return-Taste) sofort ausgeführt wird. $ python3 Python 3.2.3 (default, Oct 19 2012, 19:53:57) 10 2 Kommandos und Programme [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> Bitte beachten Sie, dass Sie keinesfalls die Ziffer 3 hinter „python” vergessen dürfen. Wenn Sie nur „python” eingeben, starten Sie Python in einer 2er-Version. $ python Python 2.7.3 (default, Sep 26 2012, 21:53:58) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> Um die Beispiele in unserem Buch nachvollziehen zu können benötigen Sie jedoch Python in einer 3er-Version.1 2.1.2 Windows Unter Windows muss Python erst installiert werden. Die neuesten Versionen findet man unter www.python.org. Wir haben die Version 3.2.2 von ActiveState installiert. Python starten unter Windows 1 Also eine Version 3.x, d.h. Python 3.0, 3.1, 3.2, 3.3 usw. 2.2 Herkunft und Bedeutung des Begriffes interaktive Shell Nachdem Python installiert worden ist, findet man unter „Alle Programme” einen Eintrag „Python 3.2” oder „Python 3.3”, unter dem sich die Untereinträge „IDLE (Python GUI)” und „Python (command line)” bzw. „Python Interactive Shell” befinden. Um die nachfolgenden Beispiele und Übungen nachvollziehen zu können, starten Sie bitte die Python-Kommandozeile, also „Python (command line)” bzw. „Python Interactive Shell”. Sie erhalten ein schwarzes Terminal-Fenster. Alternativ kann man auch mit IDLE arbeiten. Dabei handelt es sich um eine Mini-Entwicklungsumgebung, auf die wir hier jedoch nicht eingehen wollen. 2.2 Interaktive Shell Wenn die Aktivitäten des vorigen Kapitels erfolgreich waren, sollten Sie sich nun sowohl unter Linux als auch unter Windows in der interaktiven Python-Shell befinden. Der Begriff „interaktiv” kommt vom lateinischen „inter agere”. Das Verb „agere” bedeutet unter anderem „tun”, „treiben”, „betreiben”, „handeln”, und „inter” bezeichnet die zeitliche und örtliche Position zu Dingen und Ereignissen, also „zwischen” zwei oder „inmitten” (oder „unter”) vielen Objekten, Personen oder Ereignissen sein. Also heißt „inter agere” dazwischen handeln. In diesem Sinne steht die interaktive Shell zwischen dem Anwender und dem Betriebssystem (Linux, Unix, Windows oder anderen) bzw. dem zu interpretierenden Programm (z.B. Python). Die interaktive Shell steht aber auch zeitlich zwischen den einzelnen Aktionen, d.h. zwischen den einzelnen Befehlen und Kommandos. Der Benutzer gibt einen Befehl ein, die Shell führt diesen unverzüglich aus, liefert sofort das Ergebnis und wartet dann auf den nächsten Befehl. In Englisch steht das Wort „shell” für eine Schale, einen Panzer oder ganz allgemein eine Hülle oder Schutzhülle. „shell” bezeichnet auch ein Schneckenhaus und das Gehäuse, das eine Muschel umschließt. Ebenso liegt eine Shell auch zwischen einem Betriebssystem und dem Benutzer. Wie eine Muschelschale schützt sie einerseits das Betriebssystem vor dem Benutzer, und andererseits erspart sie dem Benutzer die Benutzung der „primitiven” und schwer verständlichen Basisfunktionen, indem es ihm komfortable Befehle zur Kommunikation mit dem Computer zur Verfügung stellt. Auch die Programmiersprache Python bietet dem Anwender eine komfortable Kommandozeilenschnittstelle, die sogenannte Python-Shell, manchmal auch als interaktive Python-Shell bezeichnet. Man könnte meinen, dass es sich bei dem Begriff „interaktive Shell” um eine Tautologie handelt, da ja, so wie oben beschrieben, Shells immer interaktiv sind. Dies ist jedoch nicht so: Es gibt auch vor allem im Umfeld von Linux und Unix Shells, die als Subshell aufgerufen werden und nicht interaktiv ausgeführt werden. 2.2.1 Erste Schritte in der interaktiven Shell Wir nehmen nun an, dass Sie entweder unter Linux oder unter Windows vor einer lauffähigen Python-Shell sitzen, die mit dem blinkendem Cursor hinter dem Prompt „»>” auf Ihre Eingabe wartet. 11 12 2 Kommandos und Programme Unsere Experimente mit der Python-Shell starten wir mit der Eingabe eines beliebigen arithmetischen Ausdrucks wie z.B. „4 * 5.2” oder „4 * 12 / 3”. Ein Ausdruck wird mit dem Drücken der Eingabetaste (return) sofort ausgeführt, und das Ergebnis wird in der nächsten Zeile ausgegeben: >>> 4 * 5.3 21.2 >>> 4 * 12 / 3 16.0 >>> Die interaktive Shell erlaubt eine Bequemlichkeit, die innerhalb eines Python-Skripts nicht zulässig ist. In einem Programm hätten wir das Ergebnis des obigen Ausdrucks nur mittels einer print-Anweisung ausgeben können: >>> print(4 * 5.3) 21.2 Python kennt wie die meisten anderen Programmiersprachen die Regel „Punktrechnung geht vor Strichrechnung”, wie wir im folgenden Beispiel sehen können: >>> 1 + (42 * 2) 85 >>> 1 + 42 * 2 85 >>> >>> (1 + 42) * 2 86 Der jeweils letzte Ausgabewert wird vom Interpreter in einer speziellen Variablen automatisch gespeichert. Der Name der Variable ist einfach ein Unterstrich, also „_”. Das Ergebnis der letzten Berechnung kann man sich also damit wieder ausgeben lassen: >>> _ 85 >>> Der Unterstrich kann im Prinzip wie eine normale Variable benutzt werden: >>> _ * 3 255 >>> Dies gilt allerdings nicht in einem Python-Skript oder Python-Programm! In einem PythonProgramm hat der Unterstrich nicht diese Bedeutung. Auch Strings lassen sich mit oder ohne print in der interaktiven Shell ausgeben: >>> print("Hello World") Hello World >>> "Hello World" 'Hello World' >>> 2.3 Verlassen der Python-Shell Die Python-Shell bietet noch einen Komfort, den man von den Linux-Shells gewöhnt ist. Es gibt einen Befehlsstack, in dem alle Befehle der aktuellen Sitzung gespeichert werden. Mit den Tasten „↑” und „↓” kann man sich in diesem Stack nach unten („↑”), also zu älteren Befehlen, und nach oben („↓”), also wieder in Richtung neuester Befehl, bewegen. 2.3 Verlassen der Python-Shell Wir haben zwar gerade erst damit begonnen, in der Python-Shell „herumzuspielen”, dennoch wollen sicherlich einige das Programm bereits verlassen. Ctrl-C, – was vielen Linux- und Unix-Benutzern häufig als Erstes einfällt, – funktioniert nicht! Den Python-Interpreter kann man per Kontrollsequenz nur mit Ctrl-D wieder verlassen. Alternativ dazu kann man die Python-Shell mittels Eingabe der Funktion exit() verlassen. Die Klammern hinter exit sind ab Python 3 zwingend notwendig. BILD 2.2 Emergency Exit Alle Einstellungen wie beispielsweise Variablen oder eingegebene Funktionsdefinitionen gehen beim Verlassen der Python-Shell verloren und sind beim nächsten Start nicht mehr vorhanden. 2.4 Benutzung von Variablen In der Python-Shell kann man auch ganz einfach Variablen benutzen. Wenn Sie genau wissen wollen, was es mit Variablen und Datentypen auf sich hat, empfehlen wir, in Kapitel 4 (Datentypen und Variablen) weiterzulesen. Das folgende Beispiel wendet sich an Benutzer, die bereits ein wenig Erfahrung mit Programmierung haben. Man kann also ganz einfach Werte in Variablen speichern. Variablennamen bedürfen keiner besonderen Kennzeichnung wie in anderen Sprachen wie zum Beispiel das Dollarzeichen in Perl: >>> maximal = 124 >>> breite = 94 >>> print(maximal - breite) 30 >>> 13 14 2 Kommandos und Programme 2.5 Mehrzeilige Anweisungen Bis jetzt haben wir noch nicht über mehrzeilige Anweisungen gesprochen. Anfänger werden hier vielleicht Probleme haben, da noch einige Grundlagen zum Verständnis fehlen, und sollten deshalb besser mit dem folgenden Kapitel weitermachen. Wir demonstrieren, wie die interaktive Shell mit mehrzeiligen Anweisungen wie zum Beispiel For-Schleifen umgeht. >>> l = ["A",42,78,"Just a String"] >>> for character in l: ... print(character) ... A 42 78 Just a String >>> Achtung: Nachdem man die Zeile „for character in l:” eingetippt hat, wartet die interaktive Shell im Folgenden auf eingerückte Zeilen. Dies teilt uns die Shell mit einem neuen Prompt mit: Statt dem gewohnten „>>> ” erhalten wir nun eine Folge von drei Punkten „... ”. Wir müssen also alle Anweisungen, die mit der Schleife ausgeführt werden sollen, um die gleiche Anzahl von Leerzeichen einrücken, mindestens jedoch ein Leerzeichen! Wenn wir fertig sind, müssen wir nach der letzten Code-Zeile zweimal die Eingabetaste drücken, bevor die Schleife wirklich ausgeführt wird. 2.6 Programme schreiben Wir haben bisher ein wenig mit der interaktiven Python-Shell herumprobiert, aber noch kein richtiges Programm geschrieben. Bei der Programmierung ist es generell wichtig, möglichst in kleinen Schritten vorzugehen. Deshalb wird unser erstes Programm in Python auch nur sehr wenig tun. Das Programm soll lediglich einen kurzen Text ausgeben, nachdem es gestartet worden ist. Für diesen Text wird in fast allen Einführungen zu Programmiersprachen die Zeichenkette2 „Hallo Welt” oder auf Englisch „Hello World” verwendet. Wir wollen dieser Tradition folgen. 2 BILD 2.3 Hallo Welt Eine Folge von Zeichen wird als „Zeichenkette” oder meistens als „String” bezeichnet. 2.6 Programme schreiben oder schnell mal der Welt “Hallo” sagen Im Folgenden wollen wir zeigen, was in der Programmiersprache C++ nötig ist, um ein so kleines Programm zum Laufen zu bringen. Sie können diesen kurzen Exkurs in die Programmiersprache C++ bedenkenlos überspringen. Wir bringen dieses Beispiel nur, damit man später erkennen kann, wie leicht es ist, in Python im Vergleich zu C++ zu programmieren. Folgender Programm-Code ist in C++ nötig, um ein Programm zu schreiben, was nach dem Start nur den Text „Hello World” in einer Zeile ausgibt: #include <iostream> using namespace std; int main() { cout << "Hello World!\n"; return 0; } Wenn man dieses Programm in einer Datei gespeichert hat, also z.B. „hello.cpp”, muss man das Programm kompilieren, um ein lauffähiges Programm zu erhalten.3 Dies geschieht mit folgendem Befehl, der ein lauffähiges Programm unter dem Namen „hello” erzeugt: bernd@saturn:~/bodenseo/python/beispiele$ g++ -o hello hello.cpp Im Folgenden starten wir das Programm „hello” und erhalten die gewünschte Ausgabe: bernd@saturn:~/bodenseo/python/beispiele$ ./hello Hello World! bernd@saturn:~/bodenseo/python/beispiele$ Deutlich einfacher können wir ein solches Programm unter Python erstellen. Schreiben Sie in einem Editor4 Ihrer Wahl die folgende Zeile und speichern Sie sie unter dem Namen „hello.py” ab: print("Hello World") Unter Linux oder Unix starten wir dieses Programm am einfachsten, wenn wir uns in einem Terminal in das Verzeichnis begeben, in dem wir die Datei hello.py abgespeichert haben. Dort können wir dann das Programm mit Kommando „python3 hello.py” ausführen. Im Folgenden sehen wir dieses Vorgehen inklusive Ergebnis. Dabei nehmen wir an, dass Sie die Datei in einem Unterverzeichnis python_beispiele Ihres Homeverzeichnisses abgespeichert hatten: bernd@venus:~$ cd ~/python_beispiele/ bernd@venus:~/python_beispiele$ python3 hello.py Hallo Welt 3 4 Näheres zu Compiler, Interpreter, Maschinen und Skriptsprachen erfahren Sie in Kapitel 3 (Bytecode und Maschinencode). Unter Windows könnte das beispielsweise „Notepad” sein, unter Linux oder einem anderem Unix-System empfiehlt sich der vi, emacs, kate oder gedit. 15 16 2 Kommandos und Programme Unter Windows können wir ähnlich vorgehen. Wir starten erst das Programm „Eingabeaufforderung”. Dort bewegen wir uns in unser Verzeichnis mit den Python-Programmen, in das wir unser hello.py abgespeichert haben. Hello World unter Python in Windows-Eingabeaufforderung Wir haben gesehen, dass die nötige Syntax5 unter Python deutlich geringer ist als unter C++, d.h. man muss lediglich den Text mit einer print-Funktion aufrufen. Anschließend ist auch kein explizites Kompilieren6 nötig. Man kann das Programm einfach so starten. Fragen zum Verständnis: 5 6 ■ Wie kann man ein Python-Programm schreiben? ■ Wie startet man ein Python-Programm? ■ Wie kann man das Produkt aus 3.5 und 7.8 am einfachsten mit Python bezeichnen? Etymologisch leitet sich das Wort Syntax aus dem altgriechischen Wort „syntaksis” ab. „syn” bedeutet „zusammen”, und „taksis” steht für „Reihenfolge” oder „Ordnung”. Unter Syntax versteht man in der Linguistik die Lehre vom Satzbau, also sozusagen die „zusammen”- oder „gesamt”-Reihenfolge der einzelnen Satzteile. In der Informatik versteht man unter der Syntax einer Programmiersprache die Regeln oder das System von Regeln, mit denen man gültige Programme der Sprache beschreiben kann. Man beachte das Wort „explizit”. Beim Start des Programmes wird nämlich implizit gegebenenfalls eine Kompilierung vorgenommen. Auf diese gehen wir im nächsten Kapitel näher ein. Stichwortverzeichnis Bernd Klein Einführung in Python 3 In einer Woche programmieren lernen ISBN (Buch): 978-3-446-43547-6 ISBN (E-Book): 978-3-446-43717-3 Weitere Informationen oder Bestellungen unter http://www.hanser-fachbuch.de/978-3-446-43547-6 sowie im Buchhandel. © Carl Hanser Verlag, München Stichwortverzeichnis ∧ bei regulären Ausdrücken 269 . Match eines beliebigen Zeichens 266 $ bei regulären Ausdrücken 269 A abort 226 abspath 240 access 227 __add__ 403 Allgemeine Klasse → Basisklasse Anagramm – als Beispiel einer Permutation 309 Andrew 402 Angestelltenklasse → Personklasse append 75 Archivdatei erzeugen 251 Arrays 328 – flach machen → NumPy – konkatenieren → NumPy – ones() 332 – umdimensionieren → NumPy – zeros() 332 assertAlmostEqual 207 assertCountEqual 207 AssertEqual 206 assertEqual 207 assertFalse 208 assertGreater 208 assertGreaterEqual 208 assertIn 208 AssertionError 205 assertIs 208 assertIsInstance 209 assertIsNone 209 assertIsNot 209 assertItemsEqual 209 assertLess 208 assertLessEqual 208 assertListEqual 209 assertNotRegexpMatches 209 assertTrue 208 assertTupleEqual 209 assoziative Arrays 33 assoziatives Feld 33 atime 243 Attribute 162 – private 162 – protected 162 – public 162 AttributeError 172 Aufspalten von Zeichenketten 132 Auskellern 75 Ausnahme – StopIteration 306 Ausnahmebehandlung 149 – except 149 – finally 153 – try 149 Automatentheorie 261 B Barry 195 basename 241 Bash 212 Basisklasse 169 Bayes-Theorem 367 bedingte Anweisungen 55 Bibliothek 90 Bierdeckelarithmetik 191 Bierdeckelnotation 191 binäre Operatoren 187 Binärsystem 191 Boehm 195 Bourne-Shell 212 Bruch – kürzen 349 – Kürzungszahl 349 418 Stichwortverzeichnis Calendar-Klasse 177 CalendarClock-Klasse 177 Caret-Zeichen 267 Cast 24 Casting 24 CaveInt 403 → Neanderthal-Arithmetik center 144 chdir 227 chmod 227 Chomsky-Grammatik 117 chown 228 chroot 228 clear → Dictionary CLI 212 Clock-Klasse 177 close 218 Closure 318 Codeblock 59 combinatorics.py 359 commonprefix 241 copy 249 → Dictionary copy2 249 copyfile 249 copyfileobj 249 copymode 249 copystat 250 copytree 250 count 78, 139 ctime 243 Decorator → Dekorateur Definition einer Variablen 21 Dekorateur 318 – Beispiel Fakultätsfunktion 320 – Benutzung in Python 319 – zur Implementierung eine Memoisation 320 – zur Überprüfung von Funktionsargumenten 320 deriv 343 derivation 343 Destruktor 160 Dezimalsystem 191 Diamond-Problem 176 Dictionary 33 – aus Listen erzeugen 43 – clear 38 – copy 38 – flache Kopie 38, 101 – fromkeys 38 – get 39 – items 39 – keys 39 – nested Dictionaries 37 – pop 40 – popitem 40 – setdefault 40 – tiefe Kopie 38, 101 – update 41 – verschachtelte Dictionaries 37 dirname 241 doctest 200 Dokumentenklassifikation 365 Donald Michie → Memoisation Drei-Finger-Regel 340 dup 220 dynamische Attribute 168 dynamische Typdeklaration 23 D E Datei 69 – lesen 69 – öffnen 69 – schreiben 71 – zum Schreiben öffnen 71 Dateibaum – rekursiv durchwandern 240 Dateibearbeitung mit os 215 Dateideskriptor 218, 219 Dateigröße 244 Datenkapselung 157 Datentypen 21 Deadly Diamond of Death 176 Eingabeprompt 9 Einheitsmatrix 339 Einkellern 75 Einschubmethode → Hook-Methode endliche Automaten 261, 267 erben → Vererbung errare humanum est 195 erweiterte Zuweisungen 188 Euklidischer Algorithmus 349 except 149 execl 225 execle 226 execlp 225 – Repräsentierung in Python|hyperpage 348 – vollständig gekürzte Form 349 Bruchklasse 347 Bruchrechnen 348 Bulls and Cows 358 bztar-Datei → Archivdatei erzeugen C Stichwortverzeichnis execlpe 226 execv 224 execve 224 execvp 222 execvpe 223 exists 242 expandvars 242 explizite Typumwandlung 24 extend 76 extsep 228 F Fakultätsfunktion 117 – iterative Lösung 119 – rekursive Implementierung 118 – unter Benutzung eines Dekorateurs 320 Fehler – Semantik 196 – Syntax 195 Fehlerarten 195 fib → Fibonacci-Modul fiblist → Fibonacci-Modul Fibonacci 120 Fibonacci-Folge → Fibonacci-Zahlen – rekursive Berechnung 126 Fibonacci-Modul 197 – fib-Funktion 197 – fiblist-Funktion 197 Fibonacci-Zahlen – formale mathematische Definition 120 – Generator 314, 412 – Modul zur Berechnung der Fibonacci-Zahlen 197 – rekursive Berechnung mit Dekorateuren 318 – rekursive Funktion 119 filter 289 finally 153 find 78, 139 Finite State Machine 268 firstn-Generator 312 flache Kopie 38, 101 for-Schleife 62 – optionaler else-Teil 62 – StopIteration 306 – Unterschied zur while-Schleife 63 – Vergleich zu C 62 fork 228, 255 Forking 255 forkpty 228 formale Sprachen 261 fromkeys → Dictionary Frosch – Aufgabe mit Summenbildung 66 – Straßenüberquerung 66 frozensets 49 fully qualified 90 functools 294 Funktion 103 Funktionsabschluss 318 G ganze Zahlen 22 Ganzzahlen 22 Generator – all_colours() 359 – Allgemein 305 – CLU 305 – Endlosschleife in 307 – firstn 312 – Icon 305 – isclice zur Ausgabe von unendlichen Generatoren 312 – k-Permuationen aus Zufallspermutation 359 – k-Permutationen 359 – k_permutations() 359 – pair_sum 315 – pendulum 314 – Permutationen 309, 359 – permutations() 359 – round_robin 314 – send-Methode 312 – Werte empfangen 312 – yield 307 – zur Erzeugung von Selektionen 310 Generator-Ausdrücke 313 Generator-Comprehension 302 Generatoren-Abstraktion 302 get → Dictionary get_archive_formats 251 getatime 243 getcwd 229, 247 getcwdb 229 getegid 229 getenv 213 getenvb 213 geteuid 229 get_exec_path 228 getgid 229 getgroups 229 getloadavg 229 getlogin 230 getmtime 243 getpgid 230 419 420 Stichwortverzeichnis getpgrp 230 getpid 230 getppid 230 getresgid 230 getresuid 230 getsize 244 → os.path getter 166 getuid 230 get_unpack_formats 251 ggT 349 Girokonto 170 Gleichungssysteme 340 grafische Veranschaulichung von Matrixwerten → Hinton-Diagramm größter gemeinsamer Teiler 349 Gruppierungen 274 GUI 212 gztar-Datei → Archivdatei erzeugen H Hash 33 Hinton-Diagramm 323 Hook-Methode 206 Hooks → Hook-Methode isdir 245 isfile 245 isinstance 25 islice 312 – als Ersatz für firstn 312 islink 245 islower 145 ismount 246 isspace 145 istitle 145 isupper 145 itemgetter 84 items → Dictionary __iter__ 306 Iteration – for-Schleife 305 Iteratoren 305 – for-Schleife 305 itertools 312 – islice 312 J join 139, 246 Junit 204 I K if-Anweisung 55 ignore_patterns 251 implizite Typumwandlung 25 import-Anweisung 90 in – Dictionaries 36 index 78, 139 index-Funktionen 220 Inheritance → Vererbung __init__.py 95 inneres Produkt 335 insert 79 Instanz 155 Instanzattribute 168 integ 343 Integer 22 interaktive Shell – Befehlsstack 13 – Starten unter Linux 9 – Starten unter Windows 10 – Unterstrich 12 inverse Matrix 339 isabs 244 isalnum 145 isalpha 145 isdigit 145 kanonischer Pfad 247 Kapselung 157 Keller 75 Kellerspeicher 75, 188 KeyError 35 keys → Dictionary kill 230 killpg 231 Klasse 156 – Erzeugen von Objekten 158 – Kopf 158 – Körper 158 – minimale Klasse in Python 158 Klassenattribute 168 – Zähler zum zählen der Objekte 168 Kombination 310 Kombinatorik-Modul 359 Kompilierung von regulären Ausdrücken 280 Komponententest 197 Konstruktor 160 Kontoklasse 158, 170 – mit Unterklassen 170 Kontrollstrukturen 55 Kopieren – von Unterlisten 100 – von verschachtelten Listen 97 Stichwortverzeichnis Kreuzprodukt 335, 340 Kuchenklasse 155 Kundenklasse → Personklasse Kürzen 349 L lambda 289 Länge eines Vektors 335 Leonardo von Pisa → Fibonacci-Zahlen lexists 246 Liber Abaci 120 Lieferant → Personklasse linalg → NumPy lineare Algebra 340 lineare Gleichungssysteme 340 linesep 231 link 231 Linux 212 – Python unter 9 list – append 75 – extend 76 – find 78 – index 78 – pop 75 – sort 82 List Comprehension 297 – Kreuzprodukt 299 – pythagoreisches Tripel 299 – Sieb des Eratosthenes 300 – Syntax 298 – Vergleich mit konventionellem Code 298 – Wandlung Celsius in Fahrenheit 299 – Weitere Beispiele 299 – zugrundeliegende Idee 299 list:count 78 list:insert 79 list:remove 77 listdir 231 list_iterator 306 Listen-Abstraktion 297 – Kreuzprodukt 299 – pythagoreisches Tripel 299 – Sieb des Eratosthenes 300 – Syntax 298 – Vergleich mit konventionellem Code 298 – Wandlung Celsius in Fahrenheit 299 – Weitere Beispiele 299 – zugrundeliegende Idee 299 ljust 144 Lösung von Gleichungssystemen 340 lower 143 lseek 219 lstat 231 M __main__ 197 major 231 make_archive 251 makedev 232 makedirs 232 map 289, 292 Mapping 33 Marvin 402 Mastermind 357 Match eines beliebigen Zeichens 266 Match-Objekte 274 Matching-Problem 264 – Over Matching 264 – Under Matching 264 MATLAB 323 Matrix-Klasse → NumPy Matrix-Produkt → NumPy Matrizenaddition 333 Matrizenmultiplikation 333, 337 Matrizensubtraktion 333 maxsplit – split 132 Mehrfachvererbung 174 – Beispiel CalendarClock 177 – Tiefensuche 174 Memoisation 123, 317 Memoization → Memoisation Memoize 319 memoize-Funktion 318 Menge 47 Mengen-Abstraktion 301 Mengenlehre 47 Methode 155, 159 – Overloading → Überladen – Overwriting → Überschreiben – Überladen 171 – Überschreiben 171 – Unterschiede zur Funktion 159 minor 231 mkdir 232 mkfifo 233 Modul – dir() 93 – Dokumentation 94 – dynamisch geladene C-Module 91 – eigene Module schreiben 93 – Inhalt 93 – lokal 90 421 422 Stichwortverzeichnis – math 90 – Modularten 91 – Namensraum 90 – re 263 – Suchpfad 92 modulare Programmierung 89 modulares Design 89 Modularisierung 89 Modultest 197 Modultests – unter Benutzung von __name__ 197 Monty Python 34 move 252 mtime 243 __mul__ 403 N Naiver Bayes-Klassifikator 366, 367 __name__ 197 Namensraum – umbenennen 91 Neanderthal-Arithmetik 191 Nested Dictionaries 37 next 306 nice 233 Noam Chomsky 117 normcase 246 normpath 247 Nullstellen berechnen 343 Numarray → NumPy Numeric → NumPy Numeric Python → NumPy NumPy 323 – Array mit Nullen und Einsen initialisieren 332 – Array neue Dimension hinzufügen 332 – Arrays 325 – Arrays flach machen 327 – Arrays konkatenieren 330 – Arrays umdimensionieren 328 – deriv 343 – Drei-Finger-Regel 340 – Einheitsmatrix 339 – eye 339 – Gleichungssysteme 340 – inneres Produkt 335 – integ 343 – inv 339 – inverse Matrix 339 – Kreuzprodukt 335, 340 – Länge eines Vektors 335 – linalg 340 – – – – – – – – – – – – – – – – – – – – – – – – lineare Algebra 340 lineare Gleichungssysteme 340 Lösung von Gleichungssystemen 340 Matrix-Klasse 336 Matrix-Produkt 337 Matrixarithmetik 333 Matrizenaddition 333 Matrizenmultiplikation 333, 337 Matrizensubtraktion 333 Nullstellen 341 Nullstellen berechnen 343 ones() 332 ones_like() 333 polynomial-Paket 341 Punktprodukt 335 Rechtssystem 340 roots 343 Skalarprodukt 335 Vektoraddition 334 Vektorprodukt 340 Vektorsubtraktion 334 Winkel zwischen Vektoren 335 zeros() 332 zeros_like() 333 O Oberklasse 169 object 169 Objekt 155 Objektorientierte Programmiersprache 155 Objektorientierte Programmierung 155 ones_like() 333 OOP 155 – Datenkapselung 157 – Kapselung 157 – Kuchenklasse 155 open 216 open() 69 openpty 219 operator-Modul 84 – itemgetter 84 Operator-Überladung 187 Operatoren überladen – binäre Operatoren 187 – erweiterte Zuweisungen 188 – unäre Operatoren 188 os – abort 226 – access 227 – chdir 227 – chmod 227 – chown 228 Stichwortverzeichnis – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – chroot 228 close 218 dup 220 execl 225 execle 226 execlp 225 execlpe 226 execv 224 execve 224 execvp 222 execvpe 223 extsep 228 fork 228 forkpty 228 getcwd 229 getcwdb 229 getegid 229 getenv 213 getenvb 213 geteuid 229 get_exec_path 228 getgid 229 getgroups 229 getloadavg 229 getlogin 230 getpgid 230 getpgrp 230 getpid 230 getppid 230 getresgid 230 getresuid 230 getuid 230 kill 230 killpg 231 linesep 231 link 231 listdir 231 lseek 219 lstat 231 major 231 makedev 232 makedirs 232 minor 231 mkdir 232 mkfifo 233 nice 233 open 216 openpty 219 popen 233 putenv 214 read 218 readlink 235 – remove 235 – removedirs 235 – rename 236 – renames 236 – rmdir 237 – sep 241 – setegid 237 – seteuid 237 – setgid 237 – setgroups 229 – setpgid 237 – setpgrp 237 – setregid 237 – setresgid 237 – setresuid 237 – setreuid 237 – setsid 237 – setuid 237 – stat 237 – stat_float_times 238 – strerror 238 – supports_bytes_environ 215 – symlink 238 – sysconf 239 – system 239 – times 239 – umask 239 – uname 239 – unlink 239 – unsetenv 215 – urandom 239 – utime 240 – wait 240 – wait3 240 – waitpid 240 – walk 240 – write 215 os-Modul 212, 226 os.path 240 os.python – abspath 240 – basename 241 – commonprefix 241 – dirname 241 – exists 242 – expandvars 242 – getatime 243 – getmtime 243 – getsize 244 – isabs 244 – isdir 245 – isfile 245 423 424 Stichwortverzeichnis – islink 245 – ismount 246 – join 246 – lexists 246 – normcase 246 – normpath 247 – realpath 247 – relpath 247 – samefile 248 – split 248 – splitdrive 248 – splitext 248 Over Matching 264 Overloading → Überladen overloading 172 Overwriting → Überschreiben P Paket 95 Paketkonzept 95 Parameterliste 104 partion 139 Pascalsches Dreieck 124 – Fibonacci-Zahlen 125 peek 75 Permutationen 309 – mit Wiederholungen 309 – ohne Wiederholungen 309 Permutations-Generator 309 Personklasse → Vererbung Pfadname – absolut 244 – relativ 244 Polymorphismus 185 Polynome 341 pop 75, 188 → Dictionary popen 233 popitem → Dictionary Private Attribute – lesender und schreibender Zugriff mittels Methoden 166 Programmiersprache – Unterschied zu Skriptsprache 17 Properties 166 Punktprodukt 335 push 75, 188 putenv 214 Q Quantoren 272 R random-Methode – sample 311 read 218 readlink 235 re-Modul 263 realpath 247 Rechtssystem 340 reduce 294 Regeln zur Interpretation von römischen Zahlen 385 register_archive_format 253 register_unpack_format 253 reguläre Ausdrücke 261 – Alternativen 279 – Anfang eines Strings matchen 269 – beliebiges Zeichen matchen 266 – compile 280 – Ende eines Strings matchen 269 – Kompilierung 280 – optionale Teile 271 – Qunatoren 272 – Teilstringsuche 263 – Überlappungen 263 – vordefinierte Zeichenklassen 268 – Wiederholungen von Teilausdrücken 272 – Zeichenauswahl 266 reguläre Auswahl – Caret-Zeichen, Zeichenklasse 267 reguläre Mengen 261 reguläre Sprachen 261 Rekursion 117 – Beispiel aus der natürlichen Sprache 117 rekursiv → Rekursion rekursive Funktion 117, 118 relpath 247 remove 77, 235 removedirs 235 rename 236 renames 236 replace 142 __repr__ 400 – Unterschied zu __str__ 400 rfind 139 rindex 139 rjust 144 rmdir 237 rmtree 253 Robot-Klasse 400 Roboterklasse 189 römische Zahlen 65 roots 343 Stichwortverzeichnis Rossum, Guido van 289 round_robin 314 rsplit 136 – Folge von Trennzeichen 137 rstrip 143 Rückwärtsreferenzen 274 S samefile 248 sample 311 Schachbrett mit Weizenkörnern 66 Schaltjahre 58 Schleifen 55, 59 – Endekriterium 59 – for-Schleife 62 – Schleifendurchlauf 59 – Schleifenkopf 59 – Schleifenkörper 59 – Schleifenzähler 59 – while-Schleife 60 Schleifenzähler 59 Schlüssel – Dictionary 33 – zulässige Typen 36 Scientific Python → SciPy SciPy 323 Sekunden – Additon zu Uhrzeiten 58 Semantik 196 – Fehler 196 semantische Fehler 196 send-Methode 312 sep 241 set 47 set comprehension 301 setdefault → Dictionary setegid 237 seteuid 237 setgid 237 setgroups 229 setpgid 237 setpgrp 237 setregid 237 setresgid 237 setresuid 237 setreuid 237 sets – copy 50 – difference_update 51 – discard 51 – intersection 52 – isdisjoint 52 – issubset 53 – issuperset 53 – Operationen auf sets 49 – pop 53 – remove 52 setsid 237 setter 166 setuid 237 setUp-Methode 206 Shell 211 – Bash 212 – Bourne 212 – C-Shell 212 – CLI 212 – GUI 212 – Herkunft und Bedeutung des Begriffes 211 Shihram 66 shutil – copy 249 – copy2 249 – copyfile 249 – copyfileobj 249 – copymode 249 – copystat 250 – copytree 250 – get_archive_formats 251 – get_unpack_formats 251 – ignore_patterns 251 – make_archive 251 – move 252 – register_archive_format 253 – register_unpack_format 253 – rmtree 253 – unpack_archive 253 – unregister_archive 254 – unregister_unpack_format 254 shutil-Modul 249 Sieb des Eratosthenes 300 – Rekursive Berechnung 125 – Rekursive Funktion mit Mengen-Abstraktion 301 Simula 67 155 Skalarprodukt 335 Skriptsprache – Unterschied zu Programmiersprache 17 sort 82 – eigene Sortierfunktionen 83 – reverse 83 – Umkehrung der Sortierreihenfolge 83 sorted 82 Sparbuch 170 spezialisierte Klasse → Unterklasse 425 426 Stichwortverzeichnis splice 192 split 132, 248 – Folge von Trennzeichen 137 – maxsplit 132 splitdrive 248 splitext 248 splitlines 138 Sprachfamilie 261 Stack 75 – Stapelspeicher 75 Standardbibliothek 90 Standardklassen als Basisklassen 188 Stapelspeicher 75, 188 stat 237 stat_float_times 238 statische Attribute 168 statische Typdeklaration 23 Stephen Cole Kleene 261 StopIteration 306 __str__ 349, 400 – Unterschied zu __repr__ 400 strerror 238 Strings – Suchen und Ersetzen 142 String-Tests 145 Stringmethoden – Alles in Großbuchstaben 143 – Alles in Kleinbuchstaben 143 – capitalize 143 – center 144 – count 139 – find 139 – index 139 – isalnum 145 – isalpha 145 – isdigit 145 – islower 145 – isspace 145 – istitle 145 – isupper 145 – ljust 144 – lower 143 – replace 142 – rfind 139 – rindex 139 – rjust 144 – rstrip 143 – String-Tests 145 – strip 143 – title 143 – upper 143 – zfill 144 strip 143 Strukturierungselement 103 __sub__ 403 Subklasse → Unterklasse Suchen und Ersetzen 142 Suchen von Teilstrings 139 Suchstrategie bei Mehrfachvererbung 174 Summe von n Zahlen 60 – Berechnung mit while-Schleife 60 SUnit 204 supports_bytes_environ 215 symlink 238, 245 syntaktische Fehler 195 Syntax 195 – Fehler 195 Syntaxfehler 195 sysconf 239 system 239 Systemprogrammierung 211 T tar-Datei → Archivdatei erzeugen TDD → test-driven development tearDown-Methode 206 Tests 195 test first development 204 test-driven development 204 TestCase 206 – Methoden 206 – setUp-Methode 206 – tearDown-Methode 206 testCase 204 Testgesteuerte Entwicklung 204 Testgetriebene Entwicklung 202, 204 Testmethoden 206 Textklassifikation 365 Textverarbeitung 131 Theoretische Informatik 261 tiefe Kopie 38, 101 Tiefensuche 174 times 239 __truediv__ 403 try 149 Tupel – leere 80 – mit einem Element 80 – Packing 80 – Unpacking 80 type 25 type conversion 24 TypeError 199 – unhashable type 37 Stichwortverzeichnis Typumwandlung 24 – explizit 24 – implizit 25 U Überladen 171 – von Methoden 185 Überlappungen 263 Überschreiben 171 umask 239 Umgebungsvariablen 213 uname 239 unäre Operatoren 188 Unärsystem 191 Unary System → Unärsystem Under Matching 264 unhashable type 37 unittest 204 → Modultest Unix 212 unlink 239 unpack_archive 253 unregister_archive_format 254 unregister_unpack_format 254 unsetenv 215 Unterklasse 156, 169 Unterstrich – Bedeutung in der interaktiven Shell 12 update → Dictionary upper 143 urandom 239 utime 240 V Variablen 21 Variation 310 Vektoraddition 334 Vektorprodukt 340 Vektorsubtraktion 334 Vererbung 158, 169 – Beispiel Angestelltenklasse, die von Person erbt 169 – Beispiel Kundenklasse, die von Person erbt 169 – Beispiel Lieferantenklasse, die von Person erbt 169 – Beispiel Personenklasse 169 Vererbungsbaum 174 verschachtelte Dictionaries 37 Verzeichnis löschen 237 Verzweigungen 55 Vollstandige Rekursion 117 W wait 240 wait3 240 waitpid 240 walk 240 Weizenkornaufgabe 66 while-Schleife 60 – optionaler else-Teil 61 Winkel zwischen Vektoren 335 write 215 Y yield 307 – im Vergleich zur return-Anweisung 307 Z Zahlenratespiel 61 Zeichenauswahl 266 Zeitrechnung 58 zeros_like() 333 zfill 144 zip-Datei → Archivdatei erzeugen Zufallspermutation 359 Zustandsautomat 268 Zustandsmaschine 268 Zuweisung 21 427