【小白の迷思】python实现Fibonacci数列

概述

Fibonacci数列

除第一个和第二个数外,任意一个数都可由前两个数相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, …

前言bb

作为一个新接触python没多久的小白,学这章的时候刚好是廖雪峰老师要引入generator的概念,然后提出了一个过渡的函数打印的方式…

——然后我在这段代码上卡了两天(dbq了我的老师们),翻遍大量带有这段代码的资料,都没有看到任何解释或是注释,然后我还是楞想不明白。终于在朋友的指点下悟了!

我写这篇东西的初衷是希望能够帮助到同对此困惑的人 bwb


首先让我们看看源代码:

def fib(max):	#question1
    n, a, b = 0, 0, 1	#question2
    while n < max:
        print(b)
        a, b = b, a + b	 #question3
        n = n + 1
    return 'done'
    
(一)question

首先这是定义了一个 fib()函数,通过循环赋值,得到Fibonacci数列
然后我有了以下困惑:

  • question1:max是啥玩意,为什么我在整个代码块里都没看到哪有传入max这个值
  • question2:n,a,b分别代表的是什么,为什么要使用三个变量这么复杂地倒来倒去,而且这句话是在干啥我一开始也没看懂
  • question3:这行我更困惑了,我以为是这么分隔的:
  • a, b = b, a + b

  • 或者是
  • a, b = b, a + b

  • question4:我最后整明白了,然鹅import了半天,依旧是错误的答案

cmd窗口

(二)answer
  • answer1: 函数名(形参)
    其实这个max就是一个形参,所以在函数内部见不到跟它同名的很正常
    因为它只是形式上的参数,实参是需要在调用函数的时候给的
    e.g.cmd窗口调用

  • answer2:n, a, b = 0, 0, 1
    从后面print(b)可以看出,b就是我们要的fibonacci数列结果
    而这句语句其实是python的群体赋值(业余概括,非术语)方法
    也就是等价于 n=0, a=0, b=1
    n是用于控制循环次数的,而从b=a+b可知就是被加成员
    从这件事上,我意识到了取一个通俗易懂的变量名对代码可读性的帮助有多大。=v=(明明就是自己菜)

  • answer3:a, b = b, a + b
    知道了answer2之后,这句话也很简单,就是不断地将数字滚动赋值,从而得到数列结果

  • answer4
    代码写在Visial Studio Code(简称VSC,一种轻量级的IDE), 使用cmd窗口import之后调用函数
    发现代码错误之后,修改IDE,并re-import,再一次调用
    发现代码还是错的。
    这件事的问题根本在于python是解释型的语言,cmd窗口一直在import和调用的,依旧是之前的文件版本
    需要exit()之后重新执行才能更新到最新的文件
    在这里插入图片描述

最后

鉴于我对这段代码的怨念(?)
我又重新倒腾了一下(其实就是给它们换件马甲)

  • 在VSC IDE创建fibonacci.py文件
def fib(max):       	# max是形参,具体实参要等输入的是啥
    n,pre,res=0,0,1     # 分别给n,pre,res赋值
    while n<max:			# fib(6)为例,需要循环0,1,2,3,4,5共六次
        print(res)
        pre,res= res,pre+res
        			    #把res的值传到前一个pre,并且把<更替后的和>给res
        n+=1
    return 'done'
  • 在IDE窗口输入命令执行(cmd也行,就是每次更改程序需要手动退出再敲一遍命令)

在这里插入图片描述

最后的bb

虽然回头看看会觉得这段东西看不明白真的很没有专业素养了
但是没想明白的时候,困惑也是真的困惑

所幸没有让它翻篇
也许我是全网第一个为了这种零零碎碎的基础知识写了一个罗里吧嗦blog的小白门外汉
但希望能帮到搜到这篇,并且刚好和我一样想不开的你。
正是因为基础还不扎实,才更不应该放弃追究这些

鲁迅先生有言:

奥利给,干就完了!

在这里插入图片描述


特别鸣谢:@dos diosas

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值