Python03 if、while、for
- 2020 年 1 月 11 日
- 筆記
標籤(空格分隔): 程式語言 python
1.if
number = 100 guess_number = int(input('guess number:')) if guess_number == number: print ('Bingo') elif guess_number > number: print ('think smaller') else: print ('think bigger!')滿足if的條件就print ('Bingo'),不滿足則跳過; 滿足elif的條件就......,不滿足就跳過; 如果if和elif的條件都不滿足,就執行else下面的程式碼。 圖中程式碼要注意int(input)這裡,針對希望寫入數字時,就要使用int給轉義成數字格式,否則默認input是字元串,執行程式碼時會報錯。

滿足else的執行結果

滿足elif的執行結果

滿足if的執行結果
menu = 'A','C','D' for i in menu: if i == 'A' or 'C': print ('aaa') else: print ('bbb')
if i == 'A' or 'C' 這個從表面意思看可能的判斷如果i等於A或者C的話,就print aaa,但其實不是這樣的,這個C的部位即使不是C,是任意數據都表示為數字1(True),所以實際意思是當 i 等於A或True就會print aaa,C這個部位存在任意數據就相當於一直為True,所以可以看到執行結果就是一直print aaa
menu = 'A','C','D' for i in menu: if i == 'A' or 'any': print ('aaa') else: print ('bbb')
可以看到or 後面是任何數據類型,都為True。
menu = 'A','C','D' for i in menu: if i == 'A' or i == 'any': print ('aaa') else: print ('bbb')if i == 'A' or i == 'any' 這表示相當於判斷等於A或any就print aaa

menu = 'A','C','D' for i in menu: if i == ('A' or 'any'): print ('aaa') else: print ('bbb')加括弧的方式來寫也可以。

2.while
2.1 無線循環
count = 0 while True: print ('count',count) count += 1當一直為True時,也就是一直為真,就會執行count +=1(相當於count = count +1),每加一次1就賦值給count,並列印出來。

只是一瞬間數字就加到了240529,這裡只能強制停止循環,否則會一直加下去。
2.2 break
umber = 100 while True: guess_number = int(input('guess number:')) if guess_number == number: print ('Bingo') break elif guess_number > number: print ('think smaller!') else: print ('think bigger!')If條件成立的話就print,然後break會跳出while循環; 否則就一直while循環

2.3 設置常事限制次數
number = 100 count = 0 while True: if count ==3: print ('time out') break guess_number = int(input('guess number:')) if guess_number == number: print ('Bingo') break elif guess_number > number: print ('think smaller!') else: print ('think bigger!') count += 1我們通過一個變數count來進行計數,初始值為0 嘗試一次,就執行一次count +=1,當滿足count等於3時(限制次數為3),就通過break結束while循環。
2.4 while條件修改
number = 100 count = 0 while count<3: guess_number = int(input('guess number:')) if guess_number == number: print ('Bingo') break elif guess_number > number: print ('think smaller!') else: print ('think bigger!') count += 1 else: print ('time out!')刪除標題3中的if count == 3這塊語句,直接在while中定義,當count<3時,就執行while語句,這樣就減少並優化了程式碼,執行結果是一樣的。

2.5 while與else,選擇性退出循環
number = 100 count = 0 while count<3: guess_number = int(input('guess number:')) if guess_number == number: print ('Bingo') break elif guess_number > number: print ('think smaller!') else: print ('think bigger!') count += 1 if count ==3: confirm = input('time limited,continue or not...please choose y or n:') if confirm != 'n': count = 0 else: print ('time out!')當while的條件成立時,就運行while下面的子程式碼; 如果while的條件不成立,就運行最下面else的程式碼。 如果break就不會執行下面任何程式碼了,包括else。 同時程式碼中還設立了選擇性退出的語句,如果if count ==3,就使用y和n來進行選擇是否繼續循環,只要輸入的不是n,就繼續循環; 繼續的話就將count清0,這樣while循環條件繼續成立就可以繼續循環。 如果選擇n的話,因為count已經等於3了,不滿足while條件,就不會再循環了,就會執行下面的else程式碼。

可以看到選擇y後,還能繼續去guess,選擇了n就執行了下面的else程式碼;
2.6 For循環
- 循環數字範圍
for i in range(10): print ('loop:',i)
For循環,每循環一次就將當前循環的值賦值給i。 Range就是範圍的意思,根據括弧中的10,就是0到9,從0開始,一共10個數字。 i是一個名稱,in會將0到9循環的賦值給i print會將每一個輪詢的內容列印出來,直到輪詢結束。
- for替代while
number = 100 count = 0 for i in range(3): guess_number = int(input('guess number:')) if guess_number == number: print ('Bingo') break elif guess_number > number: print ('think smaller!') else: print ('think bigger!') else: print ('time out!')最多能for循環3次,如果for循環完成就會執行else程式碼; 如果沒有執行完成for循環,就break,下面就不會執行else程式碼了。
- 步長
for i in range(0,10,2): print ('loop:',i)0,10表示定義從0到10這個範圍數字,然後對這個範圍進行循環; 2表示步長,也就是每隔2個數字循環一次。

執行結果為每隔2個循環一次,沒有循環到10,是因為最後一個數字不進行循環,也就是說實際數字範圍是到9,不滿足步長2的循環,所以最終只循環到了8。
- pycharm的斷點測試

從圖中可以看到行數的右邊,程式碼的左邊默認是空的,沒有任何標記。

通過使用滑鼠左鍵在每一行標的右邊一次進行點擊,點擊後就會出現紅點。

在工具欄中找到debug圖標,然後點擊(在當前file文件右鍵中也可以找到debug)

點擊debug後,被標記斷點的地方,顏色就會改變,可以看到除了121行,其他行都是紅色,121行之所以顏色不同,是表示當前程式碼卡在121行,該行程式碼還沒有執行。

點擊debug以後,在pycharm工具下方會彈出該窗口 注意圖中圈起來的部分,一個是箭頭,一個是Debugger,當前我們處於Debugger窗口 點擊一下箭頭表示執行當前程式碼行(121行)

點擊箭頭後可以看到121行,程式碼右邊多處來一個資訊,i:0表示當前i等於0的意思。 然後第122行程式碼顏色又變了,表示當前程式碼卡在第二行,還沒有執行。 所以debug功能是非常強大的,可以通過該方式一步一步的去查看我們的程式碼每步是如何執行的,來判斷我們的程式碼是否正確執行; debug是一個非常好用的排錯功能。

從pycharm下面的Debugger窗口也可以看到執行第一步後的一些資訊,可以看到i={int}0,表示當前的i等於0,i屬於int格式。

切換到Console窗口,然後不斷的去點擊箭頭來觀察程式碼執行的每一步的結果,這樣就可以判斷執行程式碼的每一步是否正確。
- continue
for i in range(0,10): if i <3: print ('loop:',i) else: continue print ('test')continue用來跳出本次循環,執行下一次循環;也就是說執行continue後,下面的程式碼就不會再執行,根據循環執行下一次循環。

設立if條件<3時,列印一次 i 和test,所以當 i 等於3時,if條件就不滿足了,就會執行else中的continue,接下來的循環就不會不會列印 i 對應的值,也不會列印test了。
- 嵌套循環
for i in range(0,10): if i <3: print ('外循環---',i) for m in range(10): print ('--',m)
每一個大循環中會有10個小循環 10*10,一共循環了100次
for i in range(0,10): if i <3: print ('外循環---',i) for m in range(10): print ('--',m) if m >= 3: break設立內循環停止循環的條件,當大於等於3時,就停止循環。


debug的箭頭的含義: step into:單步執行,遇到子函數就進入並且繼續單步執行(簡而言之,進入子函數); step over:在單步執行時,在函數內遇到子函數時不會進入子函數內單步執行,而是將子函數整個執行完再停止,也就是把子函數整個作為一步。有一點,經過我們簡單的調試,在不存在子函數的情況下是和step into效果一樣的(簡而言之,越過子函數,但子函數會執行)。 step out:當單步執行到子函數內時,用step out就可以執行完子函數餘下部分,並返回到上一層函數。
下面以 pycharm IDE 為示例作簡要說明:

點擊 pycharm 右上部爬蟲按鈕進入調試狀態,程式在第14行斷點處停止,按 F5(step into)進入 add() 函數,按 F7(step out) 執行完add()函數餘下部分,返回入口函數 debug_test() 繼續執行,按 F6(step over) 直接將 divide() 函數執行完。最後單步執行至入口函數結束。