python小小白哟 发表于 2023-5-24 16:35:04

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

有一分数序列: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
实在费解,求大神们讲解一下,越简单易懂越好,谢谢。

isdkz 发表于 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项的和。

yinda_peng 发表于 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

python小小白哟 发表于 2023-5-24 17:10:44

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

这段代码能不能用简单易懂的方式变形一下?

python小小白哟 发表于 2023-5-24 17:18:05

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

那么这段代码可不可以变成另外一种书写方式呢?

yinda_peng 发表于 2023-5-24 17:35:14

python小小白哟 发表于 2023-5-24 17:10
这段代码能不能用简单易懂的方式变形一下?

简单地说就是分母用前面一项的分子,分子是前面一项分子分母的和,这个代码语句表示的就是这个意思

yinda_peng 发表于 2023-5-24 17:37:04

python小小白哟 发表于 2023-5-24 17:18
那么这段代码可不可以变成另外一种书写方式呢?

换一种书写方式:(需要额外的变量)
x = a + b
y = a
a = x
b = y

python小小白哟 发表于 2023-5-25 09:17:41

yinda_peng 发表于 2023-5-24 17:37
换一种书写方式:(需要额外的变量)
x = a + b
y = a


大神你好,我想了一天,但是这种为什么不能写成a= a+b , b=a呢?

python小小白哟 发表于 2023-5-25 09:30:36

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

大神你好,我想了一天,但是这种为什么不能写成a= a+b , b=a呢?

yinda_peng 发表于 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

yinda_peng 发表于 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的值发生了变动,原来的分母的值丢失了
页: [1]
查看完整版本: 有一分数序列,求出这个数列的前20项之和。