Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “a”中的多行打印;至于;环_Python_Python 3.x - Fatal编程技术网

Python “a”中的多行打印;至于;环

Python “a”中的多行打印;至于;环,python,python-3.x,Python,Python 3.x,我正在尝试在“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 ​但我不知道怎么做。谢谢您的帮助。您一次只能打印一行。因此,首先必须打印包含所有a元素的行,然后打印包含所有条的行

我正在尝试在“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

​但我不知道怎么做。谢谢您的帮助。

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

一次只能打印一行。因此,首先必须打印包含所有
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))
您需要
sys.stdout.write
才能在不使用
\n
的情况下进行写入。如果范围大于9,则此代码将不起作用(10+有2+个字符,因此在
|
之前需要特殊的空格规则)


您需要
sys.stdout.write
才能在不使用
\n
的情况下进行写入。如果您的范围大于9(10+有2+个字符,因此在
|
之前需要特殊的空格规则),则此代码将不起作用。

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

尝试使用列表连接:

x = 5

print (" ".join(str(i) for i in range(x)))
print ('| '*x)
print (" ".join(str(i) for i in range(1,x+1)))
只是想说一句有趣的话(但糟糕的是,不要这样做)回答:

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

只是想说点有趣的事(但糟糕的是,不要这么做)回答:


这使用终端控制代码逐列打印,而不是逐行打印。这里没有什么用处,但当你想进行更奇怪的终端操作时,需要了解一些有用的信息。

与Tim的解决方案类似,只是使用了genrators而不是genrators,我认为在这种情况下,genrators更具可读性:

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

与Tim的解决方案类似,只需使用而不是genrators,我认为在本例中更具可读性:

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

你的目标是什么?例如,如果您打印到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  

你的目标是什么?例如,如果您打印到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  

也许这会有所帮助:
sys.stdout.write('|'+''*(len(str(i+1))-1))
在Python3中,没有理由为此使用
sys.stdout.write()。只需在侧注上执行
print(i,end=“”)
@ThijsvanDien,您还可以使用
从uuu future_uuu导入print_u函数导入Py2中的print函数
这可能会有所帮助:
sys.stdout.write('.''''+'*(len(str(i+1))-1))
在Python 3中,没有理由为此使用
sys.stdout.write()
。只需在侧注上执行
print(i,end=“”)
@ThijsvanDien,您还可以使用
从uuu future_uuu导入Py2中的打印功能。导入打印功能
+1我觉得这是最具Python风格的。不过我想把列表理解转换成生成器表达式。str.join可以接受任何iterable。@DavisYoshida我以前没有遇到过生成器表达式-这只是使用
'.join(范围(x))
?@Tim否。但是您可以省略
[]
括号,这样可以节省一些内存,因为您避免构建中间列表:
“”。join(str(I)表示范围(x)内的I)
@schwobasegll
str.join
在构建输出字符串之前,将惰性生成器的整个输出读取到内存中。所以这并没有帮你省那么多钱。+1我觉得这是最有吸引力的。不过我想把列表理解转换成生成器表达式。str.join可以接受任何iterable。@DavisYoshida我以前没有遇到过生成器表达式-这只是使用
'.join(范围(x))
?@Tim否。但是您可以省略
[]
括号,这样可以节省一些内存,因为您避免构建中间列表:
“”。join(str(I)表示范围(x)内的I)
@schwobasegll
str.join
在构建输出字符串之前,将惰性生成器的整个输出读取到内存中。所以它不会帮你省那么多钱。