Python语言程序设计_4

学习过程主要依照中国MOOC课程,感谢MOOC,感谢北理授课大佬。

程序的分支结构

单分支结构

根据判断条件结果而选择不同向前路径的运行方式。

1
2
if <条件>:
<语句块>

二分支结构

根据判断条件结果而选择不同向前路径的运行方式。

1
2
3
4
if <条件>:
<语句块1>
else:
<语句块2>

紧凑形式:适用于简单表达式的二分支结构

1
<表达式1> if <条件> else <表达式2>

多分支结构

1
2
3
4
5
6
7
if <条件>:
<语句块1>
elif:
<语句块2>
……
else:
<语句块n>

条件判断及组合

用于条件组合的三个保留字:and、or、not

程序的异常处理

异常处理的基本使用

1
2
3
4
try:
<语句块1>
except:
<语句块2>

高级使用

1
2
3
4
5
6
7
8
9
10
try:
<语句块1>
except:
<语句块2>
#不发生异常时执行语句块3
else:
<语句块3>
#语句块4一定会执行
finally:
<语句块4>

实例: 身体质量指数BMI#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#CalBMIv1.py
height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
who = ""
if bmi < 18.5:
who = "偏瘦"
elif 18.5 <= bmi < 25:
who = "正常"
elif 25 <= bmi < 30:
who = "偏胖"
else:
who = "肥胖"
print("BMI 指标为:国际'{0}'".format(who))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#CalBMIv2.py
height, weight = eval(input("请输入身高(米)和体重\(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
nat = ""
if bmi < 18.5:
nat = "偏瘦"
elif 18.5 <= bmi < 24:
nat = "正常"
elif 24 <= bmi < 28:
nat = "偏胖"
else:
nat = "肥胖"
print("BMI 指标为:国内'{0}'".format(nat))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#CalBMIv3.py
height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
who, nat = "", ""
if bmi < 18.5:
who, nat = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:
who, nat = "正常", "正常"
elif 24 <= bmi < 25:
who, nat = "正常", "偏胖"
elif 25 <= bmi < 28:
who, nat = "偏胖", "偏胖"
elif 28 <= bmi < 30:
who, nat = "偏胖", "肥胖"
else:
who, nat = "肥胖", "肥胖"
print("BMI 指标为:国际'{0}', 国内'{1}'".format(who, nat))

程序的循环结构

遍历循环

1
2
for<循环变量> in <遍历结构>:
<语句块>

-计数循环
-字符串遍历循环
-列表遍历循环
-文件遍历循环
-………………

无限循环

1
2
while <条件>:
<语句块>

循环控制保留字

-break:跳出并结束当前(最内层)整个循环,执行循环后的语句;
-continue:结束当此循环,继续执行后续次数循环;

循环高级用法

循环与else搭配,当循环没有被break语句退出时,执行else语句块,可以看作是作为”正常”完成循环的奖励。

1
2
3
4
for<循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>
1
2
3
4
while <条件>:
<语句块1>
else:
<语句块2>

random库使用

random库概述

-random库是使用随机数的python标准库。
-import random

基本随机函数

-产生过程:随机数种子–>梅森旋转矩阵–>产生随机序列
-seed(a):初始化给定随机数种子,默认为当前系统时间,给定种子后,random产生的随机数确定,之后可以再现;
-random():生成一个[0.0,1.0]之间的随机小数;

扩展随机函数

-random.randint(a,b):生成一个[a,b]之间的整数;
-random.randrange(m,n[,k]):生成一个[m,n)之间以k为步长的随机整数;
-random.getrandbits(k):生成一个k比特长的随机整数;
-random.uniform(a,b):生成一个[a,b]之间的随机小数;
-random.choice(seq):从序列seq中随机选择一个元素;
-random.shuffle(seq):将序列seq中元素随机排列,返回打乱后的序列;

实例:圆周率的计算

公式近似方法

1
2
3
4
5
6
7
8
#CalPiV1.py
pi = 0
N = 100
for 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))

蒙特卡洛方法

随机给大量散点,会随机出现在区域中的位置,采用比例,用正方形面积可以估算出圆的面积,进而可以得到圆周率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#CalPiV2.py
from random import random
from time import perf_counter
DARTS = 1000*1000
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:
hits = hits + 1
pi = 4 * (hits/DARTS)
print("圆周率值是: {}".format(pi))
print("运行时间是: {:.5f}s".format(perf_counter() - start))

以上。

:转载文章请注明出处,谢谢~