Cela semble être une façon extrêmement compliquée d'obtenir des jours, des heures, des minutes et des secondes à partir d'une valeur totale en secondes. Vous pouvez simplement utiliser la division:
def secs_to_days(seconds):
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
days, hours = divmod(hours, 24)
return (days, hours, minutes, seconds)
total_time = ("{:03} days, {:02} hours, {:02} minutes, "
"{:02} seconds,").format(*secs_to_days(total_seconds))
Pour gérer la pluralisation de ces (001 jours au lieu de 001 jours), vous pouvez modifier la fonction d'aide pour le faire.
def secs_to_days(seconds):
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
days, hours = divmod(hours, 24)
seconds = "{:02} second{}".format(seconds, "" if seconds == 1 else "s")
minutes = "{:02} minute{}".format(minutes, "" if minutes == 1 else "s")
hours = "{:02} hour{}".format(hours, "" if hours == 1 else "s")
days = "{:03} day{}".format(days, "" if days == 1 else "s")
return (days, hours, minutes, seconds)
total_time = ", ".join(secs_to_days(seconds))
Si vous gérez pluriels souvent, voir Plural String Formatting pour le cas geneal.
Qu'en est-il des secondes intercalaires? – Marichyasana
Comment formeriez-vous les {: 03} jours pour dire juste 'jour' s'il n'y en a qu'un? –
@Marichyasana Ce sont les secondes SI. – Artyer