Уведомления

Группа в Telegram: @pythonsu

#1 Июль 9, 2018 20:26:15

snake_blog
Зарегистрирован: 2018-07-09
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Сообщество в ВК

Создал своё сообщество в ВК по Python, в которое пишу авторские статьи по теме https://vk.com/snakeblog
Дело в том, что все сообщества в ВК по теме выглядят одним из следующих образов:

  1. Неактивное
  2. Открытое, с кучей спама
  3. Активное, но в котором одни репосты, то есть нет оригинального контента
Если считаете так же, то подписывайтесь.

Офлайн

#2 Июль 10, 2018 19:48:10

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Сообщество в ВК

Посмотрел я на твою группу и сразу увидел не правильное решение задачи про високосные года. То что задача решена не правильно можно легко понять если посчитать разность между полученным количеством високосных годов и високосных годов в юлианском календаре:

 >>> 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-ти.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июль 11, 2018 11:14:34)

Офлайн

#3 Июль 12, 2018 22:00:37

snake_blog
Зарегистрирован: 2018-07-09
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Сообщество в ВК

Простите, что? Цитата из википедии. В моём коде ровно это и написано.

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

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

Офлайн

#4 Июль 12, 2018 22:40:41

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Сообщество в ВК

> В моём коде ровно это и написано.

Ну вот тебе другая цитата из википедии.

Разница                    Период (по юлианскому календарю)                   Период (по григорианскому календарю)
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 февраля. Значит ты что то не учёл…



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июль 12, 2018 22:44:14)

Офлайн

#5 Июль 13, 2018 00:25:37

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Сообщество в ВК

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

Офлайн

#6 Июль 13, 2018 10:49:30

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Сообщество в ВК

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

> Из этой таблицы видно что каждые сто лет набегает один день, следовательно за 2000 лет (20 столетий) должно было бы набежать двадцать дней, но это не так

скачок, увеличивающий разницу между календарями на один день, происходит 1 марта завершающего столетие года, номер которого кратен 100 и не кратен 400.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июль 13, 2018 11:51:53)

Офлайн

#7 Июль 13, 2018 16:56:53

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Сообщество в ВК

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

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

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

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

Офлайн

#8 Июль 13, 2018 17:58:57

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Сообщество в ВК

> Я не знаю какую задачу решал автор темы, у меня нет регистрации в ВК.

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

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

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

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

Не существует “теоретической” и “текущей” разности между датами.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июль 13, 2018 18:13:01)

Офлайн

#9 Июль 13, 2018 21:31:23

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Сообщество в ВК

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, если у тебя другое решение, выкладывай.

Отредактировано rami (Июль 13, 2018 21:33:05)

Офлайн

#10 Июль 13, 2018 22:13:42

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Сообщество в ВК

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

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

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

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

P.S. Нулевого года не существует.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version