为了账号安全,请及时绑定邮箱和手机立即绑定

无法弄清楚为什么代码在 Python 3 中工作,而不是 2.7

无法弄清楚为什么代码在 Python 3 中工作,而不是 2.7

森栏 2021-07-30 17:44:25
我用 Python 3 编写并测试了下面的代码,它工作正常:def format_duration(seconds):    dict = {'year': 86400*365, 'day': 86400, 'hour': 3600, 'minute': 60, 'second': 1}    secs = seconds    count = []    for k, v in dict.items():        if secs // v != 0:            count.append((secs // v, k))            secs %= v    list = [str(n) + ' ' + (unit if n == 1 else unit + 's') for n, unit in count]    if len(list) > 1:        result = ', '.join(list[:-1]) + ' and ' + list[-1]    else:        result = list[0]    return resultprint(format_duration(62))在 Python3 中,上述返回:1 minute and 2 seconds但是,Python 2.7 中的相同代码返回:62 seconds我终其一生都无法弄清楚原因。任何帮助将不胜感激。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

答案是不同的,因为您的 dict 中的项目在两个版本中以不同的顺序使用。


在 Python 2 中,dicts 是无序的,所以你需要做更多的事情来按照你想要的顺序获取项目。


顺便说一句,不要使用“dict”或“list”作为变量名,这会使调试变得更加困难。


这是固定代码:


def format_duration(seconds):

    units = [('year', 86400*365), ('day', 86400), ('hour', 3600), ('minute', 60), ('second', 1)]

    secs = seconds

    count = []

    for uname, usecs in units:

        if secs // usecs != 0:

            count.append((secs // usecs, uname))

            secs %= usecs


    words = [str(n) + ' ' + (unit if n == 1 else unit + 's') for n, unit in count]


    if len(words) > 1:

        result = ', '.join(words[:-1]) + ' and ' + words[-1]

    else:

        result = words[0]


    return result



print(format_duration(62))


查看完整回答
反对 回复 2021-08-03
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信