Как напечатать "узкие" точки горизонтально в Python?
У меня есть программа, которая распечатывает его прогресс на консоли. каждые 20 шагов он печатает количество шагов, например, 10 20 30 и т. д., но внутри него он печатает точку. Это было напечатано с помощью оператора печати с запятой в конце
if epoch % 10 == 0:
print epoch,
else:
print ".",
К сожалению, я заметил, что точки печатаются отдельно друг от друга, например так:
0 . . . . . . . . . 10 . . . . . . . . . 20 . . . . . . . . . 30
Я хочу, чтобы это было крепче, следующим образом:
0.........10.........20.........30
На языке Visual Basic мы можем получить эту форму, добавив точку с запятой в конец оператора print вместо запятой. Есть ли аналогичный способ сделать это в Python или пошаговое руководство для получения более точного вывода?
Заранее спасибо...
--- Редактировать --- Со всей благодарностью и уважением ко всем, кто ответил, я заметил, что некоторые из них считают, что изменение "эпохи" происходит своевременно. На самом деле, это происходит после завершения некоторых итераций, и это может занять от доли секунды до нескольких минут. Тем не менее, большое спасибо всем авторам.
3 ответа
Если вы хотите получить больший контроль над форматированием, вам нужно использовать либо:
import sys
sys.stdout.write('.')
sys.stdout.flush() # otherwise won't show until some newline printed
.. вместо print
или используйте функцию печати Python 3. Это доступно для последующего импорта в последующих сборках Python 2.x как:
from __future__ import print_function
print('.', end='')
В Python 3 вы можете передать ключевое слово аргумент flush
:
print('.', end='', flush=True)
который имеет тот же эффект, что и две линии sys.stdout
выше.
import itertools
import sys
import time
counter = itertools.count()
def special_print(value):
sys.stdout.write(value)
sys.stdout.flush()
while True:
time.sleep(0.1)
i = next(counter)
if i % 10 == 0:
special_print(str(i))
else:
special_print('.')
Вот возможное решение:
import time
import sys
width = 101
for i in xrange(width):
time.sleep(0.001)
if i % 10 == 0:
sys.stdout.write(str(i))
sys.stdout.flush()
else:
sys.stdout.write(".")
sys.stdout.flush()
sys.stdout.write("\n")