韓梅梅學Python之三:斐波那契

通過上次的授課經歷,李雷發覺,韓梅梅對圖形繪製這塊很感興趣。因而絞盡腦汁,谷歌百度,尋找各類素材。通過反覆實驗終於完成了備課工做。因而乎掰着手指頭,從週一盼到了週六。python

「梅梅,咱們先看一個神奇的公式,以及如何用python實現它」 git

def fibonacci(n):
    return (1/math.sqrt(5))*(math.pow((1+math.sqrt(5))/2, n)-math.pow((1-math.sqrt(5))/2, n))

複製代碼

韓梅梅:「啊,頭好暈」github

李雷:"好吧,咱們舉個例子"bash

假如一月份,咱們有一對小兔子。markdown

月份 小兔數量 大兔數量
1 1 0

到了二月咱們的小兔子長成了大兔子app

月份 小兔數量 大兔數量
1 1 0
2 0 1

到了三月,咱們的大兔子生了一對小兔子,如今咱們有一大一小兩對兔子ide

月份 小兔數量 大兔數量
1 1 0
2 0 1
3 1 1

到了四月,咱們大兔子 又生了一對小兔子,咱們三月的那對小兔子也長成了大兔子。 如今咱們有兩對大兔子,一對小兔子了oop

月份 小兔數量 大兔數量
1 1 0
2 0 1
3 1 1
4 1 2

到了五月,咱們的兩對大兔子都生了一對小兔子,咱們的那對小兔子長成了大兔子,如今,咱們有3對大兔子,和兩對小兔子。post

月份 小兔數量 大兔數量
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日,一大早,老闆急衝衝的打電話給韓梅梅。

李老闆:「全國網站都灰了,爲啥咱們本身的網站還這麼鮮豔。」

韓梅梅:「好多圖改不過來。」

李老闆:「原本你應該提早準備的。結果搞成如今這麼被動。
咱們是創業公司,每一個員工都應該是創業者。
做爲一個合格的創業者,要有遠見,有自驅,
不要什麼都不考慮,不要什麼都等安排。

若是你以爲本身不想當創業者,那就去找份大廠的工做。
若是你是個創業者,就拿出創業者的勁頭加個班搞定吧。」

還沒等韓梅梅回答,電話就被掛斷了。
複製代碼
相關文章
相關標籤/搜索