葉鵬 沈曉恬
在上一期,菩提老祖?zhèn)魇诹藀ython的基本運算符,但只掌握這些是遠遠不夠的。菩提老祖用拂塵指指悟空,繼續(xù)他的教學(xué)工作。
“如你與人爭斗時一樣,不可能只使用一招基本招式,也不可能每次使用一模一樣的打法。在程序中,也必然要用到一些結(jié)構(gòu),來控制程序如何執(zhí)行各種操作,這種結(jié)構(gòu)稱為控制結(jié)構(gòu)?!?p>
順序結(jié)構(gòu)
“我不是很明白,”悟空似懂非懂,眼中露出些許迷茫之色。
“待我仔細講解一下?!?/p>
“程序中一般有3種控制結(jié)構(gòu),順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)最容易理解,一行行程序按順序執(zhí)行,做完一行,再做下一行。順序結(jié)構(gòu)不需要特別的控制語句?!?/p>
悟空點頭表示明白。
“分支結(jié)構(gòu)中,需要加判斷條件,判斷滿足何種條件時做什么事情?!?p>
分支結(jié)構(gòu)
“那么,吃桃子的時候,判斷桃毛是否蹭干凈,就是分支結(jié)構(gòu)語句?”悟空問道。
“不錯!”菩提老祖接著說,“Python中的分支結(jié)構(gòu)語句使用if...elif...else的方法來表達?!?/p>
# 分支結(jié)構(gòu)
# if
a = 1
if a == 1:
print('此時a等于1')
# if...else
a = 2
if a == 1:
print('此時a等于1')
else:
print('此時a不等于1')
# if...elif...else
a = 2
if a == 1:
print('此時a等于1')
elif a == 3:
print('此時a等于3')
else:
print('此時a等于2')
# if...elif...elif...else
a = 2
if a == 1:
print('此時a等于1')
elif a == 3:
print('此時a等于3')
elif a == 4:
print('此時a等于4')
else:
print('此時a等于2')
# if嵌套
a = 2
b = 5
if a == 2:
if b == 3:
print('此時a等于2,b等于3')
else:
print('此時a等于2,b不等于3')
else:
print('此時a不等于2')
如果a等于1,打印此時a等于1。
如果a等于1,打印此時a等于1;否則打印此時a不等于1。
如果a等于1,打印此時a等于1;又如果a等于3,打印此時a等于3;否則打印此時a等于2。
如果a等于1,打印此時a等于1;又如果a等于3,打印此時a等于3;又如果a等于4,打印此時a等
如果a等于2時:b等于3,打印此時a等于2,b等于3;否則打印此時a等于2,b不等于3。否則(如果a不等于2)打印此時a等于2。
“簡單!”猴子挺得意。
“你這猴頭可得看仔細,if或者elif后面跟的表達式里,判斷是否相等時,可得用兩個等號。這是一個比較運算符?!?/p>
“師父不說我還真沒注意呢!”悟空撓著后腦勺訕笑著。
“if和elif后的條件表達式如果成立,則會執(zhí)行此分支程序;如果不成立,則不會;如果所有條件都不成立,則會進入else分支。”
“第三種控制結(jié)構(gòu)稱為循環(huán)結(jié)構(gòu),如果同樣的操作被反復(fù)執(zhí)行,便可以使用循環(huán)結(jié)構(gòu)?!逼刑崂献胬^續(xù)講解。
循環(huán)結(jié)構(gòu)
“師父,這俺就不明白了,既然同樣的操作被反復(fù)執(zhí)行,為什么不把同樣的代碼多寫幾遍,反正也不費事?!蔽蚩瞻l(fā)問。
菩提老祖一笑:“寫程序時可不一定知道要執(zhí)行幾次,萬一要執(zhí)行個千百次,你還真在程序中抄那么多次?而且使用循環(huán)結(jié)構(gòu),你可以動態(tài)地控制循環(huán)的次數(shù)?!?/p>
“此話怎講?”猴子問。
“比如一段吃桃子的程序,有一筐桃子,你要用程序把它吃完。如果寫程序的時候,已經(jīng)規(guī)定能吃的桃子個數(shù),那么筐里的桃子多了你會吃不完,少了你又不夠吃。只有在程序開始運行之后,根據(jù)筐里桃子的數(shù)量來決定吃幾個桃子,才會剛剛好?!?/p>
“哦!”猴子大徹大悟,“要是現(xiàn)在有一筐桃子就太好了!”
在Python中,循環(huán)結(jié)構(gòu)大致可以分成兩種,一種是遍歷循環(huán),一種是無限循環(huán)。
所謂遍歷循環(huán)就是遍歷某一個結(jié)構(gòu)形成的循環(huán)運行方式。具體說來,比如有一個列表,里面包含了1~20的數(shù)字,基于這個列表進行的遍歷循環(huán),就會執(zhí)行20次。
無限循環(huán)是由條件控制的循環(huán)方式,反復(fù)執(zhí)行代碼,一直到不滿足循環(huán)條件為止。
以猴子吃桃子的故事來舉例,遍歷循環(huán)就是先看看筐里有幾個桃子,挨個兒拿出來吃。無限循環(huán)就是看看筐里還有沒有桃子,有就拿出來吃,沒有就停止循環(huán)。
遍歷循環(huán)的語法使用for...in...,無限循環(huán)的語法使用while。
[list1 = [1,2,"a"]
for i in list1:
print(i) ]
[i = 0
while i<3:
print(i)
i = i + 1 ]
Python中for和while并沒有本質(zhì)的區(qū)別,只是實際使用中針對性不同。
如果執(zhí)行過程中要退出循環(huán),可以使用break和continue語句。break會退出整個循環(huán)部分代碼,continue則會跳過當前這次執(zhí)行的代碼,繼續(xù)下一次循環(huán)。
break:
[i=0
while i<5:
i=i+1
if i%2==0:
print("把它吃掉!")
break
print("擦擦桃子,") ]
continue:
[i=0
while i<5:
i=i+1
if i%2==0:
print("把它吃掉!")
continue
print("擦擦桃子,") ]
說到這里,性急的猴子覺得自己已經(jīng)掌握了Python的基本用法,迫不及待地想要試試手。
菩提老祖怎會不知道這猴子的心思,不過還有點重要的東西沒有講完。
“悟空,想要成為高手,光是上面講的內(nèi)容還不夠?!?/p>
這話吊起了猴子的好勝心?!芭叮窟€有什么?”
“所謂高手,都有自己的絕招,這絕招通常是由一串基本招式構(gòu)成,高手們將其練熟,在某些特定場合一并使出。你當年不是有一招叫做“萬棍朝宗”嗎?在瞬間揮出一萬棍,打擊在一個點上。”
“嗯,師父講的沒錯!Python中也有這樣的絕招嗎?”
“Python中有個東西叫作函數(shù),這就相當于絕招?!逼刑崂献娼又f道,“函數(shù)是組織好的,可重復(fù)使用,用來實現(xiàn)單一或相關(guān)聯(lián)功能的代碼段?!?/p>
“明白,函數(shù)就是帶名字的代碼塊。好比俺老孫平時練熟一串招式,這就是一個代碼塊,俺給它起個名字叫萬棍朝宗,就是函數(shù)名了。等對敵時候,俺大喝一聲,把這大招使出來,這就是調(diào)用函數(shù)!”悟空又興奮起來。
“孺子可教也。”菩提老祖捻須微笑。
Python使用def語法來定義函數(shù)。其中可以沒有參數(shù)和返回值。函數(shù)名的要求和變量名的要求一樣,首字以字母和下劃線開頭,后續(xù)由中英文字母、下劃線和數(shù)字組成,大小寫敏感。
[def 函數(shù)名 (參數(shù)):
功能代碼
return 返回值 ]
下面是一個函數(shù)的簡單例子:
[def wangunchaozong(t):
for i in range(t):
print("打一棍")
return i+1
goal = 10
actual = wangunchaozong(goal)
print("實際打了幾棍?")
print(actual)
]
Python自帶大量常用函數(shù),文中出現(xiàn)的最常用的print函數(shù)就被用來將變量顯示到輸出窗口中。同時世界上眾多的Python開發(fā)者們也貢獻出巨量的函數(shù)庫,可以方便地讓人們實現(xiàn)各種功能。
具體如何實現(xiàn)?請看下回分解!