Mad Libs на Python — игра Vacation Fun

Что такое Mad Libs
Mad Libs — простая словесная игра, изобретённая Леонардом Стерном и Роджером Прайсом. Один игрок читает историю с пустыми местами, а другие дают слова (существительные, прилагательные, глаголы и т.д.) без знания контекста. Получающийся текст обычно выходит смешным и нелепым.
Классические наборы Mad Libs включают более 180 шаблонов. Игра появилась в поп‑культуре (например, ссылки в сериалах и шоу), доступна в виде книг, карточных игр и мобильных приложений.
Важно: Mad Libs — отличный проект для новичка в программировании: он комбинирует ввод пользователя, работу со строками и базовую логику вывода.
Мини‑определения
- Шаблон — текст с пропусками, которые нужно заполнить словами.
- Заполнитель (placeholder) — место в шаблоне, куда подставляется введённое слово.
Как создать игру Vacation Fun на Python — пошагово
Ниже — упрощённый план и готовый код. Код можно копировать в любой файл .py и запускать.
- Откройте шаблон Mad Libs (например, из раздела Printables на официальном сайте Mad Libs) и разметьте пропуски.
- Объявите переменные для каждого пропуска и запросите ввод через input().
adjective = input("Введите прилагательное: ")
adjective2 = input("Введите ещё одно прилагательное: ")
noun = input("Введите существительное: ")
noun2 = input("Введите ещё одно существительное: ")
plural_noun = input("Введите существительное во множественном числе: ")
game = input("Введите название игры: ")
plural_noun2 = input("Введите существительное во множественном числе: ")
ing_verb = input("Введите глагол с окончанием -ing (напр. swimming): ")
ing_verb2 = input("Введите другой глагол с окончанием -ing: ")
plural_noun3 = input("Введите существительное во множественном числе: ")
ing_verb3 = input("Введите глагол с окончанием -ing: ")
noun3 = input("Введите существительное: ")
plant = input("Введите название растения: ")
body_part = input("Введите часть тела: ")
place = input("Введите название места: ")
ing_verb4 = input("Введите глагол с окончанием -ing: ")
adjective3 = input("Введите прилагательное: ")
number = input("Введите число: ")
plural_noun4 = input("Введите существительное во множественном числе: ")- Соберите историю, подставив переменные в шаблон. В этом примере использована конкатенация строк (оператор +), как в оригинальном учебном материале.
story = ("A vacation is when you take a trip to some " + adjective + " place with your " +
adjective2 + " family. Usually you go to some place that is near a/an " + noun + " or up on a/an " +
noun2 + ". A good vacation place is one where you can ride " + plural_noun + " or play " + game +
" or go hunting for " + plural_noun2 + ". I like to spend my time " + ing_verb + " or " + ing_verb2 +
". When parents go on a vacation, they spend their time eating three " + plural_noun3 +
" a day, and fathers play golf, and mothers sit around " + ing_verb3 +
". Last summer, my little brother fell in a/an " + noun3 + " and got poison " + plant +
" all over his " + body_part + ". My family is going to go to the " + place + ", and I will practice " + ing_verb4 +
". Parents need vacations more than kids because parents are always very " + adjective3 + " and because they have to work " + number +
" hours every day all year making enough " + plural_noun4 + " to pay for the vacation.")- Выведите готовую историю:
print(story)Пример вывода
Варианты улучшений и альтернативные подходы
Важно: базовый вариант хорошо работает для обучения, но у него есть ограничения. Ниже — идеи и альтернативы.
1) Использовать f‑строки или .format вместо конкатенации
f‑строки делают код читаемее и меньше подвержены ошибкам со пробелами:
story = (
f"A vacation is when you take a trip to some {adjective} place with your {adjective2} family. "
f"Usually you go to some place that is near a/an {noun} or up on a/an {noun2}. ..."
)2) Рандомизация шаблонов
Если у вас несколько шаблонов, выбирайте один случайно с помощью модуля random, чтобы игра не приедалась.
3) GUI с Tkinter
Tkinter даёт простую форму ввода и кнопку «Сгенерировать историю». Подходит для демонстрации в классе.
4) Озвучивание с pyttsx3
Модуль pyttsx3 позволяет проговаривать историю голосом офлайн; полезно для детей и интерактивных занятий.
5) Валидация ввода и подсказки
Проверяйте пустые строки и типы (например, число для hours) и давайте подсказки пользователю.
Короткая методология разработки (мини‑процесс)
- Спланируйте шаблон — отметьте все пропуски и их типы.
- Сделайте MVP: рабочий скрипт с вводом и выводом.
- Тестируйте с разными вводами (короткие/длинные, спецсимволы).
- Улучшайте: f‑строки, GUI, озвучивание, сохранение результатов.
- Покажите пользователям и соберите обратную связь.
Когда такой подход не подойдёт
- Если нужна безопасная обработка пользовательского ввода (например, публичный веб‑сервис), нельзя слепо конкатенировать и выводить HTML — требуется экранирование.
- Для многоязычного приложения придётся добавить локализацию шаблонов и правил грамматики.
- Если ожидается большой трафик пользователей, консольный вариант неудобен — нужна серверная архитектура.
Шпаргалка: полезные сниппеты
- Проверка пустого ввода:
value = input("Введите слово: ").strip()
if not value:
value = "(ничего не введено)"- Выбор случайного шаблона:
import random
template = random.choice(templates)
story = template.format(**answers)- Быстрое текстовое озвучивание (pyttsx3):
import pyttsx3
engine = pyttsx3.init()
engine.say(story)
engine.runAndWait()Роль‑ориентированные чек‑листы
Для преподавателя:
- Подготовьте набор шаблонов разного уровня.
- Дайте инструкции по частям речи.
- Подготовьте демонстрацию GUI.
Для ученика (новичка):
- Поймите input() и print().
- Попробуйте заменить конкатенацию на f‑строки.
- Добавьте валидацию ввода.
Для разработчика, который хочет продвинуть проект:
- Добавьте модульность (файлы шаблонов).
- Переход на веб (Flask/FastAPI) при необходимости.
- Подумайте о международной поддержке и экранировании вывода.
Критерии приёмки
- Скрипт запускается и просит ввод для всех заполнителей.
- Итоговая история корректно выводится и читаема.
- Нет необработанных ошибок при пустом вводе.
- При добавлении GUI кнопка «Сгенерировать» формирует тот же текст.
Глоссарий (одно‑стро́чки)
- input(): встроенная функция Python для чтения строки от пользователя.
- f‑строка: литерал строки с подстановкой выражений (Python 3.6+).
- pyttsx3: офлайн‑библиотека для синтеза речи.
Резюме
Mad Libs — простой и наглядный проект для изучения Python. Начав с консольного варианта, вы легко расширите игру: добавите графический интерфейс, озвучивание и случайную генерацию шаблонов. Для преподавателей это удобный инструмент для практики частей речи и работы со строками.
Важно: проверяйте ввод и тестируйте шаблоны на разных языках и вариантах слов, если планируете расширять проект.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента