我今天已经写了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: invalid mean for int() with base 10:'1:‘这是什么意思?
发布于 2012-04-02 02:58:58
实际上,您的代码是不正确的,并且您没有使用完整的测试用例进行测试。请考虑以下场景
>>> 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:MMam|pm。您应该使您的代码灵活,以接受其他格式。
尝试使用split(':')而不是first_numbers = tstr[0:2]和last_numbers = tstr[3:5]
发布于 2012-08-14 23:23:16
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它会在学校里发挥作用
https://stackoverflow.com/questions/9967208
复制相似问题