21.10.2014 Aufrufe

Programmieren mit Python – erste Schritte

Programmieren mit Python – erste Schritte

Programmieren mit Python – erste Schritte

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Programmieren</strong> <strong>mit</strong> <strong>Python</strong> – <strong>erste</strong> <strong>Schritte</strong><br />

Bernd Grave<br />

28. März 2007<br />

Inhaltsverzeichnis<br />

1 Bevor es richtig losgeht 2<br />

1.1 <strong>Python</strong> installieren . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

1.2 Texte über <strong>Python</strong> - zum Nachschlagen . . . . . . . . . . . . 2<br />

1.3 Dateinamen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

2 Ein- und Ausgabe 2<br />

2.1 Ausgabe auf dem Bildschirm . . . . . . . . . . . . . . . . . . 2<br />

2.2 Eingabe über die Tastatur . . . . . . . . . . . . . . . . . . . . 2<br />

3 Entscheidungen: wenn ... dann ... sonst ... 3<br />

4 Ausnahmen: try ... except ... 3<br />

5 Was sind eigentlich Variablen? 4<br />

5.1 Die Sache <strong>mit</strong> den Schubladen . . . . . . . . . . . . . . . . . . 4<br />

5.2 Zahlen und Zeichenketten ineinander umwandeln . . . . . . . 6<br />

6 Wiederholungen: ... und noch einmal 7<br />

6.1 for-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

6.2 while-Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

7 Datenstrukturen 9<br />

7.1 Wörterbücher . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

7.2 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

8 Funktionen 13<br />

1


1 Bevor es richtig losgeht<br />

1.1 <strong>Python</strong> installieren<br />

Man kann <strong>Python</strong> kostenlos aus dem Internet beziehen. Dazu geht man auf<br />

die folgende Seite: http://www.python.org/download/releases/2.5/<br />

Als Benutzer(in) des Betriebssystems Windows muss man die Installationsdatei<br />

<strong>Python</strong>-2.5.msi herunterladen. Zur Installation startet man einfach<br />

die heruntergeladene Datei.<br />

1.2 Texte über <strong>Python</strong> - zum Nachschlagen<br />

http://abop-german.berlios.de/<br />

http://www.silverymoon.de/uni/python/index.html<br />

http://www.thomas-guettler.de/vortraege/python/einfuehrung.html<br />

http://www.python.org/doc/<br />

1.3 Dateinamen<br />

<strong>Python</strong>-Dateien sollten .py als Dateiendung besitzen. Zum Beispiel quiz.py<br />

ist ein guter Dateiname.<br />

2 Ein- und Ausgabe<br />

2.1 Ausgabe auf dem Bildschirm<br />

Die Anweisung<br />

print ’Ich heiße Otto.’<br />

im Quelltext eines Programms bewirkt, dass der Satz auf den Bildschirm<br />

geschrieben wird. Dasselbe erreicht man auch <strong>mit</strong> der folgenden Anweisung.<br />

print "Ich heiße Otto."<br />

Da<strong>mit</strong> auch die deutschen Sonderbuchstaben eine Chance haben, richtig<br />

angezeigt zu werden, fügt man am Anfang der Datei die folgende Zeile ein.<br />

# -*- coding: cp1252 -*-<br />

2.2 Eingabe über die Tastatur<br />

Da<strong>mit</strong> ein Computerprogramm den Benutzer nach dem Vornamen fragt,<br />

kannst du folgende Anweisung in den Quelltext des Programms schreiben.<br />

name = raw_input(’Wie heißt du? ’)<br />

2


Das Programm schreibt dann die Frage ”<br />

Wie heißt du?“ auf den Bildschirm<br />

und wartet auf eine Eingabe von der Tastatur. Wenn du z.B. ”<br />

Michaela“ eingegeben<br />

und Enter gedrückt hast, speichert das Programm die Zeichenkette<br />

Michaela in der Variablen name.<br />

Das einfache = bedeutet, dass der Variablen name etwas zugeordnet wird –<br />

und zwar in diesem Fall das Ergebnis der Tastatureingabe.<br />

3 Entscheidungen: wenn ... dann ... sonst ...<br />

if name == "Bodo":<br />

print "Hallo."<br />

else:<br />

print "Ich kenne dich nicht."<br />

Das doppelte == wird in <strong>Python</strong> für Vergleiche benutzt. Hier wird der Inhalt<br />

der Variablen name <strong>mit</strong> der Zeichenkette Bodo verglichen. Wenn in der<br />

Variablen name der Name Bodo gespeichert ist, dann macht das Programm<br />

all das, was danach eingerückt ist – also in diesem Fall schreibt es ”<br />

Hallo.“<br />

auf den Bildschirm. Anderenfalls macht das Programm all das, was hinter<br />

else: eingerückt ist. Achtung: Eine Zeile <strong>mit</strong> if und eine Zeile <strong>mit</strong> else<br />

müssen immer <strong>mit</strong> einem Doppelpunkt enden.<br />

Aufgaben<br />

1. Schreibe ein Programm, dass den Computer dazu veranlasst folgendes<br />

zu tun: Der Computer fragt dich erst einmal nach deinem Namen.<br />

Wenn du deinen Vornamen eingegeben hast, dann reagiert der Computer<br />

und schreibt ”<br />

Hallo. wie geht es dir?“. Wenn du einen anderen<br />

Namen eingegeben hast, dann reagiert der Computer und schreibt ”<br />

Ich<br />

kenne dich nicht. Dies ist nicht dein Computer.“<br />

2. Programmiere ein kleines Quiz. Dabei soll das Programm die Fragen<br />

stellen und auch erkennen, ob die eingegebene Antwort richtig oder<br />

falsch ist und entsprechend reagieren.<br />

4 Ausnahmen: try ... except ...<br />

Ihr kennt die Situation, dass ein Programm fehlerhaft ist und irgendwann abgebrochen<br />

wird. Dann erscheinen normalerweise ein paar mehr oder weniger<br />

kryptische Zeilen in roter Farbe in dem Fenster, wo eigentlich das Programm<br />

ausgeführt werden sollte. Das ist die Standardbehandlung für Laufzeitfehler.<br />

Das sind Fehler, die erst beim Ausführen auftreten. Das kann man auch<br />

ändern. Hier das vermutlich meistgebrauchte Beispiel:<br />

3


while True:<br />

try:<br />

eingabe = raw_input("Eine Zahl eingeben: ")<br />

zahl = int(eingabe)<br />

break<br />

except ValueError:<br />

print "Bitte eine ganze Zahl eingeben."<br />

while True: heißt soviel wie, solange die Welt nicht untergegangen ist, wiederhole<br />

das was danach eingerückt ist. Wenn in dem nach try: eingerückten<br />

Block ein Fehler von der Art ValueError auftritt, dann wird das Programm<br />

nicht abgebrochen, sondern der eingerückte Block nach except wird ausgeführt.<br />

Da<strong>mit</strong> nicht immer wieder nach einer Zahl gefragt wird – schließlich<br />

befinden wir uns in einer Endlosschleife –, muss das Programm nach erfolgreicher<br />

Umwandlung in eine Zahl aus der Schleife ausbrechen. Das geschieht<br />

durch break.<br />

Noch ein anderes Beispiel ohne Endlosschleife und break.<br />

# -*- coding: cp1252 -*-<br />

fehler = 0<br />

eingabe = raw_input(’Geben Sie eine Zahl zwischen 113 und 254 ein. ’)<br />

try:<br />

zahl = int(eingabe)<br />

except:<br />

fehler = 1<br />

if fehler==1:<br />

print ’Das war keine Zahl.’<br />

else:<br />

if zahl > 113 and zahl < 254:<br />

print ’Danke.’<br />

else:<br />

print ’Du solltest noch mal zählen üben.’<br />

Hier wird im Fall einer falschen Eingabe nur die Variable fehler auf den<br />

Wert 1 gesetzt. Dann geht das Programm normal weiter. Die Ausgabe von<br />

Das war keine Zahl.“ passiert im ganz normalen Programmablauf. Am besten<br />

probierst du beide Programme<br />

”<br />

aus.<br />

5 Was sind eigentlich Variablen?<br />

5.1 Die Sache <strong>mit</strong> den Schubladen<br />

Im Abschnitt 2.2 war schon von einer Variablen die Rede. Wenn zum Beispiel<br />

etwas über die Tastatur eingegeben wird, dann soll sich das gerade<br />

laufende Computerprogramm die Eingabe vielleicht merken. Dazu muss es<br />

4


die Eingabe irgendwo ablegen, so dass sie jederzeit wiedergefunden werden<br />

kann. Genau das passiert in der folgenden Zeile.<br />

buchtitel = raw_input(’Titel deines Lieblingsbuches: ’)<br />

Der Computer bewahrt alles, was über die Tastatur eingegeben wird, in einer<br />

Schublade“ <strong>mit</strong> der Aufschrift buchtitel auf. Genauer gesagt: Alles was<br />

”<br />

eingegeben wird, nachdem das Programm bei der obigen Zeile angekommen<br />

ist und solange noch nicht die Enter-Taste gedrückt wurde, landet in der<br />

buchtitel-Schublade. Statt Schublade spricht man in der Informatik von<br />

Variablen. Wenn man etwas Neues in eine Informatik-Schublade legt, wird<br />

automatisch alles, was bislang darin war entsorgt.<br />

Oben ist ein Beispiel angeführt, wie man den Programm-Benutzer dazu auffordern<br />

kann, etwas in die Schublade zu legen. In der Informatik würde man<br />

eher sagen etwas in der Variablen speichern“. (In der Mathematik sagt man<br />

”<br />

etwas in eine Variable einsetzen“.)<br />

”<br />

Man kann auch direkt das Programm da<strong>mit</strong> beauftragen, etwas in einer<br />

Variablen zu speichern. Zuerst kommt die Variable, in der etwas gespeichert<br />

werden soll, dann ein Gleichheitszeichen und schließlich der Wert, der in der<br />

Variablen gespeichert werden soll.<br />

buchtitel = ’Lord of the rings’<br />

name = "Otto"<br />

lieblingszahl = 17<br />

pi = 3.1415926<br />

a = 5<br />

Hier sieht man auch schon, dass es unterschiedliche Dinge gibt, die man<br />

in Variablen speichern kann. In der Variablen buchtitel wird die Zeichenkette<br />

Lord of the rings gespeichert. Da<strong>mit</strong> das Programm weiß, wo die<br />

Zeichenkette anfängt und wo sie aufhört, muss man Anführungszeichen setzen.<br />

In der Variablen lieblingszahl wird die Zahl 17 gespeichert.<br />

Wenn das Programm den Inhalt einer Schublade wieder ans Licht zerren soll,<br />

muss man dem Programm nur sagen, in welcher Schublade es nachschauen<br />

soll.<br />

print buchtitel, ’ist mein Lieblingsbuch.’<br />

print lieblingszahl<br />

Wenn das Programm rechnen soll, dann passiert oft beides in einem Befehl:<br />

der Computer schaut in einer oder mehreren Schubladen nach und legt das<br />

Ergebnis in eine Schublade hinein.<br />

neue_zahl = 3*lieblingszahl<br />

print a<br />

a = a+1<br />

print a<br />

5


In der <strong>erste</strong>n Zeile wird die Variable lieblingszahl gelesen, der Wert <strong>mit</strong><br />

drei multipliziert und das Ergebnis wird in der Variablen neue_zahl gespeichert.<br />

Die Zeile a=a+1 sieht für einen Mathematiker erst einmal abenteuerlich aus.<br />

Die beiden Seiten der Gleichung sind bestimmt nicht gleich. Es handelt sich<br />

dabei auch gar nicht um eine Gleichung sondern um eine Zuweisung: Die<br />

Schublade a wird geöffnet, die darin enthaltene Zahl wird herausgenommen<br />

und um eins erhöht. Das Ergebnis kommt dann wieder in die selbe Schublade<br />

a. (Bitte ausprobieren.)<br />

5.2 Zahlen und Zeichenketten ineinander umwandeln<br />

Oft ist es nötig, Zeichenketten in Zahlen zu verwandeln.<br />

Stell dir ein Computerspiel vor, das nur für Kinder interessant ist. Das<br />

Computerprogramm möchte Jugendliche ab 16 Jahre warnen, dass sie wahrscheinlich<br />

schon zu groß für das Spiel sind.<br />

alter = raw_input(’Wie alt bist du? ’)<br />

if alter >= 16:<br />

print ’Du bist schon zu groß für dieses Kinderspiel.’<br />

In diesem kleinen Programmstück ist ein Fehler v<strong>erste</strong>ckt. Eine Eingabe <strong>mit</strong><br />

raw_input() liefert immer eine Zeichenkette. In diesem Beispiel sollte in<br />

der Variablen alter allerdings eine Zahl enthalten sein - und zwar höchst<br />

wahrscheinlich eine ganze Zahl (engl.: integer). Also muss man die Zeichenkette,<br />

die von der Tastatur kommt, in eine Zahl umwandeln. Das kann man<br />

auf verschiedene Weise machen. Man kann die Zeichenkette (engl.: string)<br />

von der Tastatur erst einmal in einer Variablen speichern und danach in eine<br />

Zahl verwandeln.<br />

alter_str = raw_input(’Wie alt bist du? ’)<br />

alter = int(alter_str)<br />

if alter >= 16:<br />

print ’Du bist schon zu groß für dieses Kinderspiel.’<br />

Hat der Anwender des Programms beispielsweise die Tasten 1 7 Enter<br />

gedrückt, dann ist, nachdem das Programm gelaufen ist, in der Variablen<br />

alter_str die Zeichenkette ’17’ und in der Variablen alter die Zahl 17<br />

enthalten.<br />

Wenn man sich Tipparbeit sparen will und ganz sicher ist, dass man die<br />

Zeichenkette später sowieso nicht mehr braucht, kann man die <strong>erste</strong>n beiden<br />

Zeilen zu einer zusammenfassen.<br />

alter = int(raw_input(’Wie alt bist du? ’))<br />

if alter >= 16:<br />

print ’Du bist schon zu groß für dieses Kinderspiel.’<br />

6


Frage: Warum stehen am Ende der Eingabezeile zwei schließende Klammern?<br />

Wir halten fest, dass <strong>mit</strong> a=int(b) die Zeichenkette aus der Schublade b<br />

gelesen, in eine Zahl umgewandelt und dann das Ergebnis in der Variablen<br />

a gespeichert wird.<br />

Hätte irgendein Scherzkeks als Alter 16.5 eingegeben, dann wäre die Funktion<br />

int() überfordert. Denn 16.5 ist keine ganze Zahl. Das Programm wäre<br />

<strong>mit</strong> einer Fehlermeldung abgebrochen worden. Kein Problem: Wir ersetzen<br />

einfach int() durch float(). Bei dieser Gelegenheit, gleich noch ein wichtiger<br />

Hinweis: Die Vor- und die Nachkommastellen werden nicht durch ein<br />

Komma, sondern durch einen Punkt getrennt.<br />

Manchmal braucht man auch die umgekehrte Verwandlung einer Zahl in<br />

eine Zeichenkette. Dafür gibt es zwei Funktionen:<br />

ziffernfolge = str(16.5)<br />

ziffernfolge = repr(16.5)<br />

6 Wiederholungen: ... und noch einmal<br />

6.1 for-Schleife<br />

So wie man einen Buttler darum bitten könnte, jedes Porzelanteil in einem<br />

bestimmten Schrank zu putzen, so kann man auch den Computer dazu<br />

auffordern, etwas für jedes Element einer Liste zu tun.<br />

Die Liste der Zahlen 0, 1, 2, 3, 4, 5, 6 heißt in <strong>Python</strong> [0,1,2,3,4,5,6] oder<br />

range(7). Diese Liste enthält also 7 Elemente. Da<strong>mit</strong> sollte auch klar sein,<br />

was <strong>mit</strong> range(24) gemeint ist. Die Liste [’Sonne’, ’Mond’, ’Sterne’]<br />

besteht nicht aus Zahlen, sondern aus Zeichenketten. Sie enthält drei Elemente.<br />

Die Bedeutung und den Gebrauch der for-Schleife erschließt du dir am<br />

besten, indem du das folgende Programm anschaust.<br />

for i in range(7):<br />

print i<br />

for w in [’Sonne’, ’Mond’, ’Sterne’]:<br />

print w<br />

Achtung: Hinter der Liste muss immer ein Doppelpunkt stehen. Die Befehle,<br />

die für alle Elemente der Liste durchgegangen werden sollen, müssen<br />

eingerückt sein.<br />

6.2 while-Schleifen<br />

Es gibt auch Wiederholungen, die so lange ausgeführt werden sollen, bis eine<br />

Bedingung erfüllt ist. Solche Schleifen programmiert man in <strong>Python</strong> <strong>mit</strong> der<br />

Anweisung while.<br />

7


print ’Wie heißt die Hauptstadt von Frankreich?’<br />

antwort = raw_input(’dein Tipp: ’)<br />

while antwort != ’Paris’:<br />

print ’Die Antwort war falsch.’<br />

antwort = raw_input(’neuer Tipp: ’)<br />

print ’Richtig.’<br />

Die Zeile <strong>mit</strong> while könnte man umgangssprachlich etwa so übersetzen: ”<br />

Solange<br />

die Antwort nicht richtig ist, tue folgendes:“ Die beiden eingerückten<br />

Zeilen werde so oft wiederholt, bis jemand auf die Idee kommt, Paris einzugeben.<br />

Wenn man Bedingungen formulieren will, muss man vor allen Dingen vergleichen<br />

können. Deshalb hier eine kleine Tabelle <strong>mit</strong> Vergleichsoperatoren<br />

in <strong>Python</strong>.<br />

Aufgaben<br />

<strong>Python</strong>-Operator Bedeutung Beispiel<br />

== gleich name == ’Sophie’<br />

!= ungleich antwort != ’Paris’<br />

= zahl2<br />

< kleiner a < 7<br />

> größer x > 1.9<br />

1. Schreibe ein Programm, dass folgendes auf den Bildschirm schreibt.<br />

0<br />

6<br />

12<br />

18<br />

24<br />

30<br />

36<br />

42<br />

48<br />

54<br />

60<br />

2. Schreibe ein Programm, dass die Namen der Planeten unseres Sonnensystems<br />

untereinander auf den Bildschirm schreibt. Verwende dazu<br />

eine Schleife.<br />

3. Schreibe ein Programm, dass 13 mal ”<br />

Viel Glück!“ wünscht.<br />

8


4. Überlege, was das folgende Programm für eine Ausgabe auf dem Bildschirm<br />

erzeugt. Prüfe, ob du richtig gelegen hast, indem du das Programm<br />

<strong>mit</strong> <strong>Python</strong> ausführst.<br />

for i in range(10):<br />

print i, ’* 17 = ’, i*17<br />

5. Schreibe ein Programm, dass alle Multiplikationen des kleinen Einmal-eins<br />

auf dem Bildschirm ausgibt.<br />

6. Schreibe ein Programm, dass die Summe der ganzen Zahlen von 1 bis<br />

123 berechnet.<br />

7. Denke dir selber ein kleiens Programm aus, in dem eine for-Schleife<br />

vorkommt.<br />

8. Schreibe ein Programm, dass immer wieder eine Tastatureingabe erwartet<br />

und einliest, bis Ende eingetippt wird.<br />

9. Überlege, was das folgende Programm für eine Ausgabe erzeugt. Führe<br />

das Programm aus. Finde heraus, was len(...) bedeutet.<br />

namensliste = [’Peter’, ’Susanne’, ’Anne’, ’Hans’, ’Tanja’]<br />

for text in namensliste:<br />

print ’Der Name’, text,<br />

print ’besteht aus’, len(text), ’Buchstaben.’<br />

10. Schreibe ein Programm, dass immer wieder die Eingabe eines Wortes<br />

<strong>mit</strong> 5 Buchstaben fordert und erst Ruhe gibt, wenn es eine Eingabe<br />

aus 5 Zeichen bekommen hat.<br />

7 Datenstrukturen<br />

7.1 Wörterbücher<br />

Hier ein paar kleine Beispiele für Wörterbücher.<br />

englisch_deutsch = { ’Haus’ : ’house’,<br />

’Wohnung’ : ’flat’,<br />

’eben’ : ’flat’,<br />

’Küche’ : ’kitchen’ }<br />

telefonbuch = { ’Hans K.’ : ’0511 1596374’,<br />

’Ina Z.’ : ’0551 35674’,<br />

’Andreas M.’ : ’05494 69753’,<br />

’Kerstin D.’ : ’030 296749253’ }<br />

9


# im Katalog steht jeweils die Artikelnummer und der Preis in Euro<br />

katalog = { ’LX 450678’ : 34.95,<br />

’LC 450679’ : 39.95,<br />

’LT 300401’ : 119.00 }<br />

In einem Wörterbuch kann hinter dem Doppelpunkt mehrmals das gleiche<br />

stehen. Vor dem Doppelpunkt darf das nicht sein. Das <strong>erste</strong> Wörterbuch<br />

wäre also umgekehrt <strong>mit</strong> den englischen Wörtern an <strong>erste</strong>r Stelle nicht erlaubt,<br />

weil zweimal ’flat’ vorkommt.<br />

Das was vor dem Doppelpunkt steht heißt Schlüssel. Der Eintrag hinter<br />

dem Doppelpunkt wird Wert genannt. In allen Beispielen hier sind die<br />

Schlüssel Zeichenketten. Man kann aber auch Zahlen als Schlüssel verwenden.<br />

Benutzung von Wörterbüchern<br />

• Eintrag ändern, Eintrag zu einem Wörterbuch hinzufügen:<br />

englisch_deutsch[’Wohnzimmer’] = ’living room’<br />

telefonbuch[’Rolf Z.’] = ’0251 4598349’<br />

Wenn es vorher schon einen Rolf Z. im Wörterbuch gab, wird kein<br />

zweiter hinzugefügt, sondern die Nummer geändert.<br />

• Eintrag aus einem Wörterbuch löschen:<br />

del katalog[’LT 300401’]<br />

• im Wörterbuch nachschlagen - <strong>mit</strong> dem Schlüssel auf den Wert zugreifen:<br />

print ’Die Telefonnummer von Ina ist’, telefonbuch[’Ina Z.’]<br />

Auf diese Weise kann man nur zu dem was vor dem Doppelpunkt steht<br />

auf das was hinter dem Doppelpunkt steht zugreifen. Nicht umgekehrt.<br />

• überprüfen, ob ein Eintrag im Wörterbuch steht:<br />

if ’Felix S.’ in telefonbuch:<br />

print ’Die Telefonnummer von Felix S. lautet’,<br />

print telefonbuch[’Felix S.’]<br />

10


7.2 Listen<br />

... kommen in jeder for-Anweisung vor.<br />

Dir sind schon Listen begegnet. Zum Beispiel [0,1,2,3,4,5,6,7,8,9] und<br />

[’Sonne’,’Mond’,’Milchstraße’]. Für die <strong>erste</strong> Liste kann man auch<br />

range(10) schreiben.<br />

Listen kommen aber auch noch an anderen Stellen vor. In anderen Programmiersprachen<br />

wird eine Liste oft <strong>mit</strong> dem englischen Wort Array bezeichnet.<br />

In Listen dürfen auch verschiedenartige Dinge stehen. Beispiel:<br />

[’Mozart’,1756,1791,’Musiker’,’Salzburg’]<br />

Wenn man <strong>mit</strong> einer Liste arbeiten will, dann braucht die Liste einen Namen.<br />

Beispiel:<br />

# planeten - Liste (enthält Planeten des Sonnensystems)<br />

planeten = [’Merkur’,’Venus’,’Erde’,’Mars’]<br />

Um auf das zweite Element aus der Liste zuzugreifen und es auf den Bildschirm<br />

auszugeben, schreiben man folgende Zeile ins Programm:<br />

print planeten[1]<br />

Wie unschwer zu erraten ist, hat das <strong>erste</strong> Element einer Liste also die<br />

Nummer 0. Achtung: Das ist der Grund, weshalb man sich schnell einmal<br />

um eins verzählt.<br />

Um in der Liste ”<br />

Mars“ durch ”<br />

Milky Way“ zu ersetzen, geht man so vor:<br />

planeten[3] = ’Milky Way’<br />

Benutzung von Listen<br />

Wie man <strong>mit</strong> Listen umgeht, kann man sehr gut dem folgenden Programm<br />

entnehmen. Es stammt aus der <strong>Python</strong>-Einführung ”<br />

A Byte of <strong>Python</strong>“.<br />

einkaufsliste = [’Aepfel’, ’Mangos’, ’Karotten’, ’Bananen’]<br />

print ’Ich habe’, len(einkaufsliste), ’Dinge einzukaufen.’<br />

print ’Diese Dinge sind:’, # Beachte das Komma am Zeilenende<br />

for ding in einkaufsliste:<br />

print ding,<br />

print ’\nIch muss auch Reis einkaufen.’<br />

einkaufsliste.append(’Reis’)<br />

print ’Meine Einkaufsliste ist jetzt’, einkaufsliste<br />

print ’Jetzt werde ich meine Einkaufsliste sortieren.’<br />

einkaufsliste.sort()<br />

11


print ’Die sortierte Einkaufsliste ist’, einkaufsliste<br />

print ’Zuerst werde ich’, einkaufsliste[0], ’kaufen.’<br />

altesding = einkaufsliste[0]<br />

del einkaufsliste[0]<br />

print ’Ich habe’, altesding, ’gekauft.’<br />

print ’Meine Einkaufsliste ist jetzt’, einkaufsliste<br />

Aufgabe zum besseren Verständnis von range()<br />

a) Kopiere die folgenden Zeilen in ein <strong>Python</strong>-Programm und führe es<br />

aus.<br />

print range(17)<br />

print range(5,17)<br />

print range(-5,17)<br />

print range(3,20)<br />

print range(3,20,2)<br />

print range(20,3,-1)<br />

b) Probiere selbst verschiedene Werte aus. Überlege zuerst, was du erwartest<br />

und überprüfe dann, ob du richtig liegst.<br />

c) Formuliere drei Regeln, die genau erklären, welche Listen von den<br />

Befehlen range(a), range(a, b), range(a, b, c) erzeugt werden. Die<br />

Buchstaben a, b, c stehen dabei für beliebige ganze Zahlen.<br />

d) Erzeuge <strong>mit</strong> range() eine Liste für einen Countdown.<br />

e) Erzeuge <strong>mit</strong> range() die Liste der positiven geraden Zahlen bis einschließlich<br />

100.<br />

12


8 Funktionen<br />

Hier ist noch einmal ein Quiz.<br />

# -*- coding: cp1252 -*-<br />

# Variablen<br />

#<br />

# antwort - Zeichenkette (zum Speichern der Tastatureingabe)<br />

print ’Informatik-Quiz\n’<br />

print ’Wonach ist die Computersprache <strong>Python</strong> benannt?’<br />

print ’ a) nach einer Schlange’<br />

print ’ b) nach einer Komikergruppe’<br />

print ’ c) nach einer Sportart’<br />

print ’ d) nach einem Land’<br />

antwort = raw_input(’Bitte geben Sie den Buchstaben der Lösung ein. ’)<br />

if antwort == ’b’:<br />

print ’Richtig.’<br />

else:<br />

print ’Falsch.’<br />

print ’Welches ist die Amtssprache auf der Insel Java?’<br />

print ’ a) Chinesisch’<br />

print ’ b) Java’<br />

print ’ c) Javanisch’<br />

print ’ d) Indonesisch’<br />

antwort = raw_input(’Bitte geben Sie den Buchstaben der Lösung ein. ’)<br />

if antwort == ’d’:<br />

print ’Richtig.’<br />

else:<br />

print ’Falsch.’<br />

...<br />

Nach jeder Frage wird der Benutzer auf die gleiche Art zu einer Eingabe<br />

aufgefordert und immer bekommt er ”<br />

Richtig.“ oder ”<br />

Falsch.“ als Antwort.<br />

Spätestens nach der dritten Frage tippt man das nicht noch einmal ein, sondern<br />

benutzt die Tastenkombinationen Strg + C zum Kopieren und<br />

Strg + V zum Einfügen. Dann muss man nur noch den richtigen Buchstaben<br />

anpassen.<br />

Aber auch das ist nicht die eleganteste Lösung. Am Besten bringt man dem<br />

Programm ein für alle Mal bei, was er in dem Abschnitt tun soll, den wir<br />

13


<strong>mit</strong> ”<br />

cut and paste“ sonst an viele Stellen ins Programm einfügen würden.<br />

Und das geht so:<br />

# -*- coding: cp1252 -*-<br />

# Variablen<br />

#<br />

# antwort - Zeichenkette (zum Speichern der Tastatureingabe)<br />

# lsg - Zeichenkette (um der Auswertung zu sagen, welche Antwort richtig ist)<br />

print ’Informatik-Quiz\n’<br />

def auswertung(lsg):<br />

antwort = raw_input(’Bitte geben Sie den Buchstaben der Lösung ein. ’)<br />

if antwort == lsg:<br />

print ’Richtig.’<br />

else:<br />

print ’Falsch.’<br />

print ’Wonach ist die Computersprache <strong>Python</strong> benannt?’<br />

print ’ a) nach einer Schlange’<br />

print ’ b) nach einer Komikergruppe’<br />

print ’ c) nach einer Sportart’<br />

print ’ d) nach einem Land’<br />

auswertung(’b’)<br />

print ’Welches ist die Amtssprache auf der Insel Java?’<br />

print ’ a) Chinesisch’<br />

print ’ b) Java’<br />

print ’ c) Javanisch’<br />

print ’ d) Indonesisch’<br />

auswertung(’d’)<br />

...<br />

Wir geben dem ausgelagerten Block zur Eingabe und Auswertung der Lösung<br />

einen Namen. In unserem Beispiel auswertung. Diesen Namen schreiben wir<br />

hinter den Befehl def, <strong>mit</strong> dem man sogenannte Funktionen definiert. In<br />

Pascal sagt man nicht Funktionen sondern Prozeduren. In Java und anderen<br />

vorwiegend objektorientierten Sprachen spricht man gerne von Methoden.<br />

In jedem Fall ist ein Block gemeint, dem man einen Namen gibt, so dass<br />

man immer wieder darauf zurückgreifen kann.<br />

Unsere Funktion ist gleich ein hochentwickeltes Exemplar seiner Gattung.<br />

Wir müssen ihr den Lösungsbuchstaben <strong>mit</strong>teilen, da<strong>mit</strong> sie richtig arbeiten<br />

14


kann. In der Funktion selbst steht dort, wo vorher der Lösungsbuchstabe<br />

stand, die Variable lsg. In ihr wird der gerade gültige Lösungsbuchstabe<br />

gespeichert.<br />

Ein großer Vorteil von Funktionen ist, dass man eine Änderung nur einmal<br />

vornehmen muss. Beispiele: Nach der Antwort Richtig.“ oder Falsch.“<br />

” ”<br />

soll noch eine Leerzeile eingefügt werden, da<strong>mit</strong> die einzelnen Fragen besser<br />

voneinander getrennt sind. Die Antwort Falsch.“ soll durch das höflichere<br />

”<br />

Leider falsch.“ ersetzt werden. Stell dir vor, dass Quiz hätte 50 Fragen und<br />

”<br />

du müsstest 50 Mal die Antwort ändern.<br />

Und weil Funktionen so wichtig sind noch einige Beispiel.<br />

# -*- coding: cp1252 -*-<br />

# Oberfl_Zylinder berechnet die Oberfläche eines Zylinders<br />

# aus dem Radius und der Höhe. Ergebnis: float<br />

def Oberfl_Zylinder(r,h):<br />

return 3.1415926 * r * r * h<br />

print ’Wäre eine Coladose 10cm hoch’,<br />

print ’und hätte sie einen Durchmesser von 8 cm,’<br />

print ’dann würden’, Oberfl_Zylinder(4,10), ’ml Cola hineinpassen.’<br />

15

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!