Thomas Verchow 5 年 前
コミット
b44cb7525d
3 ファイル変更44 行追加32 行削除
  1. 3 0
      run.sh
  2. 6 4
      src/hanna_rechnet/aufgaben.py
  3. 35 28
      src/hanna_rechnet/hanna_rechnet.py

+ 3 - 0
run.sh

@@ -6,3 +6,6 @@ python3 -m venv $VENV
 
 $VENV/bin/pip install -e .
 
+source $VENV/bin/activate
+
+hanna_rechnet

+ 6 - 4
src/hanna_rechnet/aufgaben.py

@@ -10,7 +10,7 @@ def bis_zum_naechsten_zehner():
     aufgabe = f"Von { 10 * x + y } zum nächsten Zehner?"
     ergebnis = 10 - y
 
-    return aufgabe, ergebnis
+    return (aufgabe, ergebnis, 3)
 
 
 def minus_einstellig_ueber_zehnergrenze_hinweg_unter_100():
@@ -21,11 +21,12 @@ def minus_einstellig_ueber_zehnergrenze_hinweg_unter_100():
     aufgabe = f"{ z }{ x } - { y } = ?"
     ergebnis = (10 * z + x) - y
 
-    return aufgabe, ergebnis
+    return (aufgabe, ergebnis, 10)
 
 
 def minus_einstellig_unter_100():
-    return _minus(range(10,99), range(1,9))
+    aufgabe, ergebnis = _minus(range(10,100), range(1,10))
+    return aufgabe, ergebnis, 10
 
 
 def _minus(minuend: list, subtrahend: list):
@@ -39,7 +40,8 @@ def _minus(minuend: list, subtrahend: list):
 
 
 def plus_10_bis_19_unter_100():
-    return _plus(range(1, 80), range(10, 19))
+    aufgabe, ergebnis = _plus(range(1, 80), range(10, 20))
+    return aufgabe, ergebnis, 10
 
 
 def _plus(summand_1: list, summand_2: list):

+ 35 - 28
src/hanna_rechnet/hanna_rechnet.py

@@ -20,14 +20,13 @@ seed()
 
 videos_filename = "videos.txt"
 anzahl_aufgaben = 10
-zeit_zur_verfuegung = 600
 
 videos = []
 
 
 def stelle_aufgabe(aufgabe, ergebnis):
-    logging.debug(f"Aufgabe: { aufgabe }")
-    logging.debug(f"Ergebnis: { ergebnis }")
+    logging.debug(f"Aufgabe: {aufgabe}")
+    logging.debug(f"Ergebnis: {ergebnis}")
 
     print(str(aufgabe))
 
@@ -38,7 +37,7 @@ def stelle_aufgabe(aufgabe, ergebnis):
             print("ENDE")
             exit(0)
 
-    logging.debug(f"Eingabe: { str(eingabe) }")
+    logging.debug(f"Eingabe: {str(eingabe)}")
 
     wert = 0
     potenz = 0
@@ -50,7 +49,7 @@ def stelle_aufgabe(aufgabe, ergebnis):
         logging.warning("Kann Eingabe nicht in Wert wandeln.")
         wert = None
 
-    logging.debug(f"Eingabewert: { wert }")
+    logging.debug(f"Eingabewert: {wert}")
 
     return wert == ergebnis
 
@@ -63,12 +62,12 @@ def play_video():
         shuffle(videos)
         logging.info(f"{len(videos)} videos geladen")
 
-    logging.debug(f"noch { len(videos) } videos vorhanden")
+    logging.debug(f"noch {len(videos)} videos vorhanden")
     subprocess.run(["mpv", "--fs", videos.pop()])
 
 
 def frage_weiter():
-    print("Taste drücken, wenn es weiter gehen soll. Oder 'q' fuer ENDE.")
+    print("Taste drücken, wenn es weiter gehen kann. Oder 'q' fuer ENDE.")
     k = readkey()
     if k == "q":
         print("ENDE")
@@ -76,7 +75,8 @@ def frage_weiter():
 
 
 def main():
-    zeiten = []
+    relative_dauer = []
+    mittel_relative_dauer = 1
 
     aufgaben_vorhanden = []
     for i in getmembers(aufgaben, isfunction):
@@ -84,44 +84,51 @@ def main():
             aufgaben_vorhanden.append(i)
 
     while True:
-        system("clear")
+      #  system("clear")
 
         aufgabe_name, aufgabe_function = choice(aufgaben_vorhanden)
-        aufgabe, ergebnis = aufgabe_function()
-
-        gebraucht = int(sum(zeiten))  # fuer anzahl_aufgaben!
-
-        balken = ["-"] * int(zeit_zur_verfuegung * 1.25)
-        balken[0:gebraucht] = ["+"] * gebraucht
-        balken[zeit_zur_verfuegung] = "|"
-        print("({:2d}) {}".format(len(zeiten), "".join(balken)))
-        print("")
-
+        aufgabe, ergebnis, zeitvorgabe = aufgabe_function()
+        logging.info(f"{aufgabe_name} mit Zeitvorgabe {zeitvorgabe} Sekunden")
+
+        richtige = f"Richtige: {len(relative_dauer)}"
+        zeit = f"Zeit: {mittel_relative_dauer:.1f}"
+        if mittel_relative_dauer <= 0.8:
+            emoji = f"\U0001f603" # :-D
+        elif mittel_relative_dauer <= 1:
+            emoji = f"\U0001f642" # :-)
+        elif mittel_relative_dauer <= 1.2:
+            emoji = f"\U0001f610" # :-|
+        else: # > 1.2
+            emoji = f"\U0001f614" # :-(
+
+        print(f"{richtige} {zeit} {emoji}\n")
         start = datetime.now()
         e = stelle_aufgabe(aufgabe, ergebnis)
         ende = datetime.now()
 
         if e:
             print("RICHTIG!")
-            zeiten.insert(0, (ende - start).total_seconds())
+            relative_dauer.insert(0, (ende - start).total_seconds() / zeitvorgabe)
+            relative_dauer = relative_dauer[0:anzahl_aufgaben]
+            mittel_relative_dauer = sum(relative_dauer)/len(relative_dauer)
             sleep(1)
         else:
             print("FALSCH!\n")
-            print(f"Richtig wäre { ergebnis }.")
-            zeiten = []
+            print(f"Richtig wäre {ergebnis}.")
+            relative_dauer = []
+            mittel_relative_dauer = 1
             sleep(2)
 
-        zeiten = zeiten[0:anzahl_aufgaben]
-        logging.debug("Zeiten: { str(zeiten) }")
+        logging.debug(f"Dauer: {str(relative_dauer)}")
 
-        logging.info(f"{len(zeiten)} Richtige in { gebraucht } Sekunden.")
+        logging.info(f"{len(relative_dauer)} Richtige im {mittel_relative_dauer:.2f}-fachen der Zeit.")
 
-        if len(zeiten) >= anzahl_aufgaben and sum(zeiten) <= zeit_zur_verfuegung:
+        if len(relative_dauer) >= anzahl_aufgaben and mittel_relative_dauer <= 1:
             print(
-                f"\n\nJUHU! Für die letzten { anzahl_aufgaben } Aufgaben hast du { int(sum(zeiten) + .5) } Sekunden gebraucht!\n"
+                f"\n\nJUHU! Für die letzten {anzahl_aufgaben} Aufgaben hast du {mittel_relative_dauer:.2f}-fache der Zeit gebraucht!\n"
             )
             play_video()
-            zeiten = []
+            relative_dauer = []
             frage_weiter()