Python time.sleep () игнорируется в программе таймера - PullRequest
0 голосов
/ 21 декабря 2018

Последние несколько дней я пытался создать чрезвычайно простую программу таймера.Тем не менее, я столкнулся с серьезным препятствием, при котором второй отсчет задержки просто полностью игнорируется при запуске программы.Я попытался заменить time.sleep (1) на time.sleep (1000), переставив его во всем цикле while, но безрезультатно.Программа просто запускается без задержки ни в начале, ни во время цикла.

import time
hour, minute, second = 1, 2, 10

print("Starting now.")
x = 1
while x < 2:
    print(str(hour) + ":" + str(minute) + ":" + str(second)) 
    time.sleep(1)
    second = second - 1
    if second == 0:
        minute = minute - 1
        second = second + 60
        if minute ==0:
            hour = hour - 1
            minute = minute + 60
            if hour == 0:
                x = x + 1

Было бы очень полезно, если бы кто-то мог понять это.Спасибо!

1 Ответ

0 голосов
/ 21 декабря 2018

Поскольку другие комментируют код, приведенный в оригинальном вопросе, правильно спит в правильно настроенной среде, этот ответ решает логическую проблему в обработке времени с использованием datetime.Timedelta от вычитания двух datetime не дает часов и минут, поэтому они рассчитываются из секунд.

import time, datetime,math

d = datetime.timedelta(hours=1,minutes=2,seconds=10)
endtime = (datetime.datetime.now()+ d)

    print("Starting now.")
    while datetime.datetime.now().time() <endtime.time():
        td = endtime - datetime.datetime.now()
        print(str(math.floor(td.seconds / 3600)) + ":" +
              str(math.floor(td.seconds / 60) - math.floor(td.seconds / 3600)*60 ) + ":" +
              str(td.seconds - math.floor(td.seconds / 60)*60) ) 
        time.sleep(1)

Вы также можете исправить логику в оригинале следующим образом

import time
hour, minute, second = 1, 2, 10

print("Starting now.")
x = 1
while x < 2:
    print(str(hour) + ":" + str(minute) + ":" + str(second)) 
    time.sleep(1)
    second = second - 1
    if second < 0:
        minute = minute - 1
        if minute >= -1:
            second = second + 60      
        if minute < 0:
            hour = hour - 1
            if hour >= 0:
                minute = minute + 60
    if hour <= 0 and minute <= 0 and second <= 0:
        x = x + 1
...