Как напечатать "узкие" точки горизонтально в 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")
Другие вопросы по тегам