import random, time from operator import add, mul, sub, truediv rechenart = { "plus": add, "minus": sub, "mal": mul, "geteilt durch": truediv } class Aufgabe: def __init__(self, anweisung, bereich1, bereich2=None) -> None: self.anweisung = anweisung if bereich2 == None: self.bereich = [bereich1, bereich1] else: self.bereich = [bereich1, bereich2] richtige = 0 falsche = 0 antwort = 0 fragenummer = 0 print(""" Kopfrechentrainer Levelauswahl: (1) Addition zweier ganzer Zahlen zwischen -100 und 100 (2) Addition und Subtraktion zweier ganzer Zahlen zwischen -100 und 100 (3) Kleines Einmaleins (Multiplikation zweier natürlicher Zahlen kleiner-gleich 10) (4) Grosses Einmaleins (Multiplikation zweier natürlicher Zahlen kleiner-gleich 20) (5) Grosses Einmaleins, aber nur Produkte von einstelliger mit zweistelliger Zahl (6) Grosses Einmaleins, aber nur Produkte zweistelliger Zahlen (7) Kombination: Level (2) und Level (3), um negative Faktoren und entsprechende Divisionen erweitert (8) Kombination: Level (2) und Level (4), um negative Faktoren und entsprechende Divisionen erweitert""") level = int(input("Wähle dein Level: ")) print("Es werden 20 Aufgaben gestellt. Früheres Ende per Eingabe von 'q'.") aufgabenliste = [] if level == 1: aufgabenliste.append(Aufgabe("plus", range(-100, 101))) elif level == 2: aufgabenliste.append(Aufgabe("plus", range(-100, 101))) aufgabenliste.append(Aufgabe("minus", range(-100, 101))) elif level == 3: aufgabenliste.append(Aufgabe("mal", range(2, 11))) elif level == 4: aufgabenliste.append(Aufgabe("mal", range(2, 21))) elif level == 5: aufgabenliste.append(Aufgabe("mal", range(10, 21), range(2, 11))) aufgabenliste.append(Aufgabe("mal", range(2, 11), range(10, 21))) elif level == 6: aufgabenliste.append(Aufgabe("mal", range(10, 21))) elif level == 7: aufgabenliste.append(Aufgabe("plus", range(-100, 101))) aufgabenliste.append(Aufgabe("minus", range(-100, 101))) aufgabenliste.append(Aufgabe("mal", range(-10, 11))) aufgabenliste.append(Aufgabe("geteilt durch", range(-10, 11))) elif level == 8: aufgabenliste.append(Aufgabe("plus", range(-100, 101))) aufgabenliste.append(Aufgabe("minus", range(-100, 101))) aufgabenliste.append(Aufgabe("mal", range(-20, 21))) aufgabenliste.append(Aufgabe("geteilt durch", range(-20, 21))) startzeit = time.time() while antwort != 'q' and fragenummer < 20: fragenummer += 1 aufgabe = random.choice(aufgabenliste) if aufgabe.anweisung == "geteilt durch": while True: b = random.choice(aufgabe.bereich[1]) if b != 0: break a = b * random.choice(aufgabe.bereich[0]) else: a = random.choice(aufgabe.bereich[0]) b = random.choice(aufgabe.bereich[1]) ergebnis = rechenart[aufgabe.anweisung](a, b) antwort = input(f"Frage {fragenummer}: Berechne {a} " + aufgabe.anweisung + f" {b}: ") if antwort != 'q': if int(antwort) == ergebnis: print("Korrekt!") richtige += 1 else: print(f"Richtig wäre {ergebnis} gewesen.") falsche +=1 endzeit = time.time() dauer = endzeit - startzeit if antwort == 'q': fragenummer -= 1 if fragenummer > 0: print(f""" {fragenummer} Aufgaben bearbeitet, {richtige} richtige Antwort(en), {falsche} falsche Antwort(en) Gesamtzeit: {dauer:.2f} Sekunden Anteil richtiger Antworten: {richtige / fragenummer * 100:.2f} Prozent Durchschnittliche Zeit pro Aufgabe: {dauer / fragenummer:.2f} Sekunden """)