Einstieg - Lotto
Verwaltung von Lottozahlen
Beim Lotto werden - wie du sicher weißt - 6 Zahlen aus dem Bereich 1..49 gezogen (wir berücksichtigen hier erst einmal keine Zusatzzahl und auch keine Superzahl). Eine Lotto-Ziehung könnte z. B. aus folgenden Zahlen bestehen: 1, 21, 25, 40, 44, 45.
Lottospieler versuchen, die Zahlen einer Lotto-Ziehung vorherzusagen, indem sie einen Tipp mit ebenfalls 6 Zahlen aus dem Bereich 1..49 abgeben. Ein Tipp könnte z. B. aus folgenden Zahlen bestehen: 1, 12, 21, 31, 37, 46. Bei diesem Tipp und der oben gezeigten Ziehung hätte der Spieler 2 Richtige erzielt und damit keinen Gewinn (den gibt es erst ab 3 Richtige).
Lotto-Ziehungen und Lotto-Tipps sollen mit Hilfe von Python verwaltet und verarbeitet werden. Im Folgenden findest du drei Vorschläge, wie man das machen könnte. Ziel ist es, die verschiedenen Versionen miteinander zu vergleichen.
Aufgabe 1
In Version 1 werden die Lotto- und Tippzahlen einzeln mit Hilfe von Variablen verwaltet.
# Version 1 tipp1 = 1 tipp2 = 12 tipp3 = 21 tipp4 = 31 tipp5 = 37 tipp6 = 46 ziehung1 = 1 ziehung2 = 21 ziehung3 = 25 ziehung4 = 40 ziehung5 = 44 ziehung6 = 45 # Anzahl der Richtigen richtige = 0 if tipp1 == ziehung1: richtige = richtige + 1 if tipp2 == ziehung1: richtige = richtige + 1 # ... print(richtige)
Welche Nachteile hat das?
Aufgabe 2
In Version 2 werden die Lotto- und Tippzahlen in Listen verwaltet. Probier die folgenden Python-Dialoge aus und kläre die Fragen.
(a) Wie greift man auf einzelne Listenelemente zu? Wie sind diese durchnummeriert?
>>> tipp = [1, 12, 21, 31, 37, 46]
>>> tipp[1]
12
>>> tipp[5]
46
>>> tipp[0] = 3
>>> tipp
[3, 12, 21, 31, 37, 46]
(b) Wie durchläuft man eine Liste?
>>> tipp = [1, 12, 21, 31, 37, 46]
>>> i = 0
>>> while i < len(tipp):
print(tipp[i])
i = i + 1
1
12
21
31
37
46
>>> ziehung = [1, 21, 25, 40, 44, 45]
>>> for z in ziehung:
print(z)
1
21
25
40
44
45
(c) Was leistet das folgende Programm?
# Version 2
tipp = [1, 12, 21, 31, 37, 46]
ziehung = [1, 21, 25, 40, 44, 45]
# Anzahl der Richtigen
richtige = 0
for t in tipp:
for z in ziehung:
if t == z:
richtige = richtige + 1
print(richtige)
Aufgabe 3
In Version 3 werden die Lotto- und Tippzahlen ebenfalls in Listen verwaltet, aber auf eine
etwas andere Weise. Beachte, dass das Zeichen \
benutzt wird, um Zeilen miteinander zu verbinden.
# Version 3
tipp = [ \
True , False, False, False, False, False, False, \
False, False, False, False, True , False, False, \
False, False, False, False, False, False, True , \
False, False, False, False, False, False, False, \
False, False, True , False, False, False, False, \
False, True , False, False, False, False, False, \
False, False, False, True , False, False, False, \
]
ziehung = [ \
True , False, False, False, False, False, False, \
False, False, False, False, False, False, False, \
False, False, False, False, False, False, True , \
False, False, False, True , False, False, False, \
False, False, False, False, False, False, False, \
False, False, False, False, True , False, False, \
False, True , True , False, False, False, False, \
]
# Anzahl der Richtigen
richtige = 0
for i in range(49):
# ...
print(richtige)
Ergänze das Programm so, dass man die Anzahl der Richtigen erhält.
Aufgabe 4
Die Ziehung der Lottozahlen soll jetzt mit einem Zufallsgenerator simuliert werden. Folgende Vorschläge werden gemacht.
Version 2:
# Version 2
from random import *
ziehung = []
for i in range(6):
zahl = randint(1, 49)
ziehung = ziehung + [zahl]
print(ziehung)
Version 3:
# Version 3
from random import *
ziehung = []
for i in range(49):
ziehung = ziehung + [False]
for i in range(6):
zahl = randint(1, 49)
ziehung[zahl-1] = True
for i in range(49):
if ziehung[i] == True:
print(i+1)
Beim Testen zeigt sich, dass noch etwas nicht in Ordnung ist. Was kann hier noch schieflaufen?
Aufgabe 5
Versuch, das in Aufgabe 4 aufgetretene Problem zu beheben. Am leichteten geht das mit Version 3.
Aufgabe 6
Gib einen festen Tipp vor. Simuliere mit einem Programm 10000 mal eine Lotto-Ziehung. Ausgegeben werden soll, wie oft man bei diesen 10000 Ziehungen 0, 1, ..., 6 Richtige hatte.
Übrigens: Wie lange dauert es im wirklichen Leben, bis 10000 Ziehungen durchgeführt wurden, wenn man von einer Ziehung am Mittwoch und einer am Samstag ausgeht und wenn man einen Tipp pro Spiel abgibt?