Python中的斐波那契-解释这段代码?

Python中的斐波那契-解释这段代码?,python,Python,我对编码相当陌生,我一直在使用Alex Bowers的《Python初学者》一书。在每章的结尾是一个实验练习,这一个是关于法波纳奇的,这一章本身是关于forLoops,whileLoops,Try Except和Finally,break和continue。 我对解决方案感到困惑,尤其是涉及变量“set”的行,有人能向我解释解决方案吗,因为他们没有在书中解释它。。。多谢各位 f0 = 0 f1 = 1 set = False while True: fn =

我对编码相当陌生,我一直在使用Alex Bowers的《Python初学者》一书。在每章的结尾是一个实验练习,这一个是关于法波纳奇的,这一章本身是关于forLoops,whileLoops,Try Except和Finally,break和continue。 我对解决方案感到困惑,尤其是涉及变量“set”的行,有人能向我解释解决方案吗,因为他们没有在书中解释它。。。多谢各位

f0 = 0
f1 = 1
set = False              
while True:
    fn = f0 + f1
    f0 = f1
    f1 = fn 
    if (fn > 100):
        set = True
    else:
        set = False
    print(fn)
    if (set == True):
        break 
while True:

set
在这种情况下,一旦数字超过
100,循环就会停止,因此不会永远停止。这实际上是制作斐波那契序列的一种非常糟糕的方法,但我会解释,因为它无论如何都是有效的代码

f0 = 0 # initialize your
f1 = 1 # starting values
set = False              
while True:
    fn = f0 + f1 # fn is your current fib number
    f0 = f1 # advance the second-to-last number
    f1 = fn # and the last number
    if (fn > 100):
        set = True # if your current fib number is above 100, set a flag
                   # so we don't go another iteration
    else:
        set = False# otherwise, this should never ever do anything. This
                   # line of code does nothing but slow down the process
    print(fn) # print your current fib number to console
    if (set == True): # if that aforementioned flag is set...
        break         # then break out of the loop. Otherwise, loop.
while True:
无论如何,我会:

fib = [1,1]
while True:
    num = fib[-1]+fib[-2]
    fib.append(num)
    # optionally:
    ## print(num)
    if num > 100: break
while True:

我假设你知道什么是斐波那契序列(如果不知道,请阅读)。我一步一步走

while True:
这些是用于计算斐波那契序列的变量
f0
是序列中的第一个数字,
f1
是第二个数字

f0 = 0
f1 = 1
while True:
set
将用作以下循环确定何时停止的条件

set = False   
while True:
这是一个无限的while循环

while True:
计算序列中的下一个数字

while True:
    fn = f0 + f1
更新旧的变量

while True:
    f0 = f1
    f1 = fn 
如果序列中的数字大于100,则将
set
设置为
True
。否则将
设置为
False
(已设置)

while True:
打印当前序列号

while True:
    print(fn)
如果
set
True
,则保留无限循环

while True:
    if (set == True):
        break 
注意:此代码可以轻松简化。我很惊讶它会出现在书中。您可以将其简化为:

while True:
f0 = 0
f1 = 1
while True:
    fn = f0 + f1
    f0 = f1
    f1 = fn 
    print(fn)
    if (fn > 100):
        break 

不使用
set
,代码可以这样编写,以实现相同的目的,否则完全相同:

while True:
f0 = 0
f1 = 1
fn = 0
while fn <= 100:
    fn = f0 + f1
    f0 = f1
    f1 = fn 
    print(fn)
线
f0,f1=f1,f0+f1
类似于:

while True:
 f0 = f1
 f1 = f0 + f1
除了在
f0
f1
更改值之前计算两个右侧表达式之外

while True:

希望看到它以这种简化的形式写出来能帮助你准确地理解正在发生的事情。

嗨,很抱歉你介绍了这个论坛。一般来说,这确实是一种奇妙的资源,但有时精英主义占据了主导地位

while True:
我想你的问题还没有真正得到回答

while True:
set = False # assigning a value to a name of a thing the thing is set and the value is False
while True:  # this means the loop will continue until it hits a return statement
事实上,set不必在循环外初始化。循环将继续,直到循环内满足某种条件,从而导致返回。在这种情况下,条件是名为set的对象的值更改为True。我不是一个很好的程序员,但这是一个非常可怕的代码

while True:

让我补充一点,另一个问题是set是一个特殊类型对象的保留字,因此在代码中添加了另一个黑色标记。当我在IDLE中键入代码时,单词集是紫色的——这是一个你正在进入危险区域的信号——使用对象名或保留字作为变量名。

@thefourtheye:我不认为这是它偏离主题的原因。你能证明这一点吗?@thefourtheye:这个问题实际上非常具体。在我的解释中,这属于“涉及软件算法的问题”。调用变量
是一种非常糟糕的做法,因为它会覆盖对象
;也就是说,你不能再创建一个
集合
对象。如果你看一下这个精彩资源的开头,你会发现很多问题都相当简单,这意味着对于一个有经验的程序员来说,这些问题是微不足道的。一个新用户从他的角度提出了一个非常有效的问题,很多人都打了他。这是保持这个社区孤立的一种方法。我认为你应该非常小心,不要否决新用户提出的问题。如果你不喜欢一个问题,那就去找一个你喜欢的问题,或者向OP提出一个温和的建议,告诉他如何解决这个问题。求你了,我认为这个人应该得到一些respect@OP请用另一本书来学习,那个示例代码很可怕。@controlnetictwerkguroorc很公平,我把
fn>100
误读为
fn>=100
。但这几乎不会改变大致的笔划。
while True: