Guest User

Сраная викторина

a guest
Sep 29th, 2015
1,138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.73 KB | None | 0 0
  1. # Викторина
  2. # Игра на выбор правильного варианта ответа,
  3. # вопросы которой читаются из текстового файла
  4.  
  5. import sys, pickle
  6.  
  7. def open_file(file_name, mode):
  8.     """Открывает файл."""
  9.     try:
  10.         the_file = open(file_name, mode, encoding='utf-8')
  11.     except IOError as e:
  12.         print("Невозможно открыть файл", file_name, ". Работа программы будет завершена.\n", e)
  13.         input("\n\nНажмите Enter, чтобы выйти.")
  14.         sys.exit()
  15.     else:
  16.         return the_file
  17.  
  18. def next_line(the_file):
  19.     """Возвращает в отформатированном виде очередную строку игрового файла."""
  20.     line = the_file.readline()
  21.     line = line.replace("/", "\n")
  22.     return line
  23.  
  24. def next_block(the_file):
  25.     """Возвращает очередной блок даных из игрового файла"""
  26.     category = next_line(the_file)
  27.    
  28.     question = next_line(the_file)
  29.  
  30.     answers = []
  31.     for i in range(4):
  32.         answers.append(next_line(the_file))
  33.  
  34.     correct = next_line(the_file)
  35.     if correct:
  36.         correct = correct[0]
  37.  
  38.     explanation = next_line(the_file)
  39.  
  40.     return category, question, answers, correct, explanation
  41.  
  42. def welcome(title):
  43.     """Приветствует игрока и сообщает ему тему игры."""
  44.     print("\t\tДобро пожаловать в игру 'Викторина'!\n")
  45.     print("\t\t", title, "\n")
  46.  
  47. def save_score(score):
  48.     """Сохраняет результат игры"""
  49.     print("Теперь нужно увековечить Ваша достижение!")
  50.     player = input("Введите Ваше имя: ")
  51.     scores_file = open("scores.bin", "wb+")
  52.     record = (player, score)
  53.     scores = []
  54.     try:
  55.         print("Загружаю таблицу результатов.")
  56.         scores = pickle.load(scores_file)
  57.     except EOFError as e:
  58.         print(e)
  59.         print("Таблица результатов пока пуста, но мы это сейчас исправим!")
  60.     scores_file.close()
  61.     scores.append(record)
  62.     print(scores)
  63.     scores_file = open("scores.bin", "wb")
  64.     pickle.dump(scores, scores_file)
  65.     scores_file.close()
  66.     print("Достижение увековечено!")
  67.  
  68. def show_scores():
  69.     """Показывает результаты предыдущих игр."""
  70.     try:
  71.         scores_file = open("scores.bin", "rb")
  72.     except IOError:
  73.         print("Файл с таблицей результатов не найден.")
  74.     else:
  75.         scores = pickle.load(scores_file)
  76.         print(scores)
  77.         scores_file.close()
  78.  
  79. def game():
  80.     trivia_file = open_file("trivia.txt", "r")
  81.     title = next_line(trivia_file)
  82.     welcome(title)
  83.     score = 0
  84.     category, question, answers, correct, explanation = next_block(trivia_file)
  85.     while category:
  86.         # вывод вопроса на экран
  87.         print(category)
  88.         print(question)
  89.         for i in range(4):
  90.             print("\t", i + 1, "-", answers[i])
  91.  
  92.         # получение ответа
  93.         answer = input("Ваш ответ: ")
  94.  
  95.         # проверка ответа
  96.         if answer == correct:
  97.             print("Да!", end = " ")
  98.             score += 1
  99.         else:
  100.             print("Нет!", end = " ")
  101.         print(explanation)
  102.         print("Счёт:", score, "\n\n")
  103.  
  104.         # переход к следующему вопросу
  105.         category, question, answers, correct, explanation = next_block(trivia_file)
  106.  
  107.     trivia_file.close()
  108.     print("Это был последний вопрос!")
  109.     print("на вашем счету", score)
  110.     save_score(score)
  111.  
  112. def main_menu():
  113.     choice = None
  114.     while choice != "0":
  115.         print(
  116.     """
  117.    Главное меню игры "Викторина"
  118.    0 - Выйти
  119.    1 - Играть
  120.    2 - Показать результаты предыдущих игр
  121.    """)
  122.         choice = input("Ваш выбор: ")
  123.         # выход
  124.         if choice == "0":
  125.             print("До свидания!")
  126.             # приступаем к игре
  127.         elif choice == "1":
  128.             game()
  129.         # показываем результаты предыдущих игр
  130.         elif choice == "2":
  131.             show_scores()
  132.         # непонятный пользовательский ввод
  133.         else:
  134.             print("Извините, в меню нет пункта", choice)
  135.  
  136.  
  137. main_menu()
  138. input("\n\nНажмите Enter, чтобы выйти.")
Advertisement
Add Comment
Please, Sign In to add comment