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

如何遍历字典列表实现输入时间的5×3 ASCII时钟展示?

问题:实现5×3格式的ASCII时钟输出

需要接收如“12:20”的时间输入,输出对应的5×3 ASCII时钟表示。我认为遍历字典列表是最简单的解决方法,但不知道正确的遍历方式。以下是我尝试编写的Python代码:

time = input("enter a time HH:MM")
my_list = [
{"0": "000", "1": " 1 ","2":"222","3":"333","4":"44","5":"555","6":"666","7":"777","8":"888","9":"999"},
{"0": "000", "1": "11 ", "2": "  2", "3":"  3","4":"4 4","5":"5  ","6":"6  ","7":"  7","8":"8 8","9":"9 9"},
{"0": "000", "1": " 1 ", "2": "222", "3":"333","4":"444","5":"555","6":"666","7":"  7","8":"888","9":"999"},
{"0": "000", "1": " 1 ", "2": "2  ", "3":"  3","4":"  4","5":"  5","6":"6 6","7":"  7","8":"8 8","9":"  9"},
{"0": "000", "1": "111", "2": "222", "3":"333","4":"  4","5":"555","6":"666","7":"  7","8":"888","9":"  9"}
]
for i in my_list:
    for l in my_list.keys():
        if l == time[i]:
            print(my_list[i][l])

我尝试用两层循环:一层遍历列表,一层遍历每个字典。输入“12:20”时,期望输出如下格式:

1    222    222  000
11      2  :   2  0 0
 1    222    222  0 0
 1    2    : 2    0 0 
111   222    222  000

解决方案

你的代码存在几个关键问题:

  1. 遍历列表时,i是字典实例而非索引,所以my_list.keys()是错误调用,应该用i.keys();且time[i]完全无效,因为字典不能作为字符串的索引。
  2. 未处理时间中的冒号,缺少冒号的ASCII样式定义。
  3. 错误地逐个打印单个字符的样式,而不是将同一行的所有字符样式拼接后打印。

修正后的代码如下:

# 定义每个数字和冒号的5行ASCII样式
digit_styles = [
    {"0": "000", "1": " 1 ", "2": "222", "3": "333", "4": " 44", "5": "555", "6": "666", "7": "777", "8": "888", "9": "999", ":": "   "},
    {"0": "0 0", "1": "11 ", "2": "  2", "3": "  3", "4": "4 4", "5": "5  ", "6": "6  ", "7": "  7", "8": "8 8", "9": "9 9", ":": " : "},
    {"0": "0 0", "1": " 1 ", "2": "222", "3": "333", "4": "444", "5": "555", "6": "666", "7": "  7", "8": "888", "9": "999", ":": "   "},
    {"0": "0 0", "1": " 1 ", "2": "2  ", "3": "  3", "4": "  4", "5": "  5", "6": "6 6", "7": "  7", "8": "8 8", "9": "  9", ":": " : "},
    {"0": "000", "1": "111", "2": "222", "3": "333", "4": "  4", "5": "555", "6": "666", "7": "  7", "8": "888", "9": "  9", ":": "   "}
]

time_input = input("请输入时间 HH:MM:")

# 遍历ASCII时钟的每一行(共5行)
for line_idx in range(5):
    current_line = []
    # 遍历输入时间的每个字符(包括冒号)
    for char in time_input:
        # 获取当前字符在当前行的样式
        current_line.append(digit_styles[line_idx][char])
    # 用空格拼接所有字符的样式,形成完整一行并打印
    print("  ".join(current_line))

关键说明:

  • 在每个样式字典中添加了冒号:的对应行样式,确保冒号能按需求显示。
  • 外层循环控制5行的输出顺序,内层循环处理时间字符串的每个字符。
  • 每一行通过拼接所有字符的对应样式生成,保证格式整齐。

测试输入“12:20”时,输出结果与期望一致:

1    222    :    222    000
11      2    :      2    0 0
 1    222    :    222    0 0
 1    2      :      2    0 0
111   222    :    222    000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:45:53