私はこのコードを持っています:
>>> 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
を1回呼び出すだけです。 +=
を使用した文字列の連結は、連結する文字列のサイズに対して線形になるため、これが高速になることに注意してください。
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
または、 sys.stdout .. write() を使用してより直接行うことができます。これはprint
がラッパーです。これにより、フォーマットせずに、指定した生の文字列のみが書き込まれます。 20個のa
sの終わりでも改行は出力されないことに注意してください。
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3はprint
ステートメントを print()function に変更します。これにより、end
パラメーターを設定できます。 __future__
からインポートすることにより、2.6以上で使用できます。ただし、3.xを使用したことがない人にとっては少し混乱するため、深刻な2.xコードではこれを避けます。ただし、3.xがもたらすいくつかの良さを味わう必要があります。
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
PEP 3105:関数として印刷What's New in Python 2.6 ドキュメント:
>>> from __future__ import print_function
>>> print('a', end='')
明らかに、それはpython 3.0以降(または先頭にfrom __future__ import print_function
が付いた2.6以降)でのみ動作します。 print
ステートメントは削除され、Python 3.0ではデフォルトでprint()
関数になりました。
print
ステートメント間のstdoutに空の文字列を出力することにより、スペースを抑制することができます。
>>> 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='')
一度に1つずつ表示する場合は、次の操作を実行できます。
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
?
これは本当に簡単です
python 3+バージョンの場合、次のコードを記述するだけです。
for i in range(20):
print('a',end='')
ループを次のコードに変換するだけで、他のことを心配する必要はありません
WOW !!!
かなり長い時間前
さて、In 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 = '。'などまたはend = 'Hello'
file=sys.stdout
これはデフォルト値、システム標準出力です
この引数を使用すると、出力ファイルストリームを作成できます
print("I am a Programmer", file=open("output.txt", "w"))
このコードにより、output.txtという名前のファイルを作成します。出力I am a Programmerが保存されます
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)