iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
AI & Data

30天帶你從零基礎到Python爬蟲系列 第 8

[Day8] 讓一件事一直重複執行- Python迴圈

  • 分享至 

  • xImage
  •  

迴圈這個詞對初學者可能很陌生,但大家可以回想一下學生時期,被老師罰抄題目十遍,是不是很多人會抄完一遍就拿去影印十份呢?這個其實就跟迴圈很像喔。
那迴圈是由三個條件構成的:

  1. 初始條件:最一開始的初始化(罰寫次數 = 0)
  2. 判斷條件:印每一份前要想一下總共要印幾份(罰寫次數 < 10)
  3. 更新條件:每次印完把已印份數增加(罰寫次數 = 罰寫次數 + 1)

while-loops

今天要講的是while迴圈,它的語法如下:

初始條件
While 判斷條件
	statement
	更新條件

直接給一個例子可能更清楚。

i = 0  # 一開始什麼都還沒寫
while i < 10:  # 總共要印十份罰抄
    print("i")
    i = i + 1  # 印完一份就+1

講到while就不得不介紹一下布林值 (Boolean),它只有兩種值分別是 True & False,不要看它長得怪怪的,其實和int, sting一樣都是一種資料型態,也就是說一樣可以被指配到變數中。那為什麼要在這裡特別提到呢?因為在迴圈中判斷的條件其實就是布林值,像是i<10就是判斷i是否<10,是就是True,否就是False。當你不確定迴圈到底要執行幾次的時候布林值就很好用了,為了讓迴圈一直跑就必須讓條件一直是True的狀態,像是你可以設定while 5>2這個條件永遠是True,但就很多餘乾脆就用while True了呀,小知識一定要學起來!

for-loops

Python除了while以外還有另外一種for迴圈,語法如下:

For item in iterable:
	statement

在in後面的iterable就是迴圈會讀取的目標物,它可以是字串(String)、串列(List)、元組(Tuple)、字典(Dictionary)或是range數列,一次讀取其中的一個元素,然後用item(可以自己取名)來存取這個元素,來進行區塊中的敘述。

range 數列

這是一個很常用在for迴圈內的方法,它可以幫忙產生出數列,語法如下:

range(start, stop, step)
range(10)  # 預設從0開始,產生到10的前面一個數字
# 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
range(1, 10)  # 從1開始,產生到10的前面一個數字
# 1, 2, 3, 4, 5, 6, 7, 8, 9
range(1, 10, 2)  # 從1開始,產生到10的前面一個數字,每一次都+2
# 1, 3, 5, 7, 9

一樣可以用在罰寫例子上。

for i in range(10):  # 總共要抄十次
	print("XXX")
# 這裡就不需要再另外i = i + 1,for-loops會繼續執行下一次的迴圈

控制迴圈

break

可以直接中斷迴圈,通常都跟if判斷式搭配使用,當達到某個目標便中斷此回圈。
像是本來老師說要抄10次罰寫,但一週交5遍就好,所以只需要跑五次。

for i in range(10):  # 總共要抄10次
	if i == 5:  # 如果i=5,也就是第6次便直接跳出迴圈不再執行
		break
	print("i")

continue

和break指令一樣都是常跟if判斷式搭配使用,不同的是,break會跳出整個迴圈,continue只是跳過當次不執行,還是會繼續讀取下一次的元素。
像是本來老師說要抄10次罰寫,但他討厭6這個數字,所以不收第6次的罰寫(真是奇怪的理由)。

for i in range(10):
	if i == 5:
		continue
	print("i")

迴圈 SOP

  1. 有群集型態就用for-loops
  2. 有固定次數用for i in range(次數)
    但如果次數太大,RAM會爆炸,建議使用while(只儲存一個i的值)
  3. 不固定次數:用while True + break

以上就是Python的兩種迴圈介紹,以及常搭配使用的range和兩種方法,你更喜歡使用哪種呢?


上一篇
[Day7] 亂數模組小試身手 - 剪刀石頭布 & 棒打老虎雞吃蟲
下一篇
[Day9] 迴圈小試身手 - 繪製星號三角形
系列文
30天帶你從零基礎到Python爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言