Numerisches Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Hallo,

Habe folgenden Unterschied in der Ausgabe festgestellt.

1.Beispiel:

Code: Alles auswählen

def GetHMS(s):
    sec = s
    h = (sec > 3599 and sec / 3600 or 0)
    m = (sec - h*3600 > 59 and (sec - h*3600) / 60 or 0)
    s = (sec - h*3600 - m*60 > 0 and (sec - h*3600 - m*60) or 0)
    return "%02.f:%02.f:%02.f" % (h, m, s)

sec = 12376

print GetHMS(sec)
Ausgabe:

Code: Alles auswählen

03:26:16
2.Beispiel:

Code: Alles auswählen

def GetHMS(s):
    sec = s
    h = (sec > 3599 and sec / 3600 or 0)
    m = (sec - h*3600 > 59 and (sec - h*3600) / 60 or 0)
    s = (sec - h*3600 - m*60 > 0 and (sec - h*3600 - m*60) or 0)
    return "%02.f:%02.f:%02.f" % (h, m, s)

sec = 12376.0

print GetHMS(sec)
Ausgabe:

Code: Alles auswählen

03:00:00
Warum dieser Unterschied?
Gruß, Harry
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Code: Alles auswählen

sec = 12345
h = sec > 3599 and sec / 3600 or 0  # -> h = 3
h * 3600 #  -> 10800
sec - h*3600 > 59 # True

sec = 12345.0
h = sec > 3599 and sec / 3600 or o # -> h = 3.429.....
h * 3600 # -> 12345.0 = sec !!
sec - h*3600 > 59 # -> 0, daher False
Gruß, mawe
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

HI. Ein Tipp: Benutze divmod, damit umschiffst du das Problem elegant:

Code: Alles auswählen

def GetHMS(s): 
    h,s = divmod(s,3600)
    m,s=divmod(s,60)
    return "%02.f:%02.f:%02.f" % (h, m, s)
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Danke für eure schnelle Erklärung!
Gruß, Harry
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

from __future__ import division
TUFKAB – the user formerly known as blackbird
Antworten