Python实现斐波那契时钟:解决重复颜色的索引求和问题
斐波那契时钟程序修复
背景说明
斐波那契时钟规则:颜色列表对应斐波那契值列表[1,1,2,3,5],第1至5项分别对应值1、1、2、3、5。计算时间时:
- 所有Red(r)和Blue(b)对应值之和为小时
- 所有Green(g)和Blue(b)对应值之和乘以5为分钟
示例:["white","blue","red","green","white"]对应时间3:20
原代码问题
你的代码存在以下问题导致计算错误:
- 使用
list.index()仅能获取第一个匹配元素的索引,无法处理列表中存在多个相同颜色(如多个r、b或g)的情况 - 逻辑仅判断同时存在r、b、g的场景,遗漏了缺少某颜色的情况
- 手动转换索引值的方式冗余且易出错,直接使用斐波那契列表对应索引的值即可
修复方法
- 遍历颜色列表的每一个元素,同时记录其索引
- 针对每个元素,判断颜色类型,累加对应斐波那契值到小时或分钟的计算变量中
- 分别维护小时(r+b的和)、分钟基数(g+b的和)两个变量,遍历过程中逐步累加
- 无需手动转换索引,直接用斐波那契列表对应索引的值参与计算
修正后的代码
# 斐波那契值列表,索引0-4对应第1-5项 fib_values = [1, 1, 2, 3, 5] colors = [] # 输入5个颜色 for _ in range(5): print("give me a color") color = input().strip().lower() colors.append(color) hour_total = 0 minute_base = 0 # 遍历所有颜色,累加对应值 for idx, color in enumerate(colors): val = fib_values[idx] if color == "r": hour_total += val elif color == "b": hour_total += val minute_base += val elif color == "g": minute_base += val # 计算最终时间 hour = hour_total minute = minute_base * 5 # 格式化输出(确保分钟为两位数) print(f"The final time is {hour}:{minute:02d}")
代码说明
- 使用
enumerate()同时获取索引和颜色,方便直接取对应斐波那契值 - 分别累加r、b到小时总和,累加g、b到分钟基数
- 输出时用
{minute:02d}确保分钟显示为两位数(如5分钟显示为05) - 兼容任意数量的r、b、g,以及缺少某颜色的场景
内容的提问来源于stack exchange,提问作者VirtualSquares
相关产品推荐
相关产品推荐

