Jupyter Notebook mittels Funktion beenden

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
absoute_noob
User
Beiträge: 2
Registriert: Montag 8. Februar 2021, 10:47

Erstmal ein freundliches Hallo in die Runde an Alle hier im Forum! :)

Ich bin neu hier und generell ganz blutiger Anfänger was Programmieren und Python angeht, ich bitte daher um Welpenschutz falls mir irgendwo noch grobe Schnitzer unterlaufen sollten :?
In der Schule üben wir gerade damit ein paar Spiele zu programmieren. Ich bastle derzeit an einem Galgenmännchen-Script herum. Nun möchte ich gerne zu Beginn die Möglichkeit einbauen, dass der Spieler die Herausforderung annehmen kann, sodass das Spiel weiterläuft oder die Herausforderung ablehnen, woraufhin das Ganze beendet wird. Mir ist bewusst dass es dafür einige Möglichkeiten gibt (exit, quit, sys.exit). Allerdings verwendet unser Lehrer meist Jupyter Notebook im Unterricht, weshalb ich ebenfalls dort das geschriebene Script teste und keine der Optionen bewirkt ein Ende in Jupyter Notebook, sondern das Spiel fährt einfach mit der nächsten Abfrage an den Spieler fort. Ich versuche im Folgenden den betroffenen Code_teil einzufügen.

[while True:
herausforderung = True
herausforderung_akzeptiert = input("Hallo Fremder! Schön, dass du dich entschieden hast in einer Runde Galgenmännchen gegen mich anzutreten.\nDoch ich warne dich vor: ich bin der Galgenmännchen-Weltmeister! Bist du dir sicher, dass du dennoch gegen mich antreten möchtest?\n").upper()

if herausforderung_akzeptiert in ["JA"]:
print("Du bist mutig, das gefällt mir! Dann lass uns eine Runde Galgenmännchen spielen!")
break

elif herausforderung_akzeptiert in ["NEIN"]:
print("Die Entscheidung ist zu deinem eigenen Besten! Somit bleiben ich den ungeschlagene Galgenmännchen-Weltmeister!")
break

else:
print("Deine Antwort war leider ungültig. Antworte diesmal bitte mit Ja oder Nein")
continue]

Ich denke in den elif-Teil müsste doch nun nach dem Print eine Funktion eingefügt werden, welche das Ganze beendet, nur finde ich keine die funktioniert.
Gibt es hierfür eine Möglichkeit?

Vielen Dank schonmal,
Beste Grüße, euer Noob
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

`herausforderung` wird nur auf True gesetzt, aber niemals verwendet. Das kann also weg.
Einen in-Operator auf eine Liste mit exakt einem Element anzuwenden, ist umständlich.
Das `continue` im else-Zweig ist überflüssig, weil die while-Schleife eh weiter läuft.
Am besten packt man das in eine Funktion, die man flexibel aufrufen kann:

Code: Alles auswählen

def wants_to_play():
    while True: 
        herausforderung_akzeptiert = input("Hallo Fremder! Schön, dass du dich entschieden hast in einer Runde Galgenmännchen gegen mich anzutreten.\nDoch ich warne dich vor: ich bin der Galgenmännchen-Weltmeister! Bist du dir sicher, dass du dennoch gegen mich antreten möchtest?\n").upper()
    
        if herausforderung_akzeptiert == "JA":
            print("Du bist mutig, das gefällt mir! Dann lass uns eine Runde Galgenmännchen spielen!")
            return True
        elif herausforderung_akzeptiert == "NEIN":
            print("Die Entscheidung ist zu deinem eigenen Besten! Somit bleiben ich den ungeschlagene Galgenmännchen-Weltmeister!")
            return False
        print("Deine Antwort war leider ungültig. Antworte diesmal bitte mit Ja oder Nein")


if wants_to_play():
    play_game()
Womit auch schon klar ist, dass wenn der Nutzer nicht spielen will, auch nichts weiter passiert.
Jupyter-Notebooks sind nicht für komplexere Programmabläufe gemacht; da wird einfach eine Zelle nach der anderen abgearbeitet.
Auch in einem richtigen Programm benutzt man kein sys.exit, denn dort endet das Programm automatisch, wenn es ans Ende der main-Funktion kommt.
absoute_noob
User
Beiträge: 2
Registriert: Montag 8. Februar 2021, 10:47

Hallo Sirius3,

vielen Dank für deine super schnelle und hilfreiche Antwort!
In dem Fall scheint es mir prinzipiell sinnvoll alles in functions zu schreiben, das werd ich ab sofort berücksichtigen.
Danke auch für die "Verschönerungshinweise". Da hast du mit allem absolut Recht, das fällt einem als Anfänger gar nicht auf, was da so alles unnütz ist solange das Ganze fehlerfrei läuft :D

Danke nochmal und liebe Grüße!
Antworten