Таймер на пайтон

Пытаюсь создать просто таймер, который работает как обычный, то-есть отсчитывать время от полуночи, до полуночи, но плохо выходит. Подскажите, что не так?

import time

seconds = 57
minutes = 0
hours = 0

while seconds < 60:
    print(seconds,':',minutes,':',hours)
    seconds += 1
    minutes += 1
    hours += 1
    time.sleep(1)
    if seconds == 60:
        seconds = 0
        minutes += 1
    elif minutes == 60:
        seconds = 0
        minutes = 0
        hours += 1

Ответы (3 шт):

Автор решения: Zhihar

вы каждую секунду прибавляете и по секунде и по минуте и по часу:

seconds += 1
minutes += 1
hours += 1

а затем, если секунд 60 то еще раз прибавляете по минуте :)

вторая ваша ошибка

if seconds == 60:
    ...
elif minutes == 60:

вы этим elif говорите, что у вас не возможна ситуация когда и секунд 60 и минут 60 - но в жизни это не так

третья ваша ошибка - в бесконечном цикле

с одной стороны у вас цикл пока не будет 60 секунд;

while seconds < 60:

но с другой стороны вы внутри цикла обрабатываете ситуацию когда секунд 60 и сбрасываете счётчик секунд в 0, таким образом когда доходит до проверки условия в цикле - секунд никогда не бывает 60

вам достаточно такого кода:

seconds = 57
minutes = 0
hours = 0

while True:
    time.sleep(1)

    print(seconds,':',minutes,':',hours)
    seconds += 1

    if seconds == 60:
        seconds = 0
        minutes += 1

    if minutes == 60:
        minutes = 0
        hours += 1

если делать по красоте - я бы делал так:

seconds, minutes, hours = (57, 0, 0)

while True:
    time.sleep(1)

    print(f"{hours:02d}:{minutes:02d}:{seconds:02d}")
    seconds += 1

    seconds, minutes, hours = (0, minutes + 1, hours) if seconds == 60 else (seconds, minutes, hours)
    seconds, minutes, hours = (seconds, 0, hours + 1) if minutes == 60 else (seconds, minutes, hours)
→ Ссылка
Автор решения: Kers

Попробуйте так:

seconds = 57
minutes = 0
hours = 0

while seconds < 60:
    print(seconds,':',minutes,':',hours)
    seconds += 1
    # minutes += 1
    # hours += 1
    time.sleep(1)
    if seconds == 60:
        seconds = 0
        minutes += 1
    if minutes == 60:
        # seconds = 0
        minutes = 0
        hours += 1
→ Ссылка
Автор решения: insolor

Возможно будет полезно, решение с помощью модуля datetime из стандартной библиотеки Python:

from time import sleep
from datetime import datetime, date, time, timedelta

current_time = datetime.combine(date.today(), time(0, 0, 57))

while True:
    print(current_time.time().isoformat())
    sleep(1.0)
    current_time += timedelta(seconds=1)

Еще вариант, можно хранить время в секундах, а выделять отдельно часы/минуты/секунды уже при выводе, это намного упрощает логику программы:

import time

seconds = 57

while True:
    print('{:02}:{:02}:{:02}'.format(seconds // 3600 % 24,
                                     seconds // 60 % 60,
                                     seconds % 60))
    time.sleep(1.0)
    seconds += 1
→ Ссылка