fork download
  1. import pickle
  2. import time
  3. from random import randint
  4. class Dict():
  5.  
  6. def __init__(self, title=''):
  7. self.title = title
  8. self.ditems = dict()
  9.  
  10. def add_item(self, word):
  11. a = word.split(':')[0].strip()
  12. b = [elem.strip() for elem in word.split(':')[1].split(',')]
  13. d = {a:b}
  14. self.ditems.update(d)
  15.  
  16. def rem(self, word):
  17. self.ditems.pop(word)
  18.  
  19. def show_items(self):
  20. return self.ditems
  21.  
  22. def dump(self):
  23. name = self.title
  24. if self.title == '':
  25. name = time.ctime().replace(':','-').replace(' ', '_')
  26. f = open(name, 'wb')
  27. pickle.dump(self.ditems, f)
  28. f.close()
  29.  
  30. def load_dict(self, file):
  31. f = open(file, 'rb')
  32. q = pickle.load(f)
  33. for j in q.items():
  34. self.ditems.update({j[0]:j[1]})
  35. f.close()
  36. print(' ')
  37. print("Загружен словарь из " + str(len(self.ditems)) + " элементов.")
  38. print(' ')
  39. print('Here we go... ')
  40. print(' ')
  41.  
  42. def learn(self):
  43. t = 0
  44. k = 0
  45. time_test = 0
  46. my_time = len(self.ditems) * 6
  47. life = round(len(self.ditems) * 0.3) + 1
  48. words = [i for i in self.ditems.keys()]
  49. time.clock()
  50. while len(words) > 0:
  51. if k == 0:
  52. start = round(time.time())
  53. k+=1
  54. next_word = words.pop(randint(0, len(words)-1))
  55. print(next_word)
  56. answer = input('\ ')
  57. if answer in self.ditems.get(next_word):
  58. print('Right!')
  59. print(' ')
  60. else:
  61. print("Wrong")
  62. print(' ')
  63. print("Правильные варианты перевода: " + ", ".join(self.ditems.get(next_word)).strip(", "))
  64. print(' ')
  65. life -= 1
  66. t = round(time.time()) - start
  67. if t > my_time:
  68. time_test+=1
  69. break
  70. if life <= 0:
  71. break
  72. if life > 0 and time_test == 0:
  73. print("Словарь успешно закрелен.")
  74. print(' ')
  75. else:
  76. print("Вы недостаточно хорошо знаете эти слова. Попробуйте начать заново.")
  77. print(' ')
  78.  
  79. #
  80. def new_dict(name):
  81. new_dict = Dict(name)
  82. print('Вводите слова и их русский(е) эквивалент(ы) в формате "englishword : русскоеслово, другоеслово" (без кавычек)')
  83. print(' ')
  84. print('Чтобы удалить неправильно введённую позицию, введите "DEL" и английское слово')
  85. print(' ')
  86. print('Чтобы завершить создание словаря, нажмите на Enter')
  87. while True:
  88. word = input('\ ')
  89. if word == '':
  90. new_dict.dump()
  91. break
  92. if word == 'DEL':
  93. wrong = input('\ ')
  94. new_dict.rem(wrong)
  95. continue
  96. new_dict.add_item(word)
  97. def open_dict(name):
  98. other_dict = Dict()
  99. other_dict.load_dict(name)
  100. other_dict.learn()
  101. #
  102. while True:
  103. print('Чтобы создать новый словарь, введите "w".')
  104. print(' ')
  105. print('Чтобы открыть уже существующий словарь и начать тренировку, введите "r".')
  106. print(' ')
  107. print('Чтобы покинуть программу, введите "q". ')
  108. print(' ')
  109. ch = input('\ ')
  110. if ch != 'w' and ch != 'r' and ch != 'q':
  111. continue
  112. elif ch == 'w':
  113. n = input('Введите имя нового словаря (по умолчанию оно будет сформировано из текущей даты и времени): ')
  114. new_dict(n)
  115. elif ch == 'r':
  116. t = input('Введите название файла словаря: ')
  117. open_dict(t)
  118. elif ch == 'q':
  119. break
Runtime error #stdin #stdout #stderr 0.04s 11328KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 103, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)