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

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

原代码问题

你的代码存在以下问题导致计算错误:

  1. 使用list.index()仅能获取第一个匹配元素的索引,无法处理列表中存在多个相同颜色(如多个r、b或g)的情况
  2. 逻辑仅判断同时存在r、b、g的场景,遗漏了缺少某颜色的情况
  3. 手动转换索引值的方式冗余且易出错,直接使用斐波那契列表对应索引的值即可

修复方法

  • 遍历颜色列表的每一个元素,同时记录其索引
  • 针对每个元素,判断颜色类型,累加对应斐波那契值到小时或分钟的计算变量中
  • 分别维护小时(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:30:52