Неожиданное обнаружение входного значения для дат в образце календаря Зодиака

Я делаю задачу в Python, которая заключается в создании календаря зодиака, исходя из введенного месяца и дня месяца.

Я сделал успешный календарь, однако я не знаю, как решить проблему, если я введу неправильное название месяца или несуществующую дату.

Я перепробовал множество вещей: создать другую иерархию или под каждым знаком зодиака, который я написал else: print ('Entering an incorrect date') . Я даже пытался зарегистрироваться, if day <0 and day> 31 or month! = 'March' or month! = 'April' if day <0 and day> 31 or month! = 'March' or month! = 'April' if day <0 and day> 31 or month! = 'March' or month! = 'April' , и т.д ... В конце концов, это оказалось бесполезной функцией, и ничего не помогло.

Я чувствую, что здесь есть однострочное решение для определения дней <0 и> 31 и неправильного названия месяца, но я просто не могу этого понять. Может ли кто-нибудь помочь, пожалуйста?

month = input('Enter the month: ')
day = int(input ('Enter the date of month: '))
if day >= 21 and day <= 31 and month.lower() == 'march' or day >=1 and day <= 19 and month.lower() == 'april':
    zodiac='Aries'
if day >= 20 and day <= 30 and month.lower() == 'april' or day >=1 and day <= 19 and month.lower() == 'may':
    zodiac='Taurus'
if day >= 21 and day <= 31 and month.lower() == 'may' or day >=1 and day <= 20 and month.lower() == 'june':
    zodiac='Gemini'
if day >= 21 and day <= 30 and month.lower() == 'june' or day >=1 and day <= 22 and month.lower() == 'july':
    zodiac='Cancer'
if day >= 23 and day <= 31 and month.lower() == 'july' or day >=1 and day <= 22 and month.lower() == 'august':
    zodiac='Leo'
if day >= 23 and day <= 31 and month.lower() == 'august' or day >=1 and day <= 22 and month.lower() == 'september':
    zodiac='Virgo'
if day >= 23 and day <= 30 and month.lower() == 'september' or day >=1 and day <= 22 and month.lower() == 'october':
    zodiac='Libra'
if day >= 23 and day <= 31 and month.lower() == 'october' or day >=1 and day <= 21 and month.lower() == 'november':
    zodiac='Scorpio'
if day >= 22 and day <= 30 and month.lower() == 'november' or day >=1 and day <= 21 and month.lower() == 'december':
    zodiac='Sagittarius'
if day >= 22 and day <= 31 and month.lower() == 'december' or day >=1 and day <= 19 and month.lower() == 'january':
    zodiac='Capricorn'
if day >= 20 and day <= 31 and month.lower() == 'january' or day >=1 and day <= 18 and month.lower() == 'february':
    zodiac='Aquarius'
if day >= 19 and day <= 28 and month.lower() == 'february' or day >=1 and day <= 20 and month.lower() == 'march':
    zodiac='Pisces'  
print('Conclusion:')
print(zodiac)

Всего 1 ответ


Возможно, вы захотите заглянуть в модуль datetime . С его помощью вы можете легко сравнивать даты и время без лишних операторов if.

Например, если нужно сделать что-то вроде:

import datetime
dt = datetime.datetime.today()
print dt.month

Тогда вы получите:

3

Таким образом, вместо чтения ввода в течение нескольких месяцев в строковом формате, вы можете просто запросить номер месяца, чтобы упростить создание объекта datetime . В качестве альтернативы, вы можете сделать что-то вроде этого:

month_input = input("What is the month?")
months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"]
month_input = month_input.lower().strip() #convert to lowercase and remove whitespace
month_num = months.index(month_input) + 1 #Add one because lists start at index 0

Таким образом, вы можете получить номер месяца, чтобы использовать объект datetime для ваших сравнений и оценок.


Есть идеи?

10000