Python: divmod的神奇作用

今天在解一道codewars的题目的时候,被divmod的作用吸引到了。
题目是这样的:

Write a function, which takes a non-negative integer (seconds) as input 
and returns the time in a human-readable format (HH:MM:SS)

HH = hours, padded to 2 digits, range: 00 - 99
MM = minutes, padded to 2 digits, range: 00 - 59
SS = seconds, padded to 2 digits, range: 00 - 59
The maximum time never exceeds 359999 (99:59:59)

You can find some examples in the test fixtures:

Test.assert_equals(make_readable(0), "00:00:00")
Test.assert_equals(make_readable(5), "00:00:05")
Test.assert_equals(make_readable(60), "00:01:00")
Test.assert_equals(make_readable(86399), "23:59:59")
Test.assert_equals(make_readable(359999), "99:59:59")

就是按照输入的秒数,按照要求返回字符串。
我一开始陷入了错误的思路,想按范围判断,10秒以下的怎么输出,10秒以上的怎么输出,分钟和小时类似。要写一大堆的elif。
实际上,只要使用02d就可以解决:

02d formats an integer (d) to a field of minimum width 2 (2), 
with zero-padding on the left (leading 0):

稍微易于理解的解法:

def make_readable(seconds):
    minutes, seconds = divmod(seconds, 60)
    hours, minutes = divmod(minutes, 60)
    res = '%02d:%02d:%02d' %(hours, minutes, seconds)
    return res

在提交之后,发现更简洁的解法:

def make_readable_best(s):    
    return '{:02}:{:02}:{:02}'.format(s / 3600, s / 60 % 60, s % 60)

真是受教颇深!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,532评论 25 708
  • Python 是一种相当高级的语言,通过 Python 解释器把符合语法的程序代码转换成 CPU 能够执行的机器码...
    Python程序媛阅读 1,951评论 0 3
  • 用教会的方法找出发现心里的木马程序: 1:目前的最主要问题:力不从心、精力不够。 2:找出相关的签名信息,比如我的...
    京珂大师姐阅读 231评论 0 2
  • 看了他们哭的那么伤心 看了他们笑的那么开心 看了他们喊的那么揪心 看了他们闹的那么欢心 一整个电影 他们演的那么认...
    倒叙阅读 286评论 0 1
  • 01. 我是一个晨型人。已经连续500多天每天5:00早起了。 我也正带领着更多想要早起的小伙伴一起早起。 但,你...
    繁华静语阅读 561评论 3 5