您當前的位置:首頁 > 舞蹈

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

作者:由 學哥 發表于 舞蹈時間:2017-02-03

斐波拉契數列,求第一百個數字

首先來做一下上節課的課後作業:

輸出斐波拉契數列,列印100個數字 。

提示:斐波拉契數列就是 1,1,2,3,5,8,13,21,34,55,89…… 這個數列從第3項開始,每一項都等於前兩項之和

思路如下:

首先需要一個計數器變數n,用來計數,while迴圈當計數器大於100就退出迴圈

其次需要2個變數a和b用來儲存相鄰的2個數,比如1和2,或者2和3,或者3和5

然後需要一個變數x來計算a+b的結果

最後關鍵的一點,需要利用變數賦值來將計算公式向後移動一個數字,a=b,b=x,然後再次迴圈

核心程式碼如下:

a=1

b=1

n=3

while c<=100:

x=a+b

a=b

b=x

n=n+1

為何n要從3開始呢,因為前面1和1已經是第一個和第二個數字了,所以後面從3開始計數

大家人腦模擬一下電腦,跟著程式邏輯一行一行往下走,記住每一個變數當前的值是多少,也可以用紙筆記錄下來

全部程式如圖:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

執行結果如圖:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

順便說一句,斐波拉契數列的別稱是黃金分割數列,也就是隨著數列項數的增加,前一項與後一項之比越來越逼近黃金分割的數值0。6180339887。。…

所以說,數學到極致就是美,程式設計同樣如此……

已知2017/1/1是星期天,輸出2017年每一天是星期幾

接下來,再做一個程式,練習使用迴圈和判斷,輸出2017年的每一天分別是星期幾,輸出就用1-7分別表示星期一到星期天

到這裡,請同學們停下來思考,如何設計程式邏輯,解決這個問題:

思考好了嗎?再想想,只有不停思考,練習,總結才會有提高

思路如下:

首先,要對2017年的每一天進行迴圈

然後,迴圈當中,要知道當前是這一年裡面的第幾天

再然後,關鍵點,根據第幾天,對7求餘數,求餘數的話python用%來計算,餘數的值是從0到n-1,例如:1%7=1,2%7=2,。。。6%7=6,7%7=0,8%7=1,9%7=2……

最後,因為2017年1月1日並不是正好星期一,所以需要增加一個偏移量來校正星期幾

最最後,輸出星期幾的時候需要加1,因為輸出是要1-7,但是求餘的結果卻是0-6

程式設計:

前面做過一個程式,輸出了一年當中每一天分別是什麼星座,可以利用這個程式的迴圈,將判斷星座的程式修改為判斷星期的程式

開啟上節課編寫的程式xingzuoall。py,另存為getweek2017。py,然後刪除掉註釋部分程式碼,刪除掉星座判斷部分程式碼,剩下程式碼如下:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

然後,在迴圈外面增加一個計數器,用來儲存是1年中的第幾天:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

再然後,增加一個變數week計算是星期幾,並修改輸出內容

week= ( n + 5 ) % 7 + 1

print “2017”,month,day,week

這裡的計算是如何做的呢

我們知道%7的結果範圍是0-6,然後後面+1,結果範圍就肯定是1-7,關鍵當中的 + 5 這個偏移量是怎麼得來的

是透過2017-1-1是星期天等於7,並且是第1天,然後倒推算出來偏移量的,推算邏輯如下,這個學過方程式的應該能夠理解:

week = ( n + x ) % 7 + 1

week = 7

n = 1

7 = ( 1 + x ) % 7 + 1

6 = ( 1 + x ) % 7

6 = 1 + x

5 = x

完整的程式碼如下:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

計算結果如下:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

關鍵是檢查第1天和最後1天看看是否正確。

輸出2016年每一天是星期幾

如果要計算2016年的每一天是星期幾,關鍵的一點是2016-1-1是星期幾,計算出偏移量

大家根據前面計算偏移量的公式自己計算一下,先不要看下面的答案,看看算的對嗎:

week = ( n + x ) % 7 + 1

week = 5

n = 1

5 = ( 1 + x ) % 7 + 1

4 = ( 1 + x ) % 7

4 = 1 + x

3 = x

修改一下程式,另存為getweek2016。py,先不要看下面的程式,自己看看結果對嗎

修改程式碼如下:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

大家仔細檢查,是否發現好像最後一天不對吧,那麼再往前仔細檢查一下看看從哪一天不對了,大家想想為何不對呢

最後發現,2016年是閏年,2月份是29天,那麼,同學們知道應該修改哪裡嗎?

應該修改max=28這一行為max=29

儲存程式碼,再次執行,這次結果就正確了

輸入一個年份,判斷輸出閏年或者平年

還記得0009課的課後作業嗎:

課後作業:

輸入一個年份,判斷輸出閏年或者平年

提示1:閏年的規則,能被4整除的年份是閏年,但要排除那些能被100整除並且不能被400整除的年份

提示2:判斷是否能整除,利用求餘運算子%,如果能被4整除,就是 x%4==0

例如:2016是閏年,2000年是閏年,2100年是平年

結果應該如下才是正確的:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

大家如果自己寫的程式碼結果不對,那麼再次思考,重新修改,不要急著看答案

程式如下:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

大家再次思考一下,可以用一行判斷程式碼實現嗎?

提示一下,可以用到not這個邏輯運算子,注意not和and如果並列在一起的話,是哪個優先順序更高,提高優先順序可以用()將需要優先運算的條件表示式括起來

程式如下:

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

0011 迷人的斐波拉契數列,數學到極致就是美,程式設計同樣如此

課後作業

輸入一個年月日日期,輸出是星期幾

程式邏輯提示:

先確認一個錨點,也就是1900-1-1為星期一=0,然後計算輸入的年月日日期和1900-1-1相差多少天,根據相差天數對7求餘,然後根據偏移量即可算出

關鍵點在於計算相差多少天,因為輸入的日期和1900年是跨多年的,需要用迴圈累計計算當中每一年的總天數,這個時候就需要判斷當中每一年是否是閏年還是平年

程式需要的要素前面都已經講過了,這個課後作業就是要將全部要素整合起來,還是有點難度哦,大家加油!

往期教程

0001 零基礎的小白能學會程式設計嗎?

0002 真的嗎,700元的電腦可以學會程式設計?

0003 十分鐘組裝一臺電腦開始程式設計

0004 如何編寫人生的第一行程式碼helloworld

0005 鍵盤打字如何練成像駭客一樣的飛速

0006 程式設計入門python語言之加法計算器

0007 程式設計入門python語言之四則運算器

第一部分前7課小結和課程規劃說明及微信群主招募

0008 加減乘除也會算錯?還要編寫程式測試?

0009 如何編寫程式計算所屬星座,一看就懂

0010 人生就像死迴圈,只要不退出就要繼續執行

因為教程是系列教程,前後關聯性非常強,請大家按照微信公眾號的釋出時間先後次序進行閱讀。

微信公眾號裡面直接輸入序號可以檢視該序號課程,例如輸入0001可以檢視【0001 零基礎的小白能學會程式設計嗎?】

作者簡介

學哥,二十年程式設計經驗,歷任程式設計師,資深程式設計師,技術經理,專案經理,產品經理,系統架構師,IT總監。愛好篆刻,閱讀,美食。

微訊號簡介

每天半小時零基礎學程式設計。大人可以學,小孩也可以學。練打字,用軟體,寫文件,做網站,做App,編遊戲,資料庫,玩硬體,寫程式,3D列印,無人機,機器人。

html,css,javascript,python,php,java,swift,mysql,android,ios,raspberry pi,scratch。 微信公眾號搜尋:零基礎學程式設計。

QQ群簡介

歡迎大家加入QQ群 603559164 零基礎學程式設計,交流學習,共同進步。

標簽: 程式設計  閏年  2017  輸出  星期