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
相关产品推荐
相关产品推荐

