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

Pyfiglet列格式问题:如何实现打字效果并保持文本行排列

问题描述

我用Python的pyfiglet库写了一段代码,想实现逐词打字的ASCII艺术效果:

import pyfiglet, time, sys

def mecanografiar(textouwu):
    listapalabrasuwu = textouwu.split()
    for palabritas in listapalabrasuwu:
        sys.stdout.write(pyfiglet.figlet_format(palabritas, justify="center", font="standard", width=110))
        sys.stdout.flush()
        time.sleep(0.3)
        
uwu = "This is a test message"
mecanografiar(uwu)

现在运行后每个单词是按列堆叠显示的,但我需要所有单词在同一行排列,同时保留逐词加载的效果。期望的输出如下:

_____ _     _       _               _            _                                              
      |_   _| |__ (_)___  (_)___    __ _  | |_ ___  ___| |_   _ __ ___   ___  ___ ___  __ _  __ _  ___ 
        | | | '_ \| / __| | / __|  / _` | | __/ _ \| __| __| | '_ ` _ \ / _ \| __/ __|/ _` |/ _` |/ _ \
        | | | | | | \__ \ | \__ \ | (_| | | ||  __/\__ \ |_  | | | | | |  __/\__ \__ \ (_| | (_| |  __/
        |_| |_| |_|_|___/ |_|___/  \__,_|  \__\___||___/\__| |_| |_| |_|\___||___/___/\__,_|\__, |\___|
                                                                                            |___/      
解决方法

原代码直接输出每个单词的完整ASCII艺术块,每个块本身是多行结构,导致堆叠显示。我们需要把每个单词的ASCII行拆分后,逐词拼接对应行的内容,再刷新输出:

import pyfiglet, time, sys

def mecanografiar(textouwu):
    # 拆分每个单词的ASCII艺术为单独行
    palabras_figlet = []
    for palabra in textouwu.split():
        fig_content = pyfiglet.figlet_format(palabra, font="standard", width=110)
        palabras_figlet.append(fig_content.splitlines())
    
    # 获取ASCII艺术的总行数(同字体下所有单词行数一致)
    line_count = len(palabras_figlet[0])
    current_lines = [""] * line_count
    
    for idx, palabra_lines in enumerate(palabras_figlet):
        # 将当前单词的每一行追加到对应行的内容中
        for i in range(line_count):
            current_lines[i] += palabra_lines[i]
        
        # 使用ANSI转义序列回到屏幕顶部并清屏,打印当前所有行
        sys.stdout.write("\033[H\033[J")
        sys.stdout.write("\n".join(current_lines))
        sys.stdout.flush()
        
        # 最后一个单词无需等待
        if idx != len(palabras_figlet) - 1:
            time.sleep(0.3)

uwu = "This is a test message"
mecanografiar(uwu)

思路说明

  1. 先将每个单词的ASCII艺术拆分成单独的行,存储为二维列表;
  2. 初始化空列表存储每一行的最终内容;
  3. 遍历每个单词,把该单词的每一行追加到对应行的内容里;
  4. 用\033[H\033[J清屏并回到屏幕顶部,重新打印所有行,实现逐词追加的视觉效果;
  5. 每添加一个单词后等待0.3秒,保留打字间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:35:26