如何在Python中将两个及以上ASCII图像实现并排打印输出?
解决Python打印ASCII卡牌无法并排的问题
核心问题原因
你定义的每张卡牌是包含多个换行符的完整多行字符串,直接拼接/打印时会完整输出第一张的所有行后才会输出第二张,自然会呈现上下排列的效果,而非你想要的行对齐并排效果。
解决方案
你需要先将每张卡牌按行拆分,再逐行拼接所有卡牌的对应行,最后逐行打印即可实现并排效果。
实现代码
ace = r''' .-------. |A | | | | ♣ | | | | A| `-------´ ''' two = r''' .-------. |2 | | | | ♦ | | | | 2| `-------´ ''' cards = {"Ace":ace, "Two":two} # 预处理卡牌:去掉首尾空白,拆分为行列表 def preprocess_card(card_str): return card_str.strip().split('\n') processed = [preprocess_card(c) for c in cards.values()] # 逐行拼接打印 for lines in zip(*processed): print(' '.join(lines))
代码逻辑说明
preprocess_card函数会去掉你定义卡牌字符串时首尾多余的空行,再按\n拆分,每张卡牌会变成包含7个元素的列表,每个元素对应卡牌的一行内容zip(*processed)会将所有卡牌的第0行、第1行…分别配对为元组,保证每行都是不同卡牌的同一高度内容- 用
' '.join(lines)将同高度的卡牌行用两个空格拼接后打印,最终就会得到并排的卡牌效果
原方案失败原因说明
- 直接拼接卡牌字符串打印:相当于将第一张的所有行+空格+第二张的所有行拼接,输出时第一张全量输出完成才会输出第二张,自然垂直排列
- 用
join拼接卡牌值:和直接拼接的问题完全一致,只是写法不同 - 循环逐个打印卡牌:每张卡牌自带换行符,打印完一张的全部内容才会打印下一张,也是垂直排列效果
内容的提问来源于stack exchange,提问作者python_noob
相关产品推荐
相关产品推荐

