第四周:程序的控制结构
4.1 程序的分支结构
1.单分支结构
if<条件>:
<语句块>
2.二分支结构
if <condition>:
<yujukuai1>
else:
<yujukuai2>
还有一种紧凑表达式:
<表达式1>if<条件> else<表达式2>
例如:
guess =eval(input())
print("猜{}了".format("对" if guess ==99 else "错"))
注意:紧凑形式只支持表达式,不支持其他类型语句(例如赋值语句)
3.多分支结构
例程:
score = eval(input())if ((score >=90) and (score<=100)): grade = "A"elif ((score >=80) and (score<90)): grade = "B"elif ((score >=70) and (score<80)): grade = "C"elif ((score >=60) and (score<70)): grade = "D"elif ((score >=0) and (score<60)): grade = "E"else: grade = "Wrong"print("你的考试等级为:{}".format(grade))
4.条件判断及组合
表1 用于条件组合的三个保留字
操作符及使用 | 描述 |
x and y | 只有当x,y均为True时,才为True |
x or y | x,y中有一个为True,就为True |
not x | 非x |
5.程序的异常处理
格式:
try:
<语句块1>
except:
<语句块2>
上面这种类型是出现异常都执行后面的。下面这种格式是只有出现指定异常类型才执行这种操作:
try:
<语句块1>
except <异常类型>:
<语句块2>
异常处理的高级使用:
try:
<yujukuai1>
except:
<yujukuai2>
else:#不发生异常时执行
<yujukuai3>
finally:#一定执行
<yujukuai4>
4.2 实例5:身体质量指数BMI
1.问题需求分析
BMI = 体重(kg)/身高(m)2
表2 BMI标准
分类 | 国际BMI值 | 国内BMI值 |
偏瘦 | <18.5 | <18.5 |
正常 | 18.5~25 | 18.5~24 |
偏胖 | 25~30 | 24~28 |
肥胖 | ≥30 | ≥28 |
2.代码:
mess = eval(input("请输入你的体重(单位:千克):\n"))length = eval(input("请输入你的身高(单位:米):\n"))bmi = mess/(length**2)print("BMI数值为:{:.2f}".format(bmi))hcn,hin = "",""if bmi <18.5: hcn = "偏瘦" hin = "偏瘦"elif bmi>=18.5 and bmi <24: hcn = "正常" hin = "正常"elif bmi>=24 and bmi<25: hcn,hin = "偏胖","正常"elif bmi >=25 and bmi<28: hcn,hin = "偏胖","偏胖"elif bmi>=28 and bmi<30: hcn, hin ="肥胖","偏胖"else: hcn,hin = "肥胖","肥胖"print("根据国内BMI标准,你的体质为{0};根据国际BMI标准,你的体质为{1}。".format(hcn,hin))
4.3 程序的循环结构
1.遍历循环
常用使用方式:
(1)计数循环(N次):
for i in range(N):
<语句块>
for I in range(M,N,K):
<语句块>
这里面,M代表起始数字,N代表生成到N-1,K为步长。
(2)字符串遍历应用
for c in s:
<语句块>
s是字符串,遍历字符串中每个字符,产生循环。
(3)列表遍历循环
for item in ls:
<语句块>
其中ls是一个列表,遍历其每一个元素,产生循环。
(4)文件遍历循环
for line in fi:
<语句块>
fi是一个文件标识符,遍历其每行,产生循环。
2.无限循环
while<条件>:
<语句块>
注意:若程序循环执行不退出,则可以按Ctrl+C退出程序。
3.循环控制保留字
break☞跳出并结束当前整个循环,执行循环后面的语句;
continue☞跳出并结束本次循环,执行下一次循环。
4.循环的高级用法
循环与else
当循环没有被break语句退出时,执行else语句块。else语句块作为“正常”完成循环的奖励,这里面的else用法和异常中类似。
例如:
for c in "PYTHON": if c =="T": continue print(c,end="")else:print("正常退出")
运行结果:PYHON正常退出
4.4 random库的使用
1.random库基本介绍
random库是使用随机数的python标准库。
基本随机数函数:seed()/random()
扩展随机数函数:randint()/getandbits()/uniform()/randrange()/choice()/shuffle()
2.基本随机数函数
计算机生成随机数,是用随机数种子,根据梅森旋转算法产生。随机数种子确定了随机数的产生。
表3基本随机数函数
函数 | 描述 |
seed(a=None) | 初始化给定的随机数种子,默认使用当前系统时间。如:random.seed(10)是产生种子10对应的序列 |
random() | 生成[0.0,1.0]之间的随机小数 |
3.拓展随机数函数
表4 扩展随机数函数
函数 | 描述 |
randint(a,b) | 随机生成一个[a,b]之间的整数 |
randange(m,n[,k]) | 生成一个[m,n]之间以k为步长的随机整数 |
getandbits(k) | 生成一个k比特长的随机整数 |
uniform(a,b) | 生成一个[a,b]之间的随机小数 |
choice(seq) | 从序列seq中随机选择一个元素 |
shuffle(seq) | 将序列seq中的元素随机排序,返回打乱后的序列 |
4.5实例6:圆周率的计算
1.公式法:
pi = 0N = 100for k in range(N): pi += 1/pow(16,k)*(\ 4/(8*k+1)-2/(8*k+4)-\ 1/(8*k+5)-1/(8*k+6))print("圆周率值是: {}".format(pi))
2.蒙特卡洛法
@author: davidcheung"""#CalPiV2.pyfrom random import randomfrom time import perf_counterDARTS = 5000*5000#总的点数hits = 0.0#圆内的点start = perf_counter()for i in range(1, DARTS+1): x, y = random(), random() dist = pow(x ** 2 + y ** 2, 0.5) if dist <= 1.0:#看这个点是否在园内,若小于0,则在圆内 hits = hits + 1pi = 4 * (hits/DARTS)print("圆周率值是: {}".format(pi))print("运行时间是: {:.5f}s".format(perf_counter() - start))