" for"中的多行打印环

时间:2016-07-09 20:19:48

标签: python python-3.x

我试图在"中打印多行字符串,用于"环。问题是我希望将输出全部打印在同一行上。例如:

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

但我无法做到这一点。谢谢你的帮助。

6 个答案:

答案 0 :(得分:4)

尝试使用list 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)))

答案 1 :(得分: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()

您需要sys.stdout.write在没有\n的情况下撰写。如果你的范围超过9(10+有2个字符,那么你需要|之前的空格特殊规则),这段代码将不起作用。

答案 2 :(得分:0)

您一次只能打印一行。首先,您必须打印包含所有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)

当然,有许多方法具有相同的基本思想。我为初学者挑选了最容易理解的那个(恕我直言)。

我没有考虑间距,一旦你这样做,使用列表就会有所帮助:

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))

答案 3 :(得分: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')

这使用终端控制代码逐列而不是逐行打印。这里没用,但是当你想要做更奇怪的终端操作时,有一些很好的了解。

答案 4 :(得分:0)

与蒂姆的解决方案类似,只使用map代替发布者,我认为在这种情况下更具可读性:

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

或者,可读性和技巧性较差,基于zip的方法很重要:

def multi(obj):
    print("\n".join(" ".join(item) for item in obj))

r = range(6)
multi(zip(*("{}|{}".format(a, b) for a, b in zip(r, r[1:]))))

答案 5 :(得分:0)

你的目标是什么?例如,如果您打印的最大数量为n> 9,则由于两位数的数字,您的格式将会混乱。

无论如何,我会这样做。您只想迭代一次,这非常灵活,因此您可以轻松更改格式。

lines = ['', '', '']  
for i in range (5):  
    lines[0] += '%d ' % i  
    lines[1] += '| '  
    lines[2] += '%d ' % (i+1)  
for line in lines:  
    print line