2012-04-01 9 views
0

Ich habe bereits 3 Beiträge heute über pyschools.com Übungen ich hoffe, das ist nicht zu viel. Wie auch immer, die Übung fordert mich auf, eine Funktion zu schreiben, um die Uhrzeit in 24 Stunden Format zu konvertieren. Hier ist ein Beispiel: >>> time24hr ('12: 34am ') '0034hr'pyschools Thema 3 ex 9

Meine Funktion, die in meinem IDLE gut funktioniert:

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 

jedoch in der pyschools Website, wenn ich laufe Der Code gibt mir den folgenden Fehler: ValueError: ungültiges Literal für int() mit Basis 10: '1:' Was bedeutet das?

+1

Schauen Sie genau auf die Fehlermeldung arbeiten. Auch ohne zu verstehen, wie die Fehlermeldung Ihnen sagt, was falsch war, können Sie wahrscheinlich sehen, was an dem fehlerhaften Teil falsch ist. – SingleNegationElimination

Antwort

4

Tatsächlich ist Ihr Code falsch und Sie testen nicht mit vollen Testfällen. Betrachten Sie die folgenden Szenarien

>>> 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' 
>>> 

Und werden Sie seltsame Ergebnisse

Der Grund ist, weil man davon ausgegangen, dass das Eingangs immer im Format wäre HH: MM [am | pm]. Sie sollten Ihren Code flexibel machen, um andere Formate zu akzeptieren.

Try split(':') statt first_numbers = tstr[0:2] und last_numbers = tstr[3:5]

+0

Ich denke die pyschools Website angenommen, dass die Funktion im Format HH: MM sein sollte. Und es heißt auch nicht, dass ich falsche Antworten habe. Es sagt mir, dass es es nicht kompilieren kann, weil es einen Fehler in der Zeile findet: elif int (first_numbers)> 9: Vielen Dank für Ihre Antwort! – geekkid

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 

zu verwenden, um es in pyschools

+0

Können Sie einen erläuternden Text dazu hinzufügen? –

+0

Sie sollten irgendwie erklären, was der Code tut. –