Python 3.x 奇怪的python3字符串行为

Python 3.x 奇怪的python3字符串行为,python-3.x,string,Python 3.x,String,下面是将12小时时间格式转换为24小时格式的代码。除了12小时的上午时间(1:00:00至11:59:59)表现怪异且仅返回0外,一切正常 代码: def timeConversion(s): times = s.split(":") hour = int(times[0]) minutes = times[1] seconds = times[2][:-2] timemod = times[-1][2:] military_hour=0

下面是将12小时时间格式转换为24小时格式的代码。除了12小时的上午时间(1:00:00至11:59:59)表现怪异且仅返回0外,一切正常

代码:

def timeConversion(s):
    times = s.split(":")
    hour = int(times[0])
    minutes = times[1]
    seconds = times[2][:-2]
    timemod = times[-1][2:]

    military_hour=0


    if timemod=="AM" : 

        if hour == 12 : 

            miltary_hour = 0
        else:
            miltary_hour = hour

    elif timemod == "PM" : 

        if hour == 12 : 
            military_hour = hour
        else:
            military_hour = hour + 12



    if military_hour < 10 : 
        military_hour = "0" + str(military_hour)
    else:
        military_hour = str(military_hour)


    return ":".join([military_hour,minutes,seconds])

## below 2 are incorrect 
print(timeConversion("9:30:10AM"))
print(timeConversion("6:00:00AM"))

## these are correct 
print(timeConversion("12:00:00AM"))
print(timeConversion("12:00:00PM"))
print(timeConversion("11:59:59PM"))

为什么中午之前的上午时间总是返回00而不是实际小时

你可以试试这个:

time_12 = input().strip()
time_in_pm = time_12[-2:].lower() == 'pm'
time_list = list(map(int, time_12[:-2].split(':')))
if not time_in_pm and time_list[0] == 12:
    time_list[0] = 0
if time_in_pm and time_list[0] < 12:
    time_list[0] += 12
print(':'.join(map(lambda x: str(x).rjust(2, '0'), time_list)))
time_12=input().strip()
time_in_pm=time_12[-2:].lower()=='pm'
time_list=list(映射(int,time_12[:-2]。拆分(':'))
如果时间不在时间列表[0]==12:
时间列表[0]=0
如果时间\u在\u pm和时间\u列表[0]<12:
时间列表[0]+=12
打印(“:”.join(映射(lambda x:str(x).rjust(2,'0'),时间列表)))

或者您也可以使用python日期时间库。

您在
AM
逻辑中拼错了
millitary\u hour

在这里:


你的if-else块在AM情况下是相同的?我有打字错误。我已经编辑了代码,但仍然有问题。你是最好的。我困了,不能清晰地思考。这确实是代码中的“愚蠢”错误。修复变量名后,我看到了正确的结果。@Prithi。我建议删除这个问题。这太具体了,对任何人都没有多大用处else@paradoxlover. 我想是的,假设OP可以删除你的答案。但你们会很快把它拿回来的,看起来是物理学家对的。。。社区是第一位的。是的,我会把它拿回来;)。无法删除。堆栈溢出不允许我。我想我得留下来。
time_12 = input().strip()
time_in_pm = time_12[-2:].lower() == 'pm'
time_list = list(map(int, time_12[:-2].split(':')))
if not time_in_pm and time_list[0] == 12:
    time_list[0] = 0
if time_in_pm and time_list[0] < 12:
    time_list[0] += 12
print(':'.join(map(lambda x: str(x).rjust(2, '0'), time_list)))
if timemod=="AM" : 
    if hour == 12 : 
        miltary_hour = 0
    else:
        miltary_hour = hour