2012-04-01 41 views
0

我今天已经提出了3篇关于pyschools.com的练习,我希望这不是太多。无论如何,练习要求我写一个函数将时间转换为24小时格式。 下面是一个例子:>>> time24hr('12:34am') '0034hr'pyschools topic 3 ex 9

我的功能,这在我的空闲正常工作:,当我运行

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:无效文字为int()与基地10:'1:' 这是什么意思?

+1

在错误信息仔细看看。即使不知道错误信息是如何告诉你什么是错误的,你也可以看到它告诉你错误的部分有什么问题。 – SingleNegationElimination 2012-04-01 18:57:06

回答

4

其实你的代码是不正确的,你没有测试全面的测试用例。请考虑以下方案

>>> 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]last_numbers = tstr[3:5]

+0

我认为该学校网站假设,该函数应采用格式HH:MM。 而且,它并没有说我有错误的答案。它告诉我它不能编译它,因为它在行中发现一个错误:elif int(first_numbers)> 9: 非常感谢您的回答! – geekkid 2012-04-01 19:10:21

0
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工作

+0

你可以在这里添加一些解释性文字。 – 2015-03-16 22:15:40

+0

你应该以某种方式解释代码的作用。 – 2015-03-16 23:45:06