12小时制时间向前推算功能开发遇阻,求代码修正方案
修正12小时制时间推算代码
先梳理下你原代码里的几个关键问题,这些是导致功能失效的核心原因:
- 用
eval(input())处理am/pm这类字符串输入会直接报错,因为eval会把输入当作变量解析,而你并没有定义am/pm变量,直接用input()获取字符串即可。 - 变量名不能包含空格,比如
new time要改成new_time这种合法的命名格式。 - 时间转换逻辑混乱,应该先把12小时制转为24小时制完成计算,再转回12小时制,这样逻辑更清晰,也能避免边界错误。
- 判断
ampm == am是错误写法,应该用字符串相等判断,比如ampm == 'am'。
下面是修正后的完整代码,完全符合你的需求(示例输入8、am、5,输出1 pm):
# 获取用户输入,做基础格式处理 time = int(input('Input time(1-12):')) ampm = input('am or pm?').strip().lower() # 兼容大小写输入,比如AM/Pm都能识别 forward = int(input('Forward:')) # 第一步:将12小时制转换为24小时制,处理特殊时间点 if ampm == 'am': twenty_four_time = 0 if time == 12 else time else: # pm时段 twenty_four_time = 12 if time == 12 else time + 12 # 第二步:计算推算后的24小时制时间,取模24处理跨天情况 new_twenty_four = (twenty_four_time + forward) % 24 # 第三步:将24小时制转回12小时制,确定am/pm标识 if new_twenty_four == 0: new_time = 12 new_ampm = 'am' elif 1 <= new_twenty_four < 12: new_time = new_twenty_four new_ampm = 'am' elif new_twenty_four == 12: new_time = 12 new_ampm = 'pm' else: # 13-23点的情况 new_time = new_twenty_four - 12 new_ampm = 'pm' # 输出最终结果 print(f'New time is: {new_time} {new_ampm}')
代码逻辑说明:
- 输入兼容:对
am/pm输入做了大小写处理,避免用户输入大写或混合大小写导致识别失败。 - 24小时制转换:专门处理了12am(转为0点)和12pm(保持12点)这两个特殊时间,确保后续计算准确。
- 跨天处理:用
%24取模,就算推算小时数超过24(比如推算25小时),也能自动转为等价的1小时后。 - 12小时制转回:再次处理边界时间,确保0点显示为12am、12点显示为12pm,其他时段按规则转换。
测试你的示例场景:输入8、am、5,转换为24小时制是8,加5得到13,13属于13-23区间,所以13-12=1,对应pm,最终输出New time is: 1 pm,完全符合预期。
内容的提问来源于stack exchange,提问作者Daxon
相关产品推荐
相关产品推荐

