Ребятушки всем Привет. Сегодня запилим очередной интересный проект на Python. Бывает проснешься пораньше включишь телик или радио, а тебе бодрым утвердительным голосом рассказывают, как пройдет твой день. Или любимый сайт откроешь, а там оракул вещает о твоей судьбе. Да-да это все про гороскоп.
Если вы верите в гороскопы, для вас плохая новость: все гороскопы основаны на психологическом эффекте Барнума (осторожно, ссылка ведёт на Википедию). Поэтому любая пространная фраза, сказанная конкретно для вашего знака зодиака, может восприниматься как достоверный сигнал судьбы. А значит, в гороскопах можно писать любую чушь при условии, что она достаточно неконкретная и приписана к знакам зодиака. Если вы все таки верите в гороскопы, тогда дальше читать не стоит. Я не утверждаю что это все не правда, просто отношусь к гороскопам с большой долей скепсиса.
Но зачем писать чушь, когда её можно запрограммировать? Сегодня мы напишем код, который будет выдавать нам персональный гороскоп по запросу. Напишем небольшое тех. задание:
- выводит 12 чисел, рядом с каждым написан свой знак зодиака;
- вы вводите число, которое соответствует вашему знаку;
- получаете в ответ персональный гороскоп на сегодняшний день.
Звучит просто, делается тоже быстро. Погнали.
Логика гороскопа
Гороскоп будет работать так:
- текст гороскопа состоит из трёх предложений;
- первое предложение выбирается случайным образом из пяти заготовок;
- второе предложение состоит из двух частей, каждая из которых тоже выбирается случайным образом;
- третье предложение делается так же, как и первое;
- программа выводит числа и ждёт ответ;
- если пользователь ввёл число от 1 до 12, выдаёт текст гороскопа, иначе выводит сообщение об ошибке.
Готовим текст
Задача этого этапа — написать текстовые заготовки, из которых будет собираться наш гороскоп. Главная сложность в том, чтобы сделать их связными по звучанию между собой, в каком порядке они бы ни были.
Первое предложение делаем вводным, оно задает тон всему гороскопу. Второе предложение разбиваем на две части и каждую из них пишем отдельно. Проблема та же самая — написать окончания предложений так, чтобы они подходили ко всем началам. Это сложнее, чем кажется, поэтому уделите этому побольше времени.
К третьему предложению мы устали и решили написать там полную дичь. Основное условие — дичь должна звучать гармонично и казаться логичным продолжением гороскопа.
Мы остановились на трёх предложениях, но можно сделать и тридцать три, если есть время и желание поупражняться в написании текста ни о чём.
Последнее, что сделаем в самом начале — подключим модуль, который отвечает за случайные события. Именно с его помощью мы будем выбирать, какие предложения показывать в готовом тексте.
# Подключаем модуль случайных чисел
import random
# Заготовка для первого предложения
first = ["Сегодня — идеальный день для новых начинаний.","Оптимальный день для того, чтобы решиться на смелый поступок!","Будьте осторожны, сегодня звёзды могут повлиять на ваше финансовое состояние.","Лучшее время для того, чтобы начать новые отношения или разобраться со старыми.","Плодотворный день для того, чтобы разобраться с накопившимися делами."]
second = ["Но помните, что даже в этом случае нужно не забывать про","Если поедете за город, заранее подумайте про","Те, кто сегодня нацелен выполнить множество дел, должны помнить про","Если у вас упадок сил, обратите внимание на","Помните, что мысли материальны, а значит вам в течение дня нужно постоянно думать про"]
second_add = ["отношения с друзьями и близкими.","работу и деловые вопросы, которые могут так некстати помешать планам.","себя и своё здоровье, иначе к вечеру возможен полный раздрай.","бытовые вопросы — особенно те, которые вы не доделали вчера.","отдых, чтобы не превратить себя в загнанную лошадь в конце месяца."]
third = ["Злые языки могут говорить вам обратное, но сегодня их слушать не нужно.","Знайте, что успех благоволит только настойчивым, поэтому посвятите этот день воспитанию духа.","Даже если вы не сможете уменьшить влияние ретроградного Меркурия, то хотя бы доведите дела до конца.","Не нужно бояться одиноких встреч — сегодня то самое время, когда они значат многое.","Если встретите незнакомца на пути — проявите участие, и тогда эта встреча посулит вам приятные хлопоты."]
Выбираем знак зодиака
Для этого мы выводим на экран все 12 знаков зодиака и ставим перед каждым число. Затем спрашиваем у пользователя, кто он по гороскопу, чтобы получить от него соответствующее число.
Чтобы текст вопроса не сливался с предыдущим выводом списка, раскрасим наш вопрос в синий цвет. Для этого используем свойство format — оно определяет, как будет визуально выглядеть наш текст.
Следующий момент — по умолчанию Python любой введённый ответ будет считать строкой, а не числом. Чтобы нам получить именно число, преобразуем сразу ввод в числовой формат командой int(). Она принудительно переводит строку в число, которое мы дальше будем проверять на правильность.
# выводим знаки зодиака
print("1 — Овен")
print("2 — Телец")
print("3 — Близнецы")
print("4 — Рак")
print("5 — Лев")
print("6 — Дева")
print("7 — Весы")
print("8 — Скорпион")
print("9 — Стрелец")
print("10 — Козерог")
print("11 — Водолей")
print("12 — Рыбы")
# Спрашиваем у пользователя про его знак
zodiac = int(input("{blue}Введите число с номером знака зодиака: {endcolor}".format(blue="\033[96m", endcolor="\033[0m")))
Выводим готовый текст
Наша задача — проверить, попадает ли введённое число в интервал от 1 до 12. Python умеет делать множественное сравнение — это значит, что мы можем узнать, лежит ли наше число в нужных границах или нет.
Если лежит — выводим текст гороскопа, предложение за предложением. Для этого используем команду random.choice() — она возвращает случайный элемент из списка (массива), кортежа или любой другой переменной с однотипными данными. В нашем случае мы положим в неё названия наших переменных с предложениями, и она случайным образом выберет их оттуда.
Если введённое число в нужный диапазон не попало, то говорим пользователю, что он ошибся, и на этом программа заканчивается.
# Если число введено верно — выдаём гороскоп
if 0 < zodiac < 13:
print(random.choice(first), random.choice(second), random.choice(second_add), random.choice(third))
else:
print("Вы ошиблись с числом, запустите программу ещё раз")
Повторюсь с большим скептицизмом отношусь к гороскопам. А все потому что когда-то один знакомый с местечкового радио напрямую спрашивал какой кому гороскоп написать. И соответственно потом зачитывал его в эфире. Еще пару таких историй слышал про газеты и телик. Поэтому считаю если уж читать гороскоп, тогда только свой и предварительно откорректированный.
Друзья. Если вам понравилась эта статья, поделитесь ей в социальных сетях. Обязательно напишите комментарий если у вас возникли вопросы. Мне важно ваше мнение. У нас есть групповой чат в Telegram, где вы можете оперативно задать вопрос и узнать о последних новостях. И поддержите проект монеткой.