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

Python中处理AM/PM时间问题及代码Pythonic优化求助

问题描述

我是Python新手,编写了一个程序,要求用户输入##:## a.m./p.m.格式的时间,判断该时间是否属于早餐时段(7 a.m.至8 a.m.)、午餐时段(12 p.m.至1 p.m.)或晚餐时段(6 p.m.至7 p.m.)。程序多数情况运行正常,但输入12:00 p.m.时,无法正确输出lunch time,请问如何修复该问题?同时希望将代码优化为更符合Pythonic风格的写法,感谢帮助!

以下是我的代码:

def main():
    time = input("whats the time? ")
    
    ans = (convert(time))
    if 7 <= ans <= 8: print ("breakfast time")
    elif 12 <= ans <= 13: print ("lunch time")
    elif 18 <= ans <= 19: print ("dinner time")
    else: return

def convert(x):
    h, m = x.split(":")
    new_m, time_range = m.split(" ")
    
    if "p.m." in m: 
        new_h = float(h) + 12
        y = new_h + float(new_m)/60
        return y
    elif "a.m." in m:
        new_h = float(h)
        y = new_h + float(new_m)/60
        return y
    else:
        return

main()
问题原因

输入12:00 p.m.时,convert函数会把小时数12加12,得到24.0,而午餐时段的判断条件是12 <= ans <=13,24.0不在这个区间内,所以无法触发午餐时间的输出。本质是12 p.m.本身就是下午12点,不需要再加12,只有1 p.m.到11 p.m.的下午时段才需要加12转换为24小时制。

修复与优化后的代码
def convert_time(time_str: str) -> float:
    # 拆分时间部分和时段(a.m./p.m.)
    time_part, period = time_str.split(" ")
    hours, minutes = time_part.split(":")
    hours = int(hours)
    minutes = int(minutes)
    
    # 处理12小时制转24小时制的特殊情况
    if period == "p.m.":
        if hours != 12:
            hours += 12
    else:  # a.m.时段
        if hours == 12:
            hours = 0  # 12 a.m.对应24小时制的0点
    
    return hours + minutes / 60

def main():
    time_input = input("What's the time? ")
    try:
        total_hours = convert_time(time_input)
    except ValueError:
        print("请输入正确的时间格式,例如: 7:30 a.m.")
        return
    
    if 7 <= total_hours <= 8:
        print("breakfast time")
    elif 12 <= total_hours <= 13:
        print("lunch time")
    elif 18 <= total_hours <= 19:
        print("dinner time")

if __name__ == "__main__":
    main()
优化说明
  1. 变量命名更清晰:将convert改为convert_time,x改为time_str等,提升代码可读性。
  2. 修复时间转换逻辑:针对12 p.m.和12 a.m.做特殊处理,确保转换后的数值符合24小时制规则。
  3. 增加异常处理:如果用户输入格式错误(比如缺少空格、非数字内容),会提示正确格式,避免程序崩溃。
  4. 符合Pythonic风格:拆分逻辑为独立步骤,避免一行式if语句;添加类型提示标注参数和返回值;用if __name__ == "__main__"规范程序入口。
  5. 更严谨的字符串拆分:先拆分时段和时间部分,再拆分小时和分钟,避免原代码中从分钟字符串里拆分时段的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:50:26