经过上次的授课经历,李雷发觉,韩梅梅对图形绘制这块很感兴趣。于是绞尽脑汁,谷歌百度,寻找各种素材。经过反复实验终于完成了备课工作。于是乎掰着手指头,从周一盼到了周六。
“梅梅,我们先看一个神奇的公式,以及如何用python实现它”

def fibonacci(n):
return (1/math.sqrt(5))*(math.pow((1+math.sqrt(5))/2, n)-math.pow((1-math.sqrt(5))/2, n))
韩梅梅:“啊,头好晕”
李雷:"好吧,我们举个例子"
假如一月份,我们有一对小兔子。
月份 | 小兔数量 | 大兔数量 |
---|---|---|
1 | 1 | 0 |
到了二月我们的小兔子长成了大兔子
月份 | 小兔数量 | 大兔数量 |
---|---|---|
1 | 1 | 0 |
2 | 0 | 1 |
到了三月,我们的大兔子生了一对小兔子,现在我们有一大一小两对兔子
月份 | 小兔数量 | 大兔数量 |
---|---|---|
1 | 1 | 0 |
2 | 0 | 1 |
3 | 1 | 1 |
到了四月,我们大兔子 又生了一对小兔子,我们三月的那对小兔子也长成了大兔子。 现在我们有两对大兔子,一对小兔子了
月份 | 小兔数量 | 大兔数量 |
---|---|---|
1 | 1 | 0 |
2 | 0 | 1 |
3 | 1 | 1 |
4 | 1 | 2 |
到了五月,我们的两对大兔子都生了一对小兔子,我们的那对小兔子长成了大兔子,现在,我们有3对大兔子,和两对小兔子。
月份 | 小兔数量 | 大兔数量 |
---|---|---|
1 | 1 | 0 |
2 | 0 | 1 |
3 | 1 | 1 |
4 | 1 | 2 |
5 | 2 | 3 |
规律:
上一月的大兔子+小兔子的数量,等于下一月的大兔子数量, 上一月的大兔子数量等于下一月的小兔子的数量。 大兔子的数量变化的规律就是斐波那契的规律,我们可以试着计算它。
#!/usr/bin/env python3
LIMIT = 1474 #122.8年后,月数会超出这个数字,计算机也数不清有多少兔子了。
def fibos(month):
fibo_list = []
big = 0
small = 1
for i in range(0, min(month, LIMIT)):
fibo_list.append({'month': i+1, 'small': small, 'big': big})
big, small = small+big, big
return fibo_list
def print_rabbits_fibos(fibos):
print("|月份|小兔数量|大兔数量|")
print("|:---:|:---:|:---:|")
for fibo in fibos:
print(f"|{fibo['month']}|{fibo['small']}|{fibo['big']}|")
if __name__ == "__main__":
print_rabbits_fibos(fibos(12))
输出:
月份 | 小兔数量 | 大兔数量 |
---|---|---|
1 | 1 | 0 |
2 | 0 | 1 |
3 | 1 | 1 |
4 | 1 | 2 |
5 | 2 | 3 |
6 | 3 | 5 |
7 | 5 | 8 |
8 | 8 | 13 |
9 | 13 | 21 |
10 | 21 | 34 |
11 | 34 | 55 |
12 | 55 | 89 |
韩梅梅:“兔子好能生呀!” 韩梅梅:“这么多近亲结婚怎么办?” 韩梅梅担忧的说。
“额,这不是重点” 李雷冒汗了。
李雷:“自然界很多植物的花序和叶序都和斐波那契数列有关。”


李雷:“我们还可以画出这个数列相应的螺旋线”
from turtle import *
import math
last_step = 0
this_step = 10
for i in range(8):
circle(this_step, 90, int(this_step * (math.pi)))
this_step, last_step = this_step + last_step, this_step
done()

韩梅梅:“看起来像个鹦鹉螺,看不出和斐波那契有什么关系啊” 李雷:“我们可以标记出数列”

import math
from turtle import *
from fibos import fibos
from math_ex import gold_offset
WIN_SIZE = 500
setup(width=WIN_SIZE, height=WIN_SIZE)
def fly_home():
offset = gold_offset(WIN_SIZE, 'start')
penup()
home()
forward(offset)
right(90)
forward(offset)
left(270)
pendown()
def draw_size(radius, fibo):
if fibo < 2:
return
penup()
text_pod = radius/2
forward(text_pod)
left(90)
forward(text_pod)
left(90)
pendown()
dot(3)
write(fibo, align='center')
penup()
forward(text_pod)
left(90)
forward(text_pod)
left(90)
pendown()
def draw_bound(radius, fibo):
for i in range(4):
forward(radius)
left(90)
draw_size(radius, fibo)
def draw_fibo(radius):
step = int(radius * math.pi/2)
circle(radius, 90, step)
def draw_bounds(fibo_list, unit):
fly_home()
pencolor('#3399ff')
width(1)
for fibo in fibo_list:
radius = fibo * unit
draw_bound(radius, fibo)
forward(radius)
left(90)
forward(radius)
def draw_fibos(fibo_list, unit):
fly_home()
pencolor('#ff9933')
width(2)
for fibo in fibo_list:
radius = fibo * unit
draw_fibo(radius)
if __name__ == "__main__":
hideturtle()
speed(0)
fibo_list = fibos(9)
unit = 6
draw_bounds(fibo_list, unit)
draw_fibos(fibo_list, unit)
done()
李雷:“利用这个螺旋我们还可以画一些有趣的图形”




这些代码都在:github.com/caojianfeng…
全部故事:
韩梅梅学python之序章:一行命令,更新flutter工程下所有图标
李雷经过一个月的奋战,终于完成了一个flutter应用的开发。
打算上线了才发现,图标还是flutter自带的图标呢,赶紧向设计师韩梅梅求救。
设计师韩梅梅拿出准备已久的Logo丢给李雷,李雷傻眼了。
李雷:“怎么只有一个?”
韩梅梅:“难道安卓和iOS要用不同的图标?”
李雷:“不是啊。同样的图标不同的尺寸。
安卓图标五六个 ,iOS图标十几个吧。
我给你列个列表吧,尺寸都告诉你。你帮忙resize一下吧。”
韩梅梅:”宝宝心里苦...“
李雷:“嗯,我想想办法吧...”
韩梅梅学python之一:python3中f-string 格式化固定宽度的数字
书接上回
看到工程师李雷能用一行命令,更新flutter工程下所有图标,
韩梅梅深刻的体会到,这(zhe)门(ge)语(nan)言(ren)如此优秀,一定不能错过。
于是找到李雷:
韩梅梅:“李雷,上次见到你用python更新图标,感觉好棒啊”
李雷:“Python确实是很好用的”
韩梅梅:“我能学会吗”
李雷:“有我在,怎么可能学不会呢?我们先从最简单的Hello world开始吧”
......
韩梅梅学python之二:黄金分割和五角星
学完python3中f-string 格式化固定宽度的数字,
李雷如约上门安装安装python,折腾了很大一通李雷和韩梅梅都感觉很累。
于是李雷提议到公园玩耍,他提前做足了功课,
学习了很多拍照到知识,终于用上了,尤其是构图比例,一律黄金分割。 ...
韩梅梅学Python之三:斐波那契
经过上次的授课经历,李雷发觉,韩梅梅对图形绘制这块很感兴趣。
于是绞尽脑汁,谷歌百度,寻找各种素材。经过反复实验终于完成了备课工作。
于是乎掰着手指头,从周一盼到了周六。
“梅梅,我们先看一个神奇的公式,以及如何用python实现它”
韩梅梅学Python之四:一行命令,图片全灰
2020年4月4日,一大早,老板急冲冲的打电话给韩梅梅。
李老板:“全国网站都灰了,为啥我们自己的网站还这么鲜艳。”
韩梅梅:“好多图改不过来。”
李老板:“本来你应该提前准备的。结果搞成现在这么被动。
我们是创业公司,每个员工都应该是创业者。
作为一个合格的创业者,要有远见,有自驱,
不要什么都不考虑,不要什么都等安排。
如果你觉得自己不想当创业者,那就去找份大厂的工作。
如果你是个创业者,就拿出创业者的劲头加个班搞定吧。”
还没等韩梅梅回答,电话就被挂断了。