- Titel: Programmieren I (Einstieg)
- Organisation: UNI HEIDELBERG
- Seitenzahl: 125
Inhalt
- Programmieren I Einstieg
- Was ist ein Programm
- CPU Prozessor Interpreter Quellcode interaktiv
- Werte Typen Variablen
- Variable Zuweisung casesensitive
- pass something five caEuro
- Ausdruck expression Operanden Operatoren
- Ausdrcke und Anweisungen u
- Przedenztabelle a Anweisung statement
- someVariable otherVariablesillyExample yikes wobbadobba
- Funktion Argumente Ergebnis
- integer division binr a Rundungsfehler
- Strings als Objekte
- s foo s bar sreplaceo e sreplaceo e
- Funktionsdenition compound statement Verbundanweisung reservierte Wort
- i i print i i i print i
- Das Datenmodell von Python
- i print incStringi print i
- Was beobachtet ihr L
- Lokale und Globale Variablen
- def incStringstr i intstr i i return stri
- Was ist passiert L
- Logik und Selektion
- print and print and
- Sequenzen und Iteration
- Sequenz Datenstruktur Index Liste mutable immutable
- toy Teddy length lentoy number toylength
- l eins leipzig l gobbel
- wirft aber bei
- s eins leipzig s g
- einen Fehler L
- Strings und Listen
- Operationen und Methoden fr Sequenzen u
- abaindexa abaindexa a b aindexa a b abacounta
- Der Prozentoperator fr Strings u
- for ch in atbrn print reprch ordch
- s Sometcrazynstringrstuff here s print s ssplit ssplit
- evalab evalab evalabt evalrabn evalrabn evalevalab
- Mapping dictionary hash associative array
- d kat Die Preise anteil urteil zu hoch
- Methoden von Dictionaries
- if disthaskeyw distw distw else distw
- def sqrx return xx tabulaterange sqr
- l ln l
- Knnt ihr euch denken warum o
- l for i in range lappend ln l
- ganz anders ist L
- def test import doctest compute return doctesttestmodcompute
- if namemain test
- computeeins plus langDict
- examples python computepy examples
- Beispiel Generierung von Sprachen
- S N S SOS N O
- generateS generateb generateaSa generateaba generateaaSaa generateaabaa generateaaaSaaa Fig
- f openPfad zu Binrdatei a freadline freadline
- Standardfehlerkanal Standardausgabe Standardeingabe
- import time sys timesleep sysstderrwriteFehlern
- examples python progpy junk
- Was beobachtet ihr
- list comprehension syntactic sugar Seiteneekte
- Montage des Programms
- instanzieren Instanz Zustand
- Dateien zu diesem Abschnitt in der HTMLVersion
- Konstruktor Attribute Instanzvariable
- Eine erste GrammatikKlasse
- Vererbung Basisklasse Unterklassen
- Introspektion rst class
- t BeepingToyFred isinstancet Toy
- Mehr zur WortKlasse
- Regulre Ausdrcke a u regular expressions Metacharacters Metazeichen
- l range prependl range l
- Regulre Ausdrcke I a u
- match objects Character Class
- examples python firstmatchpy def firstmatchpy def firstMatchregExp text
- Regulre Ausdrcke II a u
- lokalisieren Abwrtskompatibia litt a
- Regulre Ausdrcke III a u
- factory function anonyme Funktionen
- Factory Functions und Anonyme Funktionen
- Was hat Acher falsch gemacht L
- keyword parameter Aktualparameter Formalparameter
- for i in range print i
- Exkurs Ein einfacher Parser
- VP VP NP NP NP PP
- Exkurs Ein Parser der etwas tut
- Sichtbarkeit und Blcke o
- Block lexikalisches Scoping
- Short Circuit Evaluation
- try except Exception
- Baum Knoten Wurzel Graph Bltter a Pointer
- bn BinaryTree root bn l bn rootsetLeftl
- Bume II Traversierungen a
- inorder postorder level order Protokoll
- Iteratoren und Generatoren
- for node in someTree print nodegetValue
- Bume III Rechnen a
- Tokenizing lexikalischer Analyse Tokens
- hier armer als bin ich nun klug so
- Wir scheinen also richtig zu rechnen
- steh tor und wie zuvor Fig
- Bume IV Sortierte Bume a a
- ungebunden unbound DOM
- Toolkit Widget Set
- Geometry Manager Mixins delegieren Container
- Prozedural func func func func func func
- Ein fast ntzliches Programm I u
- u Ein fast ntzliches Programm II
- Ein fast ntzliches Programm III u
Vorschau
1. Programmieren I (Einstieg)
Markus Demleitner (msdemlei@cl.uni-heidelberg.de) Worum geht es? Programmieren heißt, Probleme zu analysieren, zur formalisieren und effizient zu implementieren. Wir konzentrieren uns hier auf vor allem auf den dritten Punkt, die beiden anderen spielen aber nat¨rlich eine große Rolle. u Technisches ¨ Schein := (Ubungen l¨sen)+(Kleine m¨ndliche Pr¨fung) o u u ¨ Ubungen l¨sen := 50% der erreichbaren Punktzahl hinkriegen. o ¨ o a abgeben := L¨sungen rechtzeitig (Termine stehen auf den Ubungsbl¨ttern) an eureN TutorIn schicken. Tutorium ¨ In einem Tutorium werden die Ubungsbl¨tter besprochen und Erg¨nzungen zur Vorlesung gegea a ben. Die Teilnahme am Tutorium ist in der Regel Voraussetzung f¨r die Scheinvergabe. u Literatur Literaturhinweise zu dieser Vorlesung gibt es online1 . Dies ist eine Wiki-Seite, d.h. ihr k¨nnt, d¨rft und sollt Erg¨nzungen oder Kommentare beitragen. o u a Ein paar Randbemerkungen Die meisten Studierenden, die dieses Skript lesen, d¨rften im ersten Semester sein – ich darf also u kurz folgende Punkte erw¨hnen: a 1. Ihr seid an der Uni – und das bedeutet, dass ihr nicht wie in der Schule permanent geg¨ngelt a und dadurch zum Arbeiten gezwungen seid. Nun, jedenfalls ist das vorerst noch so. Die Unterstellung ist, dass ihr, in diesem Fall, Computerlinguistik studiert, weil es euch interessiert. Wenn es euch aber interessiert, so geht die Unterstellung weiter, solltet ihr aus eigenem Antrieb versuchen, euch das Wissen anzueignen, das ihr braucht, wenn ihr diesem Interesse nachgehen wollt. Die Vorlesung fungiert dabei mehr als Einladung, vielleicht auch als Rahmen, kann aber die eigenst¨ndige Auseinandersetzung mit dem Stoff nur erg¨nzen. a a Ob die genannte Unterstellung richtig ist oder nicht, ihr m¨sst damit leben, dass sie gemacht u wird. Ich gebe zu, dass der Umstand, dass gerade hier im Programmierkurs anfangs nicht immer ganz klar ist, was eigentlich der Stoff mit Comptuerlinguistik zu tun hat, erschwerend hinzukommt. Seht trotzdem, dass euer Interesse wachbleibt oder, wo n¨tig, erwacht. o 2. Daraus folgt insbesondere, dass ich (wie wohl alle anderen Dozenten auch) davon ausgehe, dass ihr euch mit dem Stoff auseinandersetzt, ohne dass etwa Hausaufgaben euch genau ¨ spezifizieren, was ihr wie zu machen habt. Um den Ubergang etwas zu erleichtern, gibt es in diesem Skript viele Aufgaben, oft mit L¨sungen – probiert euch an ihnen. Noch n¨tzlicher o u zur Durchdringung des Stoffes ist es nat¨rlich, wenn ihr euch selbst Aufgaben ausdenkt. u ur Erg¨nzung des Skripts bin ich ubrigens an solchen selbst ausgedachten Aufgaben immer a ¨ interessiert. 3. Es ist sehr einfach, Vor- und Nachbereitung der Vorlesungen sausen zu lassen oder gleich nicht in die Vorlesung zu gehen. Das beste Gegenmittel gegen Prokrastination sind Sozialkontakte – die eit, die ihr mit Mitstudis in Cafeterien oder in der Mensa zubringt, ist in
1
http://wiki.cl.uni-heidelberg.de/moin/ProgILiteratur 1
aller Regel gut investiert. Guckt, dass ihr euch mit ein paar Mitstudis anfreundet, plaudert mit ihnen ¨ber der Stoff. Solche Lerngruppen“ werden euch das Studium und auch das u ” Lernen deutlich vers¨ßen und erleichtern – und ohne werdet ihr oft mit Verzweiflung zu u ringen haben. Leider sind viele etwas sch¨chtern, wenn es daran geht, auf andere Leute u zuzugehen. Probiert es trotzdem, nutzt die Tutorien. Lernen geht in Kooperation einfach um L¨ngen besser als in Konkurrenz. a 4. Formale Voraussetzung zur ulassung zur Scheinklausur ist die L¨sung von mindestens der o H¨lfte der Hausaufgaben. Das ist etwas ungl¨cklich, denn eigentlich sind die Hausaufgaa u ben einfach so etwas wie der praktische Teil der Vorlesung, ohne den es v¨llig unm¨glich o o ist, sp¨ter auch nur ein paar eilen Code hinzukriegen. Mir w¨re es lieber, wenn er von a a Leistungsdruck und Punkteklauberei befreit w¨re. Andererseits ist die traurige Erfahrung, a dass freiwillige Hausaufgaben ziermlich schnell hinten runterfallen. Bem¨ht euch trotz der u dummen 50%-Regel, die Hausaufgaben als Inhalt“ und nicht als Pr¨fung“ zu sehen. u ” ” 5. Vorlesungen sind eine der ¨belsten Formen des fr¨her mal geschm¨hten Frontalunterrichts“: u u a ” u u Der/die MeisterIn steht vorne und gießt seine/ihre Weisheit ¨ber die Sch¨lerInnen. Dies ist keine sehr gute Art der Wissensvermittlung, die Besseren aber funktionieren in der real existierenden Universit¨t meistens noch schlechter. Dennoch: Je gr¨ßer eure Beteiligung a o an der Veranstaltung, desto mehr werden alle Beteiligten lernen. Fragt also, macht Anmerkungen, beschwert euch, wenn ihr was nicht versteht. Mir ist klar, dass sich das weit leichter schreibt als es getan ist, aber vielleicht hilft euch die Information, dass ihr, wenn ihr etwas nicht versteht, dieses Schicksal aller Wahrscheinlichkeit nach mit dem gr¨ßeren o Teil des H¨rsaals teilt. Ihr habt nichts zu verlieren, wenn ihr (auch dumme, so es so etwas o gibt) Fragen stellt oder auch mal eine falsche Anmerkung macht: Ich bin euch in jedem Fall dankbar, und die meisten eurer Mitstudis werden dieses Gef¨hl teilen. Nach den ersten u paar wischenreden wirds viel einfacher. Wirklich. 6. Beschwert euch insbesondere, wenn irgendwas nicht so funktioniert wie im Skript versprochen. Ihr steht dabei nie als dumm da, weil sowas in jedem Fall mein Fehler ist, in der einen oder anderen Weise. Ebenfalls dankbar bin ich euch f¨r sonstige Korrekturen oder u Verbesserungsvorschl¨ge. a 7. Wissenschaft ist ein weites Feld, und f¨r das Programmieren gilt das Gleiche. Selbst wenn u ihr alles, was in diesem Skript steht, wisst, werdet ihr zur L¨sung konkreter Probleme immer o noch mehr wissen m¨ssen. Gew¨hnt euch fr¨hzeitig daran, Quellen wie Originaldokumentau o u tionen, Artikel, Posts im Usenet (die Newsgroup comp.lang.python ist wirklich lohnend und von netten Leuten frequentiert) zu verwenden. Der gr¨ßte Teil des Materials ist in Englisch, o und dieser Teil wird um so gr¨ßer, je fortgeschrittener eure Probleme sind. Seht, dass ich o damit zurecht kommt und weicht Englisch nicht aus. 8. Vor allem aber: Bei allen Qualen mit Pr¨fungen, Punkten und Credits – habt Spaß an u eurem Studium. Ohne Freude am Fach ist ein Studium eine Qual, mit Freude am Fach (und FreundInnen im Fach) ist es praktisch ein Selbstl¨ufer. a
2. Was ist ein Programm?
Ein Programm ist eine Abfolge von Anweisungen, die festlegen, wie ein Problem zu l¨sen ist. o Man kann Anweisungen nach ihrer Funktion gruppieren: • Eingabe (das Programm besetzt Variablen mit Daten von der Platte, dem Netz, der Benutzerin) • Verarbeitung (Rechnen. . . ) • Ausgabe ¨ Die Abfolge der einzelnen Anweisungen wird durch Kontrollstrukturen gesteuert. Ublicherweise unterscheidet man hier drei Typen: • Sequenz (lineare Abfolge von Anweisungen) • Selektion (Anweisungen nur in Abh¨ngigkeit von bestimmten Bedingungen ausf¨hren) a u • Iteration (Anweisungen mehrfach hintereinander ausf¨hren) u Aus diesen Elementen kann man Algorithmen bauen und daraus Programme: name = raw_input(“Name? “) if name: for c in name: print c else: print “Spielverderber” Ausf¨hren von Programmen (Skripten) durch Aufruf des Python-Interpreters: u python erstes.py wenn wir das Programm in die erstes.py geschrieben haben und in einer shell sind. Shells Wie ihr auf eurem System eine Shell bekommt, h¨ngt davon ab, was euer System ist – unter Unix a ist es meistens einfach, ein Terminalfenster“ zu bekommen, unter Windows gibts unter u” ” beh¨r“ oder ¨hnlich eine Kommandozeilenaufforderung“ oder ¨hnlich. Speziell unter Windows o a a ” ist es gut m¨glich, dass die Shell den Python-Interpreter nicht findet. Es sollte dann m¨glich o o sein, das Programm mit start erstes.py“ laufen zu lassen, doch ist das nur eine Notl¨sung – o ” findet heraus, wie ihr den Python-Interpreter in euren Pfad bekommt. Die TutorInnen helfen euch ggf. dabei. Je nach dem, was f¨r ein Entwicklungssystem benutzt wird, gehen auch andere Methoden (auch u wenn ihr in jedem Fall sehen solltet, dass ihr mit der Shell zurechtkommt, schon allein, damit ihr nicht v¨llig von eurer speziellen Umgebung abh¨ngig seid). In IDEs (Integrated Development o a Environments) gibt es beispielsweise einen Men¨punkt Run“ oder ¨hnlich. u a ” Unter Unix kann man #!/x/y/z/python (dabei m¨sst ihr /x/y/z durch den Pfad zu eurem u Python-Interpreter ersetzen, meist ist das /usr/bin – wenn es das nicht ist, solltet ihr selbst wissen, was es ist) oder #!/usr/bin/env python (hier sucht das System selbst nach dem Interpreter) in die erste eile schreiben, dann mit Kommando chmod +x erstes.py das System u u ¨berreden, das Skript als ausf¨hrbare Datei zu akzeptieren und muss nur noch erstes.py schreiben, um das Programm zu starten. Schließlich kann man in grafischen Benutzeroberfl¨chen auch einfach auf das Datei-Icon klicken, a hat dann aber gerne das Problem, dass die Ausgabe des Programms verschwindet, bevor sie zu lesen ist. Im allergr¨ßten Notfall k¨nnt ihr ein raw input() an das Ende eures Skripts schreiben, o o dann wartet das System auf eine Eingabe, bevor es das Fenster schließt.
Programm Anweisungen Variablen Kontrollstrukturen Sequenz Selektion Iteration Algorithmen Ausf¨hren u Skripten Interpreters shell