Python программа определяющая високосный год

Високосные годы

Надеюсь, вы отлично встретили новый год, и сейчас у вас отличное праздничное настроение. По крайней мере у меня это именно так — мы не пили никакого алкоголя, и чокнулись в полночь бокалами с водой из пятилитровой канистры, поэтому мы проснулись, погуляли, и тут я вспомнил одно из вчерашних поздравлений с Новым годом:

Желаю, чтобы в конце каждого года ты, вспоминая то, что было за последние 366 if ((year%4 == 0 and year%100 != 0) or (year%400 == 0)) else 365 дней, думал про себя:

— Ох, нифига себе, какой был экшен. Обязательно буду рассказывать внукам или напишу об этом потом книгу.

Итак, выше достаточно простой inline-способ определить количество дней в году (переменная year), который, по сути, полностью раскрывает их суть: в григорианском календаре високосными годами считаются те годы, порядковый номер которых либо кратен 4, но при этом не кратен 100, либо кратен 400. Иными словами, если год делится на 4 без остатка, но делится на 100 только с остатком, то он високосный, иначе — невисокосный, кроме случая, если он делится без остатка на 400 — тогда он всё равно високосный.

Например, 2013 год невисокосный, 1700, 1800 и 1900 — опять же невисокосные годы, а вот 2000, 2004, 2008 и 2012 — високосные.

Читайте также:  Python map return map object

Но что, если мы не помним, сколько дней в високосных (366 дней) и невисокосных (365 дней) годах, или просто хотим написать определение количества дней в году максимально быстро? Можно ли сделать так на Python? Конечно же, можно.

Итак, в Python есть модуль calendar. Он как раз отлично подходит для того, чтобы узнать, является ли тот или иной год високосным (или, например, сколько високосных годов в определённом интервале), определить количество дней в месяце, получить номер дня недели для определённой даты и так далее.

В частности, мы можем получить количество дней в каждом месяце года, и просто сложить.

Функция calendar.monthrange принимает номер года в качестве первого аргумента и номер месяца в качестве второго аргумента. Возвращает номер дня недели первого числа данного месяца и количество дней в данном месяце:

>>> import calendar >>> calendar.monthrange(2013, 1) (1, 31) 

Соответственно, мы можем подсчитать общее количество дней для всех 12 месяцев, и получить таким образом количество дней для данного года:

>>> import calendar >>> year = 2013 >>> sum(map(lambda x: calendar.monthrange(year, x)[1], range(1, 13))) 365 

Но если подумать о том, как именно выполняется эта строка, становится очевидно, что это решение очень неэффективно, если нужно посчитать количество дней для большого количества годов.

Проверяем с помощью модуля timeit.

На то, чтобы выполнить её 1 миллион раз, требуется 13.69 секунд, если import calendar делается один раз в начале. Если import calendar делается каждый раз, тогда 14.49 секунд.

Теперь попробуем другой вариант. Он требует знания того, сколько дней в високосных и невисокосных годах, но зато он очень короткий:

>>> import calendar >>> year = 2013 >>> 365+calendar.isleap(year) 365 

И, как легко догадаться, он уже намного быстрее: 0.83 секунд, включая import calendar, и 0.26 секунд, если import calendar делается один раз в начале.

Давайте также посмотрим, сколько требуется времени самому первому варианту, с «ручным» подходом: 0.07 секунд для 2012 и 2013 и 0.12 секунд для 2000 (думаю, всем понятно, откуда берётся такая разница в скорости для этих годов).

Получается, что это и есть самый быстрый вариант из этих трёх:

>>> import calendar >>> year = 2013 >>> 366 if ((year%4 == 0 and year%100 != 0) or (year%400 == 0)) else 365 365 

Конечно, в большинстве случаев вы можете использовать любой из этих вариантов — в конце концов, при определении количества дней в одном, двух, десяти или ста годах вы вряд ли почувствуете какую-либо разницу.

Пишите, оптимизируйте, улучшайте, тестируйте и считайте производительность — но не забывайте о читаемости исходников ваших программ.

С Новым годом! Удачи, счастья, радости и самосовершенствования в новом году.

Источник

Определить високосный год или нет

Определить, является ли год, который ввел пользователем, високосным или невисокосным.

Високосные года делятся нацело на 4. Однако из этого правила есть исключение: столетия, которые не делятся нацело на 400, високосными не являются.

В високосном годе 366 дней, в обычном 365.

  1. Если год не делится на 4, значит он обычный.
  2. Иначе надо проверить не делится ли год на 100.
  3. Если не делится, значит это не столетие и можно сделать вывод, что год високосный.
  4. Если делится на 100, значит это столетие и его следует проверить его делимость на 400.
  5. Если год делится на 400, то он високосный.
  6. Иначе год обычный.

Проверки можно проводить последовательно, а можно группировать через логические операторы «И» и «ИЛИ». Поэтому способов решения задачи может быть несколько.

Pascal

 
// 1-й вариант:

var y: word;
begin
readln(y);
if y mod 4 <> 0 then writeln('Обычный')
else
if y mod 100 = 0 then
if y mod 400 = 0 then writeln('Високосный')
else writeln('Обычный')
else writeln('Високосный');
end.

// 2-й вариант:

var y: word;
begin
readln(y);
if (y mod 4 <> 0) or (y mod 100 = 0) and (y mod 400 <> 0) then
writeln('Обычный')
else
writeln('Високосный');
end.
 

1980
Високосный

1978
Обычный

Язык Си

 
// 1-й вариант:

#include

main() int y;
scanf("%d",&y);
if (y%4 != 0) printf("Обычный");
else
if (y%100 == 0 && y%400 != 0) printf("Обычный");
else printf("Високосный");
printf("\n");
>

// 2-й вариант:

#include

main() int y;
scanf("%d",&y);
if (y%4 != 0 || y%100 == 0 && y%400 != 0) printf("Обычный");
else printf("Високосный");
printf("\n");
>

Python

високосный год python(питон)

 
# 1-й вариант:

y = int(input())
if y % 4 != 0:
print("Обычный")
elif y % 100 == 0:
if y % 400 == 0:
print("Високосный")
else:
print("Обычный")
else:
print("Високосный")

# 2-й вариант:

if y % 4 != 0 or (y % 100 == 0 and y % 400 != 0):
print("Обычный")
else:
print("Високосный")

КуМир

 
| 1-й вариант:

алг високосный год
нач
цел n
ввод n
если mod(n,4) <> 0 то
вывод "Обычный год"
иначе
если mod(n,100) = 0 то
если mod(n,400) = 0 то
вывод "Високосный год"
иначе
вывод "Обычный год"
все
иначе
вывод "Високосный год"
все
все
кон

| 2-й вариант:

алг високосный год
нач
цел n
ввод n
если mod(n,4) <> 0 или mod(n,100) = 0 и mod(n,400) <> 0 то
вывод "Обычный год"
иначе
вывод "Високосный год"
все
кон
 

1100
Обычный год

1992
Високосный год

Basic-256

 
input y
if y%4 = 0 then
if y%100=0 and y%400 <> 0 then
print "365"
else
print "366"
endif
else
print "365"
endif

Источник

Программирование на python

Всем привет! Недавно решал задачи с помощью Python. В задаче просили вычислить високосный год. Признаюсь честно что я всегда думал что високосный год или нет прописано в календарях. к примеру каждый четвертый. Оказывается есть алгоритм для определения високосный год или нет. Вот он: 1. Если год делится без остатка на 4 и если остаток от деления на 100 не равен 0 или если год делится без остатка на 400 то такой год будет високосным. В остальных случаях год будет не високосным. Скрипт на Python 3 выглядит так:

# -*- coding: utf - 8 -*- def year_is(year): if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: return "високосный" else: return "не високосный" year = int(input("введите год :")) print(year_is(year))

Источник

Как определить является ли год високосным в Python

Обложка к статье

Определение того, является ли год високосным, является важной задачей при работе с датами и временем в программировании. Високосный год, по определению, содержит один дополнительный день в феврале. Такой день добавляется каждые четыре года, за исключением тех годов, которые делятся на 100, но не делятся на 400. Это правило было введено для согласования григорианского календаря с солнечным годом.

В Python существует несколько способов определить, является ли год високосным. В этой статье мы рассмотрим несколько методов и подробно их реализацию. Мы рассмотрим проверку с использованием условий и операторов и встроенную функцию calendar.isleap() .

Определение високосного года имеет важное значение при работе с временными интервалами, расчете дат, управлении событиями и других задачах, связанных со временем. Познакомившись с различными методами определения високосного года в Python, вы сможете выбрать наиболее подходящий и эффективный способ для своих конкретных потребностей.

Метод 1: Проверка на високосный год с использованием условий и операторов

Одним из наиболее распространенных способов определения високосного года в Python является использование условных операторов и математических выражений. В этом методе мы проверяем год на соответствие определенным условиям, чтобы определить, является ли он високосным.

В соответствии с правилами, год считается високосным, если он делится на 4 без остатка. Однако, если год делится на 100 без остатка, он не считается високосным, за исключением случаев, когда год делится на 400 без остатка. Таким образом, если год удовлетворяет этим условиям, то он считается високосным, в противном случае — невисокосным.

Давайте рассмотрим пример кода, демонстрирующий этот метод:

year = 2024 if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0): print(f" является високосным годом") else: print(f" не является високосным годом")

В этом примере мы используем условный оператор if для проверки года на соответствие условиям високосного года. Если год делится на 4 без остатка и одновременно не делится на 100 без остатка или делится на 400 без остатка, то выводится сообщение о том, что год является високосным. В противном случае, выводится сообщение о том, что год не является високосным.

В результате выполнения кода выше, если год 2024 является високосным, будет выведено сообщение «2024 является високосным годом».

Таким образом, метод 1 с использованием условий и операторов предоставляет простой и эффективный способ определения високосного года в Python.

Метод 2: Проверка на високосный год с использованием встроенной функции calendar.isleap()

Python предоставляет удобный способ определения високосного года с помощью встроенной функции calendar.isleap() , доступной в модуле calendar . Этот метод позволяет нам проверить, является ли год високосным, используя готовую функцию, которая обрабатывает все необходимые условия.

Для использования этого метода необходимо импортировать модуль calendar . После этого можно вызвать функцию isleap() и передать ей год в качестве аргумента. Функция вернет значение True , если год является високосным, и False , если год не является високосным.

Рассмотрим пример использования этого метода:

import calendar year = 2024 if calendar.isleap(year): print(f" является високосным годом") else: print(f" не является високосным годом")

В данном примере мы импортируем модуль calendar и вызываем функцию isleap() с аргументом year , содержащим нужный нам год. Затем мы используем условный оператор if для вывода сообщения о статусе високосности года.

В результате выполнения приведенного выше кода, если год 2024 является високосным, будет выведено сообщение «2024 является високосным годом».

Использование функции calendar.isleap() позволяет упростить процесс определения високосного года, так как все условия уже реализованы внутри функции. Этот метод предоставляет более компактный и лаконичный подход к определению високосных лет в Python.

Источник

Оцените статью