【Day 04】- Python 条件判断与回圈

前情提要

在前一篇文章内容中带大家跑过一次 Python 中的基础操作与常见的资料型态的使用。也提供了大家一些额外的使用方法,若有自信的读者能再去 Day3 看看欧。

开始之前

Day 3 带大家使用了基本的资料结构跟对应的操作,但如果要重复的操作它们,总不可能就将那个操作重复写很多行。如果说现在你的程序会走直线了,今天来带各位条件判断及回圈,让你的爬虫程序多了岔路跟回路。

若读者学过其它类 C 的语言,都会知道它们都是以大括号来做程序区块(block)分隔。在 python 中,是以缩排(indentation)来区分程序区块(block),而缩排大约会使用 2~6 个空白,通常是 4 个空白,读者也能按下键盘上的 Tab 来快速做出类似 4 个空白的效果(在 Vscode 预设下)。

条件判断

python 中的条件判断十分易懂,若读者有撰写过其他语言的条件判断,可能会发现 else if 的语法在 python 下是 elif 。 在多种语言的条件判断大部分都是 if-else 同时出现的,

  • if
'''
if 条件:
	符合条件後该做的事
'''

temperature = 39
if temperature >= 37.5:
	print('发烧')
  • if-else
'''
if 条件:
	符合条件後该做的事
else:
	不符合条件该做的事
'''

temperature = 36
if temperature >= 37.5:
	print('发烧')
else:
	print('正常')
  • if-elif-else
'''
if 条件1:
	符合 条件1 後该做的事
elif 条件2:
	符合 条件2 後该做的事
else:
	不符合 条件1 、 条件2 该做的事
'''

temperature = 53
if temperature >= 38:
	print('发烧')
elif 38 > temperature >= 37.5:
	print('轻微发烧')
else:
	print('正常')

回圈

  • for loop

Python 中的 for loop 常会以 in 这个关键字同时出现。

range(start, stop[, step]) 这个函式会回传一个可迭代对象,常与 for-loop 一同使用。

  • start 计数将从 start 开始,若不传入则预设为 0。 ex. range(5) 会是从 0 到 4
  • stop 计数直到大於等於 stop,不包括大於等於 stop 的那个数。 ex. range(0, 4) 会是从 0 到 3
  • step 每次加上多少。 ex. range(0, 5, 2) 会是 0 2 4
'''
for 自订变数 in 序列:
	该做的事
'''
seq = ['OwO', 'OAO', 'TwT', 'Orz']
for x in seq: #这边代表每次照顺序拿出 seq 这个串列的元素并赋予给 x
	print(x)
'''
OwO
OAO
TwT
Orz
'''

for i in range(len(seq)): #这边 len(seq) 会回传 seq 这个 list 的长度
	print(i, seq[i])
'''
0 OwO
1 OAO
2 TwT
3 Orz
'''
  • while loop
'''
while 若满足条件则继续:
	该做的事
'''

counter = 0
while counter < 5: # 将会重复执行直到 counter < 5 不成立,也就是当 counter = 5 那一刻
	counter += 1
	print(counter)
'''
1
2
3
4
5
'''

#请注意没有设定好结束条件的 while-loop 是危险的,以下为错误示范
while True:  # 每次输出完 SoS 後 while 的条件都会符合,也就会形成无限回圈,直到 Python crash
	print('SoS')
'''
SoS
SoS
SoS
...
'''

回圈控制

若想在回圈执行到一半时,不做剩下要做的事并进到下一轮或是强制跳出回圈,会需要使用到 continuebreak 指令。

  • continue

跳出本次回圈,继续进行下一轮回圈

for i in range(10):
	if i % 2 == 0:  # i 对 2 取余数若为 0 (偶数) 则 continue
		continue      # 不执行後续代码,跳到下一轮回圈
	print(i, end = ' ')

#Output: 1 3 5 7 9
  • break

强制中止并跳出离这个 break 最近的回圈

cnt = 0
while True:
	if cnt > 7:   #若 i > 7
		break     #不执行後续代码,并强制跳出回圈
	cnt += 1
	print(i, end = ' ')

#Output: 1 2 3 4 5 6 7 8
  • pass

维持现状。

读者可能会疑惑若维持现状,那就不写就好,不理解 pass 存在的必要性。先前提到 Python 中的程序区块(block) 是以缩排来定的,因此我们能想像若有一个 if 下方若未写任何代码将无法判断这是一个程序区块。实际上程序会报 IndentationError: expected an indented block 错误。

pass 常用来填充还没想要实作功能的函式、条件判断或回圈等等,可以把它想成 #TODO 的概念。

for i in range(5):
	if i % 2 == 0:
		pass # 尚未撰写功能
	print(i)

'''
0 
1 
2 
3 
4 
'''
#因尚未撰写实际功能,因此未有任何条件判断效果

else in a loop

与其他语言不同的, python 能在回圈後放入 else ,代表着若回圈正常执行完(没有遭到 break 强制中止跳出)就会执行到 else 下方的语句,换句话说就是当不满足回圈的运行条件时会执行到 else。

for i in range(5):
	if i % 2 == 0:
		continue
	print(i)
else:
	print('结束印出偶数回圈')

'''
1
3
结束印出偶数回圈
'''

结语

今天跟读者们介绍了 Python 中条件判断与回圈。事实上,Python 的回圈有许多更简洁的写法,也能在单独一行中与条件判断做结合,这边不与读者说明怕新手在不熟悉的状况下混淆,下面补充资料有附上述语法的文章。

明日内容

明天将会带给大家字串的进阶用法。这些用法在几天之後的爬虫实战会起到很大的作用,在 Python 中也预设给了字串许多方便的操作。

补充资料

[Python教学]搞懂5个Python回圈常见用法 : https://www.learncodewithmike.com/2019/12/python.html

【Python for 教学】for回圈与单行的基本用法,新手值得推荐 : https://learn.markteaching.com/【python-for-教学】for回圈与单行的基本用法/


<<:  Day 19 : 深度学习(神经网络)自动建模术 - AutoMLs

>>:  Day 11 - 安装(ㄧ)Tiup工具

Youtube Analytics API 教学 - 多维度分析 A+B

「鲑鱼均,因为一场鲑鱼之乱被主管称为鲑鱼世代,广义来说以年龄和脸蛋分类的话这应该算是一种 KNN 的...

成为工具人应有的工具包-02 BrowsingHistoryView

BrowsingHistoryView 好的,就从 NirSoft 官网的 Forensics 分类...

Day 25 去识别化定义规划实作

今天就根据GDPR第4(5)条和 CCPA §§1798.140(o)、§§1798.145(c)-...

在 Kolla-Ansible 使用 Custom Config

在上篇文章介绍了 Kolla 跟 Kolla-Ansible 部署 OpenStack 的方法。在设...

Day-30 学习 Helm (上)

前言 Kubernetes是一个可以帮助我们管理微服务的系统,为了因应功能项的不同,Kubernet...