【python?3】條件判斷和循環(huán) --學(xué)習(xí)筆記

if語句

計算機之所以能做很多自動化的任務(wù),因為它可以自己做條件判斷婿脸。

比如粱胜,輸入用戶年齡,根據(jù)年齡打印不同的內(nèi)容狐树,在Python程序中焙压,可以用if語句實現(xiàn):

age = 20

if age >= 18:

print 'your age is', age

print 'adult'

print 'END'

注意:Python代碼的縮進規(guī)則。具有相同縮進的代碼被視為代碼塊抑钟,上面的3涯曲,4行 print 語句就構(gòu)成一個代碼塊(但不包括第5行的print)。如果 if 語句判斷為 True在塔,就會執(zhí)行這個代碼塊幻件。

縮進請嚴(yán)格按照Python的習(xí)慣寫法:4個空格,不要使用Tab蛔溃,更不要混合Tab和空格绰沥,否則很容易造成因為縮進引起的語法錯誤。

注意: if 語句后接表達(dá)式贺待,然后用:表示代碼塊開始徽曲。

如果你在Python交互環(huán)境下敲代碼,還要特別留意縮進麸塞,并且退出縮進需要多敲一行回車:

>>> age = 20

>>> if age >= 18:

...? ? print 'your age is', age

...? ? print 'adult'

...

your age is 20

adult

任務(wù):

如果成績達(dá)到60分或以上秃臣,視為passed。

假設(shè)Bart同學(xué)的分?jǐn)?shù)是75哪工,請用if語句判斷是否能打印出 passed:

代碼如下:

score = 75

if score >= 60:

??? print 'passed'


if-else

當(dāng)if語句判斷表達(dá)式的結(jié)果為True時甜刻,就會執(zhí)行 if 包含的代碼塊:

if age >= 18:

??? print 'adult'

如果我們想判斷年齡在18歲以下時,打印出 'teenager'正勒,怎么辦?

方法是再寫一個 if:

if age < 18:

??? print 'teenager'

或者用 not 運算:

if not age >= 18:

??? print 'teenager'

細(xì)心的同學(xué)可以發(fā)現(xiàn)傻铣,這兩種條件判斷是“非此即彼”的章贞,要么符合條件1,要么符合條件2非洲,因此鸭限,完全可以用一個if ... else ...語句把它們統(tǒng)一起來:

if age >= 18:

??? print 'adult'

else:

??? print 'teenager'

利用 if ... else ... 語句,我們可以根據(jù)條件表達(dá)式的值為True或者False两踏,分別執(zhí)行if代碼塊或者else代碼塊败京。

注意:else 后面有個“:”。

任務(wù):

如果成績達(dá)到60分或以上梦染,視為passed赡麦,否則視為failed朴皆。

假設(shè)Bart同學(xué)的分?jǐn)?shù)是55,請用if語句打印出 passed 或者 failed:

代碼如下:

score = 55

if score >= 60:

??? print 'passed'

else:

??? print 'failed'


if-elif-else

有的時候泛粹,一個 if ... else ... 還不夠用遂铡。比如,根據(jù)年齡的劃分:

條件1:18歲或以上:adult

條件2:6歲或以上:teenager

條件3:6歲以下:kid

我們可以用一個 if age >= 18 判斷是否符合條件1晶姊,如果不符合扒接,再通過一個 if 判斷 age >= 6 來判斷是否符合條件2,否則们衙,執(zhí)行條件3:

if age >= 18:

??? print 'adult'

else:

??? if age >= 6:

??????? print 'teenager'

??? else:

??????? print 'kid'

這樣寫出來钾怔,我們就得到了一個兩層嵌套的 if ... else ... 語句。這個邏輯沒有問題蒙挑,但是宗侦,如果繼續(xù)增加條件,比如3歲以下是 baby:

if age >= 18:

??? print 'adult'

else:

??? if age >= 6:

??????? print 'teenager'

??? else:

??????? if age >= 3:

??????????? print 'kid'

??????? else:

??????????? print 'baby'

這種縮進只會越來越多脆荷,代碼也會越來越難看凝垛。

要避免嵌套結(jié)構(gòu)的 if ... else ...咨察,我們可以用if ... 多個elif ... else ...的結(jié)構(gòu)攀甚,一次寫完所有的規(guī)則:

if age >= 18:

??? print 'adult'

elif age >= 6:

??? print 'teenager'

elif age >= 3:

??? print 'kid'

else:

??? print 'baby'

elif意思就是else if。這樣一來蒋院,我們就寫出了結(jié)構(gòu)非常清晰的一系列條件判斷桃焕。

特別注意:這一系列條件判斷會從上到下依次判斷剑肯,如果某個判斷為 True,執(zhí)行完對應(yīng)的代碼塊观堂,后面的條件判斷就直接忽略让网,不再執(zhí)行了。

請思考下面的代碼:

age = 8

if age >= 6:

??? print 'teenager'

elif age >= 18:

??? print 'adult'

else:

??? print 'kid'

當(dāng) age = 8 時师痕,結(jié)果正確溃睹,但 age = 20 時,為什么沒有打印出 adult胰坟?

如果要修復(fù)因篇,應(yīng)該如何修復(fù)?age=20

age=20

if age>=18:

?? print('adult')

elif age>=6:? ? #如果把age>=6放在age>=18前面笔横,沒有判斷小于18情況竞滓,已經(jīng)得出為 True,后面的條件判斷就直接忽略吹缔,不再執(zhí)行了商佑。

??? print('teenager')

else:

??? print('kid')

任務(wù):

如果按照分?jǐn)?shù)劃定結(jié)果:

90分或以上:excellent

80分或以上:good

60分或以上:passed

60分以下:failed

請編寫程序根據(jù)分?jǐn)?shù)打印結(jié)果。

代碼如下:

score = 85

if score >= 90:

??? print 'excellent'

elif score >= 80:

??? print 'good'

elif score >= 60:

??? print 'passed'

else:

??? print 'failed'


for循環(huán)

list或tuple可以表示一個有序集合厢塘。如果我們想依次訪問一個list中的每一個元素呢茶没?比如 list:

L = ['Adam', 'Lisa', 'Bart']

print L[0]

print L[1]

print L[2]

如果list只包含幾個元素肌幽,這樣寫還行,如果list包含1萬個元素礁叔,我們就不可能寫1萬行print牍颈。

這時,循環(huán)就派上用場了琅关。

Python的for循環(huán)就可以依次把list或tuple的每個元素迭代出來:

L = ['Adam', 'Lisa', 'Bart']

for name in L:? ?

???? print name

注意:name 這個變量是在 for 循環(huán)中定義的煮岁,意思是,依次取出list中的每一個元素涣易,并把元素賦值給 name画机,然后執(zhí)行for循環(huán)體(就是縮進的代碼塊)。

這樣一來新症,遍歷一個list或tuple就非常容易了步氏。

任務(wù):

班里考試后,老師要統(tǒng)計平均成績徒爹,已知4位同學(xué)的成績用list表示如下:

L = [75, 92, 59, 68]

請利用for循環(huán)計算出平均成績荚醒。

代碼如下:

L= [75,92,59,68]

sum =0.0

n = 0

for score in L:

??? sum = sum + score

? ? n = n+1

print(sum/4)


while循環(huán)

和 for 循環(huán)不同的另一種循環(huán)是while循環(huán),while 循環(huán)不會迭代 list 或 tuple 的元素隆嗅,而是根據(jù)表達(dá)式判斷循環(huán)是否結(jié)束界阁。

比如要從 0 開始打印不大于 N 的整數(shù):

N = 10

x = 0

while x < N:

??? print x? ?

??? x = x + 1

while循環(huán)每次先判斷 x < N,如果為True胖喳,則執(zhí)行循環(huán)體的代碼塊泡躯,否則,退出循環(huán)丽焊。

在循環(huán)體內(nèi)较剃,x = x + 1會讓x不斷增加,最終因為x < N不成立而退出循環(huán)技健。

如果沒有這一個語句写穴,while循環(huán)在判斷 x < N 時總是為True,就會無限循環(huán)下去雌贱,變成死循環(huán)确垫,所以要特別留意while循環(huán)的退出條件。

任務(wù):

利用while循環(huán)計算100以內(nèi)奇數(shù)的和帽芽。

100以內(nèi)奇數(shù)的和

break退出循環(huán)

用 for 循環(huán)或者 while 循環(huán)時,如果要在循環(huán)體內(nèi)直接退出循環(huán)翔冀,可以使用break語句导街。

比如計算1至100的整數(shù)和,我們用while來實現(xiàn):

sum = 0

x = 1

while True:? ?

? ? sum = sum + x? ?

? ? x = x + 1? ?

? ? if x > 100:

? ? ? ? break

print sum

咋一看纤子, while True 就是一個死循環(huán)搬瑰,但是在循環(huán)體內(nèi)款票,我們還判斷了x > 100條件成立時,用break語句退出循環(huán)泽论,這樣也可以實現(xiàn)循環(huán)的結(jié)束艾少。

任務(wù):

利用 while True 無限循環(huán)配合 break 語句,計算 1 + 2 + 4 + 8 + 16 + ... 的前20項的和翼悴。

代碼如下:

正確代碼寫法
錯誤寫法

continue繼續(xù)循環(huán)

在循環(huán)過程中缚够,可以用break退出當(dāng)前循環(huán),還可以用continue跳過后續(xù)循環(huán)代碼鹦赎,繼續(xù)下一次循環(huán)谍椅。

假設(shè)我們已經(jīng)寫好了利用for循環(huán)計算平均分的代碼:

平均分

現(xiàn)在老師只想統(tǒng)計及格分?jǐn)?shù)的平均分,就要把 x < 60 的分?jǐn)?shù)剔除掉古话,這時雏吭,利用 continue,可以做到當(dāng) x < 60的時候陪踩,不繼續(xù)執(zhí)行循環(huán)體的后續(xù)代碼杖们,直接進入下一次循環(huán):

跳進下一次循環(huán)

任務(wù):

對已有的計算 0 - 100 的while循環(huán)進行改造,通過增加 continue 語句肩狂,使得只計算奇數(shù)的和:

sum = 0

x = 1

while True:

sum = sum + x

x = x + 1

if x > 100:

break

print sum

增加 continue 語句摘完,只計算奇數(shù)的和

多重循環(huán)

在循環(huán)內(nèi)部,還可以嵌套循環(huán)婚温,我們來看一個例子:

for x in['A', 'B', 'C']:

? ? for y in['1', '2', '3']:? ? ? ??

? ? ? ? print x + y

x每循環(huán)一次描焰,y就會循環(huán) 3 次,這樣栅螟,我們可以打印出一個全排列:

A1

A2

A3

B1

B2

B3

C1

C2

C3

任務(wù):

對100以內(nèi)的兩位數(shù)荆秦,請使用一個兩重循環(huán)打印出所有十位數(shù)數(shù)字比個位數(shù)數(shù)字小的數(shù),例如力图,23(2 < 3)步绸。

代碼如下:

十位數(shù)小于個位數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吃媒,隨后出現(xiàn)的幾起案子瓤介,更是在濱河造成了極大的恐慌,老刑警劉巖赘那,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刑桑,死亡現(xiàn)場離奇詭異,居然都是意外死亡募舟,警方通過查閱死者的電腦和手機祠斧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拱礁,“玉大人琢锋,你說我怎么就攤上這事辕漂。” “怎么了吴超?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵钉嘹,是天一觀的道長。 經(jīng)常有香客問我鲸阻,道長跋涣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任赘娄,我火速辦了婚禮仆潮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遣臼。我一直安慰自己性置,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布揍堰。 她就那樣靜靜地躺著鹏浅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屏歹。 梳的紋絲不亂的頭發(fā)上隐砸,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音蝙眶,去河邊找鬼季希。 笑死,一個胖子當(dāng)著我的面吹牛幽纷,可吹牛的內(nèi)容都是我干的式塌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼友浸,長吁一口氣:“原來是場噩夢啊……” “哼峰尝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起收恢,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤武学,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后伦意,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體火窒,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年驮肉,在試婚紗的時候發(fā)現(xiàn)自己被綠了沛鸵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖曲掰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奈辰,我是刑警寧澤栏妖,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站奖恰,受9級特大地震影響吊趾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瑟啃,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一论泛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛹屿,春花似錦屁奏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至犹撒,卻和暖如春折联,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背识颊。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工诚镰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祥款。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓清笨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親镰踏。 傳聞我的和親對象是個殘疾皇子函筋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容