While-Schleife in Python sich wiederholen lassen, bis der Nutzer gewinnt und 'n' eingibt?
Hi! Ich schreibe in Python gerade ein kleines Zahlen-Rate-Spiel. Dabei soll der Nutzer eine Zahl zwischen 1 und 10 erraten und wenn er das erfolgreich getan hat, soll er gefragt werden, ob er noch einmal spielen möchte. D.h. die While-Schleife soll so lange wiederholt werden, bis der User gewinnt und nicht mehr weiterspielen möchte, also 'n' eingibt. Dann soll ganz am Ende einfach nur noch ausgegeben werden: "Thanks for playing! Press Enter to exit."
Wie kann ich das realisieren bzw. was muss ich an meinem jetzigen Code noch ändern? Momentan funktioniert es nämlich nicht.
import random
print("Welcome to the number guessing game!")
manual_yes_no = input("Do you want to read the manual? 'y' for yes, 'n' for playing: ")
if manual_yes_no == 'y':
print("""------------------------------------------------------
----------------------MANUAL--------------------------
------------------------------------------------------
A number between 1 and 10 is generated. You have to
guess the number by typing it. The program says if
your number is lower or higher than the generated
number. Have fun!
------------------------------------------------------
------------------------------------------------------
------------------------------------------------------""")
def guessing():
_var_secretnumber = random.randint(1, 10)
_var_usernumber = 0
_again_var = 'j'
while _var_usernumber != _var_secretnumber:
try:
_var_usernumber = int(input("Your number: "))
if _var_usernumber < _var_secretnumber:
print("Higher!")
if _var_usernumber > _var_secretnumber:
print("Lower!!")
if _var_usernumber == _var_secretnumber:
print("Congrats! You won.")
_again_var = input("Play again? Type 'y' for yes or 'n' for no: ")
except ValueError:
print("Wrong data type! Try a new number!")
try:
while True:
guessing()
except KeyboardInterrupt:
pass
2 Antworten
Ich würde die Methode guessing so schreiben, dass dort tatsächlich nur geraten wird. Dann kannst du die dritte Bedingung weglassen, die Schleife wird beendet, wenn richtig geraten wurde.
Die Frage, ob man weitermachen will, gehört nicht in guessing.
try:
_again = 'y'
while _again == 'y':
guessing()
_again = input("Play again? Type 'y' for yes")
except KeyboardInterrupt:
pass
Muss man natürlich nicht unbedingt so machen, es gibt immer auch mehrere Lösungen. Ich habe bei einer while-Schleife die Fortsetzungsbedingung gerne oben und möchte nicht nach einem break im Rumpf suchen müssen.
Hey! Vielen, vielen Dank! Es klappt endlich genau so, wie ich mir das vorstelle.
Liebe Grüße! :)
done=False
while not done:
#work
if <exticondition>:
done=True
Wäre eine einfache Möglichkeit - Alternativ könnte man auch breaken.
Mußt Dich halt nur entscheiden, wann udn wie Du Deine Abbruchbedingung setzt.
Du kannst auch einfach:
while _var_usernumber != _var_secretnumber:
while _var_usernumber != _var_secretnumber and _again_var != 'n':
Deine Schleifebendingugn ergänzen.