|
@@ -0,0 +1,129 @@
|
|
|
+#!/usr/bin/python3
|
|
|
+
|
|
|
+import subprocess
|
|
|
+from os import system
|
|
|
+from sys import exit
|
|
|
+from math import log10
|
|
|
+from time import sleep
|
|
|
+from random import choice, shuffle, seed
|
|
|
+from readchar import readkey
|
|
|
+from datetime import datetime
|
|
|
+from inspect import getmembers, isfunction
|
|
|
+
|
|
|
+import logging
|
|
|
+
|
|
|
+logging.basicConfig(level=logging.WARNING)
|
|
|
+
|
|
|
+from . import aufgaben
|
|
|
+
|
|
|
+seed()
|
|
|
+
|
|
|
+videos_filename = "videos.txt"
|
|
|
+anzahl_aufgaben = 10
|
|
|
+zeit_zur_verfuegung = 60
|
|
|
+
|
|
|
+videos = []
|
|
|
+
|
|
|
+
|
|
|
+def stelle_aufgabe(aufgabe, ergebnis):
|
|
|
+ logging.debug(f"Aufgabe: { aufgabe }")
|
|
|
+ logging.debug(f"Ergebnis: { ergebnis }")
|
|
|
+
|
|
|
+ print(str(aufgabe))
|
|
|
+
|
|
|
+ eingabe = []
|
|
|
+ for i in range(0, 1 + int(log10(ergebnis))):
|
|
|
+ eingabe.append(readkey())
|
|
|
+ if eingabe[-1] == "x" or eingabe[-1] == "q":
|
|
|
+ print("ENDE")
|
|
|
+ exit(0)
|
|
|
+
|
|
|
+ logging.debug(f"Eingabe: { str(eingabe) }")
|
|
|
+
|
|
|
+ wert = 0
|
|
|
+ potenz = 0
|
|
|
+ try:
|
|
|
+ while eingabe:
|
|
|
+ wert += int(eingabe.pop()) * 10 ** potenz
|
|
|
+ potenz += 1
|
|
|
+ except:
|
|
|
+ logging.warning("Kann Eingabe nicht in Wert wandeln.")
|
|
|
+ wert = None
|
|
|
+
|
|
|
+ logging.debug(f"Eingabewert: { wert }")
|
|
|
+
|
|
|
+ return wert == ergebnis
|
|
|
+
|
|
|
+
|
|
|
+def play_video():
|
|
|
+ global videos
|
|
|
+ if len(videos) < 1:
|
|
|
+ with open(videos_filename, "r") as fh:
|
|
|
+ videos = fh.readlines()
|
|
|
+ shuffle(videos)
|
|
|
+ logging.info(f"{len(videos)} videos geladen")
|
|
|
+
|
|
|
+ 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.")
|
|
|
+ k = readkey()
|
|
|
+ if k == "q":
|
|
|
+ print("ENDE")
|
|
|
+ exit(0)
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ zeiten = []
|
|
|
+
|
|
|
+ aufgaben_vorhanden = []
|
|
|
+ for i in getmembers(aufgaben, isfunction):
|
|
|
+ if i[0][0] != "_": # remove _internal functions
|
|
|
+ aufgaben_vorhanden.append(i)
|
|
|
+
|
|
|
+ while True:
|
|
|
+ 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("")
|
|
|
+
|
|
|
+ start = datetime.now()
|
|
|
+ e = stelle_aufgabe(aufgabe, ergebnis)
|
|
|
+ ende = datetime.now()
|
|
|
+
|
|
|
+ if e:
|
|
|
+ print("RICHTIG!")
|
|
|
+ zeiten.insert(0, (ende - start).total_seconds())
|
|
|
+ sleep(1)
|
|
|
+ else:
|
|
|
+ print("FALSCH!\n")
|
|
|
+ print(f"Richtig wäre { ergebnis }.")
|
|
|
+ zeiten = []
|
|
|
+ sleep(2)
|
|
|
+
|
|
|
+ zeiten = zeiten[0:anzahl_aufgaben]
|
|
|
+ logging.debug("Zeiten: { str(zeiten) }")
|
|
|
+
|
|
|
+ logging.info(f"{len(zeiten)} Richtige in { gebraucht } Sekunden.")
|
|
|
+
|
|
|
+ if len(zeiten) >= anzahl_aufgaben and sum(zeiten) <= zeit_zur_verfuegung:
|
|
|
+ print(
|
|
|
+ f"\n\nJUHU! Für die letzten { anzahl_aufgaben } Aufgaben hast du { int(sum(zeiten) + .5) } Sekunden gebraucht!\n"
|
|
|
+ )
|
|
|
+ play_video()
|
|
|
+ zeiten = []
|
|
|
+ frage_weiter()
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ main()
|