斐波拉契數(shù)列,求第一百個(gè)數(shù)字
首先來做一下上節(jié)課的課后作業(yè):
輸出斐波拉契數(shù)列缆瓣,打印100個(gè)數(shù)字 .
提示:斐波拉契數(shù)列就是 1喧枷,1,2弓坞,3隧甚,5,8渡冻,13戚扳,21,34族吻,55帽借,89......? 這個(gè)數(shù)列從第3項(xiàng)開始,每一項(xiàng)都等于前兩項(xiàng)之和
思路如下:
首先需要一個(gè)計(jì)數(shù)器變量n超歌,用來計(jì)數(shù)砍艾,while循環(huán)當(dāng)計(jì)數(shù)器大于100就退出循環(huán)
其次需要2個(gè)變量a和b用來存儲(chǔ)相鄰的2個(gè)數(shù),比如1和2握础,或者2和3辐董,或者3和5
然后需要一個(gè)變量x來計(jì)算a+b的結(jié)果
最后關(guān)鍵的一點(diǎn),需要利用變量賦值來將計(jì)算公式向后移動(dòng)一個(gè)數(shù)字禀综,a=b简烘,b=x,然后再次循環(huán)
核心代碼如下:
a=1
b=1
n=3
while c<=100:
? ? x=a+b
? ? a=b
? ? b=x
? ? n=n+1
為何n要從3開始呢定枷,因?yàn)榍懊?和1已經(jīng)是第一個(gè)和第二個(gè)數(shù)字了孤澎,所以后面從3開始計(jì)數(shù)
大家人腦模擬一下電腦,跟著程序邏輯一行一行往下走欠窒,記住每一個(gè)變量當(dāng)前的值是多少覆旭,也可以用紙筆記錄下來
全部程序如圖:
執(zhí)行結(jié)果如圖:
順便說一句,斐波拉契數(shù)列的別稱是黃金分割數(shù)列岖妄,也就是隨著數(shù)列項(xiàng)數(shù)的增加型将,前一項(xiàng)與后一項(xiàng)之比越來越逼近黃金分割的數(shù)值0.6180339887..…
所以說,數(shù)學(xué)到極致就是美荐虐,編程同樣如此......
已知2017/1/1是星期天七兜,輸出2017年每一天是星期幾
接下來,再做一個(gè)程序福扬,練習(xí)使用循環(huán)和判斷腕铸,輸出2017年的每一天分別是星期幾,輸出就用1-7分別表示星期一到星期天
到這里铛碑,請(qǐng)同學(xué)們停下來思考狠裹,如何設(shè)計(jì)程序邏輯,解決這個(gè)問題:
思考好了嗎汽烦?再想想涛菠,只有不停思考,練習(xí)撇吞,總結(jié)才會(huì)有提高
思路如下:
首先俗冻,要對(duì)2017年的每一天進(jìn)行循環(huán)
然后,循環(huán)當(dāng)中梢夯,要知道當(dāng)前是這一年里面的第幾天
再然后言疗,關(guān)鍵點(diǎn),根據(jù)第幾天颂砸,對(duì)7求余數(shù)噪奄,求余數(shù)的話python用%來計(jì)算,余數(shù)的值是從0到n-1人乓,例如:1%7=1,2%7=2,...6%7=6,7%7=0,8%7=1,9%7=2......
最后勤篮,因?yàn)?017年1月1日并不是正好星期一,所以需要增加一個(gè)偏移量來校正星期幾
最最后色罚,輸出星期幾的時(shí)候需要加1碰缔,因?yàn)檩敵鍪且?-7,但是求余的結(jié)果卻是0-6
程序設(shè)計(jì):
前面做過一個(gè)程序戳护,輸出了一年當(dāng)中每一天分別是什么星座金抡,可以利用這個(gè)程序的循環(huán)瀑焦,將判斷星座的程序修改為判斷星期的程序
打開上節(jié)課編寫的程序xingzuoall.py,另存為getweek2017.py梗肝,然后刪除掉注釋部分代碼榛瓮,刪除掉星座判斷部分代碼,剩下代碼如下:
然后巫击,在循環(huán)外面增加一個(gè)計(jì)數(shù)器禀晓,用來存儲(chǔ)是1年中的第幾天:
再然后,增加一個(gè)變量week計(jì)算是星期幾坝锰,并修改輸出內(nèi)容
week= ( n + 5 ) % 7 + 1
print "2017",month,day,week
這里的計(jì)算是如何做的呢
我們知道%7的結(jié)果范圍是0-6粹懒,然后后面+1,結(jié)果范圍就肯定是1-7顷级,關(guān)鍵當(dāng)中的 + 5 這個(gè)偏移量是怎么得來的
是通過2017-1-1是星期天等于7凫乖,并且是第1天,然后倒推算出來偏移量的愕把,推算邏輯如下拣凹,這個(gè)學(xué)過方程式的應(yīng)該能夠理解:
week = ( n + x ) % 7 + 1
week = 7
n = 1
7 = ( 1 + x ) % 7 + 1
6 = ( 1 + x ) % 7
6 = 1 + x
5 = x
完整的代碼如下:
計(jì)算結(jié)果如下:
關(guān)鍵是檢查第1天和最后1天看看是否正確。
輸出2016年每一天是星期幾
如果要計(jì)算2016年的每一天是星期幾恨豁,關(guān)鍵的一點(diǎn)是2016-1-1是星期幾嚣镜,計(jì)算出偏移量
大家根據(jù)前面計(jì)算偏移量的公式自己計(jì)算一下,先不要看下面的答案橘蜜,看看算的對(duì)嗎:
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,先不要看下面的程序计福,自己看看結(jié)果對(duì)嗎
修改代碼如下:
大家仔細(xì)檢查跌捆,是否發(fā)現(xiàn)好像最后一天不對(duì)吧,那么再往前仔細(xì)檢查一下看看從哪一天不對(duì)了象颖,大家想想為何不對(duì)呢
最后發(fā)現(xiàn)佩厚,2016年是閏年,2月份是29天说订,那么抄瓦,同學(xué)們知道應(yīng)該修改哪里嗎?
應(yīng)該修改max=28這一行為max=29
保存代碼陶冷,再次運(yùn)行钙姊,這次結(jié)果就正確了
輸入一個(gè)年份,判斷輸出閏年或者平年
還記得0009課的課后作業(yè)嗎:
課后作業(yè):
輸入一個(gè)年份埂伦,判斷輸出閏年或者平年
提示1:閏年的規(guī)則煞额,能被4整除的年份是閏年,但要排除那些能被100整除并且不能被400整除的年份
提示2:判斷是否能整除,利用求余運(yùn)算符%膊毁,如果能被4整除胀莹,就是 x%4==0
例如:2016是閏年,2000年是閏年媚媒,2100年是平年
結(jié)果應(yīng)該如下才是正確的:
大家如果自己寫的代碼結(jié)果不對(duì)嗜逻,那么再次思考涩僻,重新修改缭召,不要急著看答案
程序如下:
大家再次思考一下,可以用一行判斷代碼實(shí)現(xiàn)嗎逆日?
提示一下嵌巷,可以用到not這個(gè)邏輯運(yùn)算符,注意not和and如果并列在一起的話室抽,是哪個(gè)優(yōu)先級(jí)更高搪哪,提高優(yōu)先級(jí)可以用()將需要優(yōu)先運(yùn)算的條件表達(dá)式括起來
程序如下:
?
課后作業(yè)
輸入一個(gè)年月日日期,輸出是星期幾
程序邏輯提示:
先確認(rèn)一個(gè)錨點(diǎn)坪圾,也就是1900-1-1為星期一=0晓折,然后計(jì)算輸入的年月日日期和1900-1-1相差多少天,根據(jù)相差天數(shù)對(duì)7求余兽泄,然后根據(jù)偏移量即可算出
關(guān)鍵點(diǎn)在于計(jì)算相差多少天漓概,因?yàn)檩斎氲娜掌诤?900年是跨多年的,需要用循環(huán)累計(jì)計(jì)算當(dāng)中每一年的總天數(shù)病梢,這個(gè)時(shí)候就需要判斷當(dāng)中每一年是否是閏年還是平年
程序需要的要素前面都已經(jīng)講過了胃珍,這個(gè)課后作業(yè)就是要將全部要素集成起來,還是有點(diǎn)難度哦蜓陌,大家加油觅彰!
往期教程
0001 零基礎(chǔ)的小白能學(xué)會(huì)編程嗎?
0002 真的嗎钮热,700元的電腦可以學(xué)會(huì)編程填抬?
0003 十分鐘組裝一臺(tái)電腦開始編程
0004 如何編寫人生的第一行代碼helloworld
0005 鍵盤打字如何練成像黑客一樣的飛速
0006 編程入門python語言之加法計(jì)算器
0007 編程入門python語言之四則運(yùn)算器
第一部分前7課小結(jié)和課程規(guī)劃說明及微信群主招募
0008 加減乘除也會(huì)算錯(cuò)?還要編寫程序測(cè)試隧期?
0009 如何編寫程序計(jì)算所屬星座飒责,一看就懂
0010 人生就像死循環(huán),只要不退出就要繼續(xù)運(yùn)行
因?yàn)榻坛淌窍盗薪坛萄崦耄昂箨P(guān)聯(lián)性非常強(qiáng)读拆,請(qǐng)大家按照微信公眾號(hào)的發(fā)布時(shí)間先后次序進(jìn)行閱讀。
微信公眾號(hào)里面直接輸入序號(hào)可以查看該序號(hào)課程鸵闪,例如輸入0001可以查看【0001 零基礎(chǔ)的小白能學(xué)會(huì)編程嗎檐晕?】
作者簡(jiǎn)介
學(xué)哥,二十年編程經(jīng)驗(yàn),歷任程序員辟灰,資深程序員个榕,技術(shù)經(jīng)理,項(xiàng)目經(jīng)理芥喇,產(chǎn)品經(jīng)理西采,系統(tǒng)架構(gòu)師,IT總監(jiān)继控。愛好篆刻械馆,閱讀,美食武通。
微信號(hào)簡(jiǎn)介
每天半小時(shí)零基礎(chǔ)學(xué)編程霹崎。大人可以學(xué),小孩也可以學(xué)冶忱。練打字尾菇,用軟件,寫文檔囚枪,做網(wǎng)站派诬,做App,編游戲链沼,數(shù)據(jù)庫(kù)默赂,玩硬件,寫程序忆植,3D打印放可,無人機(jī),機(jī)器人朝刊。
html,css,javascript,python,php,java,swift,mysql,android,ios,raspberry pi,scratch. 微信公眾號(hào)搜索:零基礎(chǔ)學(xué)編程耀里。
QQ群簡(jiǎn)介
歡迎大家加入QQ群 603559164 零基礎(chǔ)學(xué)編程,交流學(xué)習(xí)拾氓,共同進(jìn)步冯挎。