Hauptmenü für Spiele

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Lewin
User
Beiträge: 2
Registriert: Freitag 19. November 2021, 17:18

Hallo ich bin Lewin bin 14 Jahre alt und fange gerade mit dem Programmieren an. Ich habe hier ein Programm für ein Hauptmenü erstellt. Ich bin ein Anfäger also wurde ich mich gerne über Kritik und jegliche andere Meinungen freuen.

Code: Alles auswählen

import time
import os

def cls():
	os.system('cls' if os.name=='nt' else 'clear')
schlaufe = 0
nx = 0
bx = 0
zx = 0

while zx < 1:
	print("Bereit? (j/n)")
	start = input(">")
	if start == "j":
		while schlaufe < 1:
			cls()
			print(" ")
			print("Hallo Willkommen!")
			time.sleep(2)
			print(" ")
			print("Wähle..")
			time.sleep(1)
			print("Spielen (1)")
			time.sleep(1)
			print("Einstellungen (2)")
			time.sleep(1)
			print("Hilfe (3)")
			time.sleep(1)
			print("Verlassen (4)")
			print(" ")
			choose = input(">")
			if choose == "1": #Spielen
				cls()
				time.sleep(1)
				print("Noch nicht verfügbar")
				time.sleep(3)
				cls()
			elif choose == "2": #Einstellungen
				cls()
				time.sleep(1)
				print("Noch nicht verfügbar")
				time.sleep(3)
				cls()
			elif choose == "3": #Hilfe
				cls()
				time.sleep(1)
				print("Noch nicht verfügbar")
				time.sleep(3)
				cls()
			elif choose == "4": #Verlassen
				cls()
				time.sleep(1)
				print("Bis zum nächsten mal.")
				exit()
			else:
				cls()
				print("Bitte wiederholen!")

	elif start == "n":
		cls()
		time.sleep(1)
		print("Bis zum nächsten mal.")
		exit()
	else:
		cls()
		time.sleep(1)
		print("Bitte wiederholen!")
		
Benutzeravatar
__blackjack__
User
Beiträge: 13007
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Lewin
User
Beiträge: 2
Registriert: Freitag 19. November 2021, 17:18

@__blackjack__ Ok ich danke dir, werde mir das zu Herzen nehmen. Sehr Nett von dir
Antworten