第4章 程序的控制结构
4.1 程序的基本结构
/程序由三种结构组成:顺序结构,分支结构和循环结构.
4.1.1 程序流程图
略
4.1.2 程序的基本结构
/顺序结构是计算机程序的基础.
/程序由三种基本结构组成:顺序结构,分支结构,循环结构.这些结构都还有一个入口和一个出口.
/顺序结构:程序按照线性顺序依次执行的一种运行方式.
/分支结构:程序根据条件而选择不同运行路径的运行方式.
/循环结构:程序根据运行结果,反复向后执行的一种运行方式.
4.1.3 程序的基本结构实例
4.2 程序的分支结构
4.2.1 单分支结构 if
if <条件>:
<语句块>
/Python的关系操作符
操作符 | 含义 |
---|---|
< | 小于 |
<= | 小于等于 |
>= | 大于等于 |
> | 大于 |
== | 等于 |
!= | 不等于 |
pm25 =eval(input("请输入PM2.5的值:"))
if 0<=pm25<35:
print("天气好着呢,出去野去吧!")
if 35<=pm25<75:
print("听我的,在家待着!")
if 75<=pm25:
print("想啥呢?!就在家待着!哪也别去!")
/字符或字符串也可以用于条件比较.字符串比较本质上是字符串对应Unicode编码的大小比较,因此字符串的比较按照字典顺序进行.
/英文大写字符对应的Unicode编码比小写字符小.
4.2.2 二分支结构:if-else语句
if <条件>:
<语句块1>
else:
<语句块2>
/二分支结构还有一种更简洁的表达方式:
<表达式1> if <条件> else <表达式2>
其意义为,if条件成立,则执行<表达式1>,<条件>不成立,执行<表达式2>
pm25 =eval(input("请输入PM2.5的值:"))
print("空气{}污染!".format("存在"if pm25>=75 else "没有"))
4.2.3 多分支结构: if-elif-else语句
if<条件1>:
<语句块1>
elif <条件2>:
<语句块2>
...
else:
<语句块N>
4.3 实例5:身体质量指数BMI
略
4.4 程序的循环结构
/Python通过for,while等保留字提供遍历循环和无线循环的结构.
4.4.1 遍历循环: for 语句
/Python通过保留字for实现"遍历循环",基本使用方法如下:
for <循环变量> in <遍历结构>:
<语句块>
/遍历结构可以是字符串,文件,组合数据类型或range()函数等.
/遍历循环还有一种扩展模式,使用方法如下:
for <循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>
/这种遍历循环结构是在for语句正常循环结束后,继续执行else语句,所以,可以在<语句块2>中放置判断循环是否正常结束的语句.
4.4.2 无限循环:while语句
/无限循环操作指导循环各条件不满足才结束,不需要提前确定循环次数.
while <条件>:
<语句块>
/当while条件判断为True时,继续执行<语句块>,如果返回值为False,即结束循环.
/while语句也有使用else的拓展方法:
while <条件>:
<语句块1>
else:
<语句块2>
/while循环正常执行后,会继续执行else下语句块内容.亦可用于判断while语句是否正确执行.
4.4.3 循环保留字:break 和 continue
/break用来跳出最内层for或while,脱离该循环后程序从循环代码后继续执行其余代码.
/continue用来结束单次小循环,继续整个循环环境中下面的循环语句.
/for和while循环中,else下面的语句块只有一种条件下执行,即循环正常遍历了所有内容或由于条件不成立而结束循环,没有因为break或return(函数返回中使用的保留字)而退出.continue对else没有影响.
简单明白人话来说,就是break了就不执行else了,continue了,继续执行else.
4.5 模块2:random库的使用
/###4.5.1 random库概述
/Python内置的random库主要用于产生各种分别的伪随机序列.梅森旋转算法,可用于随机数要求不高的工程应用.
4.5.2 random库解析
/random库的常用函数
函数 | 描述 |
---|---|
seed(a=None) | 初始化随机种子,默认值为系统时间 |
random() | 生成一个[0.0,1.0)之间的随机小数(包含0.0,不含1.0) |
randint(a,b) | 生成一个[a,b]间的整数,包含a,b |
getrandbits(k) | 生成一个k比特长度的随机整数 |
randrange(start,stop[,step]) | 生成一个[start,stop)之间,以step为步长的随机整数. |
uniform(a,b) | 生成一个[a,b]之间的随机小数 |
choice(seq) | 从序列类型中随机返回一个元素 |
shuffle(seq) | 将序列类型中的元素随机打乱,然后返回打乱后的序列 |
sample(pop,k) | 从pop类型中随机选取k个元素,以列表类型返回 |
4.6 实例6:π的计算
/蒙特卡罗方法求π
import random
import math
import time
darts = 99999
hits = 0.0
now=time.perf_counter()
for i in range(1,darts+1):
x,y=random.random(),random.random()
dist=math.sqrt(x**2+y**2)
if dist <= 1.0:
hits +=1
t=time.perf_counter()-now
pi = 4*(hits/darts)
print("π的值是{}".format(pi))
print("运行时间是{:.2f}s".format(t))
#运行结果:
π的值是3.1420314203142032
运行时间是0.12s
4.7 程序异常处理
4.7.1 异常处理: try-except语句
try:
<语句块1>
except<异常类型>:
<语句块2>
4.7.2 异常的高级用法
/try-except语句可以支持多个except语句
try:
<语句块1>
except <异常类型1>:
<语句块2>
...
except<异常类型N>:
<语句块N+1>
except:
<语句块N+2>
/最有一个except之前的except后跟具体<异常类型>,最后一个except不跟具体<异常类型>,接受其余所有的异常类型.
/除了try和except保留字外,异常语句还可以与else和finally保留字配合使用,语法格式如下:
try:
<语句块1>
except<异常类型1>:
<语句块2>
else:
<语句块3>
finally:
<语句块4>
/此处的else语句与for循环和while循环中的else一样,当try中的语句块1正常执行结束并没有发生异常时,else中的语句块3执行,可以看作是对try语句块正常执行后的一种追加处理.finally语句块则不同,无论try中语句块1是否发生异常,语句块4都会执行,可以将程序执行语句块1的一些收尾工作放在这里,例如,关闭,打开文件等.