Python function to convert seconds into minutes, hours, and days

前端 未结 16 1417
不思量自难忘°
不思量自难忘° 2020-11-28 07:27

Question: Write a program that asks the user to enter a number of seconds, and works as follows:

  • There are 60 seconds in a minute. If the number of seconds

16条回答
  •  没有蜡笔的小新
    2020-11-28 08:18

    Patching Mr.B's answer (sorry, not enough rep. to comment), we can return variable granularity based on the amount of time. For example, we don't say "1 week, 5 seconds", we just say "1 week":

    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))
            else:
                # Add a blank if we're in the middle of other values
                if len(result) > 0:
                    result.append(None)
        return ', '.join([x for x in result[:granularity] if x is not None])
    

    Some sample input:

    for diff in [5, 67, 3600, 3605, 3667, 24*60*60, 24*60*60+5, 24*60*60+57, 24*60*60+3600, 24*60*60+3667, 2*24*60*60, 2*24*60*60+5*60*60, 7*24*60*60, 7*24*60*60 + 24*60*60]:
        print "For %d seconds: %s" % (diff, display_time(diff, 2))
    

    ...returns this output:

    For 5 seconds: 5 seconds
    For 67 seconds: 1 minute, 7 seconds
    For 3600 seconds: 1 hour
    For 3605 seconds: 1 hour
    For 3667 seconds: 1 hour, 1 minute
    For 86400 seconds: 1 day
    For 86405 seconds: 1 day
    For 86457 seconds: 1 day
    For 90000 seconds: 1 day, 1 hour
    For 90067 seconds: 1 day, 1 hour
    For 172800 seconds: 2 days
    For 190800 seconds: 2 days, 5 hours
    For 604800 seconds: 1 week
    For 691200 seconds: 1 week, 1 day
    

提交回复
热议问题