Интерактивная викторина на Python

Вы можете практиковаться в программировании, создавая короткие консольные проекты на Python. Один из таких проектов — интерактивная викторина, в которой программа задаёт разные типы вопросов.
Вопросы могут быть с вариантами ответов или требовать текстового ввода. Можно поддерживать несколько корректных вариантов ответа и давать подсказки.
Как создать Python-скрипт и добавить первый вопрос
Создайте файл Python и добавьте первый вопрос. Если вы раньше не писали на Python, доступны множество бесплатных курсов и ресурсов.
- Создайте новый файл текста с именем “InteractiveQuiz.py”.
- Откройте файл в любом текстовом редакторе и добавьте приветствие для пользователя:
print("Привет! Добро пожаловать в викторину по географии. Отвечайте на вопросы по мере их появления.")- Задайте первый вопрос пользователю. Используйте input() для ожидания ответа и сохраните ввод в переменную userInput:
print("Вопрос 1. Какой город является столицей Австралии?")
userInput = input()- Добавьте условие для проверки правильного ответа. Если ответ верный — выведите сообщение. Если нет — укажите правильный ответ:
if (userInput.lower() == "Canberra".lower()):
print("Верно!")
else:
print("К сожалению, правильный ответ — Canberra.")- Чтобы запустить викторину, откройте командную строку и перейдите в папку с файлом. Например, если файл на Рабочем столе, выполните:
cd Desktop- Запустите скрипт командой:
python InteractiveQuiz.py- Дайте ответ на вопрос.
Как добавить несколько вопросов
Повторять одно и то же вручную удобно только на первых шагах. Чтобы избежать дублирования, храните данные о вопросах в объекте.
- В начале файла добавьте класс для хранения вопроса:
class Question:
def __init__(self, questionText, answer):
self.questionText = questionText
self.answer = answer
def __repr__(self):
return '{' + self.questionText + ', ' + self.answer + '}'- Под классом создайте список объектов с вопросами и ответами:
quizQuestions = [
Question("Вопрос 1. Какой город является столицей Австралии", "Canberra"),
Question("Вопрос 2. Какой город является столицей Японии", "Tokyo"),
Question("Вопрос 3. Сколько островов в Филиппинах", "7100")
]- Замените отдельные if и input на цикл for, который проходит по списку вопросов:
for question in quizQuestions:
print(f"{question.questionText}?")
userInput = input()
if (userInput.lower() == question.answer.lower()):
print("Верно!")
else:
print(f"К сожалению, правильный ответ — {question.answer}.")Как добавить вопросы с вариантами ответов
Расширьте класс Question, чтобы он хранил варианты ответов.
- Измените класс в начале файла и добавьте опциональный аргумент multipleChoiceOptions:
class Question:
def __init__(self, questionText, answer, multipleChoiceOptions=None):
self.questionText = questionText
self.answer = answer
self.multipleChoiceOptions = multipleChoiceOptions
def __repr__(self):
return '{' + self.questionText + ', ' + self.answer + ', ' + str(self.multipleChoiceOptions) + '}'- Добавьте вопрос с вариантами в список:
quizQuestions = [
Question("Вопрос 1. Какой город является столицей Австралии", "Canberra"),
Question("Вопрос 2. Какой город является столицей Японии", "Tokyo"),
Question("Вопрос 3. Сколько островов в Филиппинах", "7100"),
Question("Вопрос 4. Какая страна занимает наибольшую территорию", "b", ["(a) США", "(b) Россия", "(c) Австралия", "(d) Антарктида"]),
]- В цикле отображайте варианты, если они есть:
for question in quizQuestions:
if (question.multipleChoiceOptions != None):
print(f"{question.questionText}?")
for option in question.multipleChoiceOptions:
print(option)
userInput = input()
else:
print(f"{question.questionText}?")
userInput = input()
if (userInput.lower() == question.answer.lower()):
print("Верно!")
else:
print(f"К сожалению, правильный ответ — {question.answer}.")Как поддержать альтернативные правильные ответы
Иногда допустимы разные варианты ввода, которые по смыслу равнозначны. Например, на вопрос “В каком полушарии находится Япония?” верные ответы — “North”, “Northern” или “Northern Hemisphere”.
- Добавьте опциональный аргумент alternateAnswers в класс:
class Question:
def __init__(self, questionText, answer, multipleChoiceOptions=None, alternateAnswers=None):
self.questionText = questionText
self.answer = answer
self.multipleChoiceOptions = multipleChoiceOptions
self.alternateAnswers = alternateAnswers
def __repr__(self):
return '{' + self.questionText + ', ' + self.answer + ', ' + str(self.multipleChoiceOptions) + ', ' + str(self.alternateAnswers) + '}'- Добавьте такой вопрос в список:
quizQuestions = [
# ...
Question("Вопрос 5. В каком полушарии находится Япония", "Northern Hemisphere", [], ["north", "northern"]),
]- Проверьте альтернативные ответы в логике проверки:
if (userInput.lower() == question.answer.lower()):
print("Верно!")
elif (question.alternateAnswers != None and userInput.lower() in question.alternateAnswers):
print("Верно!")
else:
print(f"К сожалению, правильный ответ — {question.answer}.")Как давать пользователю подсказки
Вы можете не позволять переходить к следующему вопросу, пока текущий не будет правильно отвечен. Через три неверных попытки можно показывать подсказку.
- Добавьте в класс поле hint:
class Question:
def __init__(self, questionText, answer, hint=None, multipleChoiceOptions=None, alternateAnswers=None):
self.questionText = questionText
self.answer = answer
self.hint = hint
self.multipleChoiceOptions = multipleChoiceOptions
self.alternateAnswers = alternateAnswers
def __repr__(self):
return '{' + self.questionText + ', ' + self.answer + ', ' + str(self.hint) + ', ' + str(self.multipleChoiceOptions) + ', ' + str(self.alternateAnswers) + '}'- Добавьте подсказки к вопросам:
quizQuestions = [
Question("Вопрос 1. Какой город является столицей Австралии", "Canberra", "Начинается на C"),
Question("Вопрос 2. Какой город является столицей Японии", "Tokyo", "Начинается на T"),
Question("Вопрос 3. Сколько островов в Филиппинах", "7100", "Число между 7000 и 8000"),
Question("Вопрос 4. Какая страна занимает наибольшую территорию", "b", "Страна находится на двух континентах", ["(a) США", "(b) Россия", "(c) Австралия", "(d) Антарктида"]),
Question("Вопрос 5. В каком полушарии находится Япония", "Northern Hemisphere", "Верхняя половина Земли", [], ["north", "northern"]),
]- Замените проверку на цикл while, чтобы требовать правильного ответа и выдавать подсказку после трёх ошибок:
for question in quizQuestions:
if (question.multipleChoiceOptions != None):
print(f"{question.questionText}?")
for option in question.multipleChoiceOptions:
print(option)
userInput = input()
else:
print(f"{question.questionText}?")
userInput = input()
count = 0
while (userInput.lower() != question.answer.lower()):
if (question.alternateAnswers != None and userInput.lower() in question.alternateAnswers):
break
count = count + 1
if (count >= 3 and question.hint):
print(f"Подсказка: {question.hint}.")
userInput = input()
else:
print("Неправильно, попробуйте ещё раз.")
userInput = input()
print("Верно!")- Повторно запустите викторину той же командой:
python InteractiveQuiz.py- Отвечайте на вопросы и проверяйте поведение подсказок.
Полезные советы и варианты развития
Важно: этот подход хорош для быстрого прототипа и обучения. Для боевого приложения стоит учитывать хранение данных, тестируемость и удобство локализации.
Альтернативные подходы
- Хранить вопросы в JSON или YAML-файле и загружать их при старте. Это упрощает редактирование и перевод.
- Использовать SQLite или CSV для вопросов, если нужно редактировать через таблицы или веб-интерфейс.
- Для графического интерфейса применить Tkinter или web-фреймворк (Flask, FastAPI).
Когда это не подходит
- Если требуется масштабируемая система с пользователями, прогрессом и аналитикой — лучше использовать базу данных и серверную часть.
- Для мультиязычности и большого объёма контента удобнее отделить данные вопросов от кода.
Ментальные модели для дизайна викторины
- Разделяй данные и логику: код не должен содержать статических вопросов.
- Принцип KISS: начинать с простого, расширять по мере необходимости.
- Для UX важно давать понятный фидбэк: правильно/неправильно и примеры.
Мини-методология разработки викторины
- Определите формат вопросов и метрики успеха (процент правильных ответов, время на вопрос).
- Разработайте модель данных (класс или схема JSON).
- Реализуйте базовую логику показа и проверки ответов.
- Добавьте подсказки, альтернативные ответы и варианты.
- Покройте тестами критические сценарии.
- Перенесите данные в файл/БД при необходимости.
Чек-лист по ролям
Разработчик:
- Отделить данные и код.
- Добавить обработку исключений для input.
- Сделать модуль тестируемым.
Преподаватель:
- Проверьте корректность формулировок вопросов.
- Подготовьте варианты подсказок и критерии приёмки.
Тестировщик:
- Проверить корректность сравнения (регистрозависимость).
- Проверить поведение при пустом вводе и неправильных типах.
Критерии приёмки
- Скрипт запускается командой python InteractiveQuiz.py.
- Вопросы отображаются по очереди.
- При вводе правильного ответа программа переходит к следующему вопросу.
- Альтернативные ответы считаются корректными.
- Подсказка показывается после трёх неправильных попыток.
Шпаргалка по Python для викторины
- input() — считывает строку от пользователя.
- .lower() — переводит строку в нижний регистр для нечувствительного сравнения.
- f-строки — удобны для вставки переменных: f”Текст {variable}”.
- Списки и классы упрощают хранение набора вопросов.
Шаблон готового скрипта
Ниже — компактный пример объединённой реализации. Его можно использовать как стартовый шаблон и расширять.
class Question:
def __init__(self, questionText, answer, hint=None, multipleChoiceOptions=None, alternateAnswers=None):
self.questionText = questionText
self.answer = answer
self.hint = hint
self.multipleChoiceOptions = multipleChoiceOptions
self.alternateAnswers = [a.lower() for a in alternateAnswers] if alternateAnswers else None
def check(self, userInput):
if userInput.lower() == self.answer.lower():
return True
if self.alternateAnswers and userInput.lower() in self.alternateAnswers:
return True
return False
quizQuestions = [
Question("Вопрос 1. Какой город является столицей Австралии", "Canberra", "Начинается на C"),
Question("Вопрос 2. Какой город является столицей Японии", "Tokyo", "Начинается на T"),
Question("Вопрос 3. Сколько островов в Филиппинах", "7100", "Число между 7000 и 8000"),
Question("Вопрос 4. Какая страна занимает наибольшую территорию", "b", "Страна находится на двух континентах", ["(a) США", "(b) Россия", "(c) Австралия", "(d) Антарктида"]),
Question("Вопрос 5. В каком полушарии находится Япония", "Northern Hemisphere", "Верхняя половина Земли", None, ["north", "northern"]),
]
for q in quizQuestions:
attempts = 0
while True:
print(q.questionText + "?")
if q.multipleChoiceOptions:
for opt in q.multipleChoiceOptions:
print(opt)
answer = input().strip()
if q.check(answer):
print("Верно!")
break
attempts += 1
if attempts >= 3 and q.hint:
print(f"Подсказка: {q.hint}")
else:
print("Неправильно, попробуйте ещё раз.")Краткое резюме
- Простая викторина на Python помогает практиковаться и изучать базовые конструкции языка.
- Структурируйте вопросы в объекты, чтобы расширять и поддерживать код.
- Поддержка альтернативных ответов и подсказок улучшает UX.
Если хотите, я могу прислать вариант, где вопросы хранятся в JSON и загружаются из отдельного файла, или адаптировать шаблон под вашу тему викторины.
Похожие материалы
Как убрать заикание звука на YouTube — полное руководство
Как исправить ошибку Audio renderer на YouTube в Windows
Как смотреть Паралимпиаду Токио‑2020 на YouTube
YouTube инкогнито на Android — как включить
Блокировать каналы в рекомендациях YouTube