Найти - Пользователи
Полная версия: Сообщество в ВК
Начало » Python проекты » Сообщество в ВК
1 2
snake_blog
Создал своё сообщество в ВК по Python, в которое пишу авторские статьи по теме https://vk.com/snakeblog
Дело в том, что все сообщества в ВК по теме выглядят одним из следующих образов:
  1. Неактивное
  2. Открытое, с кучей спама
  3. Активное, но в котором одни репосты, то есть нет оригинального контента
Если считаете так же, то подписывайтесь.
Rodegast
Посмотрел я на твою группу и сразу увидел не правильное решение задачи про високосные года. То что задача решена не правильно можно легко понять если посчитать разность между полученным количеством високосных годов и високосных годов в юлианском календаре:
 >>> gk = len([y for y in range(2019) if (y % 400 == 0) or (y % 4 == 0) and (y % 100 != 0)])
>>> uk = len([y for y in range(2019) if (y % 4 == 0)])
>>> uk - gk
15
Как видно разница составила 15 лет вместо 13-ти.
snake_blog
Простите, что? Цитата из википедии. В моём коде ровно это и написано.

Отсюда следует распределение високосных годов:

год, номер которого кратен 400, — високосный;
остальные годы, номер которых кратен 100, — невисокосные;
остальные годы, номер которых кратен 4, — високосные.
Rodegast
> В моём коде ровно это и написано.

Ну вот тебе другая цитата из википедии.
Разница                    Период (по юлианскому календарю)                   Период (по григорианскому календарю)
10 5 октября 1582 — 29 февраля 1700 15 октября 1582 — 11 марта 1700
11 1 марта 1700 — 29 февраля 1800 12 марта 1700 — 12 марта 1800
12 1 марта 1800 — 29 февраля 1900 13 марта 1800 — 13 марта 1900
13 1 марта 1900 — 29 февраля 2100 14 марта 1900 — 14 марта 2100
14 1 марта 2100 — 29 февраля 2200 15 марта 2100 — 15 марта 2200
15 1 марта 2200 — 29 февраля 2300 16 марта 2200 — 16 марта 2300
Из этой таблицы видно что сейчас разница между юлианским и григорианским календарём должно составлять 13 дней, а не 15. Но судя по твоим расчётам я должен отмечать новый год не 14, а 16 февраля. Значит ты что то не учёл…
rami
Rodegast
Из этой таблицы видно что сейчас разница между юлианским и григорианским календарём должно составлять 13 дней, а не 15.
Из этой таблицы видно что каждые сто лет набегает один день, следовательно за 2000 лет (20 столетий) должно было бы набежать двадцать дней, но это не так. Количество високосных лет за 2019 лет можно посчитать с помощью модуля calendar:
 >>> import calendar
>>> sum(calendar.isleap(i) for i in range(2019))
490
столько же получается по формуле:
 >>> len([y for y in range(2019) if (y % 400 == 0) or (y % 4 == 0) and (y % 100 != 0)])       
490
в то время, как по Юлианскому календарю:
 >>> len([y for y in range(2019) if (y % 4 == 0)])       
505
Rodegast
И ты допускаешь туже самую ошибку как и автор темы. У тебя должно получаться 13 дней, а не 15. Иначе твои вычисления не верны.

> Из этой таблицы видно что каждые сто лет набегает один день, следовательно за 2000 лет (20 столетий) должно было бы набежать двадцать дней, но это не так
скачок, увеличивающий разницу между календарями на один день, происходит 1 марта завершающего столетие года, номер которого кратен 100 и не кратен 400.
rami
rami
Из этой таблицы видно что каждые сто лет набегает один день, следовательно за 2000 лет (20 столетий) должно было бы набежать двадцать дней, но это не так.
Я не обратил внимания, что в таблице не все столетние года, а только не високосные, 1600 и 2000 как и должно быть отсутствуют. Таблица правильная.

Rodegast
И ты допускаешь туже самую ошибку как и автор темы. У тебя должно получаться 13 дней, а не 15. Иначе твои вычисления не верны.
Я не знаю какую задачу решал автор темы, у меня нет регистрации в ВК.

Если нужно было посчитать теоретическое количество високосных лет по правилам Юлианского и Григорианского календарей от начала нашей эры и до сих пор, а затем вычислить разность, то он считал правильно, должно получиться 15. Но для подсчёта текущей разницы такие расчёты не подойдут.

В реальности, если нужно посчитать текущую разницу между двумя календарями, нужно за основу брать разницу установленную при введении Григорианского календаря — десять дней (не зависимо от того сколько должно быть теоретически) и учесть происшедшие с тех пор изменения (ещё три дня), получится текущая разность 13 дней.
Rodegast
> Я не знаю какую задачу решал автор темы, у меня нет регистрации в ВК.

У меня тоже регистрации нет, но задачу и без неё показывают. https://vk.com/snakeblog?w=wall-168602618_16
Если в двух словах, то нужно создать список всех високосных годов с 1 по 2018.

> то он считал правильно, должно получиться 15.

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

> Но для подсчёта текущей разницы такие расчёты не подойдут.

Не существует “теоретической” и “текущей” разности между датами.
rami
Rodegast
Не существует “теоретической” и “текущей” разности между датами.
До нашей эры високосные годы в Юлианском календаре реально были каждые три года, а не каждые четыре, потом отменили несколько високосных лет, нулевой и четвёртый не были високосными.

Задача: напишите программу в 1 строчку, которая создаёт список всех високосных годов с 0 до 2018.
Если условия задачи понимать буквально, то список високосных лет до 1582 года должен содержать високосные года по Юлианскому календарю, а после по Григорианскому. Фактически это все года которые делятся на 4, за исключением 0, 4, 1700, 1800, 1900 годов.

Моё решение:
 [year for year in range(8, 2018, 4) if year < 1582 or year % 100 or not year % 400]


Решение ТС:
 [year for year in range(2019) if (year % 400 == 0) or (year % 4 == 0) and (year % 100 != 0)]
В таком случае решение ТС не правильное, так как оно содержит 0 и 4 года, которые не были високосными и не содержит 100, 200, 300, 500, 600, 700, 900, 1000, 1100, 1300, 1400, 1500 года, которые реально были високосные.

Rodegast, если у тебя другое решение, выкладывай.
Rodegast
> До нашей эры високосные годы в Юлианском календаре реально были каждые три года, а не каждые четыре, потом отменили несколько високосных лет, нулевой и четвёртый не были високосными.

Под календарём я подразумеваю способ расчёта даты, по этому такие подробности для нас мало интересны.

> Если условия задачи понимать буквально, то список високосных лет до 1582 года должен содержать високосные года по Юлианскому календарю, а после по Григорианскому.

Ты мыслишь в правильном направлении, но почему юлианский календарь действует до 1582 года, а на пример не до 1918-го?

P.S. Нулевого года не существует.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB