Mastermind in Python (Programmieren 1. Sem.)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Didres
User
Beiträge: 5
Registriert: Donnerstag 29. Oktober 2015, 12:26

Hallihallo!

Das hier ist mein erster Post in diesem Forum. Wenn ich gegen irgendwelche Richtlinien verstoße, bitte ich um Verzeihung.

Ich studiere gerade im ersten Semester Informatik. In unserer aktuellen Hausaufgabe sollen wir in Python das Spiel Mastermind programmieren (Falls nicht bekannt auch bei Wikipedia zu finden).

Nun glaube ich, dass ich den Code so weit fertig habe. Kann sein, dass noch Fehler drin sind, aber beim kompilieren hänge ich gerade bei einer bestimmten Fehlermeldung fest.

Und zwar kommt die Meldung, dass in der Funktion def rateCode in der for Schleife ein syntax Error vorhanden ist. Ich verstehe nur nicht so richtig was dort nun das Problem sein soll.

Es wäre klasse, wenn mir jemand helfen könnte!

Mit freundlichen Grüßen,
Christian

Code: Alles auswählen

import random

def erklaerung():
    print("Willkommen beim Spiel Mastermind!")
    print("Der Computer berechnet einen zufälligen vierstelligen Code aus gegebenen Farben, der zu erraten ist!")
    print("Der Benutzer hat dafür maximal 12 Versuche zur Verfügung!")
    print("Die möglichen Farben sind: rot, gelb, blau, orange, schwarz, weiß!")
    print("Sind Farben richtig und an der richtigen Position -> [Farbe]!")
    print("Sind Farben richtig, aber an der falschen Position -> (Farbe)!")
    
def erzeugeCode(Farben):
    spielcode = ["leer","leer","leer","leer"]
    for i in range(len(spielcode)):
        zufallsFarbe = random.choice(Farben)
        spielcode[i] = zufallsFarbe
        i = i + 1
    #print(spielercode)
    return spielcode

def clueFor(tipp,spielcode):
    clue = []
    for i in range(len(tipp)):
        if tipp[i] == spielcode[i]:
            clue.append("[" + spielcode[i] + "[")
        elif tipp[i] in spielcode:
            clue.append("(" + spielcode[i] + "(")
        else:
            clue.append(tipp[i])
    return clue
            

    
def rateCode(Farben):
    erklaerung()
    erzeugeCode()
    tipp = []
    for i in range(12)
        if tipp != spielcode:
            tipp = list(input("Bitte erraten Sie vier Farben (farbe, farbe, farbe, farbe) ohne Klammern: "))
            print("Hinweis: ", clueFor(tipp, spielcode))
        else:
            print("Der Code wurde richtig erraten!")
        i = i + 1
    

Farben = ["rot", "gelb", "blau", "orange", "schwarz", "weiß"]

rateCode(Farben)
Zuletzt geändert von Didres am Donnerstag 29. Oktober 2015, 12:42, insgesamt 1-mal geändert.
stefanbunde
User
Beiträge: 29
Registriert: Dienstag 20. Oktober 2015, 12:59

for i in range(12)

du hast den doppelpunkt am ende vergessen :-)
Didres
User
Beiträge: 5
Registriert: Donnerstag 29. Oktober 2015, 12:26

Fail...

Danke...

Ich weiß nicht was ich sagen soll!
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Didres: was denkst Du bewirt das `i = i + 1` innerhalb Deiner for-Schleifen? Statt eine leere Liste zu erzeugen, erzeugt man in Python normalerweise die Liste gleich mit Inhalt:

Code: Alles auswählen

spielcode = [random.choice(Farben) for _ in range(4)]
Statt über den Index wird direkt über Listen iteriert, bei mehreren mit Hilfe der zip-Funktion:

Code: Alles auswählen

for t, code in zip(tipp, spielcode):
`erzeugeCode` hat einen Rückgabewert, den Du nicht verwendest.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Du solltest mal ein Blick in die Prüfungsordnung werfen. Deine Lösung mit anderen zu teilen oder öffentlich zu machen, ist üblicherweise nicht erlaubt.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

DasIch hat geschrieben:Du solltest mal ein Blick in die Prüfungsordnung werfen. Deine Lösung mit anderen zu teilen oder öffentlich zu machen, ist üblicherweise nicht erlaubt.
Es geht hier um eine Hausaufgabe und nicht um eine Prüfung.
Bei von mir betreuten Vorlesungen (Technische Mechanik, Physik, Mathematik) habe ich immer Musterlösungen veröffentlicht und die Studierenden wurden dazu angehalten in der Gruppe zu arbeiten und gerne auch ihre eigenen Ergebnisse zu veröffentlichen.
a fool with a tool is still a fool, www.magben.de, YouTube
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

MagBen hat geschrieben:Es geht hier um eine Hausaufgabe und nicht um eine Prüfung.
Hausaufgaben müssen nicht Teil der Prüfung sein, können es aber durchaus sein. An der TU Berlin liegt letzteres momentan stark im Trend.

Davon abgesehen hab ich an der TUB noch nie erlebt dass es irgendwelche Musterlösungen gibt. Das man Hausaufgaben in Gruppen macht - auch an der TUB üblich - ändert daran gar nichts. Wer Hausaufgaben veröffentlicht ist genauso schlecht dran wie diejenigen die kopieren.
BlackJack

@DasIch: An der FU waren zumindest zu meiner Zeit Musterlösungen in Tutorien üblich. Unter anderem weil oft auch nicht genug Zeit war alles nachzubesprechen. Keine Ahnung ob sich das im Zuge von Bachelor/Master geändert hat. Mehr Zeit und Tutoren wird es wohl eher nicht geben. :-/ Es gab/gibt(?) auch ein internes Forum wo über Hausaufgaben recht frei diskutiert wurde.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich finde es an diesem Thread viel erstaunlicher, dass man so viel Code schreiben kann und einem dann erst der Syntax-Fehler auffällt, den man aber wiederum nicht selbst auflösen kann... ein Schelm, wer daraus Vermutungen bezüglich der Urherberschaft des Quellcodes ableitet :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Da würde ich mir dann aber eine andere Quelle zum abschreiben suchen, denn das Programm tut soweit ich das sehe an mehreren Stellen nicht das was es sollte.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@BlackJack: Stimmt! Da liegt so einiges im argen... vielleicht hat er es dann doch selber geschrieben - dann sollte der OP aber über sein Vorgehen nachdenken! Denn was nützen einem Funktionen, die man nicht separat testet, sondern einfach alles so runter schreibt :K

Wäre eigentlich eine tolle Aufgabe, die man mittels Unit Testing automatisch bewerten kann. Zumindest, wenn man die Funktionsrümpfe vorgibt... :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Ja, das hat mich auch immer gewundert warum Hausaufgaben nicht zumindest an einigen Stellen automatisch überprüft werden. Wenn das vorgeben der Funktionen/Signaturen schon zu viel vorweg nimmt, weil das die Studenten selber entwerfen/aufteilen sollen, dann könnte man zumindest mal die Schnittstelle vorgeben und so etwas ähnliches wie den Sphere Online Judge verwenden um da mal Tests gegen laufen zu lassen. Könnte man ja sogar für Studenten während der Bearbeitung der Hausaufgaben zur Verfügung stellen, dann haben die sofort eine Rückmeldung ob ihr Code tut was erwartet wird oder nicht.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Was ihr beschreibt gibt es schon und heisst Autolab.
Didres
User
Beiträge: 5
Registriert: Donnerstag 29. Oktober 2015, 12:26

Also um das nochmal zu erläutern:
Ich bin in der vierten Woche meines Studiums. Mir ist ein blöder Stolperfehler passiert, der verständlicherweise Programmier Cracks lächerlich erscheint. Keine Ahnung warum man mich jetzt auseinander nehmen muss und mir sogar vorwirft dies sei ein Plagiat!
Wir bekommen für diese Hausaufgabe weder Punkte noch ist sie nötig, um für die Klausur zugelassen zu werden.
Ich bin dankbar für Kritik bzw Verbesserungsvorschläge.
Wir haben gestern (!) mit Listen angefangen und ich glaube man kann mir nicht verübeln, dass ich noch nicht damit richtig umgehen kann.

Danke an Sirius3 für die Verbesserungsvorschläge und an Hyperion für den Tipp, Funktionen lieber erstmal einzeln zu testen.
Zu den Kommentaren bzgl. Plagiat etc. sage ich mal nichts...
Antworten