@superdario99: Man sollte nicht verschiedene Typen innerhalb eines Namensraums an den gleichen Namen binden. Das `end_quiz` meistens eine Zeichenkette, an einer Stelle in der Funktion aber ein Wahrheitswert ist, verwirrt den Leser. Wobei der Wahrheitswert auch nirgends verwendet wird. Die Zuweisung kann man also ersatzlos streichen.
f-Zeichenketten machen ohne formatierte Werte keinen Sinn.
Mehrzeilige Zeichenketten mitten in Code machen das Programm schwer lesbar, weil die die Einrückung kaputt machen an der man normalerweise relativ einfach die Programmstruktur erkennen kann.
Sinnloses `sleep()` nervt nur die Benutzer.
`exit()` sollte man nicht als ”Notausgang” verwenden weil man sich um einen sauberen Programmablauf kümmern will. Die Funktion sollte man nur einsetzen wenn man mindestens potentiell einen anderen Rückgabecode als 0 an das aufrufende Programm kommunizieren will. *Dafür* ist die nämlich gedacht.
`end_quiz` ist nicht so ein wirklich toller Name für eine Antwort vom Benutzer die verschiedenste Dinge auslösen kann.
Zwischenstand:
Code: Alles auswählen
def do_quiz():
fehler_zahl = 0
while True:
answer = input("Text")
if answer == "Fehler" and fehler_zahl == 0:
input("Quiz beenden: 'Ende'\nQuiz wiederholen: 'again'")
else:
answer = input("Quiz beenden: 'Ende'\nQuiz wiederholen: 'again'")
break
if answer == "again":
break
if answer == "Ende":
print("Bis zum nächsten mal!")
return
Die Programmlogik macht überhaupt keinen Sinn. Im ersten ``if`` wird das Ergebnis der Frage nirgends gespeichert. Im ``else`` steht die *selbe* Frage, die Schleife wird dann aber verlassen bevor die Antwort ausgewertet wird. Die selbe Frage sollte man im Code nicht wiederholen. Code und Daten wiederholen vermeidet man als Programmierer in der Regel. Das ist Mehrarbeit und fehleranfällig bei Änderungen, weil man immer daran denken muss alle Kopien zu ändern, und auch alle gleich oder zumindest gleichwertig.
Ich wäre mit Gross-/Kleinschreibung der Antworten grosszügiger. Benutzer werden Dich sonst irgendwann verfluchen das sie „again“ klein schreiben, „Ende“ aber gross schreiben müssen. Das „denglisch“ ist auch nicht schön. Entweder sollte man auf Deutsch mit dem Benutzer kommunizieren (und der mit dem Programm) oder auf Englisch; oder irgendeine andere Sprache, aber halt konsistent immer die Gleiche.
Man könnte auch noch den Fall behandeln, falls der Benutzer etwas unbekanntes eingibt.
Code: Alles auswählen
def main():
while True:
fehler_zahl = 0
# Quiz code goes here.
while True:
answer = input("Text").lower()
if answer == "fehler":
if fehler_zahl == 0:
print("Perfekt! Keine Fehler!")
else:
print(f"{fehler_zahl} Fehler! Das war noch nicht perfekt.")
elif answer == "nochmal":
break
elif answer == "ende":
print("Bis zum nächsten mal!")
return
else:
print(f"Unbekannte Eingabe: {answer!r}")