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

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}')

代码逻辑说明:

  1. 输入兼容:对am/pm输入做了大小写处理,避免用户输入大写或混合大小写导致识别失败。
  2. 24小时制转换:专门处理了12am(转为0点)和12pm(保持12点)这两个特殊时间,确保后续计算准确。
  3. 跨天处理:用%24取模,就算推算小时数超过24(比如推算25小时),也能自动转为等价的1小时后。
  4. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:52:32