Seite 1 von 1

"Break" outside Loop

Verfasst: Montag 3. Oktober 2022, 00:00
von CTexx
Hallo,

ich bin ein ziemlicher Neuling im programmieren und bin grad dabei mir es selber beizubringen.

Nun versuche ich grad ein Schere, Stein, Papier Spiel zu erstellen, bin jedoch auf ein Problem gestoßen.

Ich will hier sichergehen, dass man auch wirklich "Rock", "Paper" oder "Scissors" eingeben muss und möchte ansonsten die Funktion nochmal ausführen beziehungsweise bei richtiger Eingabe die Funktion beenden.
Jedoch läuft die Funktion bei richtiger Eingabe immer weiter, und ich bekomm mit dem "break" am Ende immer eine Fehlermeldung "break outside loop". Kann mir da einer weiterhelfen? Wird nicht allzu schwer sein denke ich. ^^

Code: Alles auswählen

def get_player_choice():
    choice2 = str(input("Enter Rock, Paper or Scissors:"))
    if choice2 != "Rock" or choice2 != "Paper" or choice2 != "Scissors":
        get_player_choice()
    else:
        break

Re: "Break" outside Loop

Verfasst: Montag 3. Oktober 2022, 07:55
von pillmuncher
Du solltest das mit einer while-Schleife lösen, statt mit Rekursion, dann klappt es auch mit dem break:

Code: Alles auswählen

while True:
    choice = input(...)
    if ...:
       break
Und einen String braucht man nicht nochmals mittels str() in einen String umwandeln.

Re: "Break" outside Loop

Verfasst: Montag 3. Oktober 2022, 08:06
von Sirius3
Du hast keine Schleife, also kann man auch nicht break benutzen.
input liefert bereits einen String, der Aufruf von str ist unnötig.
Benutze keine Zahlen an Variablennamen, weil die nichts aussagen.
Ein String ist immer entweder ungleich dem einen Wert oder dem anderen Wert. Wenn Du "Rock" eingibst, dann ist choice != "Rock" zwar False, aber ein choice != "Paper" ist True, also wird der if-Block betreten. Einfacher ist der positive Test, beim Negieren wird hier or zu and.
Man benutzt keine Rekursion als Schleifenersatz. Rekusion ist in manchen Fällen sinnvoll, meistens macht es aber das Verstehen des Codes schwieriger.
Es fehlt ein `return` um die Eingabe auch zurückzugeben.

Code: Alles auswählen

def get_player_choice():
    while True:
        choice = input("Enter Rock, Paper or Scissors:")
        if choice in ["Rock", "Paper", "Scissors"]:
            break
    return choice

Re: "Break" outside Loop

Verfasst: Montag 3. Oktober 2022, 10:51
von kbr
Ergänzend zu Sirius3 kannst Du die while Schleife auch mit einem return verlassen, wenn sich diese in einer Funktion befindet:

Code: Alles auswählen

def get_player_choice():
    while True:
        choice = input("Enter Rock, Paper or Scissors:")
        if choice in ["Rock", "Paper", "Scissors"]:
            return choice
Ob dies besserer Stil ist, sei einmal dahingestellt.

Re: "Break" outside Loop

Verfasst: Montag 3. Oktober 2022, 15:24
von __blackjack__
Was mich als Benutzer nerven würde, ist das man komplette Worte eingeben muss, und dann auch noch darauf achten muss, dass man den ersten Buchstaben gross schreibt. Das würde ich nicht oft oder lange spielen.