03.控制语句

人们常说人生就是一个不断做选择题的过程:有的人没得选,只有一条路能走;有的人好一点,可以二选一;还有一些人在人生的迷茫期会在原地打转,找不到方向。
编程语言,如Python,可以模拟人类生活的方方面面,通过编程语言中特殊关键字控制程序的执行过程,这些关键字有循环用的for或while,还有条件判断用的if、else等。

3.1 条件语句

所谓的条件,指的就是满足什么条件,允许做什么事,不满足时,是不允许做的。如共享单车,规定满12周岁或以上才可以骑行,没满的则不被允许。三思而后行,再,斯可矣。Python的条件语句有if、if-else和elif语句三种。
1.if语句
如果判断条件为True,就执行if语句内的内容,否则不执行。if的语法结构为:
if 判断条件:
执行语句1
执行语句…

# ---年龄---
age = 12
if age >= 12:
print("已满12岁,", end="")
print("可以骑共享单车了。")

输出结果

已满12岁,可以骑共享单车了。

2.if-else语句
如果if的判断条件的结果为True,就执行里面的语句,否则执行else内的语句。if-else的语法结构为:
if 判断条件:
执行语句1
执行语句…
else:
执行语句1
执行语句…

# ---年龄---
age = 12
if age >= 12:
print("可以骑共享单车,", end="")
print("去海边看蓝天白云。")
else:
print("可惜骑不了共享单车,", end="")
print("因为我未满12岁。")

输出结果

可以骑共享单车,去海边看蓝天白云。

3.if-elif语句
如果if的判断条件1的结果为True,就执行里面的语句,如果判断条件2的结构为True,执行elif内的语句,否则执行else里的语句。if-else的语法结构为:
if 判断条件1:
执行语句1
执行语句…
elif 判断条件2:
执行语句1
执行语句…
else:
执行语句1
执行语句…

# 年龄
age = 12
# 智能手机
android = False
iphone = True
if age >= 12 and android:
print("已满12岁,", end="")
print("可惜没有Android智能手机")
elif age >= 12 and iphone:
print("用IPhone手机进行扫码骑行")
else:
print("年龄和智能手机,有一样缺少,骑不了")

输出结果

用IPhone手机进行扫码骑行

4.if嵌套语句
条件语句可以进行嵌套。

# 年龄
age = 12
# 智能手机
android = False
iphone = True
if age >= 12:
if android or iphone:
print("已满12岁,", end="")
print("还有智能手机,可以骑行。")
else:
print("年龄满足,可没有智能手机,骑不了")
else:
print("可惜骑不了共享单车,", end="")
print("因为未满12岁。")

输出结果

已满12岁,还有智能手机,可以骑行。

5.三元运算符
三元运算又称三目运算,是对简单的条件语句的简写。
if 条件成立:
result = “可骑行”
else:
result = “不可骑行”
改成三元运算是: result =“可骑行” if 条件成立 else “不可骑行”。满足条件,执行前面的语句,不满足,执行后面的语句。

# 年龄
age = 10
result = "可骑行" if age >= 12 else "不可骑行"
print(result)

输出结果

不可骑行

6.switch-case
Python3 没有switch-case语句,查看官方文档说是可以用if-elseif-elseif…代替。实现switch-case需要被判断的变量是可哈希的和可比较的,这与Python倡导的灵活性有冲突,所以没有支持。如果确实有必要,可通过函数的字典的方式实现。

# 定义switch函数
def switch(item):
switcher = {
"Mon": 1,
"Tues": 2,
"Wed": 3,
"Thur": 4,
"Fri": 5,
"Sat": 6,
"Sun": 7
}
return switcher.get(item, "0")


# 调用switch
print(switch("Mon"))

输出结果

1

3.2 for循环

for循环可以遍历任何序列的元素,如逐个输出字符串、列表、字典或元组等中的元素。它是一种迭代循环机制。通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次,并把访问到的元素供执行语句使用。
1.for语句
for循环从序列里逐个取出元素,并赋值给迭代变量,以供执行语句使用,语法结构为:
for 迭代变量 in 遍历序列:
执行语句1
执行语句…

# 遍历字符串
s = "Welcome to Python."
for c in s:
print(c)

输出结果

W
e
l
c
o
m
e

t
o

P
y
t
h
o
n
.

2.range()函数
可以使用内置range()函数,生成数列,并通过for循环取出元素。range(start,end,step=1)顾头不顾尾。
range(5): 默认step=1,start=0,生成数列内容为:[0, 1, 2, 3, 4];
range(1,5):指定start=1,end=5,默认step=1,生成数列内容为:[1, 2, 3, 4]
range(1,5,2):指定start=1,end=5,step=2,生成数列内容为: [1, 3]

# 用range()函数生成数列
for i in range(10):
print(i)

输出结果

0
1
2
3
4
5
6
7
8
9

3.索引迭代
除了可通过遍历的方式获取元素外,还可以通过索引迭代的方式获取。用索引迭代时,先通过内置函数len()获取列表的长度,再逐个迭代。

# 数组内容
lang = ["Chinese", "English", "French"]
# 获取数组长度
length = len(lang)
for index in range(length):
print(lang[index])

输出结果

Chinese
English
French

4.嵌套语句
for循环允许在一个循环体里面嵌入另一个循环。语法结构为:
for 迭代变量1 in 遍历序列1:
执行语句1
for 迭代变量3 in 遍历序列2:
执行语句2
执行语句…

# 字符串数组
s1 = ["1", "2", "3", "4", "5"]
s2 = ['a', 'b', 'c', 'd', 'e']
for a in s1:
print(a)
for b in s2:
print(b)

输出结果

1
a
b
c
d
e
2
a
b
c
d
e
3
a
b
c
d
e
4
a
b
c
d
e
5
a
b
c
d
e

5.列表推导
Python中的for循环,除了可以遍历元素外,还可以进行列表推导。列表推导是一种简化代码的优美方法。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。语法结构为:
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

# 获取新列表
l1 = [data for data in range(1, 10)]
print(l1)
# 两个列表内容
v1 = [10, 20, 30]
v2 = [30, 40, 50]
# 获取交集
v = [num for num in v1 if num in v2]
print(v)
# 获取差集
v = [num for num in v1 if num not in v2]
print(v)

输出结果

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[30]
[10, 20]

6.跳出循环
Python语言的跳出循环与大多数语言一样,可以使用关键字continue跳出本次循环。

# continue语句
def f1():
for i in range(1, 10):
if i % 2 == 0:
continue
# if条件为True的,跳过continue语句下的表达式。
print(i)


f1()

输出结果。

1
3
5
7
9

用break跳出整个for循环

# break语句
def f1():
for i in range(1, 10):
if i % 2 == 0:
break
# if条件为True的,跳过continue语句下的表达式。
print(i)


f1()

输出结果

1

另外还有return语法,会跳出for循环。

# return语句
def f1():
for i in range(1, 10):
if i % 2 == 0:
return i
return 0


result = f1()
print(result)

输出结果

2

7.for-else语句
如果在循环正常(非break 跳出)执行完,需要执行一些其他动作时,可在后面添加else语句。除了else外,还有一种特殊情况,就是会出现一个语句体什么也不做的情况,这时用pass语句进行占位。它是空语句,什么都不做,只要是保持程序结构的完整性。
正常退出循环,会执行else内容。

# range()生成数列
for i in range(1, 10):
if i % 2 == 0:
pass # pass不做任何操作
print(i)
else:
print("循环完成")

输出结果

1
2
3
4
5
6
7
8
9
循环完成

通过break非正常退出循环,不会执行else内容。

# range()生成数列
for i in range(1, 10):
if i % 2 == 0:
break
print(i)
else:
print("这里不执行")

输出结果

1

3.3 while循环

while 循环用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。for循环和while循环,两者的相同点在于都能循环做一件重复的事情;不同点在于,for循环是在序列穷尽时停止,while循环是在条件不成立时停止。
1.while语句
while循环通过判断条件,确认是否执行语句。条件为True时,执行语句,否则退出循环。语法结构为:
while 判断条件:
执行语句1
执行语句…

# 初始化整数
i = 5
while i < 10:
print(i)
i += 1

输出结果

5
6
7
8
9

2.嵌套语句
while循环允许在一个循环体里面嵌入另一个循环。语法结构为:
while 判断条件1:
执行语句1
while 判断条件2:
执行语句…

# 定义行变量
row = 1
while row <= 5:
# 定义列变量
col = 1
# 第i行,循环i次
while col <= row:
print("*", end="")
col += 1
# 每打印完1行,换行
print("")
row += 1

输出结果

*
**
***
****
*****

3.while嵌for
while循环里面可以嵌套for循环。

# 初始化数据
i = 2
while i < 5:
for c in range(5):
print(c)
i += 1

输出结果

0
1
2
3
4
0
1
2
3
4
0
1
2
3
4

for循环里面可以嵌套while循环。

# 用range()函数生成数列
for c in range(1, 5):
i = 2
while i < 5:
print(i)
i += 1

输出结果

2
3
4
2
3
4
2
3
4
2
3
4

4.跳出循环
Python语言的跳出循环与大多数语言一样,可以使用关键字continue跳出本次循环。

# ---continue语句----
def f1():
i = 5
while i < 10:
if i % 2 == 0:
i += 1
continue
# if条件为True的,跳过continue语句下的表达式。
i += 1
print(i)


f1()

输出结果

6
8
10

使用break跳出整个while循环。

# ---break语句----
def f1():
i = 5

while i < 10:
if i % 8 == 0:
break
# if条件为True的,跳过continue语句下的表达式。
i += 1
print(i)


f1()

输出结果

6
7
8

还有return语法,会跳出while循环。

# ---return语句----
def f1():
i = 5
while i < 10:
if i % 6 == 0:
return
# if条件为True的,跳过continue语句下的表达式。
i += 1
print(i)


f1()

输出结果

6

5.while-else
如果想在循环正常(非break跳出)执行完,需要执行一些其他动作时,可在后面添加else语句。除了else外,还有一种特殊情况,就是会出现一个语句体什么也不做的情况,这时用pass语句进行占位。它是空语句,什么都不做,只要是保持程序结构的完整性。
正常退出while循环,会执行else里面的内容。

# 初始化数据
i = 5
while i < 10:
if i % 2 == 0:
pass # pass不做任何操作
i += 1
print(i)
else:
print("循环完成")

通过break非正常退出,不会执行else里面的内容。

# 初始化数据
i = 2
while i < 5:
if i % 4 == 0:
break # 退出整个for循环
i += 1
print(i)
else:
print("这里不执行")

控制语句,就在不知不觉中学完了。

上一篇

04.数据结构(上)