Как написать астрологическую программу

Если вы верите в гороскопы, для вас плохая новость: все гороскопы основаны на психологическом эффекте Барнума (осторожно, ссылка ведёт на Википедию). Поэтому любая пространная фраза, сказанная конкретно для вашего знака зодиака, может восприниматься как достоверный сигнал судьбы. А значит, в гороскопах можно писать любую чушь при условии, что она достаточно неконкретная и приписана к знакам зодиака.

Но зачем писать чушь, когда её можно запрограммировать? Сегодня мы напишем программу, которая будет выдавать нам персональный гороскоп по запросу. Работать она будет так:

  • выводит 12 чисел, рядом с каждым написан свой знак зодиака;
  • вы вводите число, которое соответствует вашему знаку;
  • получаете в ответ персональный гороскоп на сегодняшний день.

Звучит просто, делается тоже быстро. Летс код.

Логика гороскопа

Если помните, мы уже писали программу, которая выдаёт более-менее осмысленный текст. Сегодня мы не будем настолько глубоко погружаться в код, а сделаем попроще. Но никто не мешает взять логику из той программы и прикрутить к этой: если сделаете это сами, то заработаете +100 к новой профессии.

Гороскоп будет работать так:

  • текст гороскопа состоит из трёх предложений;
  • первое предложение выбирается случайным образом из пяти заготовок;
  • второе предложение состоит из двух частей, каждая из которых тоже выбирается случайным образом;
  • третье предложение делается так же, как и первое;
  • программа выводит числа и ждёт ответ;
  • если пользователь ввёл число от 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="33[96m", endcolor="33[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("Вы ошиблись с числом, запустите программу ещё раз")
# Подключаем модуль случайных чисел 
import random
# Заготовка для первого предложения
first = ["Сегодня — идеальный день для новых начинаний.","Оптимальный день для того, чтобы решиться на смелый поступок!","Будьте осторожны, сегодня звёзды могут повлиять на ваше финансовое состояние.","Лучшее время для того, чтобы начать новые отношения или разобраться со старыми.","Плодотворный день для того, чтобы разобраться с накопившимися делами."]
second = ["Но помните, что даже в этом случае нужно не забывать про","Если поедете за город, заранее подумайте про","Те, кто сегодня нацелен выполнить множество дел, должны помнить про","Если у вас упадок сил, обратите внимание на","Помните, что мысли материальны, а значит вам в течение дня нужно постоянно думать про"]
second_add = ["отношения с друзьями и близкими.","работу и деловые вопросы, которые могут так некстати помешать планам.","себя и своё здоровье, иначе к вечеру возможен полный раздрай.","бытовые вопросы — особенно те, которые вы не доделали вчера.","отдых, чтобы не превратить себя в загнанную лошадь в конце месяца."]
third = ["Злые языки могут говорить вам обратное, но сегодня их слушать не нужно.","Знайте, что успех благоволит только настойчивым, поэтому посвятите этот день воспитанию духа.","Даже если вы не сможете уменьшить влияние ретроградного Меркурия, то хотя бы доведите дела до конца.","Не нужно бояться одиноких встреч — сегодня то самое время, когда они значат многое.","Если встретите незнакомца на пути — проявите участие, и тогда эта встреча посулит вам приятные хлопоты."]
# выводим знаки зодиака
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="33[96m", endcolor="33[0m")))
# Если число введено верно — выдаём гороскоп
if 0 < zodiac < 13:
    print(random.choice(first), random.choice(second), random.choice(second_add), random.choice(third))
else:
    print("Вы ошиблись с числом, запустите программу ещё раз")

Результат работы программы.

Что дальше

Дальше мы сделаем такое:

  • добавим проверку на правильность введённого значения при выборе знака зодиака;
  • добавим больше текста в гороскоп;
  • прикрутим к нему телеграм-бота, который по запросу будет присылать вам гороскоп на компьютер или телефон.
«Python Последнее обновление 25 июля 2019 12:31:56 (UTC / GMT +8 часов)

script1adsense2code

script1adsense3code

Условие Python: упражнение — 38 с решением

Напишите программу на Python для отображения астрологического знака на указанную дату рождения.

Пример решения:

Код Python:

day = int(input("Input birthday: "))
month = input("Input month of birth (e.g. march, july etc): ")
if month =='december':
	astro_sign ='Sagittarius' if (day < 22) else 'capricorn'
elif month =='january':
	astro_sign ='Capricorn' if (day < 20) else 'aquarius'
elif month =='february':
	astro_sign ='Aquarius' if (day < 19) else 'pisces'
elif month =='march':
	astro_sign ='Pisces' if (day < 21) else 'aries'
elif month =='april':
	astro_sign ='Aries' if (day < 20) else 'taurus'
elif month =='may':
	astro_sign ='Taurus' if (day < 21) else 'gemini'
elif month =='june':
	astro_sign ='Gemini' if (day < 21) else 'cancer'
elif month =='july':
	astro_sign ='Cancer' if (day < 23) else 'leo'
elif month =='august':
	astro_sign ='Leo' if (day < 23) else 'virgo'
elif month =='september':
	astro_sign ='Virgo' if (day < 23) else 'libra'
elif month =='october':
	astro_sign ='Libra' if (day < 23) else 'scorpio'
elif month =='november':
	astro_sign ='scorpio' if (day < 22) else 'sagittarius'
print("Your Astrological sign is :",astro_sign)

Пример вывода:

 Входной день рождения: 18                                                                                            
Введите месяц рождения (например, март, июль и т. Д.): Январь                                                          
Ваш астрологический знак: Козерог 

Блок-схема:

«Блок-схема:

Визуализируйте выполнение кода Python:

Следующий инструмент визуализирует, что компьютер делает шаг за шагом при выполнении указанной программы:

Редактор кода Python:

Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.

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

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense5code

disqus2code

script1adsense6code

script1adsense7code

script1adsense8code

Given date of birth, our task is to display astrological sign or Zodiac sign.

Examples

Input : Day = 13, Month = November
Output : Scorpio.

Algorithm

Step 1 : input date of birth.
Step 2 : checks month and date within the valid range of a specified zodiac.
Step 3 : display zodiac sign.

Example Code

def zodiac_sign(day, month):
   # checks month and date within the valid range
   # of a specified zodiac
   if month == 'december':
      astro_sign = 'Sagittarius' if (day < 22) else 'capricorn'
   elif month == 'january':
      astro_sign = 'Capricorn' if (day < 20) else 'aquarius'
   elif month == 'february':
      astro_sign = 'Aquarius' if (day < 19) else 'pisces'
   elif month == 'march':
      astro_sign = 'Pisces' if (day < 21) else 'aries'
   elif month == 'april':
      astro_sign = 'Aries' if (day < 20) else 'taurus'
   elif month == 'may':
      astro_sign = 'Taurus' if (day < 21) else 'gemini'
   elif month == 'june':
      astro_sign = 'Gemini' if (day < 21) else 'cancer'
   elif month == 'july':
      astro_sign = 'Cancer' if (day < 23) else 'leo'
   elif month == 'august':
      astro_sign = 'Leo' if (day < 23) else 'virgo'
   elif month == 'september':
      astro_sign = 'Virgo' if (day < 23) else 'libra'
   elif month == 'october':
      astro_sign = 'Libra' if (day < 23) else 'scorpio'
   elif month == 'november':
      astro_sign = 'scorpio' if (day < 22) else 'sagittarius'
   print(astro_sign)

# Driver code
if __name__ == '__main__':
d = int(input("Enter Day ::>"))
m = input("Enter the Month ::>")
zodiac_sign(d, m)

Output

Enter Day ::>13
Enter the Month ::>november
scorpio

Given date of birth, our task is to display astrological sign or Zodiac sign.

Examples

Input : Day = 13, Month = November
Output : Scorpio.

Algorithm

Step 1 : input date of birth.
Step 2 : checks month and date within the valid range of a specified zodiac.
Step 3 : display zodiac sign.

Example Code

def zodiac_sign(day, month):
   # checks month and date within the valid range
   # of a specified zodiac
   if month == 'december':
      astro_sign = 'Sagittarius' if (day < 22) else 'capricorn'
   elif month == 'january':
      astro_sign = 'Capricorn' if (day < 20) else 'aquarius'
   elif month == 'february':
      astro_sign = 'Aquarius' if (day < 19) else 'pisces'
   elif month == 'march':
      astro_sign = 'Pisces' if (day < 21) else 'aries'
   elif month == 'april':
      astro_sign = 'Aries' if (day < 20) else 'taurus'
   elif month == 'may':
      astro_sign = 'Taurus' if (day < 21) else 'gemini'
   elif month == 'june':
      astro_sign = 'Gemini' if (day < 21) else 'cancer'
   elif month == 'july':
      astro_sign = 'Cancer' if (day < 23) else 'leo'
   elif month == 'august':
      astro_sign = 'Leo' if (day < 23) else 'virgo'
   elif month == 'september':
      astro_sign = 'Virgo' if (day < 23) else 'libra'
   elif month == 'october':
      astro_sign = 'Libra' if (day < 23) else 'scorpio'
   elif month == 'november':
      astro_sign = 'scorpio' if (day < 22) else 'sagittarius'
   print(astro_sign)

# Driver code
if __name__ == '__main__':
d = int(input("Enter Day ::>"))
m = input("Enter the Month ::>")
zodiac_sign(d, m)

Output

Enter Day ::>13
Enter the Month ::>november
scorpio

Ситуация

У заказчика появилась идея создать площадку, своего рода социальную сеть, где астрологи и их клиенты могли бы общаться друг с другом. Основные идеи проекта:

  • Дать возможность астрологам зарабатывать на консультациях, а тем, кто ими пользуется — подобрать подходящего астролога, по рейтингу, специализации и так далее.
  • Астрологи прогнозируют результаты резонансных событий (например, выборов). Если прогноз оказывается верным, астрологу начисляется рейтинг, и событие фиксируется в портфолио.
  • Проведение конкурсов среди астрологов. Клиент указывает дату рождения, устанавливает денежное вознаграждение и задает вопрос из прошлого, на который знает ответ. Любой желающий астролог может участвовать в конкурсе. В конце клиент выбирает победителя.
  • Человек, которому нужна консультация, может выбрать астролога на основании отзывов других людей. При этом все отзывы реальные — так как написать отзыв может только пользователь, купивший услугу.

Задача

Нам нужно было создать удобный сайт для работы астролога со своими клиентами, такой, чтобы они могли рассказать о себе, и собрать собственную базу знаний.

Проектирование

Сначала мы составили карту сайта со всеми разделами, страницами и функциональными особенностями. При этом учитывали роли посетителей — астрологи и их клиенты.

После этого начали работать над прототипом. Сразу старались максимально детализировать интерфейс: основные визуальные особенности и интерфейсные решения — если бы мы что-то упустили, то было бы сложно наверстать это на этапе дизайна.

Кроме того, прототип был интерактивным, проработаны все состояния каждой страницы, в том числе от лица астролога и клиента — ведь они видят сайт по-разному.

Дизайн

Над дизайном работали по прототипу — чтобы ничего не упустить. Отдельно придумывали заставку на главной (интерактивная 3D-графика на WebGL) и отрисовывали ключевые страницы.


Сделали 10 разных виджетов для публичной страницы астрологов и несколько вариантов, из которых собираются статьи на проекте, предлагали 54 иллюстрации для ачивок.


Разработка

Для того, чтобы чат и экспресс-консультации работали моментально, а уведомления о событиях на сайте приходили сразу, мы использовали фреймворк AngularJS и платформу Node.js. Если пользователя на сайте нет, уведомления приходят на почту.

Специально для сайта создали базу данных со схемой изменения часовых поясов и смещения времени — за основу взяли информацию из архивов. Это было необходимо, так как для астрологических прогнозов требуется точная дата и место рождения, а в прошлом в каждом населенном пункте могли быть другие временные зоны, местные смещения времени и переходы на летнее время. Базой можно пользоваться отдельно от сайта.

Особенности проекта

На сайте есть раздел «Библиотека» — сборник обучающих материалов, которые добавляют как редакция, так и сами пользователи. Любой желающий может опубликовать статью или курс, при условии, что он прошел аттестацию.

Каждая статья проходит проверку, после чего редакторы astrology.pro готовят ее к публикации — собирают из готовых виджетов.

В Библиотеке есть бесплатные и платные материалы. Для платных существует подписка: если человек читает платную статью, ее автору уходят отчисления.

Еще одна особенность сайта — геймификация. В личном кабинете можно собирать награды за различные действия: год на сайте, лучшая техника прогноза, автор месяца. Также ввели внутренние баллы — астробонусы. Ими можно оплатить часть услуги или даже всю покупку целиком.

Для астрологов на сайте существует подписка PRO. Она дает возможность размещать неограниченное количество услуг, общаться в закрытом разделе на форуме, оформить свою публичную страницу на отдельном поддомене.

У клиентов есть возможность выбрать астролога и услугу из каталога на сайте. В каталог попадают только те астрологи, которые прошли онлайн-аттестацию. На все услуги действует гарантия — деньги не перечислят астрологу, пока клиент не подтвердит, что получил консультацию.

Консультации бывают не только платными — бесплатные дают возможность астрологам-новичкам поднять рейтинг и найти потенциальных клиентов.

Также на рейтинг влияет раздел прогнозов, где астрологи предсказывают исход знаковых событий, и отзывы, которые клиенты оставляют после заказа услуги.

Клиенты оплачивают услуги картой на сайте или через Яндекс.Деньги. Если на балансе в личном кабинете остались средства, их можно перевести обратно на карту.

Результаты

50

аттестованных астрологов в каталоге

385

вопросов в экспресс-консультации

94

качественные статьи на сайте

Используя
возможности C++ Builder, создайте следующие
программы:

1. Электроэнергия.

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

2. Игра «угадай число».

Цель
игры – угадать целое число случайным
образом определенное программой.

Для
того чтобы игра была более интересной
игроку могут быть предложены подсказки,
например, данное число находится в
пределах от nmax
до nmin,
или данное число четное или нечетное,
или оно делится на 3, и т.п.

Игра
будет еще более интересной если вести
запись имен игроков.

3. Гороскоп

Напишите
астрологическую программу. В ответ на
ввод пользователем дня рождения программа
должна выводить соответствующие знак
зодиака и гороскоп. Месяц может вводиться
в виде числа от 1 до 12. Учтите, что если
день рождения попадает в интервал
одного-двух дней от соседнего знака
зодиака, то программа должна сообщать
об этом, а также выдавать гороскоп для
смежного знака зодиака. Эта программа
будет содержать множественное ветвление.
Тексты гороскопов следует хранить в
файле. Программа должна содержать цикл,
предусматривающий повторный ввод
пользователем дня рождения и возможность
явного завершения работы с программой.

4. Межгород

Напишите
программу расчета стоимости междугородных
переговоров. Стоимость звонка
рассчитывается по следующей шкале:

а)
любой звонок в интервале от 8:00 до 18:00 с
понедельника по пятницу стоит $0.40 в
минуту;

б)
любой звонок в интервале до 8:00 и после
18:00 с понедельника по пятницу стоит
$0.25 в минуту;

в)
любой звонок в субботу и воскресенье
стоит $0.15 в минуту.

Ввод
должен иметь следующий вид: день недели,
время начала звонка, длительность
разговора в минутах. Вывод — стоимость
разговора. Время вводится в 24-часовом
формате.

Продолжительность
разговора в минутах должна вво­диться
в виде целого значения (типа int).
В программе должен быть реализован
цикл, позволяющий пользователю повторное
применение программы и явное завершение
работы с ней. После завершения отладки
этой программы создайте ее более
совершенную версию, выполняющую
считывание из файла информации обо всех
произведенных в течение недели звонках
и записывающую счет за телефонные
разговоры в другой файл. В счете должны
быть перечислены все телефонные разговоры
(дата, время начала, продолжительность),
их стоимость, а также итоговая стоимость.
Порядок телефонных разговоров в файле
вывода должен совпадать с порядком из
файла ввода. Если вы решаете эту задачу
в аудитории, проконсультируйтесь с
преподавателем относительно имен файлов
и места их хранения.

5.
Millennium

Напишите
программу для преобразования года из
обычного формата записи в виде четырех
цифр в формат записи в виде римских
цифр. Для этого используются сле­дующие
римские цифры: V
— 5, X
— 10, L
— 50, С — 100, D
— 500, М — 1000. Напомним, что некоторые
числа формируются посредством следующих
правил вычитания римских цифр: так, IV
равно 4 (V
минус I),
ХL
— 40, СМ — 900 и т.д. Для наглядности приведем
несколько примеров: МСМ — 1900, МСМL
— 1950, МСМLХ
— 1960, МСМХL
— 1940, МСМЕХХХ1Х — 1989. Предположим, что
вводимый пользователем год находится
в пределах между 1 и 3000. Программа должна
включать цикл, позволяющий пользователю
повторно вводить год и выполнять его
преобразование в римские цифры до явного
завершения программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Как написать ассаламу алейкум на арабском
  • Как написать аспирантскую диссертацию
  • Как написать аскезу правильно на желание примеры
  • Как написать аскезу на бумаге чтобы оно исполнилось примеры
  • Как написать архиватор на c