Таймер на пайтон
Пытаюсь создать просто таймер, который работает как обычный, то-есть отсчитывать время от полуночи, до полуночи, но плохо выходит. Подскажите, что не так?
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 шт):
вы каждую секунду прибавляете и по секунде и по минуте и по часу:
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)
Попробуйте так:
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
Возможно будет полезно, решение с помощью модуля 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