Помогите исправить код Python

Вот сама задача Год делится на четыре сезона: зима, весна, лето и осень. Хотя даты смены сезонов каждый год могут меняться из-за особенностей календаря, мы в данном упражнении примем допущения, перечисленные в табл. 2.9.

Таблица 2.9. Даты смены сезонов
Сезон Первый день
Весна 20 марта
Лето 21 июня
Осень 22 сентября
Зима 21 декабря

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

mon=input('Введите мясяц с большой буквы')
if mon=='Январь':
    mon=1
elif mon=='Февраль':
    mon=2
elif mon=='Март':
    mon=3
elif mon=='Апрель':
    mon=4
elif mon=='Май':
    mon=5
elif mon=='Июнь':
    mon=6
elif mon=='Июль':
    mon=7
elif mon=='Август':
    mon=8
elif mon=='Сентябрь':
    mon=9
elif mon=='Октябрь':
    mon=10
elif mon=='Ноябрь':
    mon=11
elif mon=='Декабрь':
    mon=12
day=int(input('Введите номерь дня'))
if mon>=3 and day>=20:
    print('Весна')
elif mon==4:
    print('Весна')
elif mon==5:
    print('Весна')
elif mon==6 and day<=20:
    print('весна')
elif mon>=6 and day>=21:
    print('Лето')
elif mon==7:
    print('Лето')
elif mon==8:
    print('Лето')
elif mon==9 and day<=21:
    print('Лето')
elif mon>=9 and day>=22:
    print('Осень')
elif mon==10:
    print('Осень')
elif mon==11:
    print('Осень')
elif mon==12 and day<=20:
    print('Осень')
elif mon==12 and day>=21:
    print('Зима')
elif mon==1:
    print('Зима')
elif mon==2:
    print('Зима')
elif mon==3 and day<=19:
    print('Зима')

Ответы (3 шт):

Автор решения: versetty777
months = {
    'Январь': 1,
    'Февраль': 2,
    'Март': 3,
    'Апрель': 4,
    'Май': 5,
    'Июнь': 6,
    'Июль': 7,
    'Август': 8,
    'Сентябрь': 9,
    'Октябрь': 10,
    'Ноябрь': 11,
    'Декабрь': 12
}

mon = input('Введите месяц с большой буквы: ')
mon_num = months[mon]
day = int(input('Введите номер дня: '))

if mon_num in [12, 1, 2] or (mon_num == 3 and day < 20):
    season = 'Зима'
elif mon_num in [3, 4, 5] or (mon_num == 6 and day <= 20):
    season = 'Весна'
elif mon_num in [6, 7, 8] or (mon_num == 9 and day <= 22):
    season = 'Лето'
else:
    season = 'Осень'

print('Сезон:', season)

Оптимизировал код.

→ Ссылка
Автор решения: CrazyElf
if mon>=3 and day>=20:
    print('Весна')
...
elif mon>=6 and day>=21: # никогда не сработает!
    print('Лето')
...
elif mon>=9 and day>=22: # никогда не сработает!
    print('Осень')
...
elif mon==12 and day>=21: # никогда не сработает!
    print('Зима')

Основная проблема с таким кодом в том, что в случаях, когда должны сработать второй, третий или четвёртый if, они никогда не сработают, потому что при этих условиях сработает первый if и до них очередь просто не дойдёт. Эту проблему можно решить либо проверяя в каждом if оба конца интервала, а не только нижнюю границу. Либо переставить проверки так, чтобы месяца проверялись сначала старшие, а потом уже младшие.

С проверками, где day<=, примерно всё тоже самое.

→ Ссылка
Автор решения: Степан Алексеев
x = int(input("Введите дату: "))
y = str(input("Введите месяц: "))
y = y.lower()

m = {"январь": 31,
     "февраль": 28,
     "март": 31,
     "апрель": 30,
     "май": 30,
     "июнь": 30,
     "июль": 31,
     "август": 31,
     "сентябрь": 30,
     "октябрь": 30,
     "ноябрь": 30,
     "декабрь": 31}

vesna = [20, "март"]
leto = [21, "июнь"]
osen = [22, "сентябрь"]
zima = [21, "декабрь"]
#--------------------------------------------------------------------------
def raschet(x, y):

    a = 0
    for key in m:
        # print(x)
        a = a + m[key]  # Кол-во дней с начала года
        b = a - m[key] + x  # Кол-во дней с начала года + x
        if y == key:
            return a, key, b, m[key]
#-------------------------------------------------------------------------

if y in m:

    vesna_b = raschet(vesna[0], vesna[1])

    leto_b = raschet(leto[0], leto[1])

    osen_b = raschet(osen[0], osen[1])

    zima_b = raschet(zima[0], zima[1])

    rez_b = raschet(x, y)

    if x <= rez_b[3]:

        if vesna_b[2] <= rez_b[2] and leto_b[2] > rez_b[2]:
            print("Весна")

        if leto_b[2] <= rez_b[2] and osen_b[2] > rez_b[2]:
            print("Лето")

        if osen_b[2] <= rez_b[2] and zima_b[2] > rez_b[2]:
            print("Осень")

        if vesna_b[2] > rez_b[2] and zima_b[2] > rez_b[2]:
            print("Зима")
    else:
        print("Неправильно введена дата!")
else:
    print("Неправильно введен месяц!")
→ Ссылка