Пора применить всё, чему мы научились! В этом проекте мы создадим интерактивный генератор историй — программу, которая задаёт вопросы пользователю и создаёт уникальную историю на основе его ответов.
Этот проект объединяет: переменные, ввод / вывод, условные конструкции и работу со строками.
Цель проекта
Создать программу, которая:
Задаёт пользователю серию вопросов.
На основе ответов формирует персонализированную историю.
Использует условные конструкции для создания разных сюжетных веток.
Что понадобится
Переменные для хранения ответов пользователя.
input() для получения данных.
print() для вывода истории.
if / elif / else для ветвления сюжета.
f-строки для форматирования текста.
Этап 1. Сбор данных
Начнём с простого — соберём информацию о герое истории.
print("=== Генератор историй ===")print()# Собираем данные о героеname = input("Как зовут героя? ")age = int(input("Сколько ему лет? "))profession = input("Кем он работает? ")print()print(f"Отлично! Наш герой — {name}, {age} лет, {profession}.")
Этап 2. Выбор сеттинга
Добавим выбор места действия с помощью условий.
print()print("Где происходит история?")print("1 — в городе")print("2 — в лесу")print("3 — в космосе")choice = input("Твой выбор (1/2/3): ")if choice == "1": setting = "шумном мегаполисе" weather = "под неоновыми вывесками"elif choice == "2": setting = "густом тёмном лесу"
Этап 3. Выбор действия
Теперь дадим пользователю выбор, который повлияет на сюжет.
print()print(f"{name} стоит на развилке.")print("Что делает герой?")print("1 — идёт налево")print("2 — идёт направо")print("3 — остаётся на месте")action = input("Твой выбор (1/2/3): ")print()if action == "1": print(f"
Этап 4. Финал истории
Завершим историю, учитывая все выборы.
print()print("=" * 40)print("КОНЕЦ ИСТОРИИ")print("=" * 40)print()print(f"Так заканчивается история о {name},")print(f"{profession} {age} лет,")print(f"чьё приключение в {setting
Полный код проекта
# === ГЕНЕРАТОР ИСТОРИЙ ===print("=== Генератор историй ===")print()# Этап 1: Сбор данныхname = input("Как зовут героя? ")age = int(input("Сколько ему лет? "))profession = input("Кем он работает? ")print()print(f"Отлично! Наш герой — {name}, {age} лет, {profession
Задания для расширения проекта
Базовые улучшения
Добавь ещё 2–3 варианта сеттинга.
Добавь ещё одну развилку в сюжете.
Добавь случайный элемент (например, погоду).
Продвинутые улучшения
Сделай так, чтобы возраст героя влиял на сюжет (например, если герою меньше 18 — он не может войти в таверну).
Добавь систему «очков судьбы», которые накапливаются от выборов и влияют на финал.
Подведём итоги
Поздравляю! Ты создал свою первую интерактивную программу. Ты научился:
Собирать данные от пользователя.
Использовать условия для ветвления сюжета.
Комбинировать строки с f-форматированием.
Создавать вложенные условия для сложной логики.
Этот проект можно расширять бесконечно — добавляй новые локации, персонажей, предметы!
Домашнее задание
Упражнение №1. Расширение сеттинга
Добавь в проект ещё два варианта места действия:
4 — под водой (подводный мир)
5 — в замке (средневековый замок)
Для каждого варианта придумай подходящую атмосферу.
Упражнение №2. Новая развилка
Добавь ещё одну точку выбора в историю. Например, после встречи с предметом / персонажем герой может:
использовать предмет
обменять на что-то
выбросить
Упражнение №3. Влияние возраста
Сделай так, чтобы возраст героя влиял на сюжет:
если герою меньше 12 лет — он находит волшебную игрушку
если от 12 до 18 — он находит загадочную книгу
если больше 18 — он находит древний артефакт
Упражнение №4. Счётчик выборов
Добавь переменную bravery (смелость), которая:
увеличивается, когда герой делает смелые выборы (открывает сундук, говорит со странником)
уменьшается, когда герой избегает действий
В финале выведи уровень смелости героя.
Упражнение №5 Своя история
Создай полностью свою историю с уникальным сюжетом:
минимум 3 точки выбора
минимум 5 разных концовок
герой должен собирать какой-то ресурс (золото, опыт, репутацию)
Упражнение №6. Случайная встреча БОНУС
Добавь в историю элемент случайности: с помощью import random и random.randint(1, 3) генерируй случайный исход в одной из развилок (например, при встрече с существом — удача 1/3, нейтрально 1/3, неудача 1/3). Выведи итог в зависимости от результата.
Упражнение №7. Журнал приключений БОНУС
Веди строку journal = "" и после каждого важного выбора добавляй в неё запись: journal += "• " + описание + "\\n". В финале выведи «Журнал приключений» со всеми решениями героя.
weather = "под сенью древних деревьев"
elif choice == "3":
setting = "бескрайнем космосе"
weather = "среди мерцающих звёзд"
else:
setting = "загадочном месте"
weather = "в таинственной атмосфере"
print()
print(f"История начинается в {setting}...")
{
name
}
решает пойти налево."
)
print(f"{weather}, {name} находит старый сундук.")
print()
print("Открыть сундук?")
open_chest = input("да/нет: ")
if open_chest == "да":
print(f"\nВ сундуке — древняя карта! {name} теперь знает путь к сокровищам.")
ending = "счастливый"
else:
print(f"\n{name} проходит мимо. Кто знает, что было внутри...")
ending = "загадочный"
elif action == "2":
print(f"{name} решает пойти направо.")
print(f"{weather}, {name} встречает странника.")
print()
print("Заговорить со странником?")
talk = input("да/нет: ")
if talk == "да":
print(f"\nСтранник рассказывает {name} важную тайну!")
ending = "мудрый"
else:
print(f"\n{name} молча проходит мимо. Странник исчезает в тумане.")
ending = "одинокий"
else:
print(f"{name} решает подождать.")
print(f"{weather}, время идёт...")
print(f"\nНеожиданно появляется волшебное существо и дарит {name} подарок!")
ending = "волшебный"
}
"
)
print(f"получило {ending} финал.")
if ending == "счастливый":
print("\n🎉 Поздравляем! Это была отличная история!")
elif ending == "загадочный":
print("\n🔮 Тайны остались нераскрытыми...")
elif ending == "мудрый":
print("\n📚 Знания — лучшее сокровище!")
elif ending == "одинокий":
print("\n🌙 Иногда одиночество — тоже выбор.")
else:
print("\n✨ Магия всегда рядом!")
}
."
)
# Этап 2: Выбор сеттинга
print()
print("Где происходит история?")
print("1 — в городе")
print("2 — в лесу")
print("3 — в космосе")
choice = input("Твой выбор (1/2/3): ")
if choice == "1":
setting = "шумном мегаполисе"
weather = "под неоновыми вывесками"
elif choice == "2":
setting = "густом тёмном лесу"
weather = "под сенью древних деревьев"
elif choice == "3":
setting = "бескрайнем космосе"
weather = "среди мерцающих звёзд"
else:
setting = "загадочном месте"
weather = "в таинственной атмосфере"
print()
print(f"История начинается в {setting}...")
# Этап 3: Выбор действия
print()
print(f"{name} стоит на развилке.")
print("Что делает герой?")
print("1 — идёт налево")
print("2 — идёт направо")
print("3 — остаётся на месте")
action = input("Твой выбор (1/2/3): ")
print()
if action == "1":
print(f"{name} решает пойти налево.")
print(f"{weather}, {name} находит старый сундук.")
print()
print("Открыть сундук?")
open_chest = input("да/нет: ")
if open_chest == "да":
print(f"\nВ сундуке — древняя карта! {name} теперь знает путь к сокровищам.")
ending = "счастливый"
else:
print(f"\n{name} проходит мимо. Кто знает, что было внутри...")
ending = "загадочный"
elif action == "2":
print(f"{name} решает пойти направо.")
print(f"{weather}, {name} встречает странника.")
print()
print("Заговорить со странником?")
talk = input("да/нет: ")
if talk == "да":
print(f"\nСтранник рассказывает {name} важную тайну!")
ending = "мудрый"
else:
print(f"\n{name} молча проходит мимо. Странник исчезает в тумане.")
ending = "одинокий"
else:
print(f"{name} решает подождать.")
print(f"{weather}, время идёт...")
print(f"\nНеожиданно появляется волшебное существо и дарит {name} подарок!")