Найти - Пользователи
Полная версия: Конвертер из числа в дату
Начало » Python для новичков » Конвертер из числа в дату
1
Hecate1988
Добрый день!
Версия Питона 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]
Rodegast
 >>> 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)
Hecate1988
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 = “день”
py.user.next
Hecate1988
Происходит загвоздка в выводе “день ,дня и дней”
Здесь выкладывал вариант.
xam1816
  
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 день
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