gpt4 book ai didi

python - 编写将分钟整数转换为格式为 "X hour(s) Y minute(s)"的字符串的函数的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:11 25 4
gpt4 key购买 nike

我目前有这样的 Django 自定义模板过滤器:

from django import template

register = template.Library()

@register.filter
def duration(value):
hours = value / 60
minutes = value % 60

hours_string = str(hours) + (" hours" if hours > 1 else " hour" ) if hours else ""
minutes_string = str(minutes) + (" minutes" if minutes > 1 else " minute") if minutes else ""

return ' '.join("{hours} {minutes}".format(hours=hours_string, minutes=minutes_string).split())

一些可能的输出:

1 hour 25 minutes
2 hours
45 minutes
3 hours 1 minute

' '.join(....split()) 技巧是我从 this solution 得到的东西.我意识到我只需要在字符串的开头或结尾检查额外的字符串(当它是 0 小时或 0 分钟时),但它似乎可以解决问题,也许它比某些人的正则表达式更容易阅读人。

我也觉得我违反了 DRY,因为我重复了几乎完全相同的 if-then block 两次。我在想类似...

for i, unit in enumerate([hours, minutes]):
# Do some code.

return ' '.join("{hours} {minutes}".format(hours=value[0], minutes=value[1]).split())

但如果没有另一个 if-then block ,我不知道如何在“小时”或“分钟”之间进行选择。每行的两个简写 if-then 也看起来有点难看......

如果有任何建议或提示,我将不胜感激。谢谢!

最佳答案

import datetime
def pprint(val):
if val == 1:
return '1 minute'
x = str(datetime.timedelta(minutes=val))[:-3].split(':')
r = ''
if int(x[0]):
r += x[0]+' hours' if int(x[0]) > 1 else x[0]+' hour'
if int(x[1]):
r += ' %s minutes' % int(x[1]) if int(x[1]) > 1 else ' %s minute' % int(x[0])
return r.strip()

样本运行:

>>> pprint(65)
'1 hour 5 minutes'
>>> pprint(1)
'1 minute'
>>> pprint(60)
'1 hour'
>>> pprint(61)
'1 hour 1 minute'

您可以轻松地将其扩展为也包括天数,但由于您只特别提到了小时和分钟,所以我调整了方法。

主要的繁重工作由 datetime.timedelta 完成,剩下的只是字符串解析。

关于python - 编写将分钟整数转换为格式为 "X hour(s) Y minute(s)"的字符串的函数的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10425081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com