【Python入門】7.循環(huán)for in與while各薇、break饮睬、continue

本節(jié)摘要:循環(huán)for…in語句呕屎;循環(huán)while語句十偶;break語句完残;continue語句


Daily Record:每天一紀(jì)念脆荷,記錄下python的學(xué)習(xí)歷程蚌成,入門學(xué)習(xí)筆記與心得芭析。本學(xué)習(xí)筆記主要基于廖雪峰大大的Python教程截珍。不積跬步攀甚,無以至千里~ .?(? ??_??)?


@[toc]


循環(huán)

for...in循環(huán)

for...in循環(huán)可以依次把list或tuple中的每個(gè)元素迭代出來,for x in ...循環(huán)就是把每個(gè)元素代入變量x岗喉,然后執(zhí)行縮進(jìn)塊的語句秋度。

例如:

>>> l = ['a', 'b', 'c']
>>> for x in l:
...     print x

輸出結(jié)果會(huì)依次打印l的每一個(gè)元素:

a
b
c

在這里插入圖片描述

計(jì)算1-10的整數(shù)之和——可用sum()變量累加

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
print sum
在這里插入圖片描述

計(jì)算1-100的整數(shù)之和——可用range()函數(shù)

range()函數(shù)

Python 2.7中,直接生成一個(gè)整數(shù)list序列钱床。

>>> range(5)                     #生成一個(gè)從0開始到小于5的整數(shù)序列荚斯,Python 2.7的顯示
[0, 1, 2, 3, 4]
>>> range(0, 5)
[0, 1, 2, 3, 4]
>>> range(5, 10)
[5, 6, 7, 8, 9]

Python 3.x中,生成一個(gè)整數(shù)序列诞丽,需再用list()函數(shù)可以轉(zhuǎn)換為list鲸拥。

>>> range(5)                     #Python 3.x的顯示
range(0,5)
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(5,10))            #生成一個(gè)從5開始到小于10的list
[5, 6, 7, 8, 9]

這樣可以通過for…in循環(huán)和range( )函數(shù)構(gòu)建一個(gè)簡單的求和算法。

sum = 0
>>> for x in range(101):         #range(101)生成0-100的整數(shù)序列
...     sum = sum + x
>>> print sum
sum = 0
>>> for x in range(101):         #range(101)生成0-100的整數(shù)序列
...     sum = sum + x
...
>>> print sum
5050

while循環(huán)

只要條件滿足僧免,就不斷循環(huán)刑赶,條件不滿足時(shí)退出循環(huán)。即在while后面加條件懂衩,如果條件判斷為True撞叨,則執(zhí)行冒號(hào)后的縮進(jìn)語句,之后再返回判斷條件浊洞,直到條件判斷為False時(shí)退出循環(huán)牵敷。

計(jì)算100以內(nèi)所有奇數(shù)之和:

sum = 0
>>> n = 99
>>> while n > 0:
...     sum = sum + n
...     n = n - 2
...
>>> print sum
2500

在循環(huán)內(nèi)部變量n不斷自減,直到變?yōu)?1時(shí)法希,不再滿足while條件枷餐,循環(huán)退出。

計(jì)算100以內(nèi)整數(shù)求和:

>>> sum = 0
>>> n = 1
>>> while n < 101:
...     sum = sum + n
...     n = n + 1
...
>>> print sum
5050
>>> sum = 0
>>> n = 100
>>> while n > 0:
...     sum = sum + n
...     n = n - 1
...
>>> print sum
5050

練習(xí)
請(qǐng)利用循環(huán)依次對(duì)list中的每個(gè)名字打印出Hello, xxx!:

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

  1. for...in循環(huán)
>>> L = ['Bart', 'Lisa', 'Adam']
>>> for name in L:
...     print 'Hello, %s!' %name
...
Hello, Bart!
Hello, Lisa!
Hello, Adam!
>>> L = ['Bart', 'Lisa', 'Adam']
>>> for name in L:
...     print 'Hello, ' +name+'!'
...
Hello, Bart!
Hello, Lisa!
Hello, Adam!
L = ['Bart', 'Lisa', 'Adam']
>>> for name in L:
...     print('Hello, {}!'.format(name))
...
Hello, Bart!
Hello, Lisa!
Hello, Adam!
  1. while循環(huán)
>>> L = ['Bart', 'Lisa', 'Adam']
>>> n = 0
>>> while n < 3:
...     print 'Hello, %s!' %L[n]
...     n = n + 1
...
Hello, Bart!
Hello, Lisa!
Hello, Adam!
>>> L = ['Bart', 'Lisa', 'Adam']
>>> n = 0
>>> while n < 3:
...     print 'Hello, ' +L[n]+'!'
...     n = n + 1
...
Hello, Bart!
Hello, Lisa!
Hello, Adam!

倒序打由灰唷:

>>> L = ['Bart', 'Lisa', 'Adam']
>>> n = len(L) - 1
>>> while n >= 0:
...     print 'Hello, ' +L[n]+ '!'
...     n = n - 1
...
Hello, Adam!
Hello, Lisa!
Hello, Bart!
>>> L = ['Bart', 'Lisa', 'Adam']
>>> n = len(L) - 1
>>> m = 0
>>> while n >= 0:
...     m = L[n]
...     n = n - 1
...     print 'Hello, %s毛肋!' % m
...
Hello, Adam怨咪!
Hello, Lisa!
Hello, Bart润匙!

break

break語句诗眨,退出當(dāng)前循環(huán),提前結(jié)束循環(huán)孕讳。

例一:循環(huán)打印1~100的數(shù)字

n = 1
while n <= 100:
    print n
    n = n + 1
print 'End'

可以打印出1~100匠楚。

若要求只需打印1~20,提前結(jié)束循環(huán)厂财,可以用break語句:

# coding=utf-8
n = 1
while n <= 100:
    if n > 20:           # 當(dāng)n = 11時(shí)芋簿,條件滿足,執(zhí)行break語句
        break            # break語句會(huì)結(jié)束當(dāng)前循環(huán)
    print n
    n = n + 1
print 'END'

執(zhí)行上面的代碼蟀苛,打印出1~20后益咬,緊接著打印END,程序結(jié)束帜平。

例二:之前的例子要計(jì)算100以內(nèi)整數(shù)求和

>>> sum = 0
>>> n = 1
>>> while n <= 100:
...     sum = sum + n
...     n = n + 1
...
>>> print sum
5050

現(xiàn)只要求計(jì)算30以內(nèi)整數(shù)求和

>>> sum = 0
>>> n = 1
>>> while n <= 100:
...     if n > 30:        # 當(dāng)n = 31時(shí)幽告,條件滿足,執(zhí)行break語句
...         break         # break語句會(huì)結(jié)束當(dāng)前循環(huán)
...     sum = sum + n
...     n = n + 1
...
>>> print sum
465
>>> sum = 0
>>> n = 1
>>> while n <= 100:
...     sum = sum + n
...     n = n + 1
...     if n > 30:
...         break
...
>>> print sum
465

可見裆甩,break的作用是提前結(jié)束循環(huán)冗锁。


continue

在循環(huán)過程中,continue語句可以跳過本次循環(huán)進(jìn)入下次循環(huán)嗤栓。

例一:打印出1~10

n = 0
while n < 10:
    n = n + 1
    print n

or

n = 0
while n <= 10:
    print n
    n = n + 1

如果只想打印1~10內(nèi)的奇數(shù)冻河,可以用continu語句跳過某些循環(huán):

n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0:         # 如果n是偶數(shù),執(zhí)行continue語句
        continue           # continue語句會(huì)直接繼續(xù)下一輪循環(huán)茉帅,后續(xù)的print語句不會(huì)執(zhí)行
    print n 

執(zhí)行代碼叨叙,打印出1,3堪澎,5擂错,7,9樱蛤。

例二:計(jì)算0~10整數(shù)之和

>>> sum = 0
>>> n = 1
>>> while n <= 10:
...     sum = sum + n
...     n = n + 1
...
>>> print sum
55

現(xiàn)在只需要計(jì)算0到10的奇數(shù)之和钮呀。

>>> sum = 0
>>> n = 0
>>> while n < 10:
...     n = n + 1
...     if n % 2 == 0:
...         continue
...     sum = sum + n
...
>>> print sum
25

or


```python
>>> sum = 0
>>> n = 0
>>> while n < 11:
...     if n % 2 == 0:        # 如果n除以二取余數(shù)為0,即n為偶數(shù)昨凡,則執(zhí)行continue跳過本次循環(huán)
...         n = n + 1
...         continue
...     sum = sum + n
...     n = n + 1
...
>>> print sum
25

錯(cuò)誤?

>>> sum = 0
>>> n = 1
>>> while n <= 10:
...     sum = sum + n
...     n = n + 1
...     if n % 2 == 0:    # 要注意設(shè)置的條件對(duì)執(zhí)行continue語句是否合適
...         continue
...
>>> print sum
55

錯(cuò)誤?

>>> sum = 0
>>> n = 0
>>> while n < 10:
...     n = n + 1
...     sum = sum + n
...     if n % 2 == 0:    # 要注意設(shè)置的條件對(duì)執(zhí)行continue語句是否合適
...         continue
...
>>> print sum
55

可見continue的作用是提前結(jié)束本輪循環(huán)爽醋,并直接開始下一輪循環(huán)。


總結(jié)

循環(huán)便脊,可以有效地讓計(jì)算機(jī)做重復(fù)的任務(wù)蚂四。

break語句:在循環(huán)過程中直接退出循環(huán)
continue語句:提前結(jié)束本輪循環(huán),并直接開始下一輪循環(huán)。
這兩個(gè)語句通常都必須配合if語句使用证杭。

==特別注意==
不能濫用breakcontinue語句田度。
breakcontinue會(huì)造成代碼執(zhí)行邏輯分叉過多,容易出錯(cuò)解愤。大多數(shù)循環(huán)并不需要用到breakcontinue語句,有些例子乎莉,可以通過改寫循環(huán)條件或者修改循環(huán)邏輯送讲,去掉breakcontinue語句。

“死循環(huán)”:如果代碼寫得有問題惋啃,會(huì)讓程序陷入永遠(yuǎn)循環(huán)下去哼鬓。此時(shí)可以用Ctrl+C退出程序或Ctrl+Z中斷程序,或者強(qiáng)制結(jié)束Python進(jìn)程边灭。

試寫一個(gè)死循環(huán)程序异希。

最簡單的

n = 0
while n >= 0:
    n = n + 1
    print n
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绒瘦,隨后出現(xiàn)的幾起案子称簿,更是在濱河造成了極大的恐慌,老刑警劉巖惰帽,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憨降,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡该酗,警方通過查閱死者的電腦和手機(jī)授药,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呜魄,“玉大人悔叽,你說我怎么就攤上這事【粜幔” “怎么了娇澎?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長操骡。 經(jīng)常有香客問我九火,道長,這世上最難降的妖魔是什么册招? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任岔激,我火速辦了婚禮,結(jié)果婚禮上是掰,老公的妹妹穿的比我還像新娘虑鼎。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布炫彩。 她就那樣靜靜地躺著匾七,像睡著了一般。 火紅的嫁衣襯著肌膚如雪江兢。 梳的紋絲不亂的頭發(fā)上昨忆,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音杉允,去河邊找鬼邑贴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛叔磷,可吹牛的內(nèi)容都是我干的拢驾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼改基,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼繁疤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秕狰,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤稠腊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后封恰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麻养,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年诺舔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳖昌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡低飒,死狀恐怖许昨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褥赊,我是刑警寧澤糕档,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站拌喉,受9級(jí)特大地震影響速那,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尿背,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一端仰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧田藐,春花似錦荔烧、人聲如沸吱七。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踊餐。三九已至,卻和暖如春臀稚,著一層夾襖步出監(jiān)牢的瞬間吝岭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工烁涌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苍碟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓撮执,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舷丹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抒钱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344