第九章:程序控制结构上(python version 3.7.2)
一.代码块
什么是代码块?
- 代码块,是指被作为一个单元执行的一段Python代码.
- Python程序就是由大大小小的代码块构造出来的.
- Python通过缩进来组织代码块,具有相同缩进的代码被自动视为一个代码块,这是Python的强制要求.
- Python开发者有意让违反了缩进规则的程序不能通过编译,而发出错误提示,以此来强制程序员养成良好的编程习惯.
- 缩进是指调整文本与页面边界之间的距离.
一个正确的代码块:
x = 100
y = 200
z = 300
违反缩进规则的程序:
x1 = 100
y1 = 200
z1 = 300
- 无论进行了几个空格的缩进都是被允许的,只要缩进空格的数量统一.
- 较为规范的情况下一般采用4个空格表示一个缩进.
- 也可以使用一个制表符表示一个缩进(Tab键).
- 在代码结束时,多敲一次换行,使得代码层次结构更加清晰.
- 模块,函数体,类定义,脚本文件以及交互式输入的每条命令都是一个代码块.
二.顺序结构
顺序结构编写代码时,只要按照解决问题的顺序写出相应的语句就行.
程序会自上而下,依次执行:
a = 1
b = a + 1
print('输出b:',b)
顺序结构的程序虽然能解决计算,输出等问题,但不能根据判断条件的结果执行合理的行为.
比如,小明考试及格与不及格时,进行不同的处理,是奖励小明,还是胖揍小明(-_-!).
没说这个概念之前可能不会在意,之前写的那些都是顺序结构.
三.选择结构
选择结构(又称分支结构),它用来解决先判断再选择的问题.
主要有三种选择结构:
- 单分支选择结构.
- 双分支选择结构.
- 多分支选择结构.
条件表达式的计算结果如果是:None,空字符串,空列表,空元组,空集合,空字典或者所有的值为零的数时,都会被if和elif视作假值(False),其他情况则视为真值(True).
单分支选择结构
- if是关键字,用于告诉计算机后面是一个条件表达式,用于判断.
- 条件表达式可以理解为计算结果为布尔值的表达式.
- 条件表达式后面的冒号不能少.
- 当条件判断成立时(也就是真值True),则执行该判断条件下缩进的代码块,换句话来说缩进的代码块依赖上面的判断条件成立.
双分支选择结构
在单分支选择语句的下面添加else关键字和冒号,else下方缩进的代码块用于处理不满足if条件的情况.
多分支选择结构
大部分问题不是一两个条件就能解决的,这个时候就需要使用”if…elif…else”多分支选择结构.
再来看这样一个案例:
假如我们的程序需要用户输入年龄,之后根据我们对年龄段的划分打印告诉用户他处于什么年龄段.
年龄段的划分是这个样子的:未成年人:0~17岁,青年人:18~30岁,中年人:31~50岁,老年人:大于50岁
这样写虽然可以完成任务,而且每个分支都使用了独立的,完整的判断.顺序可以随意挪动,而不影响程序运行.但是过于繁琐,这个时候就可以使用多分支选择结构.
- 多分支选择结构每条语句之间拥有逻辑关系.
- 第一个判断语句用if关键字开头,下面的判断语句用elif 关键字开头,它表示当前的判断条件隐含着已经不满足上面所有判断的条件.
- 最后的else是可选的,用于处理上面所有的判断条件都不满足的情况.
三元表达式
看一个例子,在超市经常看到搞活动,买够1000打8折,其他情况打9折,那么用if…else 语句实现是这样写的
money = 1000
if money >=1000:
money *= 0.8
else:
money * =0.9
print(money)
这样写有点长,占了好几行.Python为了简化这种双分支选择取值的情况,创造出了三元表达式(语法糖).
三元表达式语法:
值1 if 条件 else 值2
意思是:条件为真取值1 ,条件为假取值2
money = 1000
money = money * 0.8 if money >= 1000 else money* 0.9
print(money)
像三元表达式这种由官方提供的在写法上简化操作的语法,称为语法糖,在python中还有很多,后边慢慢介绍.
四.循环结构
循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构.它由循环结构中的条件来判断继续执行某个功能还是退出循环.Python提供了两种循环结构:while循环和for循环.(其他语言还会有while do,do while,switch case等等,python中就这两种).
while循环
while循环由while关键词开头,后面跟上一个条件表达式.
- 当条件表达式成立时,执行循环体,循环体其实就是代码块.
- 当条件表达式不成立时退出循环.
例子:假如我想打印1-5的数字,怎么办?当然可以用5行print打印这些数字,但是假如是1-1000呢?这时候就不得不用循环语句,下面用while循环来完成这项功能:
死循环
for循环
for循环的else语句也是可选的,经常被省略.
- for循环一般用于循环次数可以提前确定的情况,尤其适用于枚举,遍历序列或迭代对象中元素的场合.
- for循环以for关键字开头,后面跟上一个变量,变量后方是关键字in,in的后方是一个可迭代对象.
- 现在只要知道可迭代对象的类型包括字符串,列表,元组,集合,字典即可.
- 另外使用range()函数会得到一个可迭代对象.
- 注意,可迭代对象后面的冒号不要忘写了.
- 每一次循环,for关键字后面的变量都会被设置成从可迭代对象中读取出来的元素,提供给“循环体”使用。
range函数
它会返回一个可迭代对象.在还没有说函数的情况下,可以认为他有三种形式:
range(stop)
range(start,stop)
range(start,stop,step)
三种形式的参数stop都表示计数结束值,它不会被循环取到.
第一种:
range(stop):
如果不想从0开始,而是从1开始,那么可以选择第二种形式:
设定
start = 1:
如果不想从0开始计数,也不想两个数之间间隔1,而是希望从1开始计数,最大不超过10,两个数之间间隔2,那么可以使用第三种方法:
设定
step = 2
对于 range() 函数,有几个注意点:
- 它表示的是左闭右开区间.
- 它接收的参数必须是整数,可以是负数,但不能是浮点数等其它类型.
pass关键字
- pass关键字用于占位,表示空操作,什么也不干,但是程序不会报错.
- 在开发时如果有些实现不希望立刻编写,就可以使用pass关键字.
比如希望用户输入性别,然后根据性别提示不同的信息,而还没想好要显示什么,那么可以用pass关键字先来占位.
余下的下一站见…
如有错误还望指出