Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Лиза и календарь на питоне

Гимназия №4 Ученик (138), на голосовании 3 месяца назад
Лиза очень любит изучать календари. Она изучила все календари за последние 200 лет и запомнила количество дней в каждом месяце. Но вот досада, она забыла количество дней в месяце с номером m в году y.

Помогите Лизе вспомнить это количество.

Формат входных данных
В первой строке даны целые числа
m,y ( 1 ≤ m ≤ 12, 1824 ≤ y ≤ 2024) — номер месяца и год.

Формат результата
Выведите единственное целое число — количество дней в указанном месяце указанного года.

Примеры
Входные данные
2 2004
Результат работы
29
Голосование за лучший ответ
WP Morzik Ученик (201) 4 месяца назад
Чтобы определить количество дней в месяце \( m \) в году \( y \), нужно учесть особенности календаря, включая високосные годы. Основные правила таковы:

1. Январь, март, май, июль, август, октябрь и декабрь имеют 31 день.
2. Апрель, июнь, сентябрь и ноябрь имеют 30 дней.
3. Февраль имеет 28 дней в обычный год и 29 дней в високосный год.

Високосный год определяется следующими правилами:
- Год является високосным, если он делится на 4.
- Однако если год делится на 100, он не является високосным, за исключением случая, когда он делится на 400.

Таким образом, алгоритм определения количества дней в месяце выглядит следующим образом:

1. Определите, является ли год високосным.
2. На основе месяца и високосности года определите количество дней.

Теперь давайте напишем код на Python, который выполнит эту задачу:

```python
def is_leap_year(year):
# Год является високосным, если он делится на 4, но не делится на 100, за исключением года, который делится на 400
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

def days_in_month(month, year):
# Список дней в каждом месяце: индекс 0 для января, индекс 11 для декабря
days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

# Если месяц февраль, проверяем високосность года
if month == 2:
if is_leap_year(year):
return 29
else:
return 28
else:
return days[month - 1]

# Ввод данных
m, y = map(int, input().split())

# Вывод результата
print(days_in_month(m, y))
```

### Объяснение кода:

1. **Функция `is_leap_year(year)`**: Определяет, является ли год високосным.
2. **Функция `days_in_month(month, year)`**:
- Использует список `days`, где каждый элемент соответствует количеству дней в месяце (от января до декабря).
- Проверяет, если месяц февраль (2), и если год високосный, возвращает 29, иначе 28.
- Для остальных месяцев просто возвращает соответствующее значение из списка.
3. **Ввод и вывод**: Получает входные данные и выводит результат.

Пример выполнения:

Для ввода:
```
2 2004
```
Вывод будет:
```
29
```
Похожие вопросы