目錄:
一、while迴圈語句
二、for迴圈語句
三、range()
四、break語句
五、continue語句
六、課時09課後習題及答案
*********************
一、while迴圈語句
*********************
語法: while 條件: 迴圈體
Python的while迴圈跟if條件分支類似,在條件為真的情況下,執行一段程式碼,不同的是,只要條件為真,while迴圈會一直重複執行那段程式碼,把這段程式碼稱為迴圈體。
******************
二、for迴圈語句
******************
雖然說Python是由C語言編寫而來的,但是Ta的for迴圈跟C語言的for迴圈不太一樣,Python的for迴圈顯得更為智慧和強大!這主要表現在它會自動呼叫迭代器的next()方法,會自動捕獲StopIteration異常並結束迴圈,所以這更像是一個具有現代化氣質的for迴圈結構。
語法: for 目標 in 表示式: 迴圈體
>>> favourite = "dczww" >>> for each in favourite: print(each,end=" ") d c z w w
**************
三、range()
**************
for迴圈還有另外一個小夥伴 range()內建函式。常與for迴圈混跡於各種計數迴圈之間。
語法:range( [strat,] stop[, step=1] ) —這個BIF有三個引數,其中用中括號括起來的兩個表示這兩個引數是可選的。 —step=1表示第三個引數的值預設值是1。 —range這個BIF的作用是生成一個從start引數的值開始到stop引數的值結束的數字序列。
只傳遞一個引數的range(),例如range(5),它會將一個引數預設設定為0,生成0~5的所有數字。(注:包括0但不包括5)
>>> for i in range(5): print(i)
0 1 2 3 4
傳遞兩個引數的range():
>>> for i in range(2,9): print(i) 2 3 4 5 6 7 8
傳遞三個引數的range():
>>> for i in range(1,10,2): print(i) 1 3 5 7 9
range()內建函式可以在某些情況下代替while迴圈i += 1啥的。
*****************
四、break語句
*****************
break語句的作用是終止當前迴圈,跳出迴圈體。舉個例子:
bingo = '小甲魚是帥哥' answer = input('請輸入小甲魚最想聽的一句話:') while True: if answer == bingo: break answer = input('抱歉,錯了,請重新輸入(答案正確才能退出遊戲):') print('哎喲,帥哦~') print('您真是小甲魚肚子裡的蛔蟲啊^_^')
或者這樣寫:
love = "zww" print("請問DC喜歡誰:",end=" ") while True: answer = input() if answer == love: break print("請重新回答(回答對了才能退出哦):",end="") print("蟹蟹")
********************
五、continue語句
********************
continue語句的作用是終止本輪迴圈並開始下一輪迴圈(這裡要注意的是:在開始下一輪迴圈之前,會先測試迴圈條件)舉個例子:
for i in range(10): if i%2 != 0: print(i,end=" ") continue i += 2 print(i,end=" ")
列印出的結果為:2 1 4 3 6 5 8 7 10 9
感覺在這裡continue代替了 else,因為也可以這樣寫:
>>> for i in range(10): if i%2 != 0: print(i,end=" ") else: i += 2 print(i,end=" ")
結果是一樣一樣的。懂我的意思了嗎?
*******************************
六、課時09課後習題及答案
*******************************
測試題:
for i in range(0, 10, 2): print('I Love FishC')
for i in 5: print('I Love FishC')
3. 請談下你對列表的理解?
4. 請問 range(10) 生成哪些數?
5. 目測以下程式會列印什麼?
1 while True: 2 while True: 3 break 4 print(1) 5 print(2) 6 break 7 print(3)
6. 什麼情況下我們要使迴圈永遠為真?
7. 【學會提高程式碼的效率】你的覺得以下程式碼效率方面怎樣?有沒有辦法可以大幅度改進(仍然使用while)?i = 0 string = 'ILoveFishC.com' while i < len(string)): print(i) i += 1
動動手:
0. 設計一個驗證使用者密碼程式,使用者只有三次機會輸入錯誤,不過如果使用者輸入的內容中包含"*"則不計算在內。
1. 編寫一個程式,求 100~999 之間的所有水仙花數。
如果一個 3 位數等於其各位數字的立方和,則稱這個數為水仙花數。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個水仙花數。
2. 三色球問題
有紅、黃、藍三種顏色的求,其中紅球 3 個,黃球 3 個,綠球 6 個。先將這 12 個球混合放在一個盒子中,從中任意摸出 8 個球,程式設計計算摸出球的各種顏色搭配。
答案:
測試題答案:
0. 下面的迴圈會列印多少次"I Love FishC"?
for i in range(0, 10, 2): print('I Love FishC')
5 次,因為從 0 開始,到 10 結束,步進為 2。
1.
下面的迴圈會列印多少次"I Love
FishC"?
for i in 5: print('I Love FishC')
會報錯,上節課的課後習題我們提到了 in 是“成員資格運算子”,而不是像 C 語言那樣去使用 for 語法。Python 的 for 更像指令碼語言的 foreach。
2.
回顧一下 break 和 continue 在迴圈中起到的作用
break語句的作用是終止當前迴圈,跳出迴圈體。
continue語句的作用是終止本輪迴圈並開始下一輪迴圈(這裡要注意的是:在開始下一輪迴圈之前,會先測試迴圈條件)。
3.
請談下你對列表的理解
嗯,有些知識點需要自己總結才能加固,下節課小甲魚將跟大家暢談一個打了激素的陣列:列表,不容錯過哦^_^
4.
請問 range(10) 生成哪些數?
會生成 range(0, 10),list(range(0, 10)) 轉換成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意不包含 10 哦。
5.
目測以下程式會列印什麼?
while True: while True: break print(1) print(2) break
print(3)
會列印:
2
3
因為 break 只能跳出一層迴圈,記住咯!
6.
什麼情況下我們要使迴圈永遠為真?
while Ture:
迴圈體
同樣用於遊戲實現,因為遊戲只要執行著,就需要時刻接收使用者輸入,因此使用永遠為真確保遊戲“線上”。作業系統也是同樣的道理,時刻待命,作業系統永遠為真的這個迴圈叫做訊息迴圈。另外,許多通訊伺服器的客戶端/伺服器系統也是通過這樣的原理來工作的。
所以永遠為“真”雖然是“死迴圈”,但不一定是壞事,再說了,我們可以隨時用 break 來跳出迴圈!
7.
【學會提高程式碼的效率】你的覺得以下程式碼效率方面怎樣?有沒有辦法可以大幅度改進(仍然使用while)?
i = 0 string = 'ILoveFishC.com' while i < len(string)): print(i) i += 1
這段程式碼之所以“效率比較低”是因為每次迴圈都需要呼叫一次 len() 函式(我們還沒有學到函式的概念,小甲魚這裡為零基礎的朋友形象的解釋下:就像你打遊戲打得正HIGH的時候,老媽讓你去買鹽......你有兩種選擇,一次買一包,一天去買五次,或者一次性買五包回來,老媽要就直接給她。)
i = 0 string = 'ILoveFishC.com' length = len(string) while i < length: print(i) i += 1
動動手答案:
0. 設計一個驗證使用者密碼程式,使用者只有三次機會輸入錯誤,不過如果使用者輸入的內容中包含"*"則不計算在內。
我們先根據執行截圖進行程式的分析:1.在開始和使用者輸入錯誤的情況下,都有一個“請輸入密碼”的字樣,且都在說明文字的末尾,證明“請輸入密碼”這段文字可重複應用,可以在while迴圈裡,用continue語句實現。2.根據題目要求,如果使用者輸入的內容中包含"*"則不計算在可輸入錯誤的三次機會內,我們想到的是每次輸入後,次數減去一,在含*語句的判斷後,列印出的語句 次數加1 就實現了要求。但感覺複雜了,這裡其實依舊可以用continue語句實現,終止本次迴圈,進入下一次迴圈,次數減一的語句放在continue後面就好。3.這裡肯定要用到條件分支語句,先判斷輸入正確,還是輸入錯誤,都可以,提議像小甲魚一樣先易後難,先判斷輸入正確,這樣程式看起來更加的簡潔,也符合通常的邏輯。
count = 3 password = 'FishC.com' while count: passwd = input('請輸入密碼:') if passwd == password: print('密碼正確,進入程式......') break elif '*' in passwd: print('密碼中不能含有"*"號!您還有', count, '次機會!', end=' ') continue else: print('密碼輸入錯誤!您還有', count-1, '次機會!', end=' ') count -= 1
或者這樣寫:
password = "FishC.com" times = 3 passwd = 0 while passwd != password and times:#這裡大可改成while times: 只是要掌握這種用法 前面提到過 passwd = input("請輸入密碼:") if '*' in passwd: print("密碼中不能含有*號!您還有"+str(times)+"機會",end=" ") continue elif passwd != password: print("密碼輸入錯誤!您還有"+ str(times-1) +"機會",end=" ") else: print("密碼正確,進入程式...") times -= 1
這裡有個關於字串的問題需要提出:
times=3
一、print("密碼中不能含有*號!您還有"+times+"機會",end=" ")
二、print("密碼中不能含有*號!您還有"+str(times)+"機會",end=" ")
三、print("密碼中不能含有*號!您還有",times,"機會",end=" ")
第一種報錯,第二三種能執行。能解釋下其中的原理嗎?第二三種有何區別?
答:1.字串和整型不能相加。
2.把times轉換成字串再拼接。
3.print可以有多個引數,引數可以有任何型別(假如不可列印的話就輸出物件,最後這些引數都會被轉換成字串), print會把轉換後的東西拼接在一起的再輸出。
1. 編寫一個程式,求 100~999 之間的所有水仙花數。
如果一個 3 位數等於其各位數字的立方和,則稱這個數為水仙花數。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個水仙花數。
for i in range(100, 1000): sum = 0 temp = i while temp: sum = sum + (temp%10) ** 3 temp //= 10 # 注意這裡要使用地板除哦~ if sum == i: print(i)
2. 三色球問題
有紅、黃、藍三種顏色的求,其中紅球 3 個,黃球 3 個,綠球 6 個。先將這 12 個球混合放在一個盒子中,從中任意摸出 8 個球,程式設計計算摸出球的各種顏色搭配。
print('red\tyellow\tblue') for red in range(0, 4): for yellow in range(0, 4): for green in range(2, 7): if red + yellow + green == 8: # 注意,下邊不是字串拼接,因此不用“+”哦~ print(red, '\t', yellow, '\t', green)
註釋:range(2, 7)是產生[2, 3, 4, 5, 6]5個數,綠球不能是1個,因為如果綠球是1個的話,紅球 + 黃球需要有7個才能符合題意,而紅球和黃球每種只有3個,因此是range(2, 7)。