pyschools主题3 ex 9

2024-05-19 14:00:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我今天已经发了3篇关于pyschools.com网站我希望这不算太多。不管怎样,这个练习要求我编写一个函数来将时间转换为24小时格式。 下面是一个示例:>;>;>;time24hr('12:34am')'0034hr'

我的功能,在我空闲时运行良好:

def time24hr(tstr):
    am_or_pm = tstr[-2:]
    first_numbers = tstr[0:2]
    last_numbers = tstr[3:5]
    if am_or_pm == "am":
        if first_numbers == '12':
            first_in_am12 = '00'
            return first_in_am12 + last_numbers + am_or_pm      
        else:
            return first_numbers + last_numbers + am_or_pm
    if am_or_pm == "pm":
        if first_numbers == '12':
            return first_numbers + last_numbers + am_or_pm
        elif int(first_numbers) > 9:
            ok = repr(int(first_numbers) + 12)
            return ok + last_numbers + am_or_pm
        elif int(first_numbers) <= 9:
            ok = repr(int(tstr[1]) + 12)
            return ok + last_numbers + am_or_pm

但是,在pyschools网站上,当我运行代码时,它会给出以下错误: ValueError:基为10的int()的文本无效:“1:” 这是什么意思?在


Tags: orgtreturnif网站okamint
2条回答
def time24hr(tstr):
    time=tstr.replace(':','')
    if 'am' in time:
        tim=int(time.replace('am',''))
    elif 'pm' in time:
        tim=int(time.replace('pm',''))
    mini=tim%100
    hour=tim//100
    if mini<10:
    mini='0'+str(mini)
    else:
        mini=str(mini)
    if 'am' in time:
        if hour<10:
            hour='0'+str(hour)
    elif hour==12:
        hour='0'+str(hour-12)
        time1=time.replace('am','')
        time1=str(hour)+str(mini)+'hr'
    elif 'pm' in time:
        if hour<12:
            hour=12+hour
        elif hour==12:
            hour=hour
    time1=time.replace('pm','')
    time1=str(hour)+str(mini)+'hr'
    return time1

它将在pyschools中起作用

实际上,您的代码是不正确的,您没有使用完整的测试用例进行测试。考虑以下场景

>>> time24hr('2:34pm')

Traceback (most recent call last):
  File "<pyshell#855>", line 1, in <module>
    time24hr('2:34pm')
  File "<pyshell#849>", line 14, in time24hr
    elif int(first_numbers) > 9:
ValueError: invalid literal for int() with base 10: '2:'
>>> time24hr('2:34am')
'2:4aam'
>>> time24hr('0:34am')
'0:4aam'
>>> time24hr('12am')
'00mam'
>>> 

你会看到奇怪的结果

原因是,您假设输入的格式始终是HH:MM[am | pm]。你应该使你的代码能够灵活地接受其他格式。在

尝试使用split(':')而不是first_numbers = tstr[0:2]和{}

相关问题 更多 >