這節(jié)課講循環(huán)可免。
程序執(zhí)行順序有3種抓于,第一種最簡單:按順序執(zhí)行;第二種是前面幾節(jié)課講的:分支執(zhí)行浇借,即根據(jù)情況執(zhí)行分支的某一個捉撮,其余的不執(zhí)行;第三種就是今天要講的:循環(huán)執(zhí)行妇垢。
這3種執(zhí)行邏輯是所有計算機語言都通用的執(zhí)行順序邏輯巾遭。所有復雜得程序邏輯都是由這3種程序邏輯組成。
什么是循環(huán)
循環(huán)的意思就是當滿足某種條件時反復執(zhí)行相同的一段邏輯闯估,直到條件不滿足或者強制退出循環(huán)灼舍。
參照上面的那個邏輯順序圖,當滿足循環(huán)條件時睬愤,執(zhí)行循環(huán)操作片仿,操作結(jié)束后再回到循環(huán)判斷的地方,再次判斷是否滿足循環(huán)條件尤辱,
如果滿足則再次執(zhí)行循環(huán)操作,假如不滿足循環(huán)條件厢岂,則循環(huán)結(jié)束光督。
假如循環(huán)條件一直滿足,則循環(huán)會一直進行下去塔粒,這就是“死循環(huán)”结借,寫程序要避免這種情況。否則電腦就會持續(xù)執(zhí)行程序卒茬,這不是我們希望的情況船老。
while循環(huán)語法
在python程序里面,可以用while來實現(xiàn)循環(huán)圃酵,語法規(guī)則如下:
while 條件表達式為True:
? ? 循環(huán)操作1
? ? 循環(huán)操作2
后續(xù)操作
例子:
name=input()
while name<>"michael":
? ? name=input()
print name
這段代碼的意思:當輸入名字不是michael柳畔,則繼續(xù)輸入,直到輸入了michael則停止郭赐,最后輸出
從1加到100求和
從1加到100薪韩,大家都知道結(jié)果是5050,那么如果用python代碼來計算,就需要用循環(huán)了
#coding=utf-8
#從1加到100求和
#作者:學哥? 時間:2017/1/1
#變量c作為計數(shù)器
c=1
#變量total保存累加值
total=0
#循環(huán)100次俘陷,如果計數(shù)器大于100則退出循環(huán)
while c<=100:
? ? #計數(shù)器同時作為累加增加的值
? ? total = total + c
? ? #將計數(shù)器加1
? ? c = c + 1
print "total 1-100:",total
我們模擬一下電腦執(zhí)行的過程如下:
c=1
total=0
循環(huán)判斷c=1是小于等于100條件滿足
total=0+1=1
c=1+1=2
再次循環(huán)判斷c=2是小于等于100條件滿足
total=1+2=3
c=2+1=3
再次循環(huán)判斷c=3是小于等于100條件滿足
total=3+3=6
c=3+1=4
再次循環(huán)判斷c=4是小于等于100條件滿足
total=6+4=10
c=4+1=5
再次循環(huán)判斷c=5是小于等于100條件滿足
total=10+5=15
c=5+1=6
......
再次循環(huán)判斷c=99是小于等于100條件滿足
total=4851+99=4950
c=99+1=100
再次循環(huán)判斷c=100是小于等于100條件滿足
total=4950+100=5050
c=100+1=101
再次循環(huán)判斷c=101是小于等于100條件不滿足
循環(huán)結(jié)束
人腦來計算實在太麻煩了罗捎,還是電腦計算厲害,我們要利用循環(huán)的力量
來看看最終的結(jié)果吧
可以看到結(jié)果是5050
注意前面有一個錯誤拉盾,說文件不存在桨菜,這是因為我在保存的時候忘記輸入.py了,保存成add100文件名了捉偏,所以報錯
碰到這種錯誤雷激,重新保存一下文件為add100.py然后重新運行
從1開始連續(xù)100個奇數(shù)相加是多少
從1開始,累加奇數(shù)告私,也就是1屎暇,3,5驻粟,......根悼,直到加了100個奇數(shù)
需要將剛才的程序進行修改一下,關(guān)鍵是要累加的數(shù)不是連續(xù)的蜀撑,那么計數(shù)器就不能作為累加的數(shù)挤巡,因此需要再增加一個變量用來存儲奇數(shù)
#coding=utf-8
#從1開始連續(xù)100個奇數(shù)相加求和
#作者:學哥? 時間:2017/1/1
#變量c作為計數(shù)器
c=1
#變量jishu保存奇數(shù)
jishu=1
#變量total保存累加值
total=0
#循環(huán)100次,如果計數(shù)器大于100則退出循環(huán)
while c<=100:
? ? #奇數(shù)作為累加增加的值
? ? total = total + jishu
? ? #奇數(shù)增加2酷麦,變成下一個奇數(shù)
? ? jishu = jishu + 2
? ? #將計數(shù)器加1
? ? c = c + 1
print "total 100 jishu:",total
看看結(jié)果是否正確矿卑,正確結(jié)果應該是10000
從2開始連續(xù)50個偶數(shù)相加是多少
這個和前面奇數(shù)相加的非常類似,請大家先不要往下看沃饶,自己先嘗試修改程序試試看
代碼如下:
結(jié)果如下:
從1月1日到12月31日的每一天分別是什么星座輸出
前面做過星座判斷程序母廷,輸入月份和日期,輸出星座糊肤,現(xiàn)在把程序修改成不需要輸入琴昆,而是循環(huán)輸出從1月1日到12月31日每一天都分別是什么星座,這樣馆揉,要在原來程序的基礎上修改业舍,增加循環(huán):
在開始修改之前,新學習一個知識:如何從循環(huán)中強制退出
while 條件表達式為True:
? ? 循環(huán)操作1
? ? break
? ? 循環(huán)操作2
后續(xù)操作
在循環(huán)內(nèi)部升酣,用break退出循環(huán)舷暮,程序執(zhí)行到break這一行,程序就直接退出while循環(huán)噩茄,break這行后面的代碼將不再執(zhí)行
上面的“循環(huán)操作2”這行代碼永遠也不會觸發(fā)執(zhí)行下面,也就是上面這個循環(huán)其實只循環(huán)一次還未結(jié)束就退出了
因此,一般我們會在break之前做一個條件判斷巢墅,滿足某種條件才會退出循環(huán)诸狭,如下:
while 條件表達式為True:
? ? 循環(huán)操作1
? ? if 條件表達式2為True:
? ? ? ? break
? ? 循環(huán)操作2
后續(xù)操作
這樣券膀,當條件表達式2為True的時候,才會退出循環(huán)驯遇,否則串纺,繼續(xù)進行循環(huán)
現(xiàn)在開始修改原來的星座判斷程序旷祸,先將程序另存為xingzuoall.py
然后將前面的輸入語句否彩,以及判斷輸入語句都注釋掉
然后瑞凑,增加初始化變量month和day從1月1日開始
month = 1
day = 1
然后增加while 循環(huán),并且條件永遠為True陡叠,在循環(huán)里面準備用break退出
循環(huán)內(nèi)部玩郊,先利用原來的星座判斷邏輯,得到星座并輸出枉阵,注意要將所有代碼增加縮進空格
然后將day加1译红,再次進入循環(huán),當day到達31的時候兴溜,將month加1侦厚,進入下一個月,并且將day=1拙徽,繼續(xù)下個月處理
當month到達13的時候刨沦,就可以用break退出循環(huán)了
關(guān)鍵代碼如下:
寫完程序之后,按照程序執(zhí)行的邏輯順序在腦子里跑一遍膘怕,如果記不住變量當前存儲的值想诅,可以用紙和筆進行記錄
總之要模擬執(zhí)行一遍,確保程序是按照預想的邏輯運行岛心,得到預期的結(jié)果
多檢查幾遍来破,就是磨刀不誤砍柴工,然后再去執(zhí)行程序
運行程序鹉梨,結(jié)果如下:
結(jié)果輸出從1月1日到12月31日每一天的星座
但是有不完美的地方讳癌,就是大小月沒有處理,因此存在一些不可能的日期
再次修改存皂,判斷日期>31的地方,將31替換為一個變量maxday
maxday初始值給31逢艘,然后根據(jù)當前month修改maxday為28或者30
修改代碼如下:
再次運行代碼旦袋,發(fā)現(xiàn)每個月的處理都正確了,核對星座的日期范圍也正確了它改。
通過這節(jié)課的講解和練習疤孕,學會了循環(huán),以后會經(jīng)常用到的
大家要反復練習央拖,要正確做到掌握代碼之后祭阀,能夠自己從零開始將整個代碼重寫出來
只有做到滾瓜爛熟鹉戚,才能掌握其中的竅門,不要害怕錯誤专控,編程水平就是在反復的錯誤和修改當中不斷提高的抹凳。
課后作業(yè):
輸出斐波拉契數(shù)列,打印100個數(shù)字 .
提示:斐波拉契數(shù)列就是 1伦腐,1赢底,2,3柏蘑,5幸冻,8,13咳焚,21洽损,34,55革半,89......? 這個數(shù)列從第3項開始碑定,每一項都等于前兩項之和
往期教程
0001 零基礎的小白能學會編程嗎?
0002 真的嗎督惰,700元的電腦可以學會編程不傅?
0003 十分鐘組裝一臺電腦開始編程
0004 如何編寫人生的第一行代碼helloworld
0005 鍵盤打字如何練成像黑客一樣的飛速
0006 編程入門python語言之加法計算器
0007 編程入門python語言之四則運算器
第一部分前7課小結(jié)和課程規(guī)劃說明及微信群主招募
0008 加減乘除也會算錯?還要編寫程序測試赏胚?
0009 如何編寫程序計算所屬星座访娶,一看就懂
因為教程是系列教程,前后關(guān)聯(lián)性非常強觉阅,請大家按照微信公眾號的發(fā)布時間先后次序進行閱讀崖疤。
微信公眾號里面直接輸入序號可以查看該序號課程,例如輸入0001可以查看【0001 零基礎的小白能學會編程嗎典勇?】
作者簡介
學哥劫哼,二十年編程經(jīng)驗,歷任程序員割笙,資深程序員权烧,技術(shù)經(jīng)理,項目經(jīng)理伤溉,產(chǎn)品經(jīng)理般码,系統(tǒng)架構(gòu)師,IT總監(jiān)乱顾。愛好篆刻板祝,閱讀,美食走净。
微信號簡介
每天半小時零基礎學編程券时。大人可以學孤里,小孩也可以學。練打字橘洞,用軟件捌袜,寫文檔,做網(wǎng)站震檩,做App琢蛤,編游戲,數(shù)據(jù)庫抛虏,玩硬件博其,寫程序,3D打印迂猴,無人機慕淡,機器人。
html,css,javascript,python,php,java,swift,mysql,android,ios,raspberry pi,scratch. 微信公眾號搜索:零基礎學編程沸毁。
QQ群簡介
歡迎大家加入QQ群 603559164 零基礎學編程峰髓,交流學習,共同進步息尺。