Python中将高度不同的多行ASCII艺术字符串打印至同一行的最简方法
问题
你在Python开发中定义了对应石头、布、剪刀的三个ASCII艺术多行字符串,代码如下:
# Rock rock = ("""Rock _______ ---' ____) (_____) (_____) (____) ---.__(___) """) # Paper paper = ("""Paper _______ ---' ____)____ ______) _______) _______) ---.__________) """) # Scissors scissors = ("""Scissors _______ ---' ____)____ ______) __________) (____) ---.__(___) """)
需求为将上述多行字符串横向并排打印在同一行,要求实现逻辑最简单、代码长度最短。
最短实现方案
核心逻辑是把每个ASCII图形按行拆分,将同一水平位置的行片段横向拼接后逐行输出,仅需1行核心代码即可实现:
print('\n'.join(' '.join(lines) for lines in zip(rock.splitlines(), paper.splitlines(), scissors.splitlines())))
运行上述代码后,三个ASCII图形会水平对齐排列,各自的标题也会对应显示在图形顶部。
实现说明
- 直接拼接三个原始字符串只会得到纵向堆叠的效果:每个字符串内部自带换行符,会把后续图形挤到下一个垂直位置
splitlines():将每个多行字符串按换行切分为单行列表,自动过滤字符串末尾的多余空行zip():将三个单行列表中相同索引的行打包为一组,依次对应三个图形的标题行、顶部行、中间行、底部行- 组内拼接:同一组的三个行片段用3个空格做间隔,避免不同图形的字符挤在一起
- 最终输出:将所有拼接完成的横向行用换行符连接,一次性打印即可得到并排效果
如果后续修改ASCII图形导致三个字符串行数不一致,可以把zip换成itertools.zip_longest,给缺失的行补上空字符串即可,不会出现内容截断的问题。
内容的提问来源于stack exchange,提问作者infinitypython
相关产品推荐
相关产品推荐

