将秒转换为分钟、小时和天的函数

49 投票
20 回答
261225 浏览
提问于 2025-04-16 06:16

问题:
写一个程序,让用户输入一个秒数,然后程序按以下方式工作:

  • 一分钟有60秒。如果用户输入的秒数大于或等于60,程序应该显示这些秒数对应的分钟数。

  • 一个小时有3600秒。如果用户输入的秒数大于或等于3600,程序应该显示这些秒数对应的小时数。

  • 一天有86400秒。如果用户输入的秒数大于或等于86400,程序应该显示这些秒数对应的天数。

我目前的进展:

def time():
    sec = int( input ('Enter the number of seconds:'.strip())
    if sec <= 60:
        minutes = sec // 60
        print('The number of minutes is {0:.2f}'.format(minutes)) 
    if sec (<= 3600):
        hours = sec // 3600
        print('The number of minutes is {0:.2f}'.format(hours))
    if sec <= 86400:
        days = sec // 86400
        print('The number of minutes is {0:.2f}'.format(days))
    return

20 个回答

12

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。比如说,当你在写代码时,可能会发现某些功能没有按照你的预期工作。这种情况可能是因为你没有正确地使用这些工具,或者是因为工具本身有一些限制。

为了找到解决方案,很多人会去StackOverflow这样的论坛提问。在那里,其他程序员会分享他们的经验和解决方法。你可以看到很多人遇到类似的问题,并且他们的讨论和建议可能会帮助你更好地理解如何解决你的问题。

总之,遇到困难时,不要气馁,去寻求帮助是很正常的。通过学习别人的经验,你会逐渐掌握更多的知识和技能。

def normalize_seconds(seconds: int) -> tuple:
    (days, remainder) = divmod(seconds, 86400)
    (hours, remainder) = divmod(remainder, 3600)
    (minutes, seconds) = divmod(remainder, 60)

    return namedtuple("_", ("days", "hours", "minutes", "seconds"))(days, hours, minutes, seconds)
61

这段代码的作用是把 n 秒转换成 d 天、h 小时、m 分钟和 s 秒。

from datetime import datetime, timedelta

def GetTime():
    sec = timedelta(seconds=int(input('Enter the number of seconds: ')))
    d = datetime(1,1,1) + sec

    print("DAYS:HOURS:MIN:SEC")
    print("%d:%d:%d:%d" % (d.day-1, d.hour, d.minute, d.second))
85

这个小知识可以用来显示经过的时间,精确度可以根据需要调整。

我个人觉得在这里讨论效率几乎没有意义,只要不是做一些非常低效的事情就行。过早优化往往会带来很多麻烦。这个方法足够快,根本不会成为你的瓶颈。

intervals = (
    ('weeks', 604800),  # 60 * 60 * 24 * 7
    ('days', 86400),    # 60 * 60 * 24
    ('hours', 3600),    # 60 * 60
    ('minutes', 60),
    ('seconds', 1),
)

def display_time(seconds, granularity=2):
    result = []

    for name, count in intervals:
        value = seconds // count
        if value:
            seconds -= value * count
            if value == 1:
                name = name.rstrip('s')
            result.append("{} {}".format(value, name))
    return ', '.join(result[:granularity])

..而且这个方法的输出效果还不错:

In [52]: display_time(1934815)
Out[52]: '3 weeks, 1 day'

In [53]: display_time(1934815, 4)
Out[53]: '3 weeks, 1 day, 9 hours, 26 minutes'

撰写回答