Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2022 15:52:53

vadim_matveev
Зарегистрирован: 2022-03-23
Сообщения: 14
Репутация: +  -1  -
Профиль   Отправить e-mail  

delta time в строку на русском - лаконично и красиво

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

У меня получилось максимум вот так. Но тут количеством дней в месяце беда - в одних 28, в других 31, а в высокосные годы вообще 29:

 from datetime import *
d = datetime(2022,4,4,14,46,56)
today = datetime.today()
delta = today - d
years = delta.days//365
month = delta.days%365//31
days = delta.days%365%31
hours = delta.seconds//3600
minutes  = delta.seconds%3600//60
seconds = delta.seconds%3600%60
print(f'Между событиями прошло {years} лет {month} месяцев {days} дней {hours} часов {minutes} минут {seconds} секунд')

Офлайн

#2 Апрель 5, 2022 02:23:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

delta time в строку на русском - лаконично и красиво

vadim_matveev
с учётом того, что это должны быть годы, месяцы, дни, часы, минуты и секунды
Как ты себе представляешь результат безо всякого кода? Что это значит - “количество месяцев”?
Сколько месяцев между 31 декабря 2021 и 30 января 2022?
Сколько месяцев между 31 декабря 2021 и 31 января 2022?
Сколько месяцев между 31 декабря 2021 и 1 февраля 2022?

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



Офлайн

#3 Апрель 6, 2022 10:29:19

vadim_matveev
Зарегистрирован: 2022-03-23
Сообщения: 14
Репутация: +  -1  -
Профиль   Отправить e-mail  

delta time в строку на русском - лаконично и красиво

py.user.next
Сколько месяцев между 31 декабря 2021 и 30 января 2022?
Да, вопрос хороший и верный. Погуглив этот вопрос нашёл приемлемое для меня определение:

с 29-го января до 1-го февраля - 0 месяцев 3 дня (29, 30, 31-е января)
с 29-го января до 28-го февраля - 0 месяцев 30 дней (потому что не прошел полный месяц - с 29-го до 29-го)
с 29-го января до 1-го марта - 1 месяц 3 дня (29, 30, 31-е января + весь февраль)
с 1-го февраля до 1-го марта - 1 месяц 0 дней
с 1-го февраля до 2-го марта - 1 месяц 1 день (весь февраль + 1-е марта)
с 28-го февраля до 2-го апреля - 1 месяц 2 дня (28-е февраля + весь март + 1-е апреля)

Ну и следуя принципу что “хороший вопрос содержит половину ответа” прихожу к выводу что нужно таки делать elif от комбинации номеров месяцев начала и окончания, плюс анализ номера дня месяца.

Офлайн

#4 Апрель 6, 2022 10:32:31

vadim_matveev
Зарегистрирован: 2022-03-23
Сообщения: 14
Репутация: +  -1  -
Профиль   Отправить e-mail  

delta time в строку на русском - лаконично и красиво

Думаю придется пока остановится на варианта 365/12 = 30.41666666666667
То есть количество месяцев будет приблизительным.

Офлайн

#5 Апрель 6, 2022 12:07:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

delta time в строку на русском - лаконично и красиво

В каждом високосном году 366 дней. Так что граница месяца в районе нескольких часов даст не тот месяц, если ты будешь считать, что каждый год содержит 365 дней только.

Так что тебе надо не изящно этот код сделать, а хотя бы правильно. Ты его правильно не сделал, поэтому изящества тут не к чему искать. Оно не сделано. Можно себе розовые сказки придумывать, что ты всё сделал, но в реальном программировании это работать не будет. Когда дело будет касаться каких-то важных материалов, ты свою программу “готовую” не сможешь к ним применить, потому что она работает не по-настоящему, а понарошку.



Офлайн

#6 Апрель 7, 2022 16:13:42

vadim_matveev
Зарегистрирован: 2022-03-23
Сообщения: 14
Репутация: +  -1  -
Профиль   Отправить e-mail  

delta time в строку на русском - лаконично и красиво

py.user.next
В каждом високосном году 366 дней. Так что граница месяца в районе нескольких часов даст не тот месяц, если ты будешь считать, что каждый год содержит 365 дней только.Так что тебе надо не изящно этот код сделать, а хотя бы правильно. Ты его правильно не сделал, поэтому изящества тут не к чему искать. Оно не сделано. Можно себе розовые сказки придумывать, что ты всё сделал, но в реальном программировании это работать не будет. Когда дело будет касаться каких-то важных материалов, ты свою программу “готовую” не сможешь к ним применить, потому что она работает не по-настоящему, а понарошку.
Ну насмешил)
Я вообще-то 25 лет уже программирую если что) Могу предположить что ты ещё под стол пешком ходил когда я уже программы писал)
И проектов у меня внедрённых в реальном бизнесе под сотню наверное уже будет. Так что столь ценные замечания как надо писать программы и работать попрошу тебя оставить себе.
Это я в Пайтоне просто новичек.
А по поводу задачи. Ну для учёбных целей вполне себе достаточное решение. Думал может просто есть хакой-то хак, о котором я не знаю. Но видимо ничего такого нет и нужно всё “руцями” писать.

Офлайн

#7 Апрель 7, 2022 21:39:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

delta time в строку на русском - лаконично и красиво

vadim_matveev
Я вообще-то 25 лет уже программирую если что) Могу предположить что ты ещё под стол пешком ходил когда я уже программы писал)
И проектов у меня внедрённых в реальном бизнесе под сотню наверное уже будет.
Покажи один свой проект, если не стыдно, конечно. Не надо показывать свою эту “сотню”, а уж тем более не надо рассказывать рассказы. Слова в НАШЕМ мире ничего не значат. А ты видно из какого-то мира бухгалтерш, которые с открытым ртом тебя слушают обычно о том, как ты там бороздил просторы Вселенной, и ты подумал, что здесь тоже такие же бухгалтерши собрались и поэтому будут тебя тоже слушать.
Сказки свои оставь для каких-нибудь дур предпенсионного возраста.

vadim_matveev
Это я в Пайтоне просто новичек.
Я тебя про питон и не спрашивал ничего. Я тебе предложил пройти пограничные случаи в алгоритме, и ты тут же оказался новичком в алгоритмах самих. Никакого питона тут и близко нет.

vadim_matveev
А по поводу задачи. Ну для учёбных целей вполне себе достаточное решение.
Ой, Мася у нас, оказывается, делает учебные задачки только. А Масе предложили реальную программу написать и Мася обосралась сразу.

Это ПРОСТАЯ программа, и ты её не можешь написать ни на каком языке.

vadim_matveev
Думал может просто есть хакой-то хак, о котором я не знаю.
Ну да, есть теория программирования, которую ты не изучал. Ты думаешь, что для того, чтобы программировать, достаточно язык программирования изучить. А ведь это не так. Для того, чтобы рисовать, изучение карандаша не будет достаточным даже близко.

vadim_matveev
Но видимо ничего такого нет и нужно всё “руцями” писать.
Не, ты точно ничего не писал, иначе такую ахинею не нёс бы. Ты привык ГОВОРИТЬ, и это видно. А писать ты не привык; скорее всего, потому, что ты не умеешь писать.

vadim_matveev
  
print(f'Между событиями прошло {years} лет {month} месяцев {days} дней {hours} часов {minutes} минут {seconds} секунд')
Вот тебе ещё один намёк: когда расстояние будет один месяц, нужно будет писать слово “месяц”, а не “месяцев”; когда расстояние будет два месяца, нужно будет писать слово “месяца”, а не “месяцев”; для лет, дней, часов, минут и секунд работает всё то же самое. Поэтому ты, дружок, и палишься в таких моментах. Интересно, как ты это будешь решать? ведь для этого нужно писать функцию форматировщик, про которые ты даже не подозреваешь в виду отсутствия хоть какого-то опыта.

Так что сказки свои оставь для дур.

“Между событиями прошло 1 лет 3 месяцев 4 дней 3 часов 24 минут 3 секунд” - ахаха! Ну, ты крут! Очень умный программист!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version