CS50 Pset1 Meal Time代码本地测试正常但check失败求助
CS50 Meal Time 作业检查失败的解决方法
问题原因
你的代码仅支持不带AM/PM的24小时制时间输入(比如7:00、13:30),但CS50的测试用例包含了12小时制带AM/PM的输入(比如7:00 AM、1:00 PM)。当输入这类时间时,split(":")会得到类似["7", "00 AM"]的结果,尝试把"00 AM"转成float时会触发ValueError,直接导致检查失败。
解决方案
修改输入处理逻辑,先分离并处理AM/PM标记,将12小时制时间转换为24小时制后,再进行十进制转换和餐点判断。
修改后的代码
def main(): # 处理输入,分离AM/PM标记 time_str = input("Time: ").strip() period = "" if "AM" in time_str or "PM" in time_str: time_str, period = time_str.split() # 拆分小时和分钟 time_input = time_str.split(":") time = convert(time_input, period) # 判断并输出对应餐点时间 if 7.0 <= time <= 8.0: print("breakfast time") elif 12.0 <= time <= 13.0: print("lunch time") elif 18.0 <= time <= 19.0: print("dinner time") def convert(t, period): hour = float(t[0]) # 12小时制转24小时制逻辑 if period == "PM": if hour != 12: hour += 12 else: # AM时段处理 if hour == 12: hour = 0 minute = float(t[1]) / 60 return hour + minute if __name__ == "__main__": main()
关键测试验证点
- 输入
12:00 AM会转换为0.0,不属于任何餐点时间 - 输入
12:30 PM会转换为12.5,属于午餐时间 - 输入
7:00 PM会转换为19.0,属于晚餐时间
内容的提问来源于stack exchange,提问作者Balup
相关产品推荐
相关产品推荐

