hanna_rechnet.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/usr/bin/python3
  2. import subprocess
  3. from os import system
  4. from sys import exit
  5. from math import log10
  6. from time import sleep
  7. from random import choice, shuffle, seed
  8. from readchar import readkey
  9. from datetime import datetime
  10. from inspect import getmembers, isfunction
  11. import logging
  12. logging.basicConfig(level=logging.WARNING)
  13. from . import aufgaben
  14. seed()
  15. videos_filename = "videos.txt"
  16. anzahl_aufgaben = 10
  17. zeit_zur_verfuegung = 600
  18. videos = []
  19. def stelle_aufgabe(aufgabe, ergebnis):
  20. logging.debug(f"Aufgabe: { aufgabe }")
  21. logging.debug(f"Ergebnis: { ergebnis }")
  22. print(str(aufgabe))
  23. eingabe = []
  24. for i in range(0, 1 + int(log10(ergebnis))):
  25. eingabe.append(readkey())
  26. if eingabe[-1] == "x" or eingabe[-1] == "q":
  27. print("ENDE")
  28. exit(0)
  29. logging.debug(f"Eingabe: { str(eingabe) }")
  30. wert = 0
  31. potenz = 0
  32. try:
  33. while eingabe:
  34. wert += int(eingabe.pop()) * 10 ** potenz
  35. potenz += 1
  36. except:
  37. logging.warning("Kann Eingabe nicht in Wert wandeln.")
  38. wert = None
  39. logging.debug(f"Eingabewert: { wert }")
  40. return wert == ergebnis
  41. def play_video():
  42. global videos
  43. if len(videos) < 1:
  44. with open(videos_filename, "r") as fh:
  45. videos = fh.readlines()
  46. shuffle(videos)
  47. logging.info(f"{len(videos)} videos geladen")
  48. logging.debug(f"noch { len(videos) } videos vorhanden")
  49. subprocess.run(["mpv", "--fs", videos.pop()])
  50. def frage_weiter():
  51. print("Taste drücken, wenn es weiter gehen soll. Oder 'q' fuer ENDE.")
  52. k = readkey()
  53. if k == "q":
  54. print("ENDE")
  55. exit(0)
  56. def main():
  57. zeiten = []
  58. aufgaben_vorhanden = []
  59. for i in getmembers(aufgaben, isfunction):
  60. if i[0][0] != "_": # remove _internal functions
  61. aufgaben_vorhanden.append(i)
  62. while True:
  63. system("clear")
  64. aufgabe_name, aufgabe_function = choice(aufgaben_vorhanden)
  65. aufgabe, ergebnis = aufgabe_function()
  66. gebraucht = int(sum(zeiten)) # fuer anzahl_aufgaben!
  67. balken = ["-"] * int(zeit_zur_verfuegung * 1.25)
  68. balken[0:gebraucht] = ["+"] * gebraucht
  69. balken[zeit_zur_verfuegung] = "|"
  70. print("({:2d}) {}".format(len(zeiten), "".join(balken)))
  71. print("")
  72. start = datetime.now()
  73. e = stelle_aufgabe(aufgabe, ergebnis)
  74. ende = datetime.now()
  75. if e:
  76. print("RICHTIG!")
  77. zeiten.insert(0, (ende - start).total_seconds())
  78. sleep(1)
  79. else:
  80. print("FALSCH!\n")
  81. print(f"Richtig wäre { ergebnis }.")
  82. zeiten = []
  83. sleep(2)
  84. zeiten = zeiten[0:anzahl_aufgaben]
  85. logging.debug("Zeiten: { str(zeiten) }")
  86. logging.info(f"{len(zeiten)} Richtige in { gebraucht } Sekunden.")
  87. if len(zeiten) >= anzahl_aufgaben and sum(zeiten) <= zeit_zur_verfuegung:
  88. print(
  89. f"\n\nJUHU! Für die letzten { anzahl_aufgaben } Aufgaben hast du { int(sum(zeiten) + .5) } Sekunden gebraucht!\n"
  90. )
  91. play_video()
  92. zeiten = []
  93. frage_weiter()
  94. if __name__ == "__main__":
  95. main()