Advertisement
FranzVuttke

quuuuizeeee

May 22nd, 2024 (edited)
524
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.76 KB | Source Code | 1 0
  1. #!/home/ounis/pyapps/bin/python
  2.  
  3. # PASTEBIN: https://pastebin.com/35ueCmXf
  4.  
  5. import random
  6. from warnings import warn
  7. from time import sleep
  8. import json
  9. import sys
  10.  
  11.  
  12. VOCS_DICT_KEY_NAME = "vocabulary"
  13. VOCS_DICT_VALUE_NAME = "answers"
  14. INDEX_VOC = 0
  15. INDEX_ANSW_LIST = 1
  16. INDEX_GOOD_ANSWER = 0
  17. TERMINATE_WORD = ("quit","matei")
  18.  
  19. # lista słówek
  20. # schema:
  21. # (vocabulary, (good_answer, possible_answer1, possible_answer2, ...))
  22. lst_dict_vocs = ({VOCS_DICT_KEY_NAME : "ch_j", VOCS_DICT_VALUE_NAME: ("u", "ó")}, )
  23. vocabularies = [("w_zek",("ó","u", "R")),
  24.                 ("p_sty", ("u", "ó")),
  25.                 ("bo_ater", ("h", "ch")),
  26.                 ("r_bin", ("u", "ó")),
  27.                 ("wr_bel", ("ó", "u", "a")),
  28.                 ("w_dka", ("ó", "u")),
  29.                 ("d_pa", ("u", "ó")),
  30.                 ("ch_j", ("u", "ó")),
  31.                 ("k_rwa", ("u", "ó")),
  32.                 ("tchó_", ("rz", "ż")),
  33.                 ]
  34. # print(lst_dict_vocs)
  35. # exit(619)
  36.  
  37.  
  38. def convLstVocs2DictVocs(aListVocs):
  39.     # ( "k_rwa", ("u", "ó") ) -> {"vocabulary" : "k_rwa", "answers": ("u", "ó")}
  40.     d = {}
  41.     vocabulary = aListVocs[0]
  42.     answers = aListVocs[1]
  43.     d[VOCS_DICT_KEY_NAME] = vocabulary
  44.     d[VOCS_DICT_VALUE_NAME] = answers
  45.  
  46.     return d
  47. #
  48. # for v in vocabularies:
  49. #     print(convLstVocs2DictVocs(v))
  50. # exit(616)
  51.  
  52. def save2FileJSON(aFileName, aVocs):
  53.     temp_d ={}
  54.     result = ""
  55.     for v in aVocs:
  56.         temp_d = convLstVocs2DictVocs(v)
  57.         json_temp = json.dumps(temp_d)
  58.         result = result + json_temp
  59.     # result += "}\n"
  60.     with open(aFileName, "w") as f:
  61.         f.write(result)
  62.  
  63. # save2FileJSON("./quuuuizeeee.json", vocabularies)
  64. # exit(616)
  65.  
  66. def save2File(aFileName, aVocs):
  67.     temp = ""
  68.     with open(aFileName, "w") as fw:
  69.         for voc in aVocs:
  70.             temp = f'{voc[INDEX_VOC]}={",".join([a for a in voc[INDEX_ANSW_LIST]])}'
  71.             # print(temp)
  72.             fw.write(temp+"\n")
  73.  
  74. def loadFromFile(aFileName, aVocs):
  75.     print("ładowanie pytań...")
  76.     if len(aVocs) > 0:
  77.         aVocs.clear()
  78.     with open(aFileName) as fr:
  79.         for line in fr:
  80.             line = line.rstrip()
  81.             lst = line.split("=")
  82.             voc = lst[0]
  83.             answs = lst[1]
  84.             aVocs.append((voc, ))
  85.             aVocs[-1] += (tuple((a for a in answs.split(","))), )
  86.             print(getCorrectPhrase(aVocs[-1]))
  87.     print("Załadowano:",len(aVocs))
  88.     return aVocs
  89.  
  90. def getRandomAnswList(anAnsw):
  91.     # warn("już nie używane...s")
  92.     return random.sample(anAnsw, len(anAnsw))
  93.  
  94. def getPhrase(aVoc, valIndex):
  95.     voc = aVoc[0]
  96.     corr_v = aVoc[1][valIndex]
  97.     phrase = ""
  98.     for c in voc:
  99.         if c != "_":
  100.             phrase = phrase + c
  101.         else:
  102.             phrase = phrase + "".join([x for x in corr_v])
  103.     return phrase
  104.  
  105.  
  106. def getCorrectPhrase(aVoc):
  107.     return getPhrase(aVoc, INDEX_GOOD_ANSWER)
  108.  
  109. def getIncorrectPhrase(aVoc):
  110.     return getPhrase(aVoc, INDEX_GOOD_ANSWER + 1)
  111.  
  112. # for v in vocabularies:
  113. #     print(getCorrectPhrase(v))
  114. # exit()
  115.  
  116.  
  117.  
  118. # generate random qustion list
  119. def getRandomizedQuestionsIndexList(aScope):
  120.     warn("JUŻ NIE UŻYWANE...")
  121.     res = ()
  122.     while len(res) != aScope:
  123.         q = random.randrange(aScope)
  124.         if not q in res:
  125.             res += (q,)
  126.     # print([q+1 for q in res])
  127.     return res
  128.     # exit()
  129.  
  130.  
  131. def beep(aCount):
  132.     for _ in range(aCount):
  133.         print("\a", flush=True, end="")
  134.         sleep(0.2)
  135.  
  136. def genFailComment(anId=-1):
  137.     return random.choice(("No ty chyba śnisz...",
  138.                           "NIE!!! Odpowiedź błędna!!!",
  139.                           "Ale słabo...!!!",
  140.                           "No i żle!!! Mundrusiu ty...!!!",
  141.                           "Żenuła...!!!  "))
  142.  
  143. def main(args):
  144.     print(args[0])
  145.     # save2File("quuuuizeeee.dat", vocabularies)
  146.     # vocabularies.clear()
  147.     global vocabularies
  148.     vocabularies = loadFromFile("quuuuizeeee.dat", vocabularies)
  149.     # exit(619)
  150.     SCORE = len(vocabularies)
  151.     MAX = SCORE
  152.     TERMINATE_BY_USER = False
  153.     for v in random.sample(vocabularies, len(vocabularies)):
  154.         # v -> (voc, (answ1, answ2, answn...))
  155.         # if cnt > question_count:
  156.         #     break
  157.         print(f"\n\t\t{v[INDEX_VOC]}")
  158.         good_a = v[INDEX_ANSW_LIST][INDEX_GOOD_ANSWER]
  159.         print("Wybierz brakującą literę: ")
  160.         ran_answ = getRandomAnswList(v[INDEX_ANSW_LIST])
  161.         # print("ran_answ", ran_answ, "answ", v[1])
  162.         # ran_answ = random.sample(v[1], len(v[1]))
  163.         for i, a in enumerate(ran_answ):
  164.             print(f'\t {i+1} - {a.upper()}')
  165.         # passed = False
  166.         while True:
  167.             try:
  168.                 temp = input("\t? ");
  169.                 if temp.lower() in TERMINATE_WORD:
  170.                     TERMINATE_BY_USER = True
  171.                     break
  172.                 user_answ = int(temp)
  173.                 if not (user_answ > 0 and user_answ < len(ran_answ)+1 ):
  174.                     raise IndexError
  175.             except:
  176.                 print(f"zły wybór, spróbuj wartości między 1 a {len(ran_answ)}")
  177.                 continue
  178.             else:
  179.                 break
  180.                 # passed = True
  181.         # print(good_a, ran_answ[user_answ-1], user_answ,"->", user_answ-1)
  182.         if TERMINATE_BY_USER:
  183.             print("Przerwane przez użyszkodnika...")
  184.             break
  185.         if ran_answ[user_answ-1] == good_a:
  186.             print("Zgadza się!!!")
  187.         else:
  188.             print(f'{genFailComment()}')
  189.             beep(2)
  190.             SCORE -= 1
  191.         # cnt += 1
  192.     else:
  193.         print("\n\nMożliwych punktów do zdobycia:", MAX)
  194.         print("WYNIK:", SCORE)
  195.     # print(vocabularies)
  196.  
  197.  
  198. if __name__ == "__main__":
  199.     sys.exit(main(sys.argv))
  200.  
  201.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement