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

如何用点/方块打印文本?求像素化动态时间显示实现方案

用点/方块实现ASCII艺术化时间打印的完整思路

嘿,这个需求我之前折腾过!你一开始想到的二维结构思路完全是正确的,其实核心逻辑和Coding Game里的动态ASCII art挑战本质是一样的——就是把每个字符(数字、冒号)拆解成固定尺寸的“像素块”,然后按行拼接输出。咱们一步步把这个落地:

1. 先给每个字符做“像素模板”

首先要把0-9的数字,还有时间里的冒号,都用你想要的符号(比如█代表亮块,.代表暗块)做成统一行数的二维模板。比如我习惯用5行3列的尺寸(视觉效果比较平衡),举几个例子:

# 定义每个字符的5行模板
digit_templates = {
    '0': [
        '███',
        '█.█',
        '█.█',
        '█.█',
        '███'
    ],
    '1': [
        '.█.',
        '██.',
        '.█.',
        '.█.',
        '███'
    ],
    # 剩下的2-9你可以照着这个格式补全,或者调整尺寸(比如7行5列更精细)
    ':': [
        '.█.',
        '...',
        '.█.',
        '...',
        '.█.'
    ]
}

这里的关键是所有字符的模板行数必须一致,不然拼接的时候会乱套。你可以根据喜好调整符号(比如用*代替█)或者模板尺寸。

2. 把时间转换成模板的拼接结果

拿到当前时间后,先格式化成HH:MM:SS的字符串,然后遍历每个字符,把它们的模板按行“对齐拼接”:

比如时间是12:34,那第一行就是1的第一行 + 2的第一行 + :的第一行 + 3的第一行 + 4的第一行,以此类推,把5行都拼完,就得到了完整的ASCII时间。

用代码实现这个逻辑大概是这样:

import time

def get_ascii_time():
    # 获取当前时间,格式化为HH:MM:SS
    current_time = time.strftime("%H:%M:%S")
    # 初始化5行空字符串,对应模板的5行
    ascii_lines = ['', '', '', '', '']
    
    for char in current_time:
        # 拿到当前字符的模板
        template = digit_templates[char]
        # 把模板的每一行拼到对应位置
        for i in range(5):
            ascii_lines[i] += template[i] + '  '  # 加空格是为了字符之间留间隙
    
    # 把5行拼成一个字符串,每行换行
    return '\n'.join(ascii_lines)

3. 动态刷新显示

如果要像健身追踪器那样实时更新时间,就需要每隔1秒刷新一次终端屏幕,然后重新打印新的ASCII时间。不同系统清除屏幕的命令不一样,我们可以做个兼容:

import os

def clear_screen():
    # 兼容Windows和Linux/macOS
    os.system('cls' if os.name == 'nt' else 'clear')

# 主循环
while True:
    clear_screen()
    print(get_ascii_time())
    time.sleep(1)

你之前可能卡壳的地方?

我猜你之前在Coding Game里失败,可能是没处理好动态刷新的屏幕清除,或者模板的行对齐拼接逻辑——比如没注意所有字符模板的行数必须一致,或者拼接的时候把列和行搞混了。其实只要把每个字符的模板看成“垂直堆叠的行”,然后横向把每行连起来,就搞定了核心逻辑。

要是想更精细,还可以调整模板的尺寸(比如7行5列做更复杂的数字),或者加一些动态效果(比如让冒号闪烁),本质都是在模板的基础上做扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:11:36