2016-08-24 2 views
2

У меня есть программа, которая распечатывает свой прогресс на консоли. каждые 20 шагов печатает количество шагов, таких как 10 20 30 и т. Д., Но в этом случае он печатает точку. Это было напечатано с помощью оператора печати с запятой в концеКак печатать «плотные» точки горизонтально в питоне?

 if epoch % 10 == 0: 
      print epoch, 
     else: 
      print ".", 

К сожалению, я заметил, что точки печатаются отдельно друг от друга, как это:

0 . . . . . . . . . 10 . . . . . . . . . 20 . . . . . . . . . 30 

Я хочу, чтобы это было крепче следующим образом:

0.........10.........20.........30 

в Visual Basic языке, мы можем получить эту форму, если мы добавим точку с запятой в конце оператора печати вместо запятой. Есть ли аналогичный способ сделать это в Python, или пошаговое руководство, чтобы получить более жесткий выход?

Заранее спасибо ...

--- Edit --- При всем спасибо и уважение ко всем, кто ответил, я заметил, что некоторые из них считали изменение «эпохи» происходит своевременно. Фактически, это происходит после завершения некоторых итераций, и это может занять от доли секунды до нескольких минут. Тем не менее, большое спасибо всем вкладчикам.

+0

Удаление запятой означает, что вы получите символ новой строки не пробел, так что не делает то, что ОП хочет. – solidpixel

ответ

5

Если вы хотите получить больше контроля над форматированием, то вам нужно использовать:

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 выше.

+0

Спасибо @ Isogen74 за ваш ответ. Использование функции печати Python3 кажется более приятным, но когда я попробовал, у меня было множество ошибок в каждом заявлении на печать во всей программе. Можно использовать оба оператора печати (от Py2 и Py3) рядом? –

+0

Не в том же файле - «from __future__» изменяет значение «print» в этом файле из старой семантики в новую семантику. – solidpixel

1
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('.') 
+0

Спасибо @turkus за ваш ответ, особенно за функцию special_print. –

+0

Брат @ Туркус, ваш ответ заслуживает выбора, но Isogen74 ответил за 2 минуты до вас, поэтому я дал ему одобрение. Удачи в будущих взносах. –

+0

@MohammadElNesr получил его. – turkus

1

Вот возможное решение:

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") 
+0

Спасибо @BPL за ваше решение. –

Смежные вопросы