Гид по технологиям

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

5 min read Python Обновлено 02 Jan 2026
Интерактивная викторина на Python
Интерактивная викторина на Python

Лист с заданием викторины на столе

Вы можете практиковаться в программировании, создавая короткие консольные проекты на Python. Один из таких проектов — интерактивная викторина, в которой программа задаёт разные типы вопросов.

Вопросы могут быть с вариантами ответов или требовать текстового ввода. Можно поддерживать несколько корректных вариантов ответа и давать подсказки.

Как создать Python-скрипт и добавить первый вопрос

Создайте файл Python и добавьте первый вопрос. Если вы раньше не писали на Python, доступны множество бесплатных курсов и ресурсов.

  1. Создайте новый файл текста с именем “InteractiveQuiz.py”.
  2. Откройте файл в любом текстовом редакторе и добавьте приветствие для пользователя:
print("Привет! Добро пожаловать в викторину по географии. Отвечайте на вопросы по мере их появления.")
  1. Задайте первый вопрос пользователю. Используйте input() для ожидания ответа и сохраните ввод в переменную userInput:
print("Вопрос 1. Какой город является столицей Австралии?")
userInput = input()
  1. Добавьте условие для проверки правильного ответа. Если ответ верный — выведите сообщение. Если нет — укажите правильный ответ:
if (userInput.lower() == "Canberra".lower()):
    print("Верно!")
else:
    print("К сожалению, правильный ответ — Canberra.")
  1. Чтобы запустить викторину, откройте командную строку и перейдите в папку с файлом. Например, если файл на Рабочем столе, выполните:
cd Desktop
  1. Запустите скрипт командой:
python InteractiveQuiz.py
  1. Дайте ответ на вопрос.

Запуск первого вопроса викторины в терминале

Как добавить несколько вопросов

Повторять одно и то же вручную удобно только на первых шагах. Чтобы избежать дублирования, храните данные о вопросах в объекте.

  1. В начале файла добавьте класс для хранения вопроса:
class Question:
    def __init__(self, questionText, answer):
        self.questionText = questionText
        self.answer = answer

    def __repr__(self):
        return '{' + self.questionText + ', ' + self.answer + '}'
  1. Под классом создайте список объектов с вопросами и ответами:
quizQuestions = [
    Question("Вопрос 1. Какой город является столицей Австралии", "Canberra"),
    Question("Вопрос 2. Какой город является столицей Японии", "Tokyo"),
    Question("Вопрос 3. Сколько островов в Филиппинах", "7100")
]
  1. Замените отдельные 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, чтобы он хранил варианты ответов.

  1. Измените класс в начале файла и добавьте опциональный аргумент 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) + '}'
  1. Добавьте вопрос с вариантами в список:
quizQuestions = [
    Question("Вопрос 1. Какой город является столицей Австралии", "Canberra"),
    Question("Вопрос 2. Какой город является столицей Японии", "Tokyo"),
    Question("Вопрос 3. Сколько островов в Филиппинах", "7100"),
    Question("Вопрос 4. Какая страна занимает наибольшую территорию", "b", ["(a) США", "(b) Россия", "(c) Австралия", "(d) Антарктида"]),
]
  1. В цикле отображайте варианты, если они есть:
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”.

  1. Добавьте опциональный аргумент 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) + '}'
  1. Добавьте такой вопрос в список:
quizQuestions = [
    # ...
    Question("Вопрос 5. В каком полушарии находится Япония", "Northern Hemisphere", [], ["north", "northern"]),
]
  1. Проверьте альтернативные ответы в логике проверки:
if (userInput.lower() == question.answer.lower()):
    print("Верно!")
elif (question.alternateAnswers != None and userInput.lower() in question.alternateAnswers):
    print("Верно!")
else:
    print(f"К сожалению, правильный ответ — {question.answer}.")

Как давать пользователю подсказки

Вы можете не позволять переходить к следующему вопросу, пока текущий не будет правильно отвечен. Через три неверных попытки можно показывать подсказку.

  1. Добавьте в класс поле 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) + '}'
  1. Добавьте подсказки к вопросам:
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"]),
]
  1. Замените проверку на цикл 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("Верно!")
  1. Повторно запустите викторину той же командой:
python InteractiveQuiz.py
  1. Отвечайте на вопросы и проверяйте поведение подсказок.

Несколько вопросов викторины, запущенных в терминале

Полезные советы и варианты развития

Важно: этот подход хорош для быстрого прототипа и обучения. Для боевого приложения стоит учитывать хранение данных, тестируемость и удобство локализации.

Альтернативные подходы

  • Хранить вопросы в JSON или YAML-файле и загружать их при старте. Это упрощает редактирование и перевод.
  • Использовать SQLite или CSV для вопросов, если нужно редактировать через таблицы или веб-интерфейс.
  • Для графического интерфейса применить Tkinter или web-фреймворк (Flask, FastAPI).

Когда это не подходит

  • Если требуется масштабируемая система с пользователями, прогрессом и аналитикой — лучше использовать базу данных и серверную часть.
  • Для мультиязычности и большого объёма контента удобнее отделить данные вопросов от кода.

Ментальные модели для дизайна викторины

  • Разделяй данные и логику: код не должен содержать статических вопросов.
  • Принцип KISS: начинать с простого, расширять по мере необходимости.
  • Для UX важно давать понятный фидбэк: правильно/неправильно и примеры.

Мини-методология разработки викторины

  1. Определите формат вопросов и метрики успеха (процент правильных ответов, время на вопрос).
  2. Разработайте модель данных (класс или схема JSON).
  3. Реализуйте базовую логику показа и проверки ответов.
  4. Добавьте подсказки, альтернативные ответы и варианты.
  5. Покройте тестами критические сценарии.
  6. Перенесите данные в файл/БД при необходимости.

Чек-лист по ролям

Разработчик:

  • Отделить данные и код.
  • Добавить обработку исключений для 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 и загружаются из отдельного файла, или адаптировать шаблон под вашу тему викторины.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как убрать заикание звука на YouTube — полное руководство
Техподдержка

Как убрать заикание звука на YouTube — полное руководство

Как исправить ошибку Audio renderer на YouTube в Windows
Техподдержка

Как исправить ошибку Audio renderer на YouTube в Windows

Как смотреть Паралимпиаду Токио‑2020 на YouTube
Спорт

Как смотреть Паралимпиаду Токио‑2020 на YouTube

YouTube инкогнито на Android — как включить
Руководство

YouTube инкогнито на Android — как включить

Блокировать каналы в рекомендациях YouTube
Инструкция

Блокировать каналы в рекомендациях YouTube

Как не пропускать новые видео на YouTube
Советы

Как не пропускать новые видео на YouTube