我一直在阅读有关转换输入秒数的方法的帖子,这些方法应该输出为具有给定持续时间(小时、分钟、秒)的正式字符串。但是我想知道如何格式化它以便它解释单数化/复数化,例如,当我知道 62 秒应该读作 "1 分 2 秒" 而不是 120 秒,后者只是 “2 分钟”。
另一个标准是,如果秒数为 0,它应该返回 "now"。
到目前为止,这是我的代码:
def format_duration(seconds, granularity = 2):
intervals = (('hours', 3600), ('minutes', 60), ('seconds', 1))
human_time = []
for name, count in intervals:
value = seconds // count
if value:
seconds -= value * count
if value == 1:
name = name.rstrip('s')
human_time.append("{} {}".format(value, name))
else:
return "now"
return ','.join(human_time[:granularity])
求助!谢谢!
乔丹
请您参考如下方法:
您的代码已经运行良好,只是您的return "now" 有一个问题,我已在下面的代码中修复了该问题。您还希望您的代码做什么?
def prettyList(human_time):
if len(human_time) > 1:
return ' '.join([', '.join(human_time[:-1]), "and", human_time[-1]])
elif len(human_time) == 1:
return human_time[0]
else:
return ""
def format_duration(seconds, granularity = 2):
intervals = (('hours', 3600), ('minutes', 60), ('seconds', 1))
human_time = []
for name, count in intervals:
value = seconds // count
if value:
seconds -= value * count
if value == 1:
name = name.rstrip('s')
human_time.append("{} {}".format(value, name))
if not human_time:
return "now"
human_time = human_time[:granularity]
return prettyList(human_time)
编辑:所以我添加了一个函数来美化输出,列表中的最后一项将由“and”分隔,所有其他项之前由逗号分隔。即使您在代码中添加更多间隔(如 ('days', 86400)),这仍然有效。输出现在看起来像 2 小时 1 分 43 秒 或 25 分 14 秒。
