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