python-3.x 如何以固定的输出宽度并排打印多个字符串并跨越多行

x7rlezfr  于 2023-02-14  发布在  Python
关注(0)|答案(2)|浏览(105)

我尝试逐个字符地打印出三个长字符串(长度相同),并且输出宽度固定为60,其呈现方式如下:

aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc
---blank line---
aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc

.....

我简化了字符串,第一个字符串是包含"a"的任意长字符串,第二个字符串包含许多"b",以此类推。上面显示的行块可以尽可能多,在每个块中,第一行代表string1,第二行代表string2,以此类推。由于需要固定的输出宽度,打印将在下一个三行的块处继续(例如,如果长度〉60,则STR1将在第二个块的第一行处继续)。
我当前的代码如下所示:

for chunk in chunkstring(str1, 60):
    f.write(chunk)
    f.write('\n')
 for chunk in chunkstring(str2, 60):
    f.write(chunk)
    f.write('\n')
 for chunk in chunkstring(str3, 60):
    f.write(chunk)
    f.write('\n')

但是,结果不正确,它将首先打印出所有str1,然后是str2,最后是str3

aaaaaaaaaaaaa
  aaaaaaaaaaaaa
  aaaaaaaaaaaaa
  aaaa
  ---blank line---
  bbbbbbbbbbbbb
  bbbbbbbbbbbbb
  bbbbbb
  ---blank line---
  ccccccccccccc
  cccc
  .....

对不起,如果没有解释清楚,请突出任何歧义,以便我可以编辑说明。

k10s72fa

k10s72fa1#

您需要将所有字符串分块,然后使用zip同时迭代这些块。

chunks = [chunkstring(s, 60) for s in (str1, str2, str3)]

for block in zip(*chunks):
    for c in block:
        # write all lines in block
        f.write(c)
        f.write('\n')
    # at the end of the block, write a blank line 
    f.write('\n')

在线试用

qvk1mo1f

qvk1mo1f2#

你可以把Pranav的zip方法推得更远,也可以用zip来进行分块:

s1 = "a"*180
s2 = "b"*180
s3 = "c"*180

def chunk60(s): return map("".join,zip(*[iter(s)]*60))
for lines in zip(*map(chunk60,(s1,s2,s3))):
    print(*lines,sep='\n')
    print("...")

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
...
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
...
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
...

相关问题