python流程控制
流程控制概念
什么是流程控制?
所謂的流程控制是計算機(jī)運(yùn)算領(lǐng)域的用語意指在程序運(yùn)行時個別的指令(或是陳述 子程序)運(yùn)行或求值的順序不論是在聲明式編程語言還是函數(shù)式編程語言都有類似的概念
關(guān)于聲明式編程語言和函數(shù)式編程語言詳解
以上是官方的解釋,我們列舉一個現(xiàn)實中的實例來具體說明一下
假如把寫程序比做走路,那我們到現(xiàn)在為止,一直走的都是直路,還沒遇到過分叉口,想象現(xiàn)實中,你遇到了分叉口,然后你決定往哪拐必然是有所動機(jī)的。你要判斷那條岔路是你真正要走的路,
如果我們想讓程序也能處理這樣的判斷怎么辦? 很簡單,只需要在程序里預(yù)設(shè)一些條件判斷語句,滿足哪個條件,就走哪條岔路。這個過程就叫流程控制。
if...else 語句
Python的條件和循環(huán)語句,決定了程序的控制流程,體現(xiàn)結(jié)構(gòu)的多樣性。須重要理解,if、while、for以及與它們相搭配的 else、 elif、break、continue和pass語句
詳解
if語句
Python中的if子句由三部分組成:關(guān)鍵字本身、用于判斷結(jié)果真假的條件表達(dá)式以及當(dāng)表達(dá)式為真或者非零時執(zhí)行的代碼塊。if 語句的語法如下:
if 執(zhí)行條件: 執(zhí)行體
if語句有三種形式:
單分支
if 條件: 滿足條件后要執(zhí)行的代碼
雙分支
語法: if 條件: 滿足條件執(zhí)行代碼 else: if條件不滿足就走這段 實例: Name = 'yefei' if Name : print('你好'+name) else: print('愛誰誰')
縮進(jìn)(重點了解)
這里必須要插入這個縮進(jìn)的知識點
你會發(fā)現(xiàn),上面的if代碼里,每個條件的下一行都縮進(jìn)了4個空格,這是為什么呢?這就是Python的一大特色,強(qiáng)制縮進(jìn),目的是為了讓程序知道,每段代碼依賴哪個條件,如果不通過縮進(jìn)來區(qū)分,程序怎么會知道,當(dāng)你的條件成立后,去執(zhí)行哪些代碼呢?
在其它的語言里,大多通過{}來確定代碼塊,比如C,C++,Java,Javascript都是這樣,看一個JavaScript代碼的例子
var age = 18
if ( age < 18){
console.log("還未成年")
}else{
console.log('恭喜你,成年啦,想干什么都可以')
}
在有{}來區(qū)分代碼塊的情況下,縮進(jìn)的作用就只剩下讓代碼變的整潔了。
Python是門超級簡潔的語言,發(fā)明者定是覺得用{}太丑了,所以索性直接不用它,那怎么能區(qū)分代碼塊呢?答案就是強(qiáng)制縮進(jìn)。
Python的縮進(jìn)有以下幾個原則:
- 頂級代碼必須頂行寫,即如果一行代碼本身不依賴于任何條件,那它必須不能進(jìn)行任何縮進(jìn)
- 同一級別的代碼,縮進(jìn)必須一致
- 官方建議縮進(jìn)用4個空格,當(dāng)然你也可以用2個,如果你想被人笑話的話。
多分支
回到流程控制上來,if...else ...可以有多個分支條件
語法: if 條件: 滿足條件執(zhí)行代碼 elif 條件: 上面的條件不滿足就走這個 elif 條件: 上面的條件不滿足就走這個 elif 條件: 上面的條件不滿足就走這個 else: 上面所有的條件不滿足就走這段 實例: age = 18 guess = int(input(">>:")) if guess > age : print("猜的大了,往小里試試...") elif guess < age : print("猜的小了,往大里試試...") else: print("恭喜你,猜對了...")
來個匹配成績的小程序吧,成績有ABCDE5個等級,與分?jǐn)?shù)的對應(yīng)關(guān)系如下 A 90-100 B 80-89 C 60-79 D 40-59 E 0-39 要求用戶輸入0-100的數(shù)字后,你能正確打印他的對應(yīng)成績 score = int(input("輸入分?jǐn)?shù):")) if score > 100: print("注意,滿分100...") elif score >= 90: print("A級") elif score >= 80: print("B級") elif score >= 60: print("C級") elif score >= 40: print("D級") else: print("太笨了...E")
這里有個問題,就是當(dāng)我輸入95的時候 ,它打印的結(jié)果是A,但是95 明明也大于第二個條件elif score >=80:呀, 為什么不打印B呢?這是因為代碼是從上到下依次判斷,只要滿足一個,就不會再往下走啦,這一點一定要清楚呀!
whlie循環(huán)
引言
在生活中,我們遇到過循環(huán)的事情吧?比如吃飯睡覺工作,循環(huán)聽歌等等。在python程序中,循環(huán)也是存在的。那么這個循環(huán)在Python中就是流程控制語句while。
while是一個條件循環(huán)語句,與if聲明相比,如果 if 后的條件為真,就會執(zhí)行一次相應(yīng)的代碼塊。而while中的代碼塊會一直循環(huán)執(zhí)行,直到循環(huán)條件不再為真。
while:適合于循環(huán)次數(shù)是未知的。最好選擇while循環(huán).
(1)一般語法
while循環(huán)的語法如下:
while條件:
# 循環(huán)體 # 如果條件為真,那么循環(huán)體則執(zhí)行 # 如果條件為假,那么循環(huán)體不執(zhí)行現(xiàn)實中的實例(聽歌)
while True: print('癢') print('社會搖') print('喜洋洋') print('我要這鐵棒有何用')
while循環(huán)的執(zhí)行體會一直循環(huán)執(zhí)行,那么內(nèi)部是如何執(zhí)行的呢?

這樣大家就能清楚的明白while到底是如何進(jìn)行循環(huán)的了,那么問題也來了:我們?nèi)绻K止這個循環(huán)如何終止呢?
終止循環(huán)的幾種方式:
- 改變條件(根據(jù)上面的流程,只要改變條件,就會終止循環(huán))。
- 關(guān)鍵字:break。
- 調(diào)用系統(tǒng)命令:quit(),exit() 后面會講到,不建議大家使用。
- 關(guān)鍵字:continue(終止本次循環(huán))。
利用改變條件,終止循環(huán)。給大家引入標(biāo)志位的概念。
flag = True
while flag:
print('癢')
print('社會搖')
print('喜洋洋')
flag = False
print('我要這鐵棒有何用')
count = 1 flag = True while flag: print(count) count = count + 1 if count == 101: flag = False
n = 100 sum = 0 counter = 1 while counter <= n: sum = sum + counter counter += 1 print("1 到 %d 之和為: %d" % (n,sum)) 執(zhí)行結(jié)果如下: 1 到 100 之和為: 5050
while ... else ..
與其它語言else 一般只與if 搭配不同,在Python 中還有個while ...else 語句
while 后面的else 作用是指,當(dāng)while 循環(huán)正常執(zhí)行完,中間沒有被break 中止的話,就會執(zhí)行else后面的語句
count = 0 while count < 5: print (count, " 小于 5") count = count + 1 else: print (count, " 大于或等于 5") 執(zhí)行以上腳本,輸出結(jié)果如下: 0 小于 5 1 小于 5 2 小于 5 3 小于 5 4 小于 5 5 大于或等于 5
for循環(huán)語句
for循環(huán):適合于循環(huán)次數(shù)是已知的。最好選擇for循環(huán)
它是Python中最強(qiáng)大的循環(huán)結(jié)構(gòu)。它可以遍歷序列成員,可以用在列表解析和生成器表達(dá)式中,它會自動地調(diào)用迭代器的next()方法,捕獲StopIteration異常并結(jié)束循環(huán)(所有這一切都是在內(nèi)部發(fā)生的)
(1)一般語法
for循環(huán)會訪問一個可迭代對象(例如序列或是迭代器)中的所有元素,,并在所有條目都處理過后結(jié)束循環(huán)。它的語法如下:
for iter_var in iterable: suite_to_repeat
每次循環(huán), iter_var迭代變量被設(shè)置為可迭代對象(序列、迭代器或者是其他支持迭代的對象)的當(dāng)前元素,提供給suite_to_repeat 語句塊使用
(2)用于序列類型
for循環(huán)可以迭代不同的序列對象,像字符串、 列表、以及元組。
迭代序列有三種基本方法:
通過序列項迭代
>>> nameList = ['Walter', "Nicole", 'Steven', 'Henry'] >>> for eachName in nameList: ... print eachName, "Lim" ... Walter Lim Nicole Lim Steven Lim Henry Lim
迭代一個列表.。每次迭代,eacgName變量都被設(shè)置為列表中特定某個元素。
通過序列索引迭代
>>> nameList = ['Cathy', "Terry", 'Joe', 'Heather','Lucy'] >>> for nameIndex in range(len(nameList)): ... print "Liu,", nameList[nameIndex] ... Liu, Cathy Liu, Terry Liu, Joe Liu, Heather Liu, Lucy
沒有迭代元素, 而是通過列表的索引迭代。但通過直接迭代序列要比索引迭代快。
使用項和索引迭代
>>> nameList = ['Donn', 'Shirley', 'Ben', 'Janice','David', 'Yen', 'Wendy'] >>> for i, eachLee in enumerate(nameList): ... print "%d %s Lee" % (i+1, eachLee) ... 1 Donn Lee 2 Shirley Lee 3 Ben Lee 4 Janice Lee 5 David Lee 6 Yen Lee 7 Wendy Lee
(3)用于迭代器類型
用for循環(huán)訪問迭代器和訪問序列的方法差不多,迭代器并不代表循環(huán)條目的集合,迭代器對象有一個next()方法, 調(diào)用后返回下一個條目。 所有條目迭代完后, 迭代器引發(fā)一個StopIteration異常告訴程序循環(huán)結(jié)束,for語句在內(nèi)部調(diào)用next()并捕獲異常。
使用迭代器做 for 循環(huán)的代碼與使用序列條目幾乎完全相同。事實上在大多情況下,無法分辨出迭代的是一個序列還是迭代器,因此遍歷一個迭代器時,實際上可能指的是要遍歷一個序列、迭代器或是一個支持迭代的對象(它有 next()方法)。
(4)range()內(nèi)建函數(shù)
內(nèi)建函數(shù)range()可以把類似foreach的for循環(huán)變成你更加熟悉的語句。
Python提供了兩種不同的方法來調(diào)用range() ,完整語法要求提供兩個或三個整數(shù)參數(shù):range(start, end,
step =1),range()會返回一個包含所有k的列表,其中start <= k < end,從start到end ,k每次遞增
ste,step不可以為零,否則將發(fā)生錯誤。
>>> range(3, 7) [3, 4, 5, 6] >>> for eachVal in range(2, 19, 3): ... print "value is:", eachVal ... value is: 2 value is: 5 value is: 8 value is: 11 value is: 14 value is: 17
range() 還有兩種簡略的語法格式:range(end)和range(start, end)。 start 默認(rèn)為0, step默認(rèn)為1。
(6)與序列相關(guān)的內(nèi)建函數(shù)
序列相關(guān)函數(shù):sorted()、 reversed()、enumerate()和zip(),稱為“序列相關(guān)”是因為其中兩個函數(shù)(sorted() 和 zip())返回一個序列(列表),而另外兩個函數(shù)(reversed() 和 enumerate())返回迭代器(類似序列)。
break和continue語句
相關(guān)介紹
Python中的break語句可以結(jié)束當(dāng)前循環(huán)然后跳轉(zhuǎn)到下條語句,類似C中的break。常用在當(dāng)某個外部條件被觸發(fā)(一般通過 if 語句檢查),需要立即從循環(huán)中退出時.。break 語句可以用在 while 和 for 循環(huán)中。 Python里的continue語句和其他高級語言中的傳統(tǒng)continue并沒有什么不同,它可以被用在while和for循環(huán)里。 while循環(huán)是條件 性的,而 for 循環(huán)是迭代的,所以continue在開始下一次循環(huán)前要滿足一些先決條件,否則循環(huán)會正常結(jié)束。 程序中當(dāng)遇到 continue 語句時, 程序會終止當(dāng)前循環(huán),并忽略剩余的語句,然后回到循環(huán)的頂端。在開始下一次迭代前,如果是條件循環(huán),我們將驗證條件表達(dá)式。如果是迭代循環(huán),將驗證是否還有元素可以迭代。只有在驗證成功的情況下,才會開始下一次迭代
break語句
Python break語句,就像在C語言中,打破了最小封閉for或while循環(huán)。
break語句用來終止循環(huán)語句,即循環(huán)條件沒有False條件或者序列還沒被完全遞歸完,也會停止執(zhí)行循環(huán)語句。
break語句用在while和for循環(huán)中。
如果您使用嵌套循環(huán),break語句將停止執(zhí)行最深層的循環(huán),并開始執(zhí)行下一行代碼。
for letter in 'Python': # 第一個實例 if letter == 'h': break print '當(dāng)前字母 :', letter var = 10 # 第二個實例 while var > 0: print '當(dāng)前變量值 :', var var = var -1 if var == 5: # 當(dāng)變量 var 等于 5 時退出循環(huán) break print "Good bye!" 結(jié)果 當(dāng)前字母 : P 當(dāng)前字母 : y 當(dāng)前字母 : t 當(dāng)前變量值 : 10 當(dāng)前變量值 : 9 當(dāng)前變量值 : 8 當(dāng)前變量值 : 7 當(dāng)前變量值 : 6 Good bye!
continue語句
Python continue 語句跳出本次循環(huán),而break跳出整個循環(huán)。
continue 語句用來告訴Python跳過當(dāng)前循環(huán)的剩余語句,然后繼續(xù)進(jìn)行下一輪循環(huán)。
continue語句用在while和for循環(huán)中。
for letter in 'Python': # 第一個實例 if letter == 'h': continue print '當(dāng)前字母 :', letter var = 10 # 第二個實例 while var > 0: var = var -1 if var == 5: continue print '當(dāng)前變量值 :', var print "Good bye!"
continue 語句是一個刪除的效果,他的存在是為了刪除滿足循環(huán)條件下的某些不需要的成分:
#!/usr/bin/python # -*- coding: UTF-8 -*- var = 10 while var > 0: var = var -1 if var == 5 or var == 8: continue print '當(dāng)前值 :', var print "Good bye!"
練習(xí)實例
我們想只打印0-10之間的奇數(shù),可以用continue語句跳過某些循環(huán): #!/usr/bin/python # -*- coding: UTF-8 -*- n = 0 while n < 10: n = n + 1 if n % 2 == 0: # 如果n是偶數(shù),執(zhí)行continue語句 continue # continue語句會直接繼續(xù)下一輪循環(huán),后續(xù)的print()語句不會執(zhí)行 print(n)
循環(huán)嵌套
Python 語言允許在一個循環(huán)體里面嵌入另一個循環(huán)。
Python for 循環(huán)嵌套語法:
for iterating_var in sequence: for iterating_var in sequence: statements(s) statements(s)
Python while 循環(huán)嵌套語法:
while expression: while expression: statement(s) statement(s)
你可以在循環(huán)體內(nèi)嵌入其他的循環(huán)體,如在while循環(huán)中可以嵌入for循環(huán), 反之,你可以在for循環(huán)中嵌入while循環(huán)。
以下實例使用了嵌套循環(huán)輸出2~100之間的素數(shù): #!/usr/bin/python # -*- coding: UTF-8 -*- i = 2 while(i < 100): j = 2 while(j <= (i/j)): if not(i%j): break j = j + 1 if (j > i/j) : print i, " 是素數(shù)" i = i + 1 print "Good bye!" 結(jié)果 2 是素數(shù) 3 是素數(shù) 5 是素數(shù) 7 是素數(shù) 11 是素數(shù) 13 是素數(shù) 17 是素數(shù) 19 是素數(shù) 23 是素數(shù) 29 是素數(shù) 31 是素數(shù) 37 是素數(shù) 41 是素數(shù) 43 是素數(shù) 47 是素數(shù) 53 是素數(shù) 59 是素數(shù) 61 是素數(shù) 67 是素數(shù) 71 是素數(shù) 73 是素數(shù) 79 是素數(shù) 83 是素數(shù) 89 是素數(shù) 97 是素數(shù) Good bye!
結(jié)合使用了while、for、if、break以及continue,來驗證用戶輸入。用戶有三次機(jī)會來輸入正確的密碼,阻止用戶猜測密碼。
#!/usr/bin/env python valid = False count = 3 passwdList=('abc',) while count > 0 and valid == False: input = raw_input("enter password:").strip() # check for valid passwd for eachPasswd in passwdList: if input == eachPasswd: valid = True break if not valid: # (or valid == 0) print "invalid input" count -= 1 continue else: break
while和for循環(huán)的區(qū)別:
for循環(huán)用于已經(jīng)知道循環(huán)的次數(shù)或者循環(huán)遍歷可迭代的數(shù)據(jù)類型例如:列表 字典等
while循環(huán)用于不知道具體的循環(huán)次數(shù)的情況或者無限循環(huán)
posted on 2017-07-18 20:25 WorthWaitingFor 閱讀(413) 評論(0) 收藏 舉報
浙公網(wǎng)安備 33010602011771號