Как сделать обратный отсчет времени () - PullRequest
0 голосов
/ 30 июня 2018

Я сделал этот код для обратного отсчета:

import time
end = time.time() + 5.5
if time.time() == end:
    print('Time\'s up')

Это не сработало. Это не было ошибкой. Ничего не случилось. У кого-нибудь есть идея? Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Вы сравниваете равенство, но это предполагает, что возвращенная временная метка равна точно так же, как исходная, плюс 5,5 секунд. Этого не произойдет, если вам не повезет. Кроме того, вы выполняете эту проверку вправо после извлечения предыдущего раза, и нет никакой вероятности, что между этими двумя утверждениями пройдет 5,5 секунды.

Вы можете исправить это, используя соответствующий способ - или наивный способ.

Правильный способ справиться с этим - использовать time.sleep(5.5):

import time

time.sleep(5.5)
print("Time's up!")

Наивный способ реализовать его, как в вашем примере:

import time
end = time.time() + 5.5

while time.time() < end:
    pass

print("Time's up")

Это будет вращать пустой цикл, пока не пройдет запрошенное время. Причина, по которой я называю это наивным, заключается в том, что ваша программа застрянет, тратя все доступные ресурсы ЦП, не делая ничего, кроме проверки часов и текущего времени, пока не прошло 5,5 секунд. В первом примере он сообщает операционной системе: «Эй, разбуди меня через 5,5 секунд», а другие процессы могут использовать процессор между ними.

0 голосов
/ 30 июня 2018

Вы проверяете time.time() снова сразу после установки end, и вы проверяете его только один раз, так что это определенно не будет через 5,5 секунд. Если вы хотите сделать это, внеся минимальные изменения в свой код:

while time.time() < end:
    pass
print('Time\'s up')

вы не хотите проверять ==, если точная микросекунда не возвращается вызовом time.time ().

Если вы хотите сделать это правильно, вы должны использовать time.sleep(5.5).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...