123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #!/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 = 20
- 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 kann. Oder 'q' fuer ENDE.")
- k = readkey()
- if k == "q":
- print("ENDE")
- exit(0)
- def main():
- relative_dauer = []
- mittel_relative_dauer = 1
- 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, 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()
- relativ_gebraucht = (ende - start).total_seconds() / zeitvorgabe
- if relativ_gebraucht > 2:
- relativ_gebraucht = 2
- if e:
- print("RICHTIG!")
- relative_dauer.insert(0, relativ_gebraucht)
- 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}.")
- relative_dauer = []
- mittel_relative_dauer = 1
- sleep(2)
- logging.debug(f"Dauer: {str(relative_dauer)}")
- logging.info(f"{len(relative_dauer)} Richtige im {mittel_relative_dauer:.2f}-fachen der Zeit.")
- if len(relative_dauer) >= anzahl_aufgaben and mittel_relative_dauer <= 1:
- print(
- f"\n\nJUHU! Für die letzten {anzahl_aufgaben} Aufgaben hast du {mittel_relative_dauer:.2f}-fache der Zeit gebraucht!\n"
- )
- play_video()
- relative_dauer = []
- mittel_relative_dauer = 1
- frage_weiter()
- if __name__ == "__main__":
- main()
|