Списки, словари и функции — в программе с игровым счётом.
Что строим
Вторая программа — викторина: программа задаёт вопросы, сверяет ответы и ведёт счёт. По структуре это уже «настоящее» приложение: данные (списокИзменяемая упорядоченная коллекция элементов: [1, 2, 3]. По-английски list. вопросов) отделены от логики (функцияИменованный блок кода, который можно вызывать многократно. Может принимать аргументы и возвращать результат. проведения игры). Точно так же устроены реальные программы: данные — в базе, логика — в коде.
Шаг 1. Данные: список словарей
Каждый вопрос — словарьКоллекция пар «ключ → значение»: {"a": 1}. Быстрый доступ по ключу. По-английски dict. с текстом и правильным ответом. Все вопросы — в списке. Добавить вопрос = дописать словарь, код логики не меняется:
▶ questions.py
Шаг 2. Задаём вопросы и считаем счёт
Проходим по списку циклом, спрашиваем игрока через input(), сравниваем ответы. Чтобы «Париж» и «париж» считались одинаковыми, приводим ввод к нижнему регистру и обрезаем пробелы:
▶ quiz-loop.py
💡Совет
В stdin песочницы введите ответы по строкеТекстовое значение в кавычках: "привет". Неизменяема. По-английски string (str). на вопрос: например, Париж и 6. Заметьте: благодаря .strip().lower() регистр и случайные пробелы не мешают.
Шаг 3. Отделяем логику: функция run_quiz
Сейчас проверка ответов «зашита» в циклКонструкция, повторяющая блок кода: for перебирает элементы, while — пока условие истинно. с input(). Вынесем логику в функцию, которая принимает вопросы и готовые ответы списком, а возвращает счёт. Такая функция не зависит от input() — её легко проверить тестами (и именно так вы и сдадите упражнение):
Заданиерешение.py
Напишите функцию run_quiz(questions, answers). questions — список словарей с ключами "q" и "answer"; answers — список ответов игрока (той же длины). Сравнивайте ответы без учёта регистра и крайних пробелов (.strip().lower()), за каждое совпадение +1 очко. Верните итоговый счёт.
Шаг 4. Финальная версия с оценкой
Соединяем всё: функция + вопросы + вывод оценки по доле правильных ответов:
▶ quiz.py
Идеи для развития
Проект можно расширять — попробуйте сами:
добавьте в словарь ключ "points" — за сложные вопросы больше очков;
перемешайте вопросы (random.shuffle);
дайте две попытки на вопрос — пригодится вложенный цикл из прошлого модуля;
после модуля про файлы и JSON — храните вопросы в отдельном файле.
❓Проверь себя
Зачем данные (вопросы) отделяют от логики (цикла проверки)?
Зачем к ответу игрока применяют .strip().lower()?
Почему функцию run_quiz(questions, answers) легко тестировать?
Что запомнить
Список словарей — удобный формат «базы данных» маленькой программы.
Данные отдельно, логика отдельно — программу легко расширять.
Функции с параметрами и return тестируются автоматически, в отличие от кода с input().
Нормализация ввода (.strip().lower()) делает сравнение устойчивым.
Комментарии
Загрузка…
Загрузка комментариев…