Форум сайта python.su
Добрый день.
Подскажите как можно более лаконично и изящно решить задачу. Есть два события, нужно вывести в виде строки на русском языке сколько времени между ними прошло, с учётом того, что это должны быть годы, месяцы, дни, часы, минуты и секунды.
У меня получилось максимум вот так. Но тут количеством дней в месяце беда - в одних 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} секунд')
Офлайн
vadim_matveevКак ты себе представляешь результат безо всякого кода? Что это значит - “количество месяцев”?
с учётом того, что это должны быть годы, месяцы, дни, часы, минуты и секунды
Офлайн
py.user.nextДа, вопрос хороший и верный. Погуглив этот вопрос нашёл приемлемое для меня определение:
Сколько месяцев между 31 декабря 2021 и 30 января 2022?
Офлайн
Думаю придется пока остановится на варианта 365/12 = 30.41666666666667
То есть количество месяцев будет приблизительным.
Офлайн
В каждом високосном году 366 дней. Так что граница месяца в районе нескольких часов даст не тот месяц, если ты будешь считать, что каждый год содержит 365 дней только.
Так что тебе надо не изящно этот код сделать, а хотя бы правильно. Ты его правильно не сделал, поэтому изящества тут не к чему искать. Оно не сделано. Можно себе розовые сказки придумывать, что ты всё сделал, но в реальном программировании это работать не будет. Когда дело будет касаться каких-то важных материалов, ты свою программу “готовую” не сможешь к ним применить, потому что она работает не по-настоящему, а понарошку.
Офлайн
py.user.nextНу насмешил)
В каждом високосном году 366 дней. Так что граница месяца в районе нескольких часов даст не тот месяц, если ты будешь считать, что каждый год содержит 365 дней только.Так что тебе надо не изящно этот код сделать, а хотя бы правильно. Ты его правильно не сделал, поэтому изящества тут не к чему искать. Оно не сделано. Можно себе розовые сказки придумывать, что ты всё сделал, но в реальном программировании это работать не будет. Когда дело будет касаться каких-то важных материалов, ты свою программу “готовую” не сможешь к ним применить, потому что она работает не по-настоящему, а понарошку.
Офлайн
vadim_matveevПокажи один свой проект, если не стыдно, конечно. Не надо показывать свою эту “сотню”, а уж тем более не надо рассказывать рассказы. Слова в НАШЕМ мире ничего не значат. А ты видно из какого-то мира бухгалтерш, которые с открытым ртом тебя слушают обычно о том, как ты там бороздил просторы Вселенной, и ты подумал, что здесь тоже такие же бухгалтерши собрались и поэтому будут тебя тоже слушать.
Я вообще-то 25 лет уже программирую если что) Могу предположить что ты ещё под стол пешком ходил когда я уже программы писал)
И проектов у меня внедрённых в реальном бизнесе под сотню наверное уже будет.
vadim_matveevЯ тебя про питон и не спрашивал ничего. Я тебе предложил пройти пограничные случаи в алгоритме, и ты тут же оказался новичком в алгоритмах самих. Никакого питона тут и близко нет.
Это я в Пайтоне просто новичек.
vadim_matveevОй, Мася у нас, оказывается, делает учебные задачки только. А Масе предложили реальную программу написать и Мася обосралась сразу.
А по поводу задачи. Ну для учёбных целей вполне себе достаточное решение.
vadim_matveevНу да, есть теория программирования, которую ты не изучал. Ты думаешь, что для того, чтобы программировать, достаточно язык программирования изучить. А ведь это не так. Для того, чтобы рисовать, изучение карандаша не будет достаточным даже близко.
Думал может просто есть хакой-то хак, о котором я не знаю.
vadim_matveevНе, ты точно ничего не писал, иначе такую ахинею не нёс бы. Ты привык ГОВОРИТЬ, и это видно. А писать ты не привык; скорее всего, потому, что ты не умеешь писать.
Но видимо ничего такого нет и нужно всё “руцями” писать.
vadim_matveevВот тебе ещё один намёк: когда расстояние будет один месяц, нужно будет писать слово “месяц”, а не “месяцев”; когда расстояние будет два месяца, нужно будет писать слово “месяца”, а не “месяцев”; для лет, дней, часов, минут и секунд работает всё то же самое. Поэтому ты, дружок, и палишься в таких моментах. Интересно, как ты это будешь решать? ведь для этого нужно писать функцию форматировщик, про которые ты даже не подозреваешь в виду отсутствия хоть какого-то опыта.print(f'Между событиями прошло {years} лет {month} месяцев {days} дней {hours} часов {minutes} минут {seconds} секунд')
Офлайн