三、控制流
1.if, elif和else
一个if语句可以接多个elif代码块和一个else代码块,如果所有elif条件均为False, 则执行else代码块:
if x < 0:
print('It`s negative')
elif x == 0:
print('Equal to zero')
elif 0 < x < 5:
print('Positive but smaller than 5')
else:
print('Positive and larger than or equal to 5')
如果某个条件为True, 则后面的elif和else代码块不会执行。
当使用and和or进行混合条件判断时,条件判断是从左到右的并且在and或or两侧的条件会有“短路”现象:
a = 5; b = 7
c = 8; d = 4
if a < b or c > d:
print('Made it')
### 本例中c>d是不会去判断的,因为第一个比较判断为True
2.for循环
for循环用于遍历一个集合(例如列表或元组)或一个迭代器。标准的for循环语法如下:
for value in collection:
# 用值做些什么
-
continue
关键字可以跳过continue
后面的代码进入下一次循环:
###对列表中的非None值进行累加:
sequence = [1, 2, None, 4, None, 5]
total = 0
for value in sequence:
if value is None:
continue
total += value
-
break
关键字可以结束一个for循环:
### 对列表元素累加直到5出现
sequence = [1, 2, 0, 4, 6, 5, 2, 1]
total_until_5 = 0
for value in sequence:
if value == 5:
break
total_until_5 += value
### break 关键字只结束最内层的for循环;
### 外层的for循环会继续运行:
for i in range(4):
for j in range(4):
if j > i:
break
print((i, j))
......:
(0, 0)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
(2, 2)
(3, 0)
(3, 1)
(3, 2)
(3, 3)
- 如果集合或迭代器中的元素是一个序列(比如元组或列表),它们可以在for循环语句中很方便地通过拆包成为变量:
for a, b, c in iterator:
# 做些什么
3. while循环
while循环会在条件符合时一直执行代码块,直到条件判断为False或显式地以break
结尾时才结束:
x = 256
total = 0
while x > 0:
if total > 500:
break
total += x
x = x // 2
4. pass
pass
就是什么都不做的语句,表示不执行任何操作:
if x < 0:
print('negative!')
elif x == 0:
pass
else:
print('positive!')
5. range
range
函数返回一个迭代器,该迭代器生成一个等差整数序列:
range(10)
Out[39]: range(0, 10)
list(range(10))
Out[40]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
### 起始/结尾/步进(可以是负的)可以传参给range函数:
list(range(0, 20, 2))
Out[41]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
list(range(5, 0, -1))
Out[42]: [5, 4, 3, 2, 1]
range
产生的整数包含起始但不包含结尾。range
常用于根据序列的索引遍历序列:
seq = [1, 2, 3, 4]
for i in range(len(seq)):
val = seq[i]
将0到99,999中所有可以被3或5整除的整数相加:
sum = 0
for i in range(100000):
#%是求模(余数)操作符
if i % 3 == 0 or i % 5 ==0:
sum += i
sum
Out[44]: 2333316668
6. 三元表达式
三元表达式允许你将一个if-else代码块联合起来,在一行代码或一个语句中生成数据。语法如下:
value = treu-expr if condition else false-expr
它与以下更详细的代码效果一致:
if condition:
value = true-expr
else:
value = false-expr
以下是具体例子:
'Non-negative' if x >= 0 else 'Negative'
三元表达式可以压缩代码量,但是可能会牺牲可读性。