Als kleinen Anreiz habe ich mal eine Java-Programmieraufgabe aus meinem Studium genommen in der ich das Spiel Master Mind programmieren sollte und habe es in Python umgeschrieben.
Ich wäre euch dankbar wenn ihr mal rüberschauen und mir eure Kritik mitteilen könntet.
Was würdet ihr vielleicht anders machen, findet ihr Fehler die ausgebessert werden müssten oder gibt es Konventionen die ich nicht eingehalten habe?
An sonsten habt ihr ja vielleicht auch einfach etwas Spaß mit dem Spiel
Alles weitere sollte im Code erklärt sein.
LG
Code: Alles auswählen
import random
def frage_parameter():
'''Fragt nach Wertebereich und Länge.
Der Wertebereich und die Länge werden durch input() erfragt und anschließend als Liste zurück gegeben.
'''
print("Gib eine Zahl als Wertebereich ein. Der Code wird dann aus Zahlen zwischen 1 und deinem Wert generiert.")
while True:
wb = int(input("> "))
if wb > 0:
break
else:
print("Ungültiger Wertebereich!")
print("Gib an wie viele Stellen dein Code haben soll.")
while True:
länge = int(input("> "))
if länge > 0:
break
else:
print("Die länge muss eine Positive Zahl sein!")
return [wb, länge]
def kreiere_code(wb, länge):
'''Gibt den Code als Liste zurück.
Der Code besteht aus 'länge' Ziffern die jeweils zwischen 1 und 'wb' liegen.
'''
code = []
for wert in range(länge):
code.append(random.randint(1, wb))
return code
def frage_lösung(code, wb):
'''Fragt nach einer Lösung für den Code.
Durch input() wird nach einer Lösung gefragt und dann als Liste zurück gegeben.
Es wird auch die korrekte Länge und der Wertebereich überprüft.
Ist die Länge nicht korrekt wird die Funktion erneut aufgerufen.
'''
eingabe = input("> ")
lösung = []
for i in eingabe.split():
if 1 <= int(i) <= wb:
lösung.append(int(i))
else:
print("Die Zahl", i, "liegt nicht im Wertebereich!")
if len(lösung) != len(code):
print("Deine Lösung hat nicht die richtige Länge!")
return frage_lösung(code, wb)
return lösung
def vergleiche_lösung(code, lösung):
'''Bewertet die Lösung des Codes.
Der Code und die Lösung werden verglichen und die Treffer (exakte und korrekte) als Liste zurück gegeben.
'''
treffer = exakteTreffer = 0
# exakte Treffer sind alle Zahlen die genau an der richtigen stelle in der Lösung sind
# Normale treffer sind alle Zahlen die keine exakten Treffer sind aber in der Lösung auftauchen.
# Jeder Treffer wird nur einmal gezählt und nur mit einer Zahl im Code in Verbindung gebracht. (Keine Doppelzuordnung)
# Die Listen dienen zur Markierung der gefundenen Treffer.
zählerCode = []
zählerLösung = []
# Alle exakten Treffer werden gesucht und in den Listen zählerCode und zählerLösung vermerkt.
for i in range(len(code)):
if code[i] == lösung[i]:
zählerCode.append(True)
zählerLösung.append(True)
exakteTreffer = exakteTreffer + 1
else:
zählerCode.append(False)
zählerLösung.append(False)
# Alle weiteren Treffer werden gesucht und ebenfalls vermerkt.
for i in range(len(code)):
if not zählerCode[i]:
for j in range(len(code)):
if not zählerLösung[j]:
if code[i] == lösung[j]:
zählerLösung[j] = True
treffer = treffer + 1
break
return [exakteTreffer, treffer]
print("In diesem Spiel sollst du versuchen einen vom Computer generierten Code zu erraten. \n"
"Du kannst wählen wie lang, und aus wie vielen verschiedenen Zahlen der Code bestehen soll. \n"
"So kannst du einstellen, wie schwer das Rätsel sein soll.")
[wb, länge] = frage_parameter()
code = kreiere_code(wb, länge)
print("Gib einen Code aus", länge, "Zahlen, getrennt durch Leerzeichen ein. \n"
"Danach wird dir gesagt, wie viele deiner Zahlen genau an der richtigen Stelle sind (Exakte Treffer) \n"
"und wie viele Zahlen zwar im Code vorkommen, aber an der falschen stelle sind. Danach kannst du weiter raten \n"
"bis du den Code geknackt hast.")
versuche = 0
while True:
lösung = frage_lösung(code, wb)
versuche = versuche + 1
check = vergleiche_lösung(code, lösung)
if check[0] == len(code):
print("Herzlichen Glückwunsch. Du hast den Code mit", versuche, "Versuchen gelöst.")
break
else:
print("Versuch", versuche)
print("Exakte Treffer:", check[0], "\nAndere Treffer:", check[1])