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

Рейтинг: -3Ответов: 1Опубликовано: 19.01.2023

Вот сама задача Год делится на четыре сезона: зима, весна, лето и осень. Хотя даты смены сезонов каждый год могут меняться из-за особенностей календаря, мы в данном упражнении примем допущения, перечисленные в табл. 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
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<=, примерно всё тоже самое.