鱼C论坛

 找回密码
 立即注册
查看: 2009|回复: 10

有一分数序列,求出这个数列的前20项之和。

[复制链接]
发表于 2023-5-24 16:35:04 | 显示全部楼层 |阅读模式

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

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

x
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
a = 2.0
b = 1.0
s = 0
for n in range(1, 21):
    s = s + a / b
    a, b = a + b, a
print(s)

其中这段代码是什么意思呢?
如下:
a, b = a + b, a
实在费解,求大神们讲解一下,越简单易懂越好,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-24 16:38:41 | 显示全部楼层
这段代码是用来生成这个分数序列的。这个数列其实是斐波那契数列的一种变形。斐波那契数列的定义是:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2) (n>=2),即每一项都是前两项的和。

在这段代码中,a和b分别代表斐波那契数列的两个连续项。初始化时,a为2,b为1,这两个数分别对应于斐波那契数列的第三项和第二项。

而 "a, b = a + b, a" 这段代码的意思就是将a和b同时更新为斐波那契数列的下两项。

具体来说,"a = a + b" 更新了a的值为下一项(当前的a和b的和),而"b = a"则是将b更新为原来的a的值(即当前项)。注意,这个赋值过程是同时进行的,也就是说,当计算 "a = a + b" 时,b的值还没有改变,所以这个赋值是正确的。

总结一下,这段代码实现的功能就是生成了题目中的斐波那契数列,并且求和。对于每一个n(从1到20),都将当前的a/b加到s上,然后更新a和b为下一个斐波那契数列的两项。最后,s就是前20项的和。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-24 16:45:02 | 显示全部楼层
首先,这是利用了元组的解包功能,比如x,y = a,b表示x = a和y = b,然后+运算符优先级高于,运算符,所以这里就是计算a+b的值,令为x,还有a的值,令为y,再执行a = x和b = y
需要注意的一点,这里赋值不要理解为变量赋值,即不要理解为a = a+b和b = a,如果这样理解会导致b的值最后为x的值,举一个具体例子:
a = 2,b = 1
那么x = 3,y = 2然后a与b的值更新为a = x = 3,b = y = 2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-24 17:10:44 | 显示全部楼层
yinda_peng 发表于 2023-5-24 16:45
首先,这是利用了元组的解包功能,比如x,y = a,b表示x = a和y = b,然后+运算符优先级高于,运算符,所以这里 ...

这段代码能不能用简单易懂的方式变形一下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-24 17:18:05 | 显示全部楼层
isdkz 发表于 2023-5-24 16:38
这段代码是用来生成这个分数序列的。这个数列其实是斐波那契数列的一种变形。斐波那契数列的定义是:F(0) = ...

那么这段代码可不可以变成另外一种书写方式呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-24 17:35:14 | 显示全部楼层
python小小白哟 发表于 2023-5-24 17:10
这段代码能不能用简单易懂的方式变形一下?

简单地说就是分母用前面一项的分子,分子是前面一项分子分母的和,这个代码语句表示的就是这个意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-24 17:37:04 | 显示全部楼层
python小小白哟 发表于 2023-5-24 17:18
那么这段代码可不可以变成另外一种书写方式呢?

换一种书写方式:(需要额外的变量)
x = a + b
y = a
a = x
b = y
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-25 09:17:41 | 显示全部楼层
yinda_peng 发表于 2023-5-24 17:37
换一种书写方式:(需要额外的变量)
x = a + b
y = a

大神你好,我想了一天,但是这种为什么不能写成a= a+b , b=a呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-25 09:30:36 | 显示全部楼层
isdkz 发表于 2023-5-24 16:38
这段代码是用来生成这个分数序列的。这个数列其实是斐波那契数列的一种变形。斐波那契数列的定义是:F(0) = ...

大神你好,我想了一天,但是这种为什么不能写成a= a+b , b=a呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-25 16:30:51 | 显示全部楼层
python小小白哟 发表于 2023-5-25 09:17
大神你好,我想了一天,但是这种为什么不能写成a= a+b , b=a呢?

因为你写成这样有没有想过你a = 2,b = 1
然后a = a+b = 3
再执行b = a,此时a的值为3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-25 16:34:25 | 显示全部楼层
python小小白哟 发表于 2023-5-25 09:17
大神你好,我想了一天,但是这种为什么不能写成a= a+b , b=a呢?

我有个小建议是编程作为一门实操性质的课程,你要学会动手调试而不是光想,有时候想不明白,在电脑上操作一下就能明白,比如你这个问题,你写成a = a+b,b = a的时候,你可以这样:
a = a+b
print(a)
b = a
print(b)

这样你会发现a的值发生了变动,原来的分母的值丢失了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 13:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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