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

от admin

Name already in use

Algorithms-on-Python-GeekBrains / Lesson 1 / Task_8.py /

  • Go to file T
  • Go to line L
  • Go to definition R
  • Copy path
  • Copy permalink
  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

# 8. Определить, является ли год, который ввел пользователем, високосным или невисокосным.
year = int ( input ( 'Введите год: ' ))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 :
print ( 'Год високосный' )
else :
print ( 'Год невисокосный' )
  • Copy lines
  • Copy permalink

Footer

© 2023 GitHub, Inc.

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Проверка на високосный год в python (3 способа)

Статьи

Введение

Рассмотрим три способа проверки года на високосность с помощью python.

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

Первый способ

В данном варианте программы мы с Вами напишем программу с более подробным и понятным кодом.

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

Далее создадим условие, в котором проверим, если год делится на 4 без остатка, то он является не високосным:

Теперь добавим elif, в котором проверим, делится ли год на 100 без остатка. Если да, то сработает условие, в котором проверяется делимость года на 400 без остатка, а если же нет, то сработает else. После elif тоже будет идти else, выводящее сообщение о високосности года.

Проверка

И так, проверим работоспособность программы, введём в консоль 2020 год, которяый является високосным:

Теперь введём 2022 год, не являющийся високосным:

Полный код программы:

Второй способ

Во втором способе мы значительно сократим код.

В коде будет производиться проверка на деление года нацело на 4, или 400, а так же на кратность 100:

Проверка

Произведём те же проверки, что и в первом способе:

Третий способ

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

Проверка

Для разнообразия проверим 2024 год, являющийся високосным и 2025, не являющийся високосным.

Заключение

В статье мы с Вами разобрали 3 способа проверки года на високосность с помощью python.

Задача по программированию с продолжением на уроках информатики

Задача по программированию с продолжением на уроках информатики / В. А. Масленкова, К. Г. Горячева, Д. А. Пешкова [и др.]. — Текст : непосредственный // Молодой ученый. — 2016. — № 30.1 (134.1). — С. 32-36. — URL: https://moluch.ru/archive/134/38682/ (дата обращения: 13.03.2023).

Приведём пример задачи с продолжением по информатике:

Задание 1 уровня

Задача первого уровня сложности предполагает:

 умение формализовать постановку задачи;

 составление списка используемых переменных;

 оформление ввода и вывода;

 составление программы и её исполнения вручную;

 проверка работы программы на компьютере.

Задача:

Рассчитать ежемесячные выплаты по кредиту по формуле:

m = (n * p * (1 + p)y) / (12 * ((1 + p)y – 1)), где

m — ежемесячная выплата;
n — сумма кредита;
p — проценты, выраженные в долях единицы;
y — количество лет, на которые взят кредит.

Вычислить суммарную (за все года) выплату банку.

Решение задачи на языке программирования (КуМир):

алг кредит

нач

вывод «Сумма кредита: «

ввод n

вывод «Период: «

ввод y

вывод «Проценты: «

ввод p

p := p / 100

m := (n * p * (1 + p)**y) / (12 * ((1+p)**y1))

s := m * 12 * y

вывод «Ежемесячная выплата: «, m, нс

вывод «Суммарная выплата: «, s, нс

кон

Блок-схема:

C:\Users\777\Desktop\укп.PNG

Задание 2 уровня

Задача второго уровня сложности предполагает:

 использование ветвлений и организацию ввода данных с клавиатуры.

Задача:

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

Пояснение к задаче и алгоритм решения:

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

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

Решение задачи на языке программирования (КуМир):

алг високосный год

если mod(n,4) <> 0 то

вывод «Обычный год»

если mod(n,100) = 0 то

если mod(n,400) = 0 то

вывод «Високосный год»

вывод «Обычный год»

вывод «Високосный год»

алг високосный год

если mod(n,4) <> 0 или mod(n,100) = 0 и mod(n,400) <> 0 то

вывод «Обычный год»

вывод «Високосный год»

Блок-схема:

C:\Users\777\Desktop\в2.PNG

Задание 3 уровня

Задача третьего уровня сложности предполагает:

 выполнение программы для произвольного числа данных.

Задача:

Составить программу, которая раскладывает число на простые числа. Число вводится пользователем.

Подсказка к задаче:

  1. Внешний цикл будет продолжаться до тех пор, пока исходное число не будет в результате деления на простые сомножители сведено к 1.
  2. Внутренний цикл будет бесконечный. Выход из него будет осуществляться по команде «выход», когда найден очередной простой делитель.
  3. Когда простой делитель найден, надо как-то «сообщить», что при новом выполнении этого внутреннего цикла поиск простых делителей надо начинать сначала. Для этого используется флаговая переменная (в данном случае «ф»).
  4. Сам алгоритм поиска простых делителей сводится к последовательному делению исходного числа на подряд идущие натуральные числа от 2. Первое число, на которое нацело делится исходное, и есть его очередной простой сомножитель.

Решение задачи на языке программирования (КуМир):

лг простые сомножители

если mod(ч,п) = 0 то

Блок-схема:

C:\Users\777\Desktop\в3.PNG

  1. «Информатика. 7-9 кл.»: Учебник для общеобразоват. учеб. заведений / А. Г. Кушниренко, Г. В. Лебедев, Я. Н. Зайдельман. — М.: Дрофа, 2001. — 336 с.

Похожие статьи

Задачи по программированию с продолжением на языке Паскаль

Приведём пример задач по программированию на языке Паскаль (с использованием линейных, циклических алгоритмов, генератором случайных чисел и счётчика). «5» – 10 баллов. «4» – 7 баллов. «3» – 3 балла. Задачи. Балл. Задания 1 уровня.

Типовые задачи по тестированию программного обеспечения.

Изучив «Краткие теоретические сведения» методического пособия, студенты приступают к самостоятельному решению задач. Необходимо написать приложение (в соответствии с вариантом) на любом языке программирования (Pascal, Delphi, C++, C#, Java и т. п.

Об использовании метода инварианта, основанного на идее.

число, задача, четное число, ответ, набор чисел, сумма, нечетное число, Четность, решение, общая сумма.

Место и роль системы организации в решении соревновательных.

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

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

Программирование разностного метода решения одной задачи.

Фазылова Л. С., Устинова Л. В., Пак Д. В. Программирование разностного метода решения одной задачи для уравнения

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

Типовые задания при изучении студентами тестирования.

Примеры задач: 1) Вычислить и вывести на экран сумму и число положительных элементов прямоугольной матрицы, у которых индекс строки больше или равен индексу столбца.

Семакин И. Г., Шестаков А. П. Лекции по программированию: Учебное пособие. Изд. 2-е, доп.

Организация решения задач динамического программирования

Пример 1 [1]. Определить оптимальный цикл замены оборудования при следующих исходных данных: , представленных в табл. 2.

Оплата и скидки. Похожие статьи. Решение транспортных задач с помощью линейного программирования.

Декомпозиционный метод решения транспортной задачи.

Стоимостные коэффициенты задавались датчиком равномерных случайных целых 4 чисел в диапазоне от 200 до 400, объемы перевозок также

Основные термины (генерируются автоматически): целевая функция, оптимальное решение задачи, ограничение, задача, сумма.

Задачи по программированию с продолжением на языке Паскаль

Приведём пример задач по программированию на языке Паскаль (с использованием линейных, циклических алгоритмов, генератором случайных чисел и счётчика). «5» – 10 баллов. «4» – 7 баллов. «3» – 3 балла. Задачи. Балл. Задания 1 уровня.

Типовые задачи по тестированию программного обеспечения.

Изучив «Краткие теоретические сведения» методического пособия, студенты приступают к самостоятельному решению задач. Необходимо написать приложение (в соответствии с вариантом) на любом языке программирования (Pascal, Delphi, C++, C#, Java и т. п.

Об использовании метода инварианта, основанного на идее.

число, задача, четное число, ответ, набор чисел, сумма, нечетное число, Четность, решение, общая сумма.

Место и роль системы организации в решении соревновательных.

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

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

Программирование разностного метода решения одной задачи.

Фазылова Л. С., Устинова Л. В., Пак Д. В. Программирование разностного метода решения одной задачи для уравнения

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

Типовые задания при изучении студентами тестирования.

Примеры задач: 1) Вычислить и вывести на экран сумму и число положительных элементов прямоугольной матрицы, у которых индекс строки больше или равен индексу столбца.

Семакин И. Г., Шестаков А. П. Лекции по программированию: Учебное пособие. Изд. 2-е, доп.

Организация решения задач динамического программирования

Пример 1 [1]. Определить оптимальный цикл замены оборудования при следующих исходных данных: , представленных в табл. 2.

Оплата и скидки. Похожие статьи. Решение транспортных задач с помощью линейного программирования.

Декомпозиционный метод решения транспортной задачи.

Стоимостные коэффициенты задавались датчиком равномерных случайных целых 4 чисел в диапазоне от 200 до 400, объемы перевозок также

Основные термины (генерируются автоматически): целевая функция, оптимальное решение задачи, ограничение, задача, сумма.

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

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

Желаю, чтобы в конце каждого года ты, вспоминая то, что было за последние 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 — високосные.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать:
Как отключить гравитацию в 3008

Похожие статьи