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

FreeCodeCamp Python时间计算器无法启动测试问题求助

错误排查与修复指南

核心问题1:未调用函数导致控制台无输出

你只定义了add_time函数,但没有在代码末尾添加函数调用语句,程序运行后不会执行任何函数内的逻辑,所以控制台处于空闲状态。

修复方法:在函数定义结束后,添加函数调用示例(根据你的需求替换参数):

# 示例调用,可按需修改参数
print(add_time("3:00 PM", "2:12"))
print(add_time("11:59 PM", "24:05", "monday"))

核心问题2:变量名拼写错误触发异常

代码中存在变量名拼写错误:

  • 你定义了start_minutes_tuple = start_tuple[2].partition(" ")
  • 但后续错误地使用了start_tuple_minutes(下划线前后的单词写反了),这会导致NameError异常,中断程序执行。

修复方法:将所有start_tuple_minutes替换为start_minutes_tuple,修正后的代码片段:

start_tuple = start.partition(":")
start_minutes_tuple = start_tuple[2].partition(" ")
start_hours = int(start_tuple[0])
start_minutes = int(start_minutes_tuple[0])  # 此处修正变量名
am_pm = start_minutes_tuple[2]  # 此处修正变量名

其他优化建议

  • 函数第一行的print(add_time)是打印函数对象本身,没有实际意义,可以直接删除。
  • 处理分钟数时,原代码会让end_minutes同时存在整数和字符串类型,建议用格式化字符串统一类型:
    end_minutes = f"{end_minutes:02d}"
    
  • 可以添加参数校验逻辑,比如检查start和duration是否符合时间格式,避免非法输入导致的错误。

修复后的完整代码示例

def add_time(start, duration, day_of_week=False):
    week_days_index = {"monday": 0, "tuesday": 1, "wednesday": 2, "thursday": 3, "friday": 4, "saturday": 5, "sunday": 6}
    week_days_array = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

    duration_tuple = duration.partition(":")
    duration_hours = int(duration_tuple[0])
    duration_minutes = int(duration_tuple[2])

    start_tuple = start.partition(":")
    start_minutes_tuple = start_tuple[2].partition(" ")
    start_hours = int(start_tuple[0])
    start_minutes = int(start_minutes_tuple[0])
    am_pm = start_minutes_tuple[2]
    ampm_flip = {"AM": "PM", "PM": "AM"}

    day_amount = int(duration_hours / 24)

    end_minutes = start_minutes + duration_minutes
    if end_minutes >= 60:
        start_hours += 1
        end_minutes = end_minutes % 60

    amount_ampmflips = int((start_hours + duration_hours) / 12)
    end_hours = (start_hours + duration_hours) % 12

    end_minutes = f"{end_minutes:02d}"
    end_hours = 12 if end_hours == 0 else end_hours
    if am_pm == "PM" and start_hours + (duration_hours % 12) >= 12:
        day_amount += 1

    am_pm = ampm_flip[am_pm] if amount_ampmflips % 2 == 1 else am_pm

    returntime = f"{end_hours}:{end_minutes} {am_pm}"
    if day_of_week:
        day_of_week = day_of_week.lower()
        index = (week_days_index[day_of_week] + day_amount) % 7
        new_day = week_days_array[index]
        returntime += f", {new_day}"

    if day_amount == 1:
        return returntime + " (next day)"
    elif day_amount > 1:
        return returntime + f" ({day_amount} days later)"

    return returntime

# 示例调用
print(add_time("3:00 PM", "2:12"))
print(add_time("11:59 PM", "24:05", "monday"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:36:27