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

控制台打印ASCII艺术字问题求助:多字符重叠打印故障

解决ASCII艺术字多字符重叠的问题

嘿,这个问题我之前碰过好多次!你现在遇到的重叠问题,本质是打印逻辑搞反了——应该按行横向拼接每个字符的对应行,而不是先打完一个字符的所有行再打下一个。

举个简单的例子:假设你的A是5行,B也是5行,如果你先把A的5行全打印完,再打B的5行,那B就会叠在A的同一位置重复输出。正确的做法是把A的第1行、B的第1行、C的第1行拼在一起,打印这一整行;然后再拼A、B、C的第2行,以此类推。

具体实现步骤

  • 第一步:结构化存储ASCII字符
    把每个字符的ASCII艺术字存成「行列表」——每个元素对应该字符的一行内容。比如:
    # 示例字体,你可以替换成自己的字体库
    ascii_font = {
        'A': ['  A  ', ' A A ', 'AAAAA', 'A   A', 'A   A'],
        'B': ['BBB  ', 'B   B', 'BBB  ', 'B   B', 'BBB  '],
        'C': [' CCC ', 'C   C', 'C    ', 'C   C', ' CCC ']
    }
    
  • 第二步:按行拼接并打印
    遍历每一行索引,把输入文本中每个字符的对应行拼接成一整行,然后逐行输出:
    def print_ascii_text(text):
        # 获取字体的总行数(假设所有字符行数一致,不一致的话可以取最大行数)
        total_lines = len(next(iter(ascii_font.values())))
        # 逐行处理
        for line_num in range(total_lines):
            # 把每个字符的第line_num行拼起来
            current_line = ''.join([ascii_font[char][line_num] for char in text])
            print(current_line)
    
    # 测试一下
    print_ascii_text("ABC")
    
  • 可选处理:兼容不同行数的字符
    如果你的字体库中有些字符行数不一样,可以先计算所有字符的最大行数,然后给行数少的字符补空格填充:
    def get_max_line_count(font):
        return max(len(lines) for lines in font.values())
    
    def print_ascii_text(text):
        max_lines = get_max_line_count(ascii_font)
        for line_num in range(max_lines):
            current_line = ''
            for char in text:
                # 如果当前字符的行数不够,补空格
                if line_num < len(ascii_font[char]):
                    current_line += ascii_font[char][line_num]
                else:
                    current_line += ' ' * len(ascii_font[char][0])  # 用字符的宽度补空格
            print(current_line)
    

这样运行之后,"ABC"就会横向排列成正确的ASCII艺术字,再也不会重叠啦!

内容的提问来源于stack exchange,提问作者Gabriel Emanuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:12:32