想学py的小白 发表于 2023-3-26 13:03:50

利用 reduce 函数求 0—100 之间奇数的和。

from functools import reduce
def add(a, b):
    if a % 2 == 1:      #这一步不知道如何在add函数中,对参数a和b进行条件限制,即:令其为奇数
      returna+b
print(reduce(add, range(0, 100)))

isdkz 发表于 2023-3-26 13:10:40

本帖最后由 isdkz 于 2023-3-26 13:19 编辑

我们可以在 add() 函数内部检查参数 b 是否为奇数。如果 b 为奇数,则累加,否则保持当前累加值不变。

这里是修改后的代码:

from functools import reduce

def add(a, b):
    if b % 2 == 1:
      return a + b
    else:
      return a

result = reduce(add, range(0, 100))
print(result)


这段代码中,我们将奇数检查放在 add() 函数内部,并根据 b 的奇偶性决定累加值。


不过最好还是通过 filter() 函数筛选出奇数,然后用 reduce() 函数对它们求和。这里是修改后的代码:

from functools import reduce

def add(a, b):
    return a + b

odd_numbers = filter(lambda x: x % 2 == 1, range(0, 100))
result = reduce(add, odd_numbers)
print(result)

这段代码首先使用 filter() 函数筛选出 0-100 之间的奇数,然后使用 reduce() 函数对筛选出的奇数求和。

想学py的小白 发表于 2023-3-26 13:22:07

题干想要0-100的所有奇数相加,那么a、b均需要为奇数,并且a与b不重复,您这个代码是不是说明a是一个偶数呢?也想请问a和b在0-100范围内是如何取值的呢?

想学py的小白 发表于 2023-3-26 13:23:03

isdkz 发表于 2023-3-26 13:10
我们可以在 add() 函数内部检查参数 b 是否为奇数。如果 b 为奇数,则累加,否则保持当前累加值不变。

...

题干想要0-100的所有奇数相加,那么a、b均需要为奇数,并且a与b不重复,您这个代码是不是说明a是一个偶数呢?也想请问a和b在0-100范围内是如何取值的呢?

sfqxx 发表于 2023-3-26 13:36:11

from functools import reduce
def add(a,v):
    return a + b
print(reduce(add, range(1, 101)))

isdkz 发表于 2023-3-26 13:40:30

想学py的小白 发表于 2023-3-26 13:23
题干想要0-100的所有奇数相加,那么a、b均需要为奇数,并且a与b不重复,您这个代码是不是说明a是一个偶数 ...

range 就可以保证 a 和 b 不会有重复的内容,

而这里也不需要保证 a 是一个奇数,因为 range(0, 100) 中的第一个 a 是 0,后面的 a 都是前面累加的结果,

只需要往后取出的 b 是奇数来累加就行了


reduce() 函数的计算过程是将一个可迭代对象(如列表)的元素逐个传递给一个二元函数(接受两个参数的函数),并将结果累积起来。它的工作原理如下:

1、首先,reduce() 函数从可迭代对象中取出前两个元素,并将它们作为参数传递给二元函数。
2、然后,reduce() 函数将这两个元素经过二元函数计算后的结果作为累加值存储。
3、接着,reduce() 函数从可迭代对象中取出下一个元素,并将该元素与之前存储的累加值一起作为参数传递给二元函数。
4、reduce() 函数将新的累加值存储,然后重复步骤 3,直到可迭代对象中的所有元素都被处理完毕。

在我们之前的例子中,reduce() 函数使用 add() 函数作为二元函数,并将其应用于 0-100 的整数范围。

add() 函数内部检查参数 b 是否为奇数。如果 b 是奇数,则将其与累加值 a 相加并返回结果;

否则,返回当前累加值 a。以下是 reduce() 函数的计算过程:

1、取出可迭代对象(range(0, 100))中的前两个元素(0 和 1),将它们作为参数 a 和 b 传递给 add() 函数。
2、add() 函数检查 b(1)是否为奇数。是奇数,将 a(0)和 b(1)相加,得到结果 1。
3、将结果 1 作为累加值存储。接下来,reduce() 函数取出可迭代对象中的下一个元素(2),将其与当前累加值(1)一起作为参数 a 和 b 传递给 add() 函数。
4、add() 函数检查 b(2)是否为奇数。不是奇数,返回当前累加值 a(1)。
5、将结果 1 作为累加值存储。接下来,reduce() 函数取出可迭代对象中的下一个元素(3),将其与当前累加值(1)一起作为参数 a 和 b 传递给 add() 函数。
6、add() 函数检查 b(3)是否为奇数。是奇数,将 a(1)和 b(3)相加,得到结果 4。
7、将结果 4 作为累加值存储。reduce() 函数继续重复这个过程,直到可迭代对象中的所有元素都被处理完毕。

在整个计算过程中,reduce() 函数逐个检查范围内的整数,累加所有奇数。当遍历完整个范围时,reduce() 函数返回最终累加值,即 0-100 之间所有奇数的和。在这个例子中,最终输出结果为 2500。

总结一下,reduce() 函数将一个可迭代对象的元素逐个传递给一个二元函数,并将结果累积起来,最后返回累加值。

isdkz 发表于 2023-3-26 13:44:21

sfqxx 发表于 2023-3-26 13:36


这个给了我启发,把这茬给忘了,要奇数直接在 range 指定步长就可以了

from functools import reduce

def add(a, b):
    return a + b


print(reduce(add, range(1, 100, 2)))

sfqxx 发表于 2023-3-26 13:46:32

isdkz 发表于 2023-3-26 13:44
这个给了我启发,把这茬给忘了,要奇数直接在 range 指定步长就可以了

wc,别抢我最佳答案qwq

match123_xbd 发表于 2023-3-31 14:30:43

奈斯
页: [1]
查看完整版本: 利用 reduce 函数求 0—100 之间奇数的和。