Перезаписывая напечатанную строку каждый отпечаток за время, алгоритм - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь написать алгоритм времени.Однако у меня возникла проблема с успешной печатью кода в той же строке путем перезаписи предыдущего отпечатка

Я пытался использовать «\ r» для печати в той же строке.Тем не менее, это не работает, так как после окончания первой минуты секунды идут как 09,19,29,39 и т. Д., Не уверен, что проблема здесь.

Однако, если я удалю "\ r ", программа работает нормально, за исключением того, что каждый раз печатает время в новой строке.Я хочу напечатать его в той же строке.

import time
for i in range(24):
    for a in range(60):
        for s in range(60):
            print(i,":",a,":",s, end='\r')
            time.sleep(1)

Я ожидаю, что вывод будет как обычное время.Однако это не работает так же, как не знаю, почему

1 Ответ

1 голос
/ 04 апреля 2019

Символ 9, следующий за 0, 1, 2 и т. Д. После первой минуты, представляет собой просто 9 в 59, который был напечатан в последнюю секунду первой минуты, поскольку у однозначных секунд недостаточно ширины, чтобы перезаписать 9.Вы можете отформатировать вывод каждого числа шириной 2, и, поскольку здесь мы имеем дело со временем, добавьте числа с начальным 0:

import time
for i in range(24):
    for a in range(60):
        for s in range(60):
            print('%02d:%02d:%02d' % (i, a, s), end='\r')
            time.sleep(1)

Если вы запустите это в IDE, оно не будетвыводить что угодно, потому что вывод буферизуется до получения символа новой строки.Вы можете принудительно очистить вывод с помощью аргумента flush=True, но тогда среда IDE по-прежнему не будет ничего выводить, поскольку символ \r стирает вывод из-за предварительной обработки среды IDE.Вместо этого вы можете сначала очистить вывод перед печатью \r:

import time
for i in range(24):
    for a in range(60):
        for s in range(60):
            print('%02d:%02d:%02d' % (i, a, s), end='', flush=True)
            time.sleep(1)
            print('', end='\r')
...