蟒蛇:转换24小时,为什么使用if将返回None

时间:2020-05-26 08:32:02

标签: python python-3.x

def time24hr(tstr): 
    if tstr[-2:0] == 'am' and tstr[0:2] == '12':
        a = '00' + tstr[3:5] + 'hr'
        return a

    elif tstr[-2:0] == 'am' and tstr[0:2] != '12':
        b = tstr[0:2] + tstr[3:5] + 'hr'
        return b
    elif tstr[-2:0] == 'pm':
        c = str(int(tstr[0:2]) + 12) + tstr[3:5] + 'hr'
        return c

我很困惑为什么此函数不返回字符串,而是显示return None

4 个答案:

答案 0 :(得分:1)

您有if .. elif .. elif,这意味着如果输入tstr不满足任何条件,则您的函数将返回None,因为在块之外没有返回语句。

答案 1 :(得分:0)

如果不满足条件,则返回None(因为在这种情况下没有返回值)。

如果不满足所有条件(例如false),则可以添加返回值。 这说明您提供的tstr格式不正确,无法在函数中进行转换。

 def time24hr(tstr): 
    if tstr[-2:0] == 'am' and tstr[0:2] == '12':
        a = '00' + tstr[3:5] + 'hr'
        return a

    elif tstr[-2:0] == 'am' and tstr[0:2] != '12':
        b = tstr[0:2] + tstr[3:5] + 'hr'
        return b
    elif tstr[-2:0] == 'pm':
        c = str(int(tstr[0:2]) + 12) + tstr[3:5] + 'hr'
        return c
    return false

答案 2 :(得分:0)

以下有关if条件的更改将有助于解决您的问题。我刚刚将tstr[-2:0]转换为tstr[-2:]

def time24hr(tstr): 
if tstr[-2:] == 'am' and tstr[0:2] == '12':
    a = '00' + tstr[3:5] + 'hr'
    return a
elif tstr[-2:] == 'am' and tstr[0:2] != '12':
    b = tstr[0:2] + tstr[3:5] + 'hr'
    return b
elif tstr[-2:] == 'pm':
    c = str(int(tstr[0:2]) + 12) + tstr[3:5] + 'hr'
    return c

希望有帮助。

答案 3 :(得分:0)

通常,最好查看strptimestrftime模块中的timedatetime方法。使用它们,您可以将字符串解析为日期时间对象,反之亦然。它们还使您可以轻松地在12h和24h格式之间转换。例如:

from datetime import datetime
strings = ('12:05:10 am', '12:13:14 pm', '6:15:20 pm')
for s in strings:
    print(datetime.strptime(s, '%I:%M:%S %p').strftime('%H:%M:%S'))

# 00:05:10
# 12:13:14
# 18:15:20