Некорректно работают условия

def season(month):
    if a == 12 or 1 or 2:
     print ("зима")   
    if a == 3 or 4 or 5:
     print("весна")
    if  a == 6 or 7 or 8:
     print("лето")
    if a == 9 or 10 or 11:
     print("осень")
    else:
     print("нету такого месяца")     
a = int(input ())   
season(a)   

Код выводит все времена года вместо одного


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

Автор решения: Dezmonder

Во-первых, вы спрашиваете вопрос с тегом "mysql", хотя это явно не он.

Во-вторых, логика работы условий в пайтоне такова, что OR и AND "разграничивают" условия. Соответственно получается ваши условия имеют такой смысл:

a == 12? Или 1? Или 2?

А так как ненулевое число всегда истинно, вы и получаете true во всех условиях.

if a == 12 or a == 1 or a == 2:

Будет работать как вам надо.

А

if a in (12, 1, 2):

Будет при этом читаемое.

→ Ссылка
Автор решения: Алексей Р

Можно обойтись без множества if/elif, вычислив индекс времени года от 0 до 3 по формуле month // 3 % 4

def season(month):
    return ("зима", "весна", "лето", "осень")[month // 3 % 4] if 1 <= month <= 12 else "нет такого месяца"


for a in range(14):
    print(a, season(a))
0 нет такого месяца
1 зима
2 зима
3 весна
4 весна
5 весна
6 лето
7 лето
8 лето
9 осень
10 осень
11 осень
12 зима
13 нет такого месяца
→ Ссылка