流程控制
大纲
- 前言
- 条件判断语句
- if语句
- elif语句
- else语句
- 嵌套的条件语句
- 用字典代替多个if/else
- 占位语句
- 循环语句
- for循环语句
- while循环语句
- 主动结束循环
- 跳过当前循环
- 鲜为人知的else尾巴
- 总结
前言
至今为止,我们做的程序都是顺序结构的,没有任何逻辑,只有一股脑地从上到下一句执行完又到下一句,下面我们来学习流程控制语句,以改变我们程序的执行顺序,让它变得更有趣些
条件判断语句
"如果能重来,我要选李白,否则我就继续当李荣浩。",这就是条件判断,它根据条件的不同,使程序走向不同的流程
if语句
在python或绝大多数编程语言中,用if表示如果,它的格式如下
if : if内语句1 if内语句2if外语句3
冒号后回车,再以4个空格缩进为代码块,以上语句1、2都在代码块内,但语句3不在if代码块内
如果条件成立(条件为布尔值True时),则先执行其代码块内的代码,否则将不执行
如果以代码的方式来表示李荣浩的那句歌词,大概长下面这个样子
# 能重来这个条件是成立的again = Trueif again: print('我要选李白') print('几百年前做的好坏 没那么多人猜') print('至少我还能写写诗来澎湃 逗逗女孩') print('创作也能到那么高端 被那么多人崇拜') print('继续唱')# 把能重来这个条件设为不成立again = Falseif again: print('我要选李白') print('几百年前做的好坏 没那么多人猜') print('至少我还能写写诗来澎湃 逗逗女孩') print('创作也能到那么高端 被那么多人崇拜') print('再继续唱')
结果如下
我要选李白几百年前做的好坏 没那么多人猜至少我还能写写诗来澎湃 逗逗女孩创作也能到那么高端 被那么多人崇拜继续唱再继续唱
可以看到当我们把条件设为不成立后,第二个if代码块内的代码并不会执行
事实上,在python中,if并不需要一定接收布尔值,如果接受的是非布尔值,解释器会自动将它转为布尔值,例如
a = '条件'# 以字符串a作为条件if a: print('条件成立!')
虽然字符串"条件"并不是布尔值,但是解释器会把它自动转为布尔值,您可以通过内置函数bool把一个非布尔值的类型主动转为布尔值
is_ok = bool('条件')print(is_ok) # Trueprint(type(is_ok)) #
在python中,空值 None 、整数 0 、空字符串 "" 、空列表 [] 、空元组 tuple() 、空字典 {} 和空集合 set(),它们被转化为布尔值时,皆被认为是False,其余都为True
# 空值Noneprint(bool(None)) # False# 整数0print(bool(0)) # False# 空字符串print(bool('')) # False# 空列表print(bool([])) # False# 空元组print(bool(tuple())) # False# 空字典print(bool({})) # False# 空集合print(bool(set())) # False
在条件语句中有如下常用的操作运算符,它们的结果类型都是布尔值
操作符作用例子结果==比较左右两者是否相等1==1True!=比较左右两者是否不相等1!=2True>比较左边值是否大于右边值2>3False小于右边值3<2False>=比较左边值是否大于或等于右边值3>=3True<=比较左边值是否小于或等于右边值2<=3Truenot表示对值进行取反,将True变为False 或 将False变为Truenot 1False
还有两个操作符,但它们的结果类型取决于操作数的类型
操作符作用例子结果and顺序查看左右两者的布尔值是否为True,直到遇到False或最后一个时即退出,并返回退出时的值0 and 1或1 and 0皆为0or顺序查看左右两者的布尔值是否为True,直到遇到True或最后一个时即退出,并返回退出时的值0 or 1或1 or 0皆为1
可以通过以下例子来加深理解
# and的例子a = 1 and 'hello' # 先看1的布尔值为True,继续看'hello'的布尔值也为True,到达最后一个,退出,所以a='hello'b = 0 and