2016-07-09 28 views
1

"for"ループ内に複数行の文字列を印刷しようとしています。問題は、出力をすべて同じ行に出力したいということです。例:"for"ループ内の複数行印刷

for i in range(5): 
print(''' 
{a} 
| 
{b} 
'''.format(a=i,b=i+1)) 

出力は次のようになります。

0 
| 
1 


1 
| 
2 


2 
| 
3 


3 
| 
4 


4 
| 
5 

代わりに、私はそれがしたい:

0 1 2 3 4 
| | | | | 
1 2 3 4 5 

しかし、私はそれを行う方法を得ることができません。助けてくれてありがとう。

答えて

4

リストconcaternationで試してみてください。

x = 5 

print (" ".join(str(i) for i in range(x))) 
print ('| '*x) 
print (" ".join(str(i) for i in range(1,x+1))) 
+0

+1これが最もpythonのように感じます。リスト内包表記をジェネレータ表現に切り替えるといいでしょう。 str.joinは任意の反復可能性を取ることができます。 –

+0

@DavisYoshida前にジェネレータ表現を見つけたことはありません - これはちょうど ''' .join(range(x))'を使っていますか? – Tim

+1

@Tim No.しかし、中間リストの作成を避けるので、 '[]'角カッコを省略することができます。したがって、メモリを節約することができます: '.join(str(i)for i in range(x)) ' – schwobaseggl

0

一度に1行しか印刷できません。ですから、最初にすべてのa要素を含む行を印刷し、すべての行を含む行、最後にすべてのb要素の行を印刷する必要があります。

これは、最初にそれを印刷する前に、すべての行を調製することにより容易に行うことができます。

line_1 = "" 
line_2 = "" 
line_3 = "" 
for i in range(5): 
    line_1 += str(i) 
    line_2 += "|" 
    line_3 += str(i+1) 
print(line_1) 
print(line_2) 
print(line_3) 

は、同じ基本的な考え方を持つ多くの方法はもちろんあります。私は初心者のために理解しやすい(IMHO)ものを選んだ。

私のアカウントに間隔を取っていなかったとあなたは一度、それはリストを使用することが有益で取得します。

line_1_elements = [] 
line_2_elements = [] 
line_3_elements = [] 
for i in range(5): 
    line_1_elements.append(str(i)) 
    line_2_elements.append("|") 
    line_3_elements.append(str(i+1)) 
print(" ".join(line_1_elements)) 
print(" ".join(line_2_elements)) 
print(" ".join(line_3_elements)) 
1
import sys 

myRange = range(5) 

for i in myRange: 
    sys.stdout.write(str(i)) 
print() 
for i in myRange: 
    sys.stdout.write('|') 
print() 
for i in myRange: 
    sys.stdout.write(str(i+1)) 
print() 

あなたが\nせずに書くことsys.stdout.writeを必要としています。また、範囲が9以上の場合(10+には2以上の文字があるので、スペースの特別な規則が必要です)、|の前にこのコードは機能しません。

+0

は多分これは役立ちます: 'sys.stdout.writeを( '|' + '「*(LEN(文字列(I + 1)) - 1))' – doubleui

+3

は、Python 3では '使用する理由はありませんsys.stdout。これのためにwrite()を呼び出します。ただ 'print(i、end =" ")'を実行してください。 –

+0

@ThijsvanDienのサイドノートでは、Pythonで 'from __future__ import print_function'を使ってプリント機能をインポートすることもできます –

0

楽しいだけで投げるために(悪い、これをしない)答え:

for i in range(5): 
    print('{}\033[1B\033[1D|\033[1B\033[1D{}\033[2A'.format(i, i+1), end='') 
print('\033[2B') 

これはして列を印刷するには、端末制御コードを使用しています行単位ではなく列単位で入力します。ここでは便利ではありませんが、あなたが奇妙な端末操作をしたいときに知っておくと良いことです。

print(" ".join(map(str, range(i)))) 
print("| " * i) 
print(" ".join(map(str, range(1, i+1)))) 

または代わりに、以下読みやすく、トリッキー、重くzipベースのアプローチ:だけではなく、私が思うgenratorsのmapも読みやすく、この場合で使用して、ティムのソリューションと同様に

0

ここで目標は何ですか。たとえば、n> 9まで印刷すると、2桁の数字のために書式設定が乱れることがあります。

これにかかわらず、私はこのようにします。一度しか反復する必要はなく、これはかなり柔軟なので、書式を簡単に変更できます。

lines = ['', '', ''] 
for i in range (5): 
    lines[0] += '%d ' % i 
    lines[1] += '| ' 
    lines[2] += '%d ' % (i+1) 
for line in lines: 
    print line 
関連する問題