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() 函數執行完。最後單步執行至入口函數結束。

Tags: