#!/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()