III. Programmieren mit Python

Werbung
III. Programmieren mit
Python
III
Programmieren mit Python
Informatik Klasse 9
121
III.1
Grundlagen
Python ist eine frei verfügbare Programmiersprache, die sich sowohl für Einsteiger eignet als auch für
große Projekte nutzbar ist. Python findet unter anderem Verwendung bei Google, Youtube und
verschiedenen Hollywood-Projekten. Sein Name leitet sich übrigens nicht von der aus dem
Dschungelbuch bekannten Würgeschlange ab, sondern von der britischen Comedy Truppe Monthy
Python.
Programmiersprachen lassen sich grundsätzlich in zwei Gruppen einteilen. Compilerorientierte
Programmiersprachen erstellen mittels eines Compilers ausführbare Programme, also *.exe-Dateien.
Diese werden vom Betriebssystem gestartet und ihr Programmtext kann nach der Kompilation nicht
mehr gelesen werden. Eine Dekompilation schließen die meisten Hersteller in ihren
Nutzungsbedingungen unter Strafandrohung aus. Dementsprechend muss bei der Kompilation
bereits berücksichtigt werden, welches Betriebssystem genutzt wird. Für Windows erstellte *.exeDateien sind deshalb z.B. unter Linux nicht oder nur mit Hilfe von Zusatzsoftware wie Wine nutzbar.
Python ist eine interpretative Programmiersprache. Zu einem Python-Programm gehört immer ein
Interpreter, der das Programm lädt und ausführt. Da es für die gängigen Betriebssysteme bereits
entsprechende Python-Interpreter gibt, sind Python-Programme unter verschiedenen
Betriebssystemen austauschbar. Der Quelltext lässt sich auslesen, denn das entsprechende Skript ist
mit jedem Texteditor zu öffnen.
Das Programm selbst ist unter herunterzuladen. Nach der Installation befindet sich auch bereits die
Programmierumgebung Idle, benannt nach einem Monthy Python – Mitglied, auf dem Rechner. Diese
kann über den entsprechenden Eintrag in der Programmliste oder bei Windows 8 einfach über das
Eintippen des Namens Idle in der Kacheloberfläche gestartet werden.
Idle startet als Shell, so dass Python – Befehle direkt ausgeführt werden. Sichtbar ist dies an der
Eingabeaufforderung, die durch die drei spitzen Klammern deutlich wird.
Das eintippen von
print ("Hallo Welt!")
führt also direkt zu der Ausgabe Hallo Welt!
Informatik Klasse 9
122
Idle arbeitet hierbei mit Farben, um verschiedene Teile des Programmcodes deutlich zu machen, und
gibt z.T. Hinweise zum erwarteten Code. Sollte dieses Syntax-Highlighting nicht erscheinen, dann
prüfe, ob die Programmdatei mit der Endung .py abgespeichert wurde und ändere dies ggf.
entsprechend.
Größere Programme sind
natürlich auf diese Weise nicht
effektiv zu erstellen. Über den
Menüeintrag Options>Configure
Idle lässt sich im Registerreiter
General einstellen, dass Idle
immer als Editor startet.
Dann erscheint ein etwas anderes Fenster.
Die Eingabeaufforderung ist verschwunden. Um das Programm zu starten, muss nun die Shell wieder
gestartet werden. Dies geschieht über Run>Run Module oder die Funktionstaste F5. Sollte man noch
nicht gespeichert haben, wird man nun dazu aufgefordert. Der Dateiname inklusive der Pythontypischen Endung *.py erscheint im Kopf des Editorfensters.
Informatik Klasse 9
123
Natürlich lassen sich Python-Programme auch über den Doppelklick ausführen. Am Beginn dieses
Kurses ist dies aber noch nicht sinnvoll, denn der Programmtext wird zwar abgearbeitet, allerdings
nur in der Windows – Shell und so schnell, dass der Nutzer nur ein kurzes Erscheinen der WindowsKonsole sieht. Das wird sich bald ändern.
Die Entwicklungsumgebung Idle ist sehr minimalistisch gehalten, bietet aber alles, was zunächst
benötigt wird. Natürlich ist es möglich, diverse andere Umgebungen zu nutzen. Die bekannteste ist
wohl Eclipse, eine integrierte Programmierumgebung für verschiedenste Programmiersprachen, die
unter heruntergeladen werden kann.
Eclipse bietet, nach entsprechender Einrichtung, eine Menüführung in deutscher Sprache, einen
Projektbrowser und eine in das Programmfenster integrierte Konsole. Das sieht besser aus, ist aber
bei der Programmerstellung selbst kaum eine entscheidende Hilfe.
Aufgabe:
1. Erstelle einen Ordner in deinem persönlichen Arbeitsbereich, der deine Python – Programme
enthalten wird.
2. Erstelle das Programm „Hallo Welt!“ und führe es in der Idle-Shell aus.
Informatik Klasse 9
124
Erste Programme in
Python
III.2
III.2.1
Rechnen
Natürlich ist es in Python problemlos möglich, den PC rechnen zu lassen.
In diesem Beispiel wurden die Rechenoperationen direkt in die Shell eingegeben und von Python
ausgeführt.
Bei fehlerhaften Eingaben erscheint, wie oben zu sehen, eine Fehlermeldung, die in diesem Fall auf
die nicht mögliche Division durch Null hinweist.
Informatik Klasse 9
125
Natürlich gelten die üblichen Rechenregeln, also z.B. Punkt- vor Strichrechnung.
Neben den Grundrechenarten ist es in Python auch möglich, eine sog. Ganzzahldivision
(5//2)durchzuführen. Hierbei wird als Ergebnis eine ganze Zahl zurückgegeben.
Mit der Modulo-Funktion (5%2) wird der Rest einer Division zurückgegeben.
Kommazahlen werden mit einem Punkt als Trennzeichen dargestellt.
Rechenoperationen im Überblick
Rechenoperationen
Addition
Subtraktion
Multiplikation
Division
Ganzzahldivision
Modulo
Informatik Klasse 9
Beispiel
1+1
2-1
3*3
5/2
5//2
5%2
Ergebnis
2
1
9
2.5
2
1
126
Erklärung
Kommazahlen mit Punkt!
Ergibt ganzzahligen Wert
Ergibt den Rest einer Division
Aufgabe:
Berechne
a)
Object 2
Ergebnis: 12.214285714285715
b) (
( 28−30 )∗( 2−12 ) mod 25
(mod=modulo)
Ergebnis: 20
Informatik Klasse 9
127
Variablen
III.2.2
III.2.2.1
Grundsätzliches
Variablen sind Behälter für Daten.
In Python lassen sich Variablen sehr einfach erstellen. Variablen können aus Buchstaben, Ziffern und
dem Unterstrich bestehen. Als erstes Zeichen sind nur Buchstaben und der Unterstrich erlaubt. Da
Python zwischen Groß- und Kleinschreibung unterscheidet, sollte man Variablen entsprechend
gestalten. Grundsätzlich ist Kleinschreibung zu empfehlen.
Verboten sind alle in Python reservierten Wörter
False
None
True
and
as
assert
break
class
continue
def
del
elif
eise
except
finally
for
from
global
if
import
in
is
lambda
nonlocal
not
or
pass
raise
return
try
while
with
yield
Im Gegensatz zu anderen Programmierumgebungen müssen Variablen in Python nicht deklariert
werden, d.h. der Programmierer muss nicht festlegen, welche Art von Daten eine Variable enthält.
Grundsätzlich lassen sich unter anderem folgende Werttypen unterscheiden
Integer
- ganzzahlige Werte
i=5
Float
- Fließkommazahl
i=5.5
String
- eine Zeichenkette
i=“Zeichen“ oder
i=‘Zeichen‘ oder
i=‘‘‘Zeichen‘‘‘
Tupel
- eine unveränderliche Liste
i=1,'g','Pute',8.9
Liste
- eine veränderliche Liste
i=[1,‘g‘,‘Pute‘,8.9]
Dictionary
- eine Liste von Paaren aus
Schlüssel und Wert
i={‚Haus‘:‘Tür‘,
‚Katze‘:‘Maus‘,
‚Wal‘:‘Speck‘}
Welcher Typ von Variable vorliegt, erkennt Python automatisch. Man kann sich den Typ mit dem
Befehl type(Variablenname) anzeigen lassen.
Informatik Klasse 9
128
Wird einer Variablen ein anderer Wert zugewiesen, dann ändert sich auch ihr Typ, z.B. von integer
zu float usw.
>>> a=1
>>> type(a)
<class 'int'>
>>> a=1.1
>>> type(a)
<class 'float'>
>>>
III.2.2.2
Exkurs: Fehlermeldungen
Fehlerhafte Eingaben generieren in Python diverse Fehlermeldungen. Tritt der Fehler beim Umsetzen
des Programms in der Shell auf, dann werden die Meldungen auch in der Shell ausgewiesen.
Werden Variablen fehlerhaft benannt, dann weist das Programm darauf hin.
Hier ein Beispiel mit Python-Programm und entsprechender Konsolenausgabe:
Die Meldung
File
"C:/Users/Torsten/Documents/schwerin_sommer_2015/if_buecher_201
5-2016/Klasse_9/python/hallo_welt.py", line 4, in <module>
print(type(ai))
benennt die Zeile, in der der Fehler auftrat und den dazugehörenden Befehl.
Die letzte Zeile der Fehlermeldung benennt den Fehler:
NameError: name 'ai' is not defined
Hier wurde also eine Bezeichnung für eine Variable genutzt, die unbekannt war.
Vermieden werden sollte auf jeden Fall auch die Nutzung von Programmbefehlen zu anderen
Zwecken, z.B. zur Variablenbenennung. Hier ein Beispiel zum print-Befehl:
Informatik Klasse 9
129
Hier wird dem print-Befehl ein Integer-Wert zugewiesen. Die Fehlermeldung
weist darauf hin, dass diese Operation mit dem System nicht kompatibel ist.
Bei der Nutzung reservierter Wörter erscheint die nebenstehende Mitteilung.
Liegt der Fehler dagegen bereits im Programmtext, dann erscheint ein Fehlerhinweis, bevor das
Programm durch die Shell abgearbeitet wird.
Hier wurden die Dictionary-Paare fehlerhaft durch Semikolon und nicht durch Komma getrennt. Der
Fehler wird durch eine Fehlermeldung benannt und mit einer roten Markierung im Editorfenster
markiert. Korrekt wäre dies:
Aufgaben
1. Erstelle eine Variable i mit dem Wert 1.
2. Zeige den Typ in der Python-Shell an.
3. Schreibe ein Programm, dass der Variablen i nacheinander Werte vom Typ
integer, float, string, tuple, list und dict zuweist, die Variable und
ihren Wert anzeigt und den Variablentyp anzeigt.
Tipp:
Informatik Klasse 9
130
Zeige Ergebnisse über print() an. In der Klammer können Werte, Variablen oder weitere
Befehle stehen. Das Ergebnis könnte so aussehen:
Konsolenausgabe
i= 1
<class 'int'>
i= 2.8
<class 'float'>
i= Text!
<class 'str'>
i= (1, 'g', 'Pute', 8.9)
<class 'tuple'>
i= [1, 'g', 'Pute', 8.9]
<class 'list'>
i= [1, 'g', 'Pute', 8.9]
<class 'list'>
i= {'2': '40', 'Haus': 'Tür', '2.9':
'Speck'}
<class 'dict'>
Informatik Klasse 9
131
III.2.2.3
Typenumwandlungen
Auch wenn Python den Variablentyp selbstständig erkennt, kann es nötig sein, Typenumwandlungen
vorzunehmen. Diese sind nur möglich, wenn der Variableninhalt dies erlaubt. Die umzuwandelnde
Variable steht in der Klammer hinter dem Befehl Variablentyp(i).
So ergibt der Befehl
>>> i=1.8
>>> int(i)
1
>>>
aber
>>> i="Lol"
>>> int(i)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
int(i)
ValueError: invalid literal for int() with base 10: 'Lol'
>>>
Im ersten Fall wird eine Umwandlung vorgenommen, indem die Nachkommastellen abgeschnitten
werden, im zweiten Fall sind die Werte der Variablen inkompatibel und es erscheint eine
Fehlermeldung.
Wichtige Umwandlungen sind int(i)
Umwandlung in eine Ganzzahl
float(i)
Umwandlung in eine Kommazahl
str(i)
Umwandlung in eine Zeichenkette
list(i)
Umwandlung in eine Liste
tuple(i)
Umwandlung in einen Tupel
dict(i)
Umwandlung in eine Liste von Paaren
(dict – Wörterbuch)
Hierbei steht der umzuwandelnde Wert in der Klammer.
Über + können Variablen miteinander gekoppelt oder es kann mit ihnen gerechnet werden.
Kopplung:
>>>
>>>
>>>
>>>
[1,
i= [1, 'g', 'Pute', 8.9]
j= [1, 'g', 'Pute', 8.9]
k=i+j
print(k)
'g', 'Pute', 8.9, 1, 'g', 'Pute', 8.9]
Rechnung:
>>> i=1
>>> j=2
>>> k=i+j
Informatik Klasse 9
132
>>> print(k)
3
Inkompatible Variablentypen führen zu Programmabbrüchen:
>>> i=1
>>> j='Jetzt eine Fehler!'
>>> k=i+j
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
k=i+j
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>
Die letzte Zeile benennt den Fehler, da sich String- und Integer-Variablen nicht addieren lassen.
Übung – Ein kleines Wörterbuch
Dictionary-Listen eignen sich z.B., um kleine Wörterbücher zu erstellen.
Zunächst benötigen wir eine Wortliste.
Gebäude
Building
Fluss
River
Berg
Mountain
See
Lake
Meer
Sea
Die Dictionary-Liste müsste dann so aussehen:
dtl_eng={'Gebäude':'Building','Fluss':'River','Berg':'Mountain'
,'See':'Lake','Meer':'Sea'}
Nun kann ein Element ausgewählt werden, um die Übersetzung zu sehen:
print(dtl_eng['Gebäude'])
Soll die Übersetzung in beide Richtungen funktionieren, so muss ein Dictionary mit umgekehrter
Zuordnung erstellt werden.
Aufgabe:
Erstelle ein kleines Wörterbuch-Programm in einer selbst gewählten Sprache mit 10
Begriffen für Übersetzungen in eine Richtung.
Informatik Klasse 9
133
III.2.3
Benutzereingaben
Ein Wörterbuch, das nur die Übersetzungen zeigt, die der Programmierer sich ausgedacht hat, ist
einigermaßen unsinnig. Deshalb kommt nun der User ins Spiel. Er soll den einzugebenden Begriff
schreiben und dann die Übersetzung erhalten.
Für Eingabeaufforderungen wird input() genutzt. In der Klammer kann ein Text stehen, der den
Nutzer zur Eingabe auffordert.
Wort=input(‚Bitte geben Sie das Wort ein‘)
Spätestens jetzt wird es wichtig, die korrekte Schreibung zu beachten. Python unterscheidet z.B. auch
zwischen Groß- und Kleinschreibung:
Hier hat der Nutzer dies nicht beachtet und bekommt im ersten Versuch eine Fehlermeldung, die
natürlich vorab programmiert werden muss.
Aufgabe:
Ergänze das Programm um eine entsprechende Benutzereingabe!
Ergebnis
>>>
Bitte geben Sie das Wort ein: Meer
Sea
>>>
Informatik Klasse 9
134
III.3
Bedingungen
Natürlich kann der Benutzer hier auch Unsinn eingeben oder einfach Wörter, die das Programm nicht
kennt. Das Ergebnis sieht dann so aus:
Bitte geben Sie das Wort ein:Test
Traceback (most recent call last):
File
"C:/Users/Torsten/Documents/python/Schuelerskripte/programme/wo
erterbuch.py", line 6, in <module>
print(dtl_eng[wort])
KeyError: 'Test'
Hier wird das Schlüsselwort im Dictionary nicht gefunden und eine Fehlermeldung ausgegeben.
Um dies zu vermeiden, muss geprüft werden, ob das Wort überhaupt im Wörterbuch enthalten ist.
Dazu wird if-else verwendet. Das Schlüsselwort in wird genutzt, um das Vorhandensein eines
Schlüssels in einem Dictionary zu prüfen.
If Bedingung:
Befehl
Else:
Befehl
Mehrere Alternativen können mit elif (aus else + if) gebildet werden. Den Abschluss muss
immer else bilden.
If Bedingung:
Befehl
Elif Bedingung:
Befehl
Else:
Befehl
Beispiel:
if wort in dtl_eng:
print(dtl_eng[wort])
else:
print('Bitte geben Sie nur bekannte Wörter ein!')
Informatik Klasse 9
135
Achtung:
In diesem Beispiel wird eine Besonderheit von Python deutlich, die das korrekte
Schreiben von Programmtexten erzwingt.
Untergeordnete Befehle müssen eingerückt werden!
Beachtet man dies nicht, erscheint die folgende Fehlermeldung:
Das System hat eine Einrückung erwartet, aber nicht bekommen.
Aufgabe
1. Ergänze dein Programm um ein Dictionary zur Rückübersetzung, also nicht nur z.B.
Deutsch-Englisch, sondern auch Englisch-Deutsch!
2. Ergänze die Prüfung der Benutzereingaben, so dass erkannt wird, welches
Wörterbuch das richtige ist.
Informatik Klasse 9
136
Wiederholungen und
Schleifen
III.4
Im Folgenden soll ein kleines Tippspiel entstehen. Der Spieler soll wie beim Lotto seine Zahlen tippen
und am Ende mitgeteilt bekommen, ob er richtig geraten hat.
III.4.1
Spielstart
Zunächst soll das Spiel persönlicher gestaltet werden und der Spieler benötigt natürlich seine
Ratezahlen.
Aufgabe:
Fordere den Spieler auf, seinen Namen zu nennen und begrüße ihn dann mit diesem
Namen.
Nun müssen die Spielertipps abgerufen werden. Eine einfache Variante besteht darin, mittels des
input-Befehls jede einzelne Zahl zu erfassen, also
Zahl1=input(“Bitte geben Sie ihre Ratezahl 1 ein.“)
Das funktioniert, ist aber nicht besonders effektiv und benötigt viel Programmtext. Eleganter ist es,
mit Dictionaries und Schleifen zu arbeiten.
Für die Spielertipps wird eine Menge (set) verwendet. Mengen sind ungeordnete Gruppen ohne
Duplikate. Sets sind veränderlich, frozensets dagegen, wie der Name schon sagt, nicht.
Im Gegensatz zu Dictionaries oder Listen können Elemente in Mengen (set) nur einmal vorkommen.
Doppelte Elemente werden automatisch eliminiert. In der Konsole bedeutet das
>>>
a=set([1,2,2,3,4,5,8])
>>> print(a)
{1, 2, 3, 4, 5, 8}
>>>
Die doppelte 2 ist verschwunden.
(1)
spielerzahlen= set()
(2)
for i in range(6):
(3)
ratezahl=input('Bitte geben Sie die
Ratezahl ein!')
(4)
print("Sie haben die
Zahl",ratezahl,"gewählt")
(5)
Zunächst wird dazu eine neue, leere
Menge (set) mit der Bezeichnung
spielerzahlen erzeugt. (1)
Informatik Klasse 9
spielerzahlen.add(ratezahl)
(6)
print(spielerzahlen)
137
Dann verwenden wir eine sog. Zählschleife.
Mit dem Befehl for i in range(6): wird festgelegt, dass die nachfolgenden Befehle sechsmal
ausgeführt werden. Das Programm zählt von Null beginnend bis vor die Zahl, die in der Klammer
steht, also bis Fünf. (2)
In der Zählschleife wird der Variablen ratezahl der Wert der Spielereingabe zugewiesen. (3)
Die gewählte Zahl wird dem Spieler angezeigt (4) und dann wird die Eingabe in die Menge
geschrieben. (5)
Der print-Befehl (6) am Ende wird später verschwinden. Er dient nur als Kontrolle für den
Programmierer.
III.4.2
Fehler abfangen
Der Spieler kann hier bereits zwei Fehler machen:
1. Er kann Unsinn eingeben, z. B. einen Buchstaben.
2. Er kann eine Zahl eingeben, die außerhalb des erlaubten Bereichs liegt.
Beides muss der Programmierer unterbinden.
III.4.2.1
Unsinnige Eingaben abfangen
Zunächst ist es sinnvoll, zu prüfen, welchen Datentyp man erhält, wenn eine Eingabe vom Spieler
gefordert wird. Dazu dient der Type-Befehl.
type(Variablenname)
gibt den Variablentyp zurück. Um das Ergebnis zu sehen, muss natürlich print genutzt werden:
print(type(Variablenname))
Aufgabe:
Ergänze das Programm, so dass der Typ der Variablen ratezahl angezeigt wird.
Das Ergebnis dürfte der Variablentyp String <class 'str'> sein. Ein einfacher Test, um dafür zu
sorgen, dass wir eine ganze Zahl für das Lottospiel erhalten, ist eine Typenumwandlung. Über den
Befehl
ratezahl_int=int(ratezahl)
wird eine neue Variable erzeugt, deren Inhalt ein Integer-Wert ist, also eine ganze Zahl. War die
Eingabe fehlerhaft, gibt es nun eine schöne Fehlermeldung.
III.4.2.2
Fehler abfangen - Ausnahmebehandlung
Informatik Klasse 9
138
Der Spieler kann nun zwar keinen Unsinn mehr eingeben, aber bei einem Fehler endet das Programm
einfach. Sinnvoll ist das noch nicht, denn der Spieler soll ja spielen. Deshalb müssen Fehler
abgefangen werden. Erreicht wird dies über try-except-finally.
Die finally-Anweisung wird nur genutzt, wenn nach dem Fehler in jedem Fall noch etwas
ausgeführt werden soll.
try:
Nach der try-Anweisung folgt, die Bezeichnung sagt es
bereits, der Programmtext, der versucht werden soll.
Gelingt der Versuch nicht, wird der nach except
folgende Programmtext ausgegeben.
ratezahl_int=int(ratezahl)
print(type(ratezahl_int))
spielerzahlen.add(ratezahl_int)
except:
Das Programm läuft nun durch, aber am Ende steht die
folgende Ausgabe der Spielerzahlen:
print("Bitte geben Sie nur korrekte
Zahlen ein")
{'2', '1', '4', '3', 'w', '5'}
Zwei Zahlen, die Nummer 1 und 2 wurden fehlerhaft eingegeben. Nun kann das Spiel nicht laufen,
denn der Spieler hat keine sechs Zahlen. Also muss er die Eingabe wiederholen. Dazu müsste das
Programm erneut aufgerufen werden, aber es gibt auch eine automatische Möglichkeit.
Informatik Klasse 9
139
III.4.2.3
Falsche Zahlen abfangen
Falls der Spieler einfach irgendeine Zahl eingibt, muss auch dies abgefangen werden. In die tryexcept-Anweisung sollte deshalb noch eine Bedingung eingeführt werden, die die Größe des
eingegebenen Werts prüft.
Bedingungen, die die Bedingungsprüfung durchführen, bevor ein Befehl abgearbeitet wird, werden
über if-else bzw. bei mehreren Alternativen über if-elif-else generiert.
if Bedingung:
Befehl
else:
Befehl
Oder
if Bedingung:
Befehl
elif:
Befehl
else:
Befehl
III.4.2.4
Eingaben wiederholen lassen
Einen Programmneustart bekommen wir nicht hin, aber wenn man Programmteile zu sog. Funktionen
zusammenfasst, dann lassen sie sich immer wieder aufrufen.
Die Erstellung einer Funktion ist einfach:
Def Funktionsname()
Befehl in der Funktion
Befehl in der Funktion
Befehl in der Funktion
…
Achtung:
Elemente in Funktionen, also z.B. Variablen, Mengen oder Dictionaries, können außerhalb von
Funktionen nicht angesprochen werden. Will man dies tun, dann müssen diese Elemente auch
außerhalb der Funktion deklariert werden.
Die Erstellung der Menge wird deshalb aus der Funktion ausgelagert.
Informatik Klasse 9
140
Hier wird nun eine Funktion
spielereingabe definiert, die
die Spielereingaben inklusive der
Fehlerbehandlung enthält.
spielerzahlen=set()
def spielereingabe():
Die Raute # leitet einen
Kommentar ein.
Die Zählschleife ist im Prinzip
bereits bekannt.
Der print-Befehl dient nur der
Kontrolle.
for i in range(6): #gezählt wird mit Null beginnend
ratezahl=input('Bitte geben Sie die Ratezahl
zwischen 1 und 36 ein!')
print("Sie haben die Zahl", ratezahl,
"gewählt")
print(type(ratezahl))
Die Typkonvertierung produziert
bei falscher Eingabe den Fehler.
try:
ratezahl_int=int(ratezahl)
Die Bedingung prüft, ob die
eingegeben Zahl im erlaubten
Bereich liegt. Um zwei Prüfungen
durchzuführen, wird and genutzt.
if ratezahl_int<37 and ratezahl_int>0:
print(type(ratezahl_int))
Das break bricht die Zählschleife
ab.
spielerzahlen.add(ratezahl)
else:
break
Jetzt wird die Funktion aufgerufen.
Der print-Befehl dient der
Kontrolle und zeigt die Länge der
Menge.
Hier wird für die Wiederholung bei
fehlerhafter Eingabe gesorgt.
Durch die Bedingung while not
wird geprüft, ob die Länge der
Menge tatsächlich sechs Zeichen
umfasst, also sechs
unterschiedliche Zahlen
eingegeben wurden.
except:
print("Bitte geben Sie nur korrekte Zahlen ein")
print(spielerzahlen)
spielereingabe()
print(len(spielerzahlen))
while not len(spielerzahlen) ==6:
Solange dies nicht der Fall ist, wird der Inhalt der Menge gelöscht und die Funktion zur Eingabe der
Zahlen neu aufgerufen.
Besonders ist, dass über den Operator not zuerst das Fehlen eines Elements getestet wird.
Informatik Klasse 9
141
Hinweis:
Logische Operatoren dienen dazu, Bedingungen miteinander zu verknüpfen.
Drei Operatoren sind zu unterscheiden:
Logischer
Operator
and
Erklärung
Beispiel
or
alle miteinander verknüpften Bedingungen
müssen wahr sein
eine der Bedingungen muss wahr sein
not
Keine der Bedingungen darf wahr sein
if 3>2 and 5<7
print(„stimmt“)
if 3>6 or 5<7
print(„stimmt“)
if not 3>6 or 11<7 and 3>6 and 9<7:
print("stimmt")
Neben logischen Operatoren sind Vergleichs- und Zuweisungsoperatoren von elementarer
Bedeutung.
Der Zuweisungsoperator = wird genutzt, um einem Element einen Wert zuzuweisen. Er hat nichts
mit dem mathematischen Zeichen zu tun. In dem Befehl p=p+1 wird z.B. der
Variablen p ein um 1 erhöhter Wert zugewiesen. Mathematisch wäre das
Unsinn.
Vergleichsoperator
>
Erklärung
Größer als
<
Kleiner als
>=
größer gleich
<=
kleiner gleich
==
gleich
!=
ungleich
Informatik Klasse 9
Beispiel
if 3>2:
print("stimmt4")
if 2<3:
print("stimmt5")
if 3>=3:
print("stimmt6")
if 2<=5:
print("stimmt7")
if 3==3:
print("stimmt8")
if 3!=4:
print("stimmt9")
142
III.4.3
Zufall
Der Computer soll nun seine Zahlen spielen.
Python bringt bereits eine Funktion zur Erzeugung von Zufallszahlen mit. Dem modularen Konzept
folgend, muss das Modul, dass Zufallszahlen generiert, zunächst aufgerufen werden. Alle Funktionen
in dem Modul sind nun nutzbar.
Derartige Aufrufe mit dem import-befehl erfolgen immer zu Beginn des Programms.
import random
Die Zufallszahl selbst wird über random.randint(Bereichsbeginn, Bereichsende)
erstellt, wobei Bereichsbeginn und –ende dazugehören. In diesem Beispiel werden also zehn
Zufallszahlen zwischen 100 und 300 ausgegeben:
import random
for i in range(10):
z=random.randint(100,300)
print(z)
Aufgabe:
Erstelle den Programmteil, der eine Menge mit sechs unterschiedlichen Zufallszahlen
zwischen 1 und 36 erzeugt. Speichere in einer eigenen Datei.
Orientiere dich an der Sequenz für die Eingabe der Spielerzahlen.
Tipp:
Erstelle die Sequenz für den Computer zunächst in einer eigenen Datei und ergänze
erst dann dein Hauptprogramm. Es vereinfacht das Testen.
Informatik Klasse 9
143
Gewonnen? - Mengen vergleichen
III.4.4
Mengen lassen sich sehr einfach vergleichen, indem man Schnittmengen bildet.
Menge 1
2
8
7
Menge 2
4
15
5
36
25
5
9
36
25
Schnittmenge
2
8
7
1
5
25
19
15
9
4
36
Sollte ein Spieler alle Zahlen richtig haben, dann hätte in unserem Spiel die Schnittmenge sechs
Elemente, in diesem Beispiel sind es immerhin drei Elemente.
Der Vergleich ist einfach:
Schnittmenge= Menge1 & Menge2
Das kaufmännische & generiert die Schnittmenge.
Informatik Klasse 9
144
Nun ist nur noch zu prüfen, wie hoch der Gewinn ist, indem die Länge der Schnittmenge bestimmt
und dem Spieler mitgeteilt wird.
Aufgaben:
1. Ergänze das Programm entsprechend! Entferne auch die zur Kontrolle eingebauten
Anzeigen aus der Konsole, indem du sie mit dem Rautenzeichen # auskommentierst.
Informatik Klasse 9
145
Turtle – Zeichnen mit
Python
III.5
Das Modul Turtle stellt bereits eine Reihe von Funktionen bereit, die über entsprechende Aufrufe
gestartet werden können.
Befehlsreferenz – Auswahl von
Funktionen aus dem Modul »turtle«
III.5.1
forward(schrittzahl)
fd(schrittzahl)
back(schrittzahl)
backward(schrittzahl)
bk(schrittzahl)
left(winkel)
lt(winkel)
right(winkel)
rt(winkel)
circle(radius,extent)
Turtle geht um die Schrittzahl vorwärts.
Turtle geht um die Schrittzahl rückwärts.
Turtle dreht sich um den Winkel in Grad nach links.
Turtle dreht sich um den Winkel in Grad nach rechts.
Turtle zeichnet einen Kreis oder, wenn extent angegeben ist, einen
Kreisbogen, mit dem Winkel extent. Möglich sind Radien größer
oder kleiner Null. Der Mittelpunkt liegt dann entsprechend links
bzw. rechts von Turtle.
penup( )
up( )
pu( )
pendown( )
Turtle hebt den Zeichenstift an.
down( )
pd( )
pensize( dicke)
Turtle senkt den Zeichenstift.
pencolor(farbe)
fillcolor( farbe)
begin_fill()
colormode(255)
Stellt die Strichdicke ein.
Stellt die Farbe für den Zeichenstift der Turtle ein.
farbe ist ein String wie ‚red‘, ‚green‘ etc.
Alternativ sind auch rgb-Farben möglich
Stellt die Füllfarbe der Turtle ein.
Schaltet Füll-Modus der Turtle ein. Wird aufgerufen, wenn das
Zeichnen einer Figur begonnen wird, die gefüllt werden soll.
Gibt zunächst Stiftfarbe und dann Füllfarbe an.
color((40, 80, 120), (160, Möglich sind Strings, also ‚red‘ etc,
Informatik Klasse 9
146
200, 240))
end_fill()
speed(Tempo)
undo( )
reset( )
clear( )
home( )
hideturtle( )
showturtle( )
shape( form)
color(colorstring1, colorstring2), oder
color((r1,g1,b1), (r2,g2,b2))
Schaltet Füll-Modus der Turtle aus. Wird aufgerufen, wenn die
Figur fertig gezeichnet ist, um sie zu füllen.
Stellt ein Tempo zwischen 1 und 10 ein.
Macht die letzte Anweisung rückgängig
Löscht alle Zeichnungen im Grafik-Fenster und setzt den Zustand
der Turtle auf die Standardwerte zurück.
Löscht alle Zeichnungen im Grafik-Fenster. Zustand der Turtle bleibt
erhalten.
Führt die Turtle in ihre Ausgangslage und Ausgangsorientierung
(Nord) zurück.
Macht die Turtle unsichtbar, ohne ihre sonstigen Eigenschaften zu
verändern.
Macht die Turtle sichtbar.
Stellt die Form der Turtle ein. Als form kann unter anderem "turtle"
oder "arrow" gewählt werden.
Nach der Eingabe des Befehls erscheint ein Hinweis, wie weiter zu verfahren ist.
Ein Kinderspiel – Das Haus vom
Nikolaus
III.5.2
Turtle soll das bekannte Nikolaus-Haus zeichnen.
Das Programm beginnt immer mit dem Befehl
from turtle import *
mit dem alle turtle-Funktionen importiert werden.
Tipp:
Informatik Klasse 9
147
Zur korrekten Berechnung der Diagonalen benötigst
Du den Satz des Pythagoras. Er lautet:
„In einem rechtwinkligen Dreieck mit den Katheten
a und b sowie der Hypotenuse c ist die Summe der
Kathetenquadrate a² und b² gleich dem
8
− )∗9 .
Hypotenusenquadrat c².“, also ( 5
2
7
Die Diagonale berechnet sich also
(28−30 )∗(2−12)mod25
Zum Berechnen der Diagonalen muss außerdem das
math-Modul importiert werden.
from turtle import *
from math import *
up()
back(500)
down()
fd(200)
left(90)
fd(200)
Die Quadratwurzel wird mit dem Befehl sqrt()
gezogen.
Das Quadrat einer Zahl wird mit pow(Basis,
Exponent) gebildet.
Die Formel
c= √ 2002 +2002 wird so in Python zu
c=sqrt(pow(200,2)+pow(200,2))
Für das Dach wird die halbe Diagonale genutzt, also c/2.
left(135)
c=sqrt(pow(200,2)+pow(200,2))
#Diagonale 1
fd(c)
right(135) #Senkrechte links
fd(200)
right(45)
fd(c/2)
right(90)
fd(c/2)
right(135)
fd(200)
left(135)
fd(c)
Aufgabe:
1. Ergänze das Programm um die Möglichkeit für den Nutzer, Stiftdicke, Stiftfarbe und
Größe des Hauses selbst zu bestimmen.
Informatik Klasse 9
148
2. Fange fehlerhafte Eingaben der Nutzer ab.
Auch fast ein
Kinderspiel – Triforce
III.5.3
Das Triforce besteht aus drei gleichseitigen Dreiecken. In einem gleichseitigen Dreieck sind alle drei
Seiten gleich groß und die Innenwinkel betragen alle 60°.
Aufgabe:
Entwickle ein Programm, das die Dreiecke zeichnet und füllt.
Ermögliche dem User, die Maße für Seitenlänge und Stiftdicke sowie die Werte für die
Stift- und Füllfarben selbst einzugeben.
III.5.4
Männlich – Weiblich
Aufgabe:
Zeichne mittels der turtle-Grafik die Symbole
für männlich und weiblich, wie sie an
verschiedenen Stellen üblicherweise
verwendet werden. Beachte die
unterschiedlichen Strichstärken.
Informatik Klasse 9
149
III.5.5
Meditation
Aufgabe:
Zeichne das
nebenstehende Symbol.
Arbeite möglichst
effektiv. Zerlege das
Symbol dazu in
Einzelteile, die über
eigene Funktionen
erstellt werden.
Informatik Klasse 9
150
III.6
Befehlsreferenz Python
Print()
Bildschirmausgabe
//
Ganzzahldivision
%
Modulo
a=
Variablendeklaration
If Bedingung:
Befehl
Elif Bedingung:
Befehl
Else:
Befehl
type()
Bedingung
B=int()
Nn_1={a:b}
c=input()
circle(radius,extent)
Variablentyp anzeigen lassen
Typkonvertierung
Dictionary-Liste
Eingabeaufforderung
if wort in dtl_eng: Vorhandensein prüfen
for i in range(6):
Zählschleife
d=set([1,2,3])
Menge
try:
forward(schrittzahl)
fd(schrittzahl)
back(schrittzahl)
backward(schrittzahl)
bk(schrittzahl)
left(winkel)
lt(winkel)
right(winkel)
rt(winkel)
penup( )
up( )
pu( )
pendown( )
down( )
pd( )
pensize( dicke)
pencolor(farbe)
fillcolor( farbe)
begin_fill()
colormode(255)
color((40, 80, 120), (160,
200, 240))
vorwärts um die Schrittzahl.
rückwärts um die Schrittzahl.
Turtle dreht sich um den Winkel in Grad
nach links.
Turtle dreht sich um den Winkel in Grad
nach rechts.
Kreis oder, wenn extent angegeben ist,
einen Kreisbogen, mit dem Winkel
extent. Möglich sind Radien größer oder
kleiner Null.
Turtle hebt den Zeichenstift an.
Turtle senkt den Zeichenstift.
Stellt die Strichdicke ein.
Zeichenstiftfarbe‚ z.B. red‘, ‚green‘ oder
rgb-Farben
Füllfarbe der Turtle
Füll-Modus einschalten
Stiftfarbe und dann Füllfarbe als String
oder RGB
Ausnahmebehandlung
Befehl
except:
Befehl
and
not
or
break
Kopplungsoperator und
Nicht
oder
Schleife abbrechen
while not
Solange nicht
==
!=
=
Gleich
Ungleich
Zuweisungsoperator
hideturtle( )
showturtle( )
>
<
sqrt()
pow(Basis,Exponen
t)
def name():
Größer
Kleiner
Quadratwurzel
Potenzierung
Funktion
Informatik Klasse 9
end_fill()
Füll-Modus aus
speed(Tempo)
undo( )
reset( )
time.sleep(Zeit)
import time
from math import *
from turtle import*
Tempo zwischen 1 und 10
letzte Anweisung rückgängig
Löscht alle Zeichnungen
Löscht alle Zeichnungen, erhält Zustand
der Turtle
Turtle in ihre Ausgangslage und
Ausgangsorientierung (Nord)
Macht die Turtle unsichtbar,
Macht die Turtle sichtbar.
Form der Turtle ein ("turtle" oder
"arrow")
Wartezeit angeben
Zeitfunktion importieren
Mathefunktionen importieren
Turtle importieren
import random
Zufallsfunktion importieren
clear( )
home( )
shape( form)
151
III.7
Literatur
J. Ernesti / P. Kaiser: Python 3. Das umfassende Handbuch. Galileo Computing, Bonn 2012, 3. Aufl.
T. Theis: Einstieg in Python. Galileo Computing, Bonn 2014, 4. Aufl.
M. Weigend: Python 3. Mitp, Heidelberg 2013, 5. Aufl.
M. Weigend: Python GE-PACKT. Mitp, Heidelberg 2013, 5. Aufl.
B. Klein: Einführung in Python. Hanser Verlag, München 2013
J. Briggs: Python kinderleicht. dpunkt.verlag, Heidelberg 2013
G. Lingl: Python für Kids. Bhv, Heidelberg, 2010, 4. Auflage
Informatik Klasse 9
152
Herunterladen