我试图阅读以下代码,但我有一段艰难时期:
def fib2(n): # return Fibonacci series up to n
"Return a list containing the Fibonacci series up to n"
result = []
a, b = 0, 1
while b < n:
result.append(b) # see below
a, b = b, a+b
return result
f100 = fib2(100) # call it
f100 # write the result
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
我们从:
开始def fib2(n)
据我了解,我们只是创建定义,其中n将是要指定的参数。然后我们进入:
result = []
这对我来说似乎是要将输出发布到空列表中。从那里我们进入:
a, b = 0, 1
我有点难以理解为什么我们指定&#34; a = 0&#34;和&#34; b = 1&#34;?是否只是指定一个初始值,其值并不重要?例如,我可以指定:
a, b = 2,3
此时只是简单地开始这个系列?如果我们再查看这部分代码:
while b < n:
result.append(b)
a, b = b, a+b
return result
我假设这样看起来只是满足功能的目标,给我们系列直到B不小于n,同时附加到空列表。返回结果是否只是为了给我们打印输出?对不起,我知道这是基本的,但我有一些难以理解的功能,所以我想我会选择一个非常基本的例子。
答案 0 :(得分:2)
def fib2(n)
你是对的,它只是定义了一个名为function
的{{1}},它以fib2
为参数。
n
result = []
将为result
type list
对于Fibonacci序列,重要的是要理解序列将a, b = 0, 1
和n-1
添加到其即将创建的值,即n-2
的创建方式。
这样看:
1 1 2 3 5 8...
0 1 1 2 3 5 8...
其中a为0且b为1,因此a b....
是序列的开头
b
Python是一种很棒的语言,但它可能令人困惑
while b < n:
result.append(b)
a, b = b, a+b
return result
让我们来研究一下。 Python允许分配变量,以便您可以在不影响初始值的情况下分配变量。
也就是说,如果a, b = b, a+b
为0且a
为1,那么b
将如下所示:
a, b = b, a+b
将成为a
,但会将其存储为临时值1.重要的是要知道在完成此行代码之前,a实际上并未分配b
。
b
将成为b
或a+b
并将其存储为新值。
现在,如果0+1
为2且b
为1,让我们看看会发生什么:
a
a, b = b, a+b
将成为a
但不会在代码行之后,因此b
将变为a
2
将成为b
,或者在此情况下为a+b
。如您所见,首先重新分配1+2
实际上并未更改此表达式中a
的值。很简约!
考虑这一单行分配的更简单方法是这样的:
a
a, b = b, a+b
是的,a1 = b
b1 = a+b
a = a1
b = b1
是检查满足while b < n
循环的条件。 while
不再小于b
后,循环将停止并返回n
答案 1 :(得分:1)
以下问题的答案:
"result = []
这对我来说似乎是要将输出发布到空字典中。“
是的,这是初始化输出变量,它是list
,而不是字典。
"a, b = 0, 1
我有点难以理解为什么我们指定“a = 0”和“b = 1”?是否只是指定一个初始值,其值并不重要?例如,我可以指定:
a, b = 2,3
并且此时只是启动系列?“
是的。 0和1用于初始化您的斐波那契变量。请注意,0不属于该系列,但使用的是因为它是系列中前两个数字之间的差异。它永远不会附加到输出中。你是对的,你可以使用2和3来初始化系列,这将在3
开始系列。所以这些价值观确实很重要。
“如果我们再查看这部分代码:
while b < n:
result.append(b)
a, b = b, a+b
return result
我假设这个看起来只是满足函数的目标,给我们系列直到B不小于n,同时附加空字典。返回结果是否只是为了给我们打印输出?“
我认为这里的中间两个语句应该用不同数量的空格缩进,以使程序正常工作。缩进是python识别代码块的方式。你在这里复制代码时错过了吗?
一旦这样做,你就是正确的,循环可以增加斐波那契变量,直到超过输入参数。 return
语句不是“打印输出”,而是将输出列表返回给调用代码;它被分配给变量f100
。
如果您有更多问题,请告诉我们;和你自己一起思考的好工作!
答案 2 :(得分:0)
该函数返回Fibonacci序列中小于n
的数字列表。
a
和b
分别初始化为0
和1
,因为它们是序列中的前两个数字。这些值执行很重要,因为根据定义它们是序列的前两个数字。
从技术上讲,使用2
和3
确实仍会产生与Fibonacci序列相同的模式,但它将从2开始而不是0.因此得到的序列将是是{2, 3, 5, 8, 13, [...]}
。也就是说, Fibonacci sequence以1或0开始(同样,按定义),因此,以2开头的序列只是一个“公正的”Fibonacci序列。
2
和3
碰巧是唯一(其他)两个数字(大于或小于1的数字*),这也适用于此。例如,如果您使用3和4,则序列将为{3, 4, 7, 11, [...]}
,这显然不是Fibonacci序列,它只采用相同的模式。
您返回列表的原因取决于代码尝试解决的问题。如果要打印包含小于n
的数字的Fibonacci序列列表,您的函数将帮助您完成此操作。如何使用fib2(n)
函数返回的列表取决于代码的应用程序。
*请注意,您也可以使用2个已知的斐波那契数字开始系列,并像以前一样获得部分系列。例如,
a,b = (3,5)
因此,得到的序列将是{3, 5, 8, 13, 21, [...]}
,这是另一个部分斐波那契序列。