鱼C论坛

 找回密码
 立即注册
查看: 2467|回复: 8

[已解决]利用 reduce 函数求 0—100 之间奇数的和。

[复制链接]
发表于 2023-3-26 13:03:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from functools import reduce
def add(a, b):
    if a % 2 == 1:      #这一步不知道如何在add函数中,对参数a和b进行条件限制,即:令其为奇数
        return  a+b
print(reduce(add, range(0, 100)))
最佳答案
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() 函数将一个可迭代对象的元素逐个传递给一个二元函数,并将结果累积起来,最后返回累加值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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() 函数对筛选出的奇数求和。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-3-26 13:22:07 | 显示全部楼层
题干想要0-100的所有奇数相加,那么a、b均需要为奇数,并且a与b不重复,您这个代码是不是说明a是一个偶数呢?也想请问a和b在0-100范围内是如何取值的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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范围内是如何取值的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-26 13:36:11 | 显示全部楼层
from functools import reduce
def add(a,v):
    return a + b
print(reduce(add, range(1, 101)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 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() 函数将一个可迭代对象的元素逐个传递给一个二元函数,并将结果累积起来,最后返回累加值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-26 13:44:21 | 显示全部楼层


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

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


print(reduce(add, range(1, 100, 2)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-26 13:46:32 | 显示全部楼层
isdkz 发表于 2023-3-26 13:44
这个给了我启发,把这茬给忘了,要奇数直接在 range 指定步长就可以了

wc,别抢我最佳答案qwq
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-31 14:30:43 | 显示全部楼层
奈斯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表