如何遍历字典列表实现输入时间的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
解决方案
你的代码存在几个关键问题:
- 遍历列表时,
i是字典实例而非索引,所以my_list.keys()是错误调用,应该用i.keys();且time[i]完全无效,因为字典不能作为字符串的索引。 - 未处理时间中的冒号,缺少冒号的ASCII样式定义。
- 错误地逐个打印单个字符的样式,而不是将同一行的所有字符样式拼接后打印。
修正后的代码如下:
# 定义每个数字和冒号的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
相关产品推荐
相关产品推荐

