You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

关键改动说明

  1. 存储树形行数据:不再直接打印每一行,而是把每棵树的所有行(树冠+树干)存入列表trees中,保留完整的树形结构。
  2. 处理ANSI颜色码:因为颜色转义序列会干扰字符串长度计算,用正则移除后计算实际显示宽度,保证对齐准确。
  3. 横向拼接行内容:遍历每一行序号,把所有树的对应行(或补空格)拼接成一整行,再打印这一行,实现并排效果。

内容的提问来源于stack exchange,提问作者Yusuf Ustaoğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:20:31