在前一篇文章内容中带大家跑过一次 Python 中的基础操作与常见的资料型态的使用。也提供了大家一些额外的使用方法,若有自信的读者能再去 Day3 看看欧。
Day 3 带大家使用了基本的资料结构跟对应的操作,但如果要重复的操作它们,总不可能就将那个操作重复写很多行。如果说现在你的程序会走直线了,今天来带各位条件判断及回圈,让你的爬虫程序多了岔路跟回路。
若读者学过其它类 C 的语言,都会知道它们都是以大括号来做程序区块(block)分隔。在 python 中,是以缩排(indentation)来区分程序区块(block),而缩排大约会使用 2~6 个空白,通常是 4 个空白,读者也能按下键盘上的 Tab
来快速做出类似 4 个空白的效果(在 Vscode 预设下)。
python 中的条件判断十分易懂,若读者有撰写过其他语言的条件判断,可能会发现 else if
的语法在 python 下是 elif
。 在多种语言的条件判断大部分都是 if-else
同时出现的,
'''
if 条件:
符合条件後该做的事
'''
temperature = 39
if temperature >= 37.5:
print('发烧')
'''
if 条件:
符合条件後该做的事
else:
不符合条件该做的事
'''
temperature = 36
if temperature >= 37.5:
print('发烧')
else:
print('正常')
'''
if 条件1:
符合 条件1 後该做的事
elif 条件2:
符合 条件2 後该做的事
else:
不符合 条件1 、 条件2 该做的事
'''
temperature = 53
if temperature >= 38:
print('发烧')
elif 38 > temperature >= 37.5:
print('轻微发烧')
else:
print('正常')
Python 中的 for loop 常会以 in
这个关键字同时出现。
range(start, stop[, step])
这个函式会回传一个可迭代对象,常与 for-loop
一同使用。
start
计数将从 start 开始,若不传入则预设为 0。 ex. range(5) 会是从 0 到 4stop
计数直到大於等於 stop,不包括大於等於 stop 的那个数。 ex. range(0, 4) 会是从 0 到 3step
每次加上多少。 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 若满足条件则继续:
该做的事
'''
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
...
'''
若想在回圈执行到一半时,不做剩下要做的事并进到下一轮或是强制跳出回圈,会需要使用到 continue
及 break
指令。
跳出本次回圈,继续进行下一轮回圈
for i in range(10):
if i % 2 == 0: # i 对 2 取余数若为 0 (偶数) 则 continue
continue # 不执行後续代码,跳到下一轮回圈
print(i, end = ' ')
#Output: 1 3 5 7 9
强制中止并跳出离这个 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
存在的必要性。先前提到 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
'''
#因尚未撰写实际功能,因此未有任何条件判断效果
与其他语言不同的, 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
「鲑鱼均,因为一场鲑鱼之乱被主管称为鲑鱼世代,广义来说以年龄和脸蛋分类的话这应该算是一种 KNN 的...
BrowsingHistoryView 好的,就从 NirSoft 官网的 Forensics 分类...
今天就根据GDPR第4(5)条和 CCPA §§1798.140(o)、§§1798.145(c)-...
在上篇文章介绍了 Kolla 跟 Kolla-Ansible 部署 OpenStack 的方法。在设...
前言 Kubernetes是一个可以帮助我们管理微服务的系统,为了因应功能项的不同,Kubernet...