@Lewin: Das Hauptprogramm sollte auch in einer Funktion stehen. Die heisst üblicherweise `main()`.
`nx`, `bx`, und `zx` sind schlechte Namen. Namen sollen dem Leser die Bedeutung des daran gebundenen Wertes vermitteln, nicht Fragezeichen hinterlassen. Zusammen mit dem `cls` kann man ja fast vermuten Du hättest in einem früheren Leben schon mal BASIC programmiert.
`nx` und `bx` werden überhaupt nicht verwendet.
Man sollte Namen nicht so weit entfernt von der Stelle definieren an der sie dann tatsächlich verwendet werden. Auf diese Weise entstehen beispielsweise häufig Namen die überhaupt nicht verwendet werden, weil man vergisst die Definition zu entfernen, wenn man den entfernt, der die verwendet.
Und die beiden verbleibenden Namen `schlaufe` und `zx` sind eigentlich auch überflüssig, weil die jeweils nur verwendet werden um sie mit einem Konstanten Wert zu vergleichen, was ja immer das gleiche Konstante Ergebnis bringt, was man dann auch einfach Schreiben kann, also statt ``while zx < 1:`` was immer wahr ist, einfach ``while True:``.
Das `cls()` und die ganzen `time.sleep()` sollten da raus. Damit nervst Du nur unnötig die Benutzer.
Dann würde ich die Frage ob der Benutzer bereit ist rauswerfen. Dann hätte das Programm ja nicht gestartet. Und es ist ja auch nicht so als müsste er wenn er "ja" antwortet dann irgend sofort konzentriert irgendwas machen, so dass es Sinn machen würde ihm durch so eine Frage ein bisschen Vorbereitungszeit zu verschaffen.
Ein einzelnes Leerzeichen mit `print()` ohne `end` zu ändern macht nicht viel Sinn, weil das sieht man ja nicht. Wenn man einfach nur eine neue Zeile anfangen will, reicht `print()` ohne irgendein Argument aus.
`choose` heisst „wähle“ und wäre ein Name für eine Funktion, aber nicht für eine getroffene Auswahl. Das wäre `choice`.
Da die noch nicht implementierten Auswahlmöglichkeiten alle das gleiche machen, kann man diesen Fall zusammenfassen und muss die Ausgabe nur einmal machen.
`exit()` gibt es eigentlich gar nicht wenn man das nicht explizit aus dem `sys`-Modul importiert. Wenn man nicht mindestens potentiell einen anderen Rückgabecode als 0 an den Aufrufer zurückgeben will, ist die Funktion aber auch ein „code smell“. Man würde hier einfach nur die Schleife(n) verlassen und das Programm “natürlich“ enden lassen.
Da bleibt dann das hier übrig:
Code: Alles auswählen
#!/usr/bin/env python3
def main():
while True:
print()
print("Hallo Willkommen!")
print()
print("Wähle...")
print("Spielen (1)")
print("Einstellungen (2)")
print("Hilfe (3)")
print("Verlassen (4)")
print()
choice = input(">")
if choice in ["1", "2", "3"]:
print("Noch nicht verfügbar")
elif choice == "4":
print("Bis zum nächsten mal.")
break
else:
print("Bitte wiederholen!")
if __name__ == "__main__":
main()