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.
ich möchte sekunden umrechnen in grössere zeiteinheiten. z.b. 62 sec = 1min & 2 sec. mit den modulen time und datetime finde ich keine 'einfache' lösung. nun habe ich mal folgendes geschrieben
def computeSecondsToHigherUnits(seconds, highestUnit):
"""
berechnet aus seconds anz. sekunden, minuten, ...
@param seconds: zeit in sekunden
@type seconds: float oder int
@param highestUnit: grösste zu berechnende zeiteinheit. möglich: sec, min, h, d, week, year
@type highestUnit: string
"""
units = ['sec', 'min', 'h', 'd'] #reihe der einheiten
unreached = {'sec': 60, #nicht zu erreichen, falls highestUnit eine grössere zeiteinheit ist
'min': 60,
'h': 24
}
#anfügen von grösserer zeiteinheit zu units und unreached
if highestUnit == 'week':
units.append('week')
unreached['d'] = 7
elif highestUnit == 'year':
units.append('year')
unreached['d'] = 365
#behandeln von nachkommastellen bei seconds
res = {'partSec': seconds - int(seconds)}
seconds = int(seconds)
#berechnen der zeiten pro zeiteinheit
left = seconds
i = 0
while left:
if units.index(highestUnit) > i:
res[units[i]] = left%unreached[units[i]] #anteil der aktuellen zeiteinheit
left = int(left/unreached[units[i]]) #übrigbleibende zeit in der nächst grösseren zeiteinheit
else:
res[units[i]] = left
break
i += 1
return res
aber da wird es doch wohl eine einfachere und schönere lösung zum problem geben?
kryz hat geschrieben:aber da wird es doch wohl eine einfachere und schönere lösung zum problem geben?
datetime benutzen.
Es ist übrigens beeindruckend wieviele absolute no-gos dein Code enthält dafür dass er nur 38 Zeilen lang ist.
Du solltest auf jedenfall ein Python Tutorial zu rate ziehen (damit ist nicht das Openbook gemeint) und dich mit PEP 8 sowie idiomatischem Python auseinandersetzen.
anscheinend gibts da wirklich keine lösung in der standardbibliothek. wenn man den einfachen, kurzen code von gerolds zeitspanne_variante2 anschaut, brauchts das allerdings auch nicht wirklich
ich habe trozdem meinen code noch ein bisschen verbessert und versucht, die absoluten no-gos zu eliminieren. ist halt ein stück länger, dafür gibts die möglichkeit die grösste zeiteinheit zu bestimmen. http://paste.pocoo.org/show/109119/
kryz hat geschrieben:ich habe trozdem meinen code noch ein bisschen verbessert und versucht, die absoluten no-gos zu eliminieren.
Zu den absoluten no-gos gehört auch: sich nicht an PEP8 halten. Du musst nicht eine Instanz der Klasse PrettyPrinter erzeugen; die Funktion pprint aus dem Modul pprint reicht doch auch. Die Funktion lässt sich auf jeden Fall in weniger Zeilen schreiben.