Перед цикла for
, получить текущее время, так как t0
.
После цикла for
снова получите текущее время, как t1
.
Затем, если t1 - t0 < 1
, time.sleep(1 - (t1 - t0))
.
Существует несколько различных вариантов объектов времени, которые вы можете использовать. datetime.datetime
является самым простым (особенно если вам нужно отладить эту более позднюю распечатку datetime
, и это сразу же понятно для человека), если вам не нужна максимальная точность. Когда вы вычитаете два объекта datetime
, вы получаете объект timedelta
. Итак:
t0 = datetime.datetime.now()
for …
t1 = datetime.datetime.now()
td = (t1 - t0).total_seconds()
if td < 1:
time.sleep(1 - td)
Если вам нужна более высокую точность, есть функции в time
модуля, которые позволяют использовать лучшие часы, которые ваша платформа поддерживает, особенно если вы на 3.3+. Смотрите функцию clock_gettime
в 3.3+:.
t0 = time.clock_gettime(time.CLOCK_MONOTONIC)
for …
t1 = time.clock_gettime(time.CLOCK_MONOTONIC)
td = (t1 - t0)/time.clock_getres(time.CLOCK_MONOTONIC)
# same code as above
CLOCK_MONOTONIC
не может быть лучшими часами для вашей платформы-например, если у вас есть CLOCK_HIGHRES
или CLOCK_MONOTONIC_RAW
они почти всегда будут лучше. Итак, прочитайте документы, а затем проверьте, что у вас есть.
В более ранних версиях (включая все версии 2.x), вам придется выбирать между clock
, perf_counter
, process_time
или time
, которые все имеют различные компромиссы и компромиссы даже разные на разных платформах (и datetime.datetime
будет уже по крайней мере так же хороши, как time
), поэтому никто не может сказать вам «всегда используйте этот».
В качестве побочного примечания вы видите, что вы смешиваете вкладки и пробелы в коде, что почти гарантированно дает вам 'IndentationError' или неправильное поведение в тех случаях, когда ничего не получается. Не делай этого. Используйте текстовый редактор, который последовательно использует пробелы, даже когда вы нажимаете вкладку, и запускайте Python с флагом '-t' или' -tt', чтобы проверить его. – abarnert
im полностью noob для stackoverflow и когда im делает кодовую цитату там, и похоже, что есть ошибка отступов :) ее правильно нормально. но спасибо за ваше решение :) – cihangir