У меня есть этот код:
>>> for i in xrange(20):
... print 'a',
...
a a a a a a a a a a a a a a a a a a a a
Я хочу вывести 'a'
, без ' '
следующим образом:
aaaaaaaaaaaaaaaaaaaa
Возможно ли это?
У меня есть этот код:
>>> for i in xrange(20):
... print 'a',
...
a a a a a a a a a a a a a a a a a a a a
Я хочу вывести 'a'
, без ' '
следующим образом:
aaaaaaaaaaaaaaaaaaaa
Возможно ли это?
Есть несколько способов достижения вашего результата. Если вы просто хотите найти решение для своего случая, используйте умножение строк, как упоминает @Ant. Это сработает только в том случае, если каждый из ваших операторов print
печатает одну и ту же строку. Обратите внимание, что он работает для умножения строки любой длины (например, 'foo' * 20
работает).
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
Если вы хотите сделать это в целом, создайте строку, а затем напечатайте ее один раз. Это будет занимать немного памяти для строки, но только сделать один вызов для print
. Обратите внимание, что объединение строк с использованием +=
теперь линейно по размеру объединяемой строки, поэтому это будет быстро.
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
Или вы можете сделать это более напрямую, используя sys.stdout. write(), print
которой является оберткой. Это запишет только необработанную строку, которую вы ей дадите, без какого-либо форматирования. Обратите внимание, что ни одна новая строка не печатается даже в конце 20 с. a
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3 изменяет оператор print
в функцию print(), которая позволяет вам установить end
параметр. Вы можете использовать его в> = 2.6, импортируя из __future__
. Я бы избегал этого в любом серьезном коде 2.x, поскольку это будет немного запутанным для тех, кто никогда не использовал 3.x. Тем не менее, он должен дать вам почувствовать вкус добра, который приносит 3.x.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
Из PEP 3105: печать как функция в документе " Что нового в Python 2.6":
>>> from __future__ import print_function
>>> print('a', end='')
Очевидно, что это работает только с python 3.0 или выше (или 2. 6+ с from __future__ import print_function
в начале). Оператор print
был удален и стал функцией print()
по умолчанию в Python 3.0.
Вы можете подавить пробел, напечатав пустую строку в stdout между операторами print
.
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
Однако более чистое решение состоит в том, чтобы сначала построить всю строку, которую вы хотите распечатать, а затем вывести ее с помощью одного оператора print
.
Вы можете напечатать символ обратного пространства ('\b'
):
for i in xrange(20):
print '\ba',
результат:
aaaaaaaaaaaaaaaaaaaa
Python 3.x:
for i in range(20):
print('a', end='')
Python 2.6 или 2.7:
from __future__ import print_function
for i in xrange(20):
print('a', end='')
Если вы хотите, чтобы они отображались по одному, вы можете сделать это:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.flush()
необходимо, чтобы заставить символ записываться каждый раз, когда цикл выполняется.
Как примечание:
Печать - это O (1), но построение строки, а затем печать O (n), где n - общее количество символов в строке. Так что да, строя строку "чище", это не самый эффективный способ сделать это.
То, как я это сделаю, выглядит следующим образом:
from sys import stdout
printf = stdout.write
Теперь у вас есть "функция печати", которая выводит любую строку, которую вы передаете, не возвращая новый символ строки каждый раз.
printf("Hello,")
printf("World!")
Вывод будет: Hello, World!
Однако, если вы хотите печатать целые числа, поплавки или другие нестроковые значения, вам придется преобразовать их в строку с помощью функции str().
printf(str(2) + " " + str(4))
Выход будет: 2 4
без чего? вы имеете в виду
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
?
Либо что Ant говорит, либо накапливается в строке, а затем печатается один раз:
s = '';
for i in xrange(20):
s += 'a'
print s
это действительно просто
для версий Python 3+ вам нужно только написать следующие коды
for i in range(20):
print('a',end='')
просто конвертируйте цикл в следующие коды, вам не нужно беспокоиться о других вещах
ВОТ ЭТО ДА!!!
Это довольно давно
Теперь, в Python 3.x это будет довольно легко
код:
for i in range(20):
print('a',end='') # here end variable will clarify what you want in
# end of the code
выход:
aaaaaaaaaaaaaaaaaaaa
Подробнее о функции print()
print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)
Здесь:
value1,value2,value3
Вы можете распечатать несколько значений, используя запятые
sep = '-'
3 значения будут разделены символом "-"
Вы можете использовать любой символ вместо этой четной строки, такой как sep = '@' или sep = 'good'
end='\n'
по умолчанию функция печати ставит символ '\n' в конце вывода
но вы можете использовать любой символ или строку, изменив значение конечной переменной
например, end = '$' или end = '.' или конец = "Привет"
file=sys.stdout
это значение по умолчанию, стандартный вывод системы
используя этот аргумент, вы можете создать поток выходного файла, как
print("I am a Programmer", file=open("output.txt", "w"))
с помощью этого кода вы создадите файл с именем output.txt, где будут храниться ваши выходные данные, которые я являюсь программистом
flush = False
Это значение по умолчанию, используя flush = True, вы можете принудительно очистить поток
так просто
def printSleeping():
sleep = "I'm sleeping"
v = ""
for i in sleep:
v += i
system('cls')
print v
time.sleep(0.02)