如何在Python中并排打印多个森林图案?
解决树形图案并排打印的问题
你的问题出在直接逐个打印完整树形,这样必然是垂直排列;而粗暴加end=""会把所有输出挤在一行,完全破坏结构。正确的思路是:先把每个树的每一行内容都存起来,再横向拼接所有树的对应行,最后逐行打印拼接后的内容。
修改后的完整代码
import re def get_display_length(s): # 移除ANSI颜色转义序列,计算实际显示宽度 ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[.*?[a-zA-Z])') cleaned_str = ansi_escape.sub('', s) return len(cleaned_str) # 存储每棵树的所有行数据 trees = [] for _ in range(5): sayi = int(input("[5-13] Aralığında tek tam sayı giriniz:")) tree_lines = [] # 生成树冠部分 for i in range(1, sayi + 1): line = " " * (sayi - i) + '\033[92m' + "* " * i + '\033[0m' tree_lines.append(line) # 生成树干部分 for j in range(sayi // 2): line = " " * (sayi - 2) + "* *" tree_lines.append(line) trees.append(tree_lines) # 计算所有树的最大行数,以及每棵树的实际显示宽度 max_total_lines = max(len(tree) for tree in trees) tree_display_widths = [max(get_display_length(line) for line in tree) for tree in trees] # 逐行拼接并打印所有树的对应行 for line_num in range(max_total_lines): combined_line = "" for idx, tree in enumerate(trees): if line_num < len(tree): current_line = tree[line_num] # 计算需要补充的空格数,保证每棵树的宽度对齐 needed_spaces = tree_display_widths[idx] - get_display_length(current_line) combined_line += current_line + " " * needed_spaces else: # 树的行数不足时,补满对应宽度的空格 combined_line += " " * tree_display_widths[idx] print(combined_line)
关键改动说明
- 存储树形行数据:不再直接打印每一行,而是把每棵树的所有行(树冠+树干)存入列表
trees中,保留完整的树形结构。 - 处理ANSI颜色码:因为颜色转义序列会干扰字符串长度计算,用正则移除后计算实际显示宽度,保证对齐准确。
- 横向拼接行内容:遍历每一行序号,把所有树的对应行(或补空格)拼接成一整行,再打印这一行,实现并排效果。
内容的提问来源于stack exchange,提问作者Yusuf Ustaoğlu
相关产品推荐
相关产品推荐

