猿问

我有一个赋值来使用 lambda 和 python 中的映射在一行中总结一个数字的所有数字

此外,我不能将 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


qq_遁去的一_1
浏览 196回答 3
3回答

天涯尽头无女友

正如其他人指出的那样,您的错误的原因是您的map函数的第二个参数是一个整数a % 10,但它应该是一个可迭代的。这是一个满足您的问题要求的单行:它创建一个函数,该函数返回一个非负整数的数字之和,并同时使用lambda和map。它还使用intandstr但这并不违反您规定的要求。这是有效的,因为str(a)返回一个字符串,它是数字的数字的可迭代。每个数字是一个 1 个字符的字符串,在求和之前必须将其转换为整数。在map做这种转换。sum_of_digits = lambda a: sum(map(int, str(a)))

温温酱

有一个有趣的小递归版本使用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

aluckdog

Map 接受一个函数并将其应用于一些可迭代的事物。你没有给它一个可迭代的东西,只是一个函数。尝试这样的事情import mathsum_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()
随时随地看视频慕课网APP

相关分类

Python
我要回答