12小时制转24小时制代码异常:输入10:10:10PM输出不符预期
12小时制转24小时制代码的问题分析
核心错误:时段标识(AM/PM)提取逻辑完全错误
代码中这一行是问题根源:
hours, minutes, indicator = map(int, s[:-2].split(":"))
- 对于输入
10:10:10PM,s[:-2]会截取掉最后两位的PM,得到10:10:10;按:拆分后是["10", "10", "10"],再通过map(int, ...)转成三个整数。 - 此时
indicator被错误赋值为秒数10(整数类型),而非我们需要的字符串"PM"。后续判断indicator == "PM"时,整数和字符串永远不相等,导致PM时段的小时加12逻辑完全没有触发,所以输入10:10:10PM时,小时数始终是10,无法得到预期的22。
次要问题:冗余无效的代码
int(hours) int(minutes)
这两行完全多余,因为前面的map(int, ...)已经将hours和minutes转换成整数类型了,这两行没有任何实际作用。
额外问题:秒数被错误固定为0
原代码返回时用0填充秒数,会丢失输入中的实际秒值,不符合时间转换的需求。
修正后的代码
def timeconversion(s): # 拆分时间部分和时段标识 time_part = s[:-2] indicator = s[-2:] hours, minutes, seconds = map(int, time_part.split(":")) if indicator == "PM": if hours != 12: hours += 12 elif indicator == "AM" and hours == 12: hours = 0 # 保留输入的实际秒数 return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds) if __name__ == "__main__": input_instring = input("enter: ") result = timeconversion(input_instring) print(result)
内容的提问来源于stack exchange,提问作者Shekar Valluri
相关产品推荐
相关产品推荐

