此外,我无法将 int 转换为字符串,也无法使用列表推导
我不断收到同样的错误,我不知道如何处理它......
这是代码:
sum_of_digits = lambda a: map(lambda b, c: b + sum_of_digits(c) if a > 10 else None, a % 10, a / 10) if a > 10 else None
def main():
print(sum_of_digits(104))
if __name__ == '__main__':
main()
这是错误:
TypeError: argument 2 to map() must support iteration
(此答案适用于该问题的先前版本,但不符合新的编辑版本的要求。
正如其他人指出的那样,错误的原因是map
函数的第二个参数是一个整数,a % 10
,但它应该是一个可迭代对象。
这是一个满足问题要求的单行代码:它创建一个函数,该函数返回非负整数的位数之和,并同时使用lambda
和map
。它还使用int
和str
但这并不违反您声明的要求。这是有效的,因为str(a)
返回一个字符串,该字符串是数字数字的可迭代对象。每个数字都是一个 1 个字符的字符串,在求和之前必须将其转换为整数。map
进行这种转换。
sum_of_digits = lambda a: sum(map(int, str(a)))
Map 需要一个函数并将其应用于一些可迭代的东西。你没有给它一个可迭代的东西,只是一个函数。
尝试这样的事情
import math
sum_of_digits = lambda x: sum([int(c) for c in str(x)])
the_value_of_a_specific_digit = lambda x, d: int(x / 10 ** d % 10)
an_iterable_of_number_of_digits = lambda x: range(int(math.log(x, 10))+1)
a_combined_function = lambda x: sum(map(func, iterable))
def main():
print(sum_of_digits(104))
if __name__ == '__main__':
main()
有一个有趣的小递归版本使用and
:
sum_of_digits = lambda n: n and n%10 + sum_of_digits(n//10)
如果n
是假的(即零(,则返回n
,否则返回最低有效数字的总和和n//10
如果你使用的是Python 2,你必须from __future__ import division