Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 7, 2023 14:45:03

Hecate1988
Зарегистрирован: 2023-02-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Конвертер из числа в дату

Добрый день!
Версия Питона 3.11
Windows 10

Нужна помощь в задачке.
Ваша задача — написать программу, которая переводит число в формат времени в читабельном виде.

Пользователь должен ввести число больше 0 и меньше 8639999.

Число, которое является количеством секунд, необходимо перевести в дни, часы, минуты и секунды.

Ну и дополнительной задачей является — забота о выводе.

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

Пример:

0 -> 0 дней, 00:00:00
224930 -> 2 дня, 14:28:50
466289 -> 5 дней, 09:31:29
950400 -> 11 дней, 00:00:00
1209600 -> 14 дней, 00:00:00
8639999 -> 99 дней, 23:59:59
22493 -> 0 дней, 06:14:53
7948799 -> 91 день, 23:59:59

Подсказка: в одной минуте 60 сек. , в одном часе 60*60 сек, в одних сутках 24*60*60 сек. Т.е. используя функцию divmod или методы деления // и % вам необходимо найти соотвествующее кол-во дней, часов, минут, а то что останется - это секунды, которые меньше 60
Дополнить ведущими нулями можно с помощью метода zfill(2)
Происходит загвоздка в выводе “день ,дня и дней”

Например, ввожу 950400
и выбивает:
11 , 00:00:00
а вот слово “дней”, где то потерялось


[code python]
seconds = int(input(" ВВедите любое число больше 0 и меньше 8639999: "))
minutes = 0
hours = 0
days = 0

day = str()
a_zero = str()
b_zero = str()
c_zero = str()
while seconds >= 60:
seconds -= 60
minutes += 1
while minutes >= 60:
minutes -= 60
hours += 1
while hours >= 24:
hours -= 24
days +=1
if seconds / 10 < 1:
c_zero = str(0)
if minutes / 10 < 1:
b_zero = str(0)
if hours / 10 < 1:
a_zero = str(0)
if days % 10 >= 5:
day = "дней"
if days % 10 > 1 and days % 10 < 5:
day = "дня"
if days % 1 == 1:
day = "день"

print(f"{days} {day}, {a_zero}{hours}:{b_zero}{minutes}:{c_zero}{seconds}")
[/code]

Офлайн

#2 Фев. 7, 2023 15:57:11

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

Конвертер из числа в дату

 >>> time = 7948799
>>> d = time // (24*60*60)
>>> h = time % (24*60*60) // (60*60)
>>> m = time % (24*60*60) % (60*60) // 60
>>> s = time % (24*60*60) % (60*60) % 60
>>> d, h, m, s
(91, 23, 59, 59)



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

Офлайн

#3 Фев. 7, 2023 16:50:19

Hecate1988
Зарегистрирован: 2023-02-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Конвертер из числа в дату

Rodegast
Cпасибо!
Вопрос только в одном.
Если я ввожу 7948799 -> получается 91 , 23:59:59, а должно получится 91 день
ну или 2 дня, 0 дней
принципиально,чтоб было выведено (день, дней,дня)

Здесь что то не так:
if days % 10 >= 5:
day = “дней”
if days % 10 > 1 and days % 10 < 5:
day = “дня”
if days % 1 == 1:
day = “день”

Отредактировано Hecate1988 (Фев. 7, 2023 16:58:59)

Офлайн

#4 Фев. 8, 2023 00:41:48

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

Конвертер из числа в дату

Hecate1988
Происходит загвоздка в выводе “день ,дня и дней”
Здесь выкладывал вариант.



Офлайн

#5 Фев. 8, 2023 20:37:22

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1393
Репутация: +  124  -
Профиль   Отправить e-mail  

Конвертер из числа в дату

  
def join_word(num):
    n = num % 100
    if n > 20:
        n %= 10
    out = n == 1 and 'день' \
          or n in [2, 3, 4] and 'дня' \
          or 'дней'
    return out
for i in range(32):
    print(i, join_word(i))

 
0 дней
1 день
2 дня
3 дня
4 дня
5 дней
6 дней
7 дней
8 дней
9 дней
10 дней
11 дней
12 дней
13 дней
14 дней
15 дней
16 дней
17 дней
18 дней
19 дней
20 дней
21 день
22 дня
23 дня
24 дня
25 дней
26 дней
27 дней
28 дней
29 дней
30 дней
31 день

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version