问题描述
我正在尝试将我的Python技能(初学者)提高到一个新的水平。 而且我正在尝试自学functools.reduce()函数
所以我每次都遇到相同的错误; 如果有人可以向我解释代码中的问题,我将不胜感激
我正在尝试构建一个简单的函数,该函数可以接收数字并返回数字的总和
import functools
def sum_using_reduce(number):
return str(number)[0] + str(number)[1]
number = 104
print(functools.reduce(sum_using_reduce,number))
解决方法
尝试一下:
number = 104
functools.reduce(lambda x,y: x+y,[int(i) for i in str(number)])
输出:5
使用您的示例:
import functools
def sum_using_reduce(x,y) -> int:
return x + y
print(functools.reduce(sum_using_reduce,[int(i) for i in str(105)]))
输出:6
另一种方法:
import functools
def sum_using_reduce(number: int) -> int:
return functools.reduce(lambda x,[int(i) for i in str(number)])
print(sum_using_reduce(124))
输出:7
在您的sum_using_reduce
函数中,您试图对两个字符串求和,这将仅执行串联。此外,您还提供了一个整数作为reduce函数的第二个参数,其中reduce函数需要提供一个可迭代的函数。
以下是解决这两个要求的解决方案:
from functools import reduce
number=104
print(reduce(lambda x,y:x+y,map(int,str(number))))
map(int,str(number))
将数字转换为字符串(104->“ 104”),然后将字符串中的每个字符转换为整数,并返回可迭代的映射对象(“ 104”-> [1,0, 4])。
lambda x,y:x+y
是一个将两个整数求和的函数。