我试图在"中打印多行字符串,用于"环。问题是我希望将输出全部打印在同一行上。例如:
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
但我无法做到这一点。谢谢你的帮助。
答案 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