有整数切片的替代方法吗?

2024-09-24 22:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个递归函数,将最后两个数字相加,直到没有剩余的数字。例如:

sumDigits(239)

相当于:

2+3+9=14

这很困难,因为输入必须是一个整数,不转换它就不能切片。我决定尝试将它转换为一个列表,因为我认为pop()方法对此很有用。似乎这种方法不起作用。有什么建议吗?你知道吗

执行:

>>> sumDigits('234')
9
>>> sumDigits('2343436432424')
8
>>> 

代码:

def sumDigits(n):
    l1 = list(str(n))
    if len(l1) > 1:
        a = int(l1.pop())
        b = int(l1.pop())
        l1.append(str(a+b))
        return sumDigits(int(''.join(l1)))
    else:
        return n

Tags: 方法代码l1列表returndef切片数字
3条回答

您应该传递整数列表,而不是传递字符串:

def sumDigits(l1):
    if len(l1) > 1:
        a = l1.pop()
        b = l1.pop()
        l1.append(a+b)
        return sumDigits(l1)
    else:
        return l1[0]

print sumDigits([2,3, 4])

print sumDigits([2, 3, 4, 3,  4, 3, 6, 4, 3, 2, 4, 2, 4])

你的方法的问题是:

'23434364324|24|'->;'2343436432|46|'->;'2343436432 | 10'

现在pop将返回01,而不是您所期望的210。因此输出错误。你知道吗

简单解决方案:

>>> s = '2343436432424'
>>> sum(int(x) for x in s)
44

既然每个人似乎都在为你解决家庭作业,下面是一个优雅的递归解决方案。你知道吗

def sumDigits(n):
    if n < 10:
        return n
    return n % 10 + sumDigits(n / 10)

有了reduce()这样的功能工具,问题就可以通过

from functools import reduce

def sumDigits(n):
    return reduce((lambda x, y: int(x) + int(y)), list(str(n)))

相关问题 更多 >