Как определить знак зодиака по дате и месяцу рождения на Python?

Статус
Закрыто для дальнейших ответов.

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
22
1
3
Система windows 10
Python 3.11
Пишу программу из сборника упражнений. Написал часть кода решил проверить как работает . А работает оно не так как надо. Ввожу данные к примеру 23 января мне правильный ответ "Козерог" . Ввожу 1 февраля ответа нет. Как лучше решить это задание .Я в интернете нашел вариант решения , но там нужно вводить числовые значения месяцев , а не строковые. Я хочу решить через строковые.
Python:
print("Программа по определению знака зодиака")
m_1="декабрь"
m_2="январь"
m_3="февраль"
da_1=int(input("Введите число: "))
da_2=str(input("Введите месяц: "))
if da_2==m_1 or da_2==m_2:
  if da_1>=22 and da_1>=19:
          print("Козерог")
if da_2==m_2 and da_2==m_3:
    if da_1<=18 or da_1>=20:
        print("Водолей")
Подскажите как правильно это решить .
 
  • Мне нравится
Реакции: Dr. Mundo

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
374
108
43
Я в интернете нашел вариант решения , но там нужно вводить числовые значения месяцев , а не строковые. Я хочу решить через строковые
сделайте словарь с числовыми и строковыми значениями, числа - ключи, строки - значения
Python:
from datetime import datetime
import locale

print("Программа по определению знака зодиака")
locale.setlocale(locale.LC_TIME, 'ru_RU')  # Русская локализация для представления строковых значений месяца

zodiac_dict = {
    (datetime.strptime("21-Март", "%d-%B"), datetime.strptime("19-Апрель", "%d-%B")): "Овен",
    (datetime.strptime("20-Апрель", "%d-%B"), datetime.strptime("20-Май", "%d-%B")): "Телец",
    (datetime.strptime("21-Май", "%d-%B"), datetime.strptime("20-Июнь", "%d-%B")): "Близнецы",
    (datetime.strptime("21-Июнь", "%d-%B"), datetime.strptime("22-Июль", "%d-%B")): "Рак",
    (datetime.strptime("23-Июль", "%d-%B"), datetime.strptime("22-Август", "%d-%B")): "Лев",
    (datetime.strptime("23-Август", "%d-%B"), datetime.strptime("22-Сентябрь", "%d-%B")): "Дева",
    (datetime.strptime("23-Сентябрь", "%d-%B"), datetime.strptime("22-Октябрь", "%d-%B")): "Весы",
    (datetime.strptime("23-Октябрь", "%d-%B"), datetime.strptime("21-Ноябрь", "%d-%B")): "Скорпион",
    (datetime.strptime("22-Ноябрь", "%d-%B"), datetime.strptime("21-Декабрь", "%d-%B")): "Стрелец",
    (datetime.strptime("22-Декабрь", "%d-%B"), datetime.strptime("19-Январь", "%d-%B")): "Козерог",
    (datetime.strptime("20-Январь", "%d-%B"), datetime.strptime("18-Февраль", "%d-%B")): "Водолей",
    (datetime.strptime("19-Февраль", "%d-%B"), datetime.strptime("20-Март", "%d-%B")): "Рыбы",
}
input_date = datetime.strptime(input("Введите дату в формате Число-Месяц: "), "%d-%B")

for date_range, sign in zodiac_dict.items():
    start_date, end_date = date_range
    if start_date <= input_date <= end_date:
        print(f"Твой знак зодиака: {sign}")

P.s Тут нужно учесть отдельно вариант для козерога, т.к. не сработает условие. Похоже, что нужно будет тогда писать точное условие дат для каждого зодиака...
 
Последнее редактирование:
  • Мне нравится
Реакции: Dr. Mundo и Vadim_23_03

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
da_2=str(input("Введите месяц: "))
input и так возвращает строку, не нужно оборачивать в str

Я в интернете нашел вариант решения , но там нужно вводить числовые значения месяцев , а не строковые. Я хочу решить через строковые.
сделайте словарь с числовыми и строковыми значениями, числа - ключи, строки - значения
 

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
22
1
3
input и так возвращает строку, не нужно оборачивать в str


сделайте словарь с числовыми и строковыми значениями, числа - ключи, строки - значения
А как это сделать? Примеру если созвездие козерога начинается с 22 декабря и длятся по 18 января .Как это можно указать этот период в ключах?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
А как это сделать? Примеру если созвездие козерога начинается с 22 декабря и длятся по 18 января .Как это можно указать этот период в ключах?
так же, как и у вас
я вам сказал, как можно пример переделать под ваши нужны из этих ваших интернетов, вы же писали
Я в интернете нашел вариант решения , но там нужно вводить числовые значения месяцев , а не строковые. Я хочу решить через строковые.
 
  • Мне нравится
Реакции: Dr. Mundo

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
5
1
3
Чтобы создать полноценную программу для определения знака зодиака по дате рождения, включим в неё все знаки зодиака. Каждый знак зодиака соответствует определенному диапазону дат, и мы будем проверять введенную дату, чтобы узнать, к какому знаку она относится.

Python:
print("Программа по определению знака зодиака по дате рождения")

# Ввод данных пользователем
day = int(input("Введите день рождения: "))
month = input("Введите месяц рождения: ").lower()  # Приведение к нижнему регистру для удобства сравнения

# Определение знака зодиака
if (month == "март" and day >= 21) or (month == "апрель" and day <= 19):
    sign = "Овен"
elif (month == "апрель" and day >= 20) or (month == "май" and day <= 20):
    sign = "Телец"
elif (month == "май" and day >= 21) or (month == "июнь" and day <= 21):
    sign = "Близнецы"
elif (month == "июнь" and day >= 22) or (month == "июль" and day <= 22):
    sign = "Рак"
elif (month == "июль" and day >= 23) or (month == "август" and day <= 22):
    sign = "Лев"
elif (month == "август" and day >= 23) or (month == "сентябрь" and day <= 22):
    sign = "Дева"
elif (month == "сентябрь" and day >= 23) or (month == "октябрь" and day <= 23):
    sign = "Весы"
elif (month == "октябрь" and day >= 24) or (month == "ноябрь" and day <= 22):
    sign = "Скорпион"
elif (month == "ноябрь" and day >= 23) or (month == "декабрь" and day <= 21):
    sign = "Стрелец"
elif (month == "декабрь" and day >= 22) or (month == "январь" and day <= 19):
    sign = "Козерог"
elif (month == "январь" and day >= 20) or (month == "февраль" and day <= 18):
    sign = "Водолей"
elif (month == "февраль" and day >= 19) or (month == "март" and day <= 20):
    sign = "Рыбы"
else:
    sign = "Не удалось определить знак зодиака"

print(f"Ваш знак зодиака: {sign}")

Этот код спрашивает у пользователя день и месяц рождения, а затем на основе этих данных выводит знак зодиака. При сравнении месяцев используется нижний регистр, чтобы учесть разные способы ввода (например, "Январь", "январь" или "ЯНВАРЬ" будут одинаково корректно обработаны). Если введенная дата не подходит под какой-либо из знаков зодиака (что в реальности не должно произойти, если все диапазоны указаны верно), программа сообщит, что не удалось определить знак зодиака.
 
  • Мне нравится
Реакции: Vadim_23_03

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
22
1
3
Чтобы создать полноценную программу для определения знака зодиака по дате рождения, включим в неё все знаки зодиака. Каждый знак зодиака соответствует определенному диапазону дат, и мы будем проверять введенную дату, чтобы узнать, к какому знаку она относится.

Python:
print("Программа по определению знака зодиака по дате рождения")

# Ввод данных пользователем
day = int(input("Введите день рождения: "))
month = input("Введите месяц рождения: ").lower()  # Приведение к нижнему регистру для удобства сравнения

# Определение знака зодиака
if (month == "март" and day >= 21) or (month == "апрель" and day <= 19):
    sign = "Овен"
elif (month == "апрель" and day >= 20) or (month == "май" and day <= 20):
    sign = "Телец"
elif (month == "май" and day >= 21) or (month == "июнь" and day <= 21):
    sign = "Близнецы"
elif (month == "июнь" and day >= 22) or (month == "июль" and day <= 22):
    sign = "Рак"
elif (month == "июль" and day >= 23) or (month == "август" and day <= 22):
    sign = "Лев"
elif (month == "август" and day >= 23) or (month == "сентябрь" and day <= 22):
    sign = "Дева"
elif (month == "сентябрь" and day >= 23) or (month == "октябрь" and day <= 23):
    sign = "Весы"
elif (month == "октябрь" and day >= 24) or (month == "ноябрь" and day <= 22):
    sign = "Скорпион"
elif (month == "ноябрь" and day >= 23) or (month == "декабрь" and day <= 21):
    sign = "Стрелец"
elif (month == "декабрь" and day >= 22) or (month == "январь" and day <= 19):
    sign = "Козерог"
elif (month == "январь" and day >= 20) or (month == "февраль" and day <= 18):
    sign = "Водолей"
elif (month == "февраль" and day >= 19) or (month == "март" and day <= 20):
    sign = "Рыбы"
else:
    sign = "Не удалось определить знак зодиака"

print(f"Ваш знак зодиака: {sign}")

Этот код спрашивает у пользователя день и месяц рождения, а затем на основе этих данных выводит знак зодиака. При сравнении месяцев используется нижний регистр, чтобы учесть разные способы ввода (например, "Январь", "январь" или "ЯНВАРЬ" будут одинаково корректно обработаны). Если введенная дата не подходит под какой-либо из знаков зодиака (что в реальности не должно произойти, если все диапазоны указаны верно), программа сообщит, что не удалось определить знак зодиака.
Про lower не знал. Доработаю код))) Спасибо
 

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
22
1
3
Скажите , ба можно вам написать сюда код, чтобы лишний раз не создавать код на форуме и не засорять место? Код по факту пустяковый (*из учебника) и мне не ясно почему он не хочет работать
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
Скажите , ба можно вам написать сюда код, чтобы лишний раз не создавать код на форуме и не засорять место? Код по факту пустяковый (*из учебника) и мне не ясно почему он не хочет работать
создайте новую тему для нового вопроса, пожалуйста
 
Статус
Закрыто для дальнейших ответов.

Форум IT Специалистов