@PatrickF: Die Gesamtzeit wird nicht nur an der falschen Stelle initialisiert, sondern auch an der falschen Stelle aufaddiert, denn so zählst Du im Moment die falsch beantworteten Fragen gar nicht mit.
Sonstige Anmerkungen: `durchgang` steht gar nicht für einen Durchgang, sondern für die Anzahl der Aufgaben, sollte also besser `aufgabenanzahl` heissen.
`zaehler` ist sehr generisch, da wäre `punkte` besser/informativer.
`i` wird nicht verwendet, da ist der Name `_` üblich, damit sich der Leser nicht wundert warum ein Name nicht verwendet wird.
`global_time` müsst eher `total_time` heissen.
Die `time()`-Funktion ist Zeitmessungen nicht geeignet, weil die nicht immer vorwärts geht. Dafür gibt es `time.monotonic()` (und für Zeitmessungen wo die höchste Auflösung benötigt wird, die das System anbietet `time.perf_counter()`, aber Du würdest das ja eh wegrunden bei der Anzeige.)
Man nummeriert keine Namen durch. Entweder will man sich dann bessere Namen überlegen, oder eine Datenstruktur statt einzelner Namen/Werte. Bei `zahl1` bis `zahl4` bietet sich eine Liste mit vier Zahlen an, und bei `raten_1` macht diese 1 überhaupt keinen Sinn. Und `raten` auch nicht. Der Wert ist die Antwort des Benutzers, also `antwort`. Und die ist hoffentlich nicht geraten, denn die lässt sich ja ausrechnen.
`round()` verwendet man nicht für die Ausgabe. An anderer Stelle verwendest Du ja bereits die Format-Syntax für die Anzahl der Nachkommastellen. Zudem gibt es da auch etwas für Prozente.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import random
from time import monotonic
def main():
aufgabenanzahl = int(input("Wie viele Durchgänge? "))
punkte = 0
total_time = 0
for _ in range(aufgabenanzahl):
operanden = [random.randint(1, 10) for _ in range(4)]
start_time = monotonic()
antwort = int(
input("Wieviel ist {} * {} + {} - {}? ".format(*operanden))
)
elapsed_time = monotonic() - start_time
total_time += elapsed_time
loesung = operanden[0] * operanden[1] + operanden[2] - operanden[3]
if antwort != loesung:
print(f"Falsch! Richtig ist {loesung}.")
else:
print(f"Richtig! {elapsed_time:.2f} Sekunden")
punkte += 1
print(
f"{punkte} Punkte! Du hast {punkte} von {aufgabenanzahl} Aufgaben"
f" richtig gerechnet!"
)
print(f"Das sind {punkte / aufgabenanzahl:.0%}!")
print(f"Gesamtzeit für {aufgabenanzahl} Aufgaben: {total_time:.2f}s")
if __name__ == "__main__":
main()