控制台打印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
相关产品推荐
相关产品推荐

