......................................................................................................................................................................................
......................................................................................................................................................................................
程序的分支结构
根据判断条件结果而选择不同向前路径的运行方式
单分支结构
if <条件> :
<语句块>
例:if True:
print("条件正确")
二分支结构
if <条件> :
<语句块1>
else :
<语句块2>
例:if True:
print("语句块1")
else :
print("语句块2")
紧凑形式:适用于简单表达式的二分支结构
<表达式1> if <条件> else <表达式2>
例:guess = eval(input())
print("猜{}了".format("对" if guess==99 else "错"))
多分支结构
if <条件1> :
<语句块1>
elif <条件2> :
<语句块2>
……
else :
<语句块N>
例:
score = eval(input())
if score >= 60:
grade = "D"
elif score >= 70: -注意多条件之间的包含关系
grade = "C"
elif score >= 80: -注意变量取值范围的覆盖
grade = "B"
elif score >= 90:
grade = "A"
print("输入成绩属于级别{}".format(grade))
条件判断及组合
条件判断
操作符 | 数学符合 | 描述 |
---|---|---|
< | < | 小于 |
<= | ≤ | 小于等于 |
>= | ≥ | 大于等于 |
> | > | 大于 |
== | = | 等于 |
!= | ≠ | 不等于 |
条件组合
用于条件组合的三个保留字
操作符及使用 | 描述 |
---|---|
x and y | 两个条件x和y的逻辑与 |
x or y | 两个条件x和y的逻辑或 |
not x | 条件x的逻辑非 |
例:
guess = eval(input())
if guess > 99 or guess < 99:
print("猜错了")
else :
print("猜对了")
程序的异常处理
异常处理的基本使用
try :
<语句块1>
except :
<语句块2>
例:
try :
num = eval(input("请输入一个整数: "))
print(num^2)
except :
print("输入不是整数")
或者
try :
num = eval(input("请输入一个整数: "))
print(num^2)
except **NameError**: -标注异常类型后,仅响应此类异常,异常类型名字等同于变量名
print("输入不是整数")
异常处理的高级使用
try :
<语句块1>
except :
<语句块2>
else :
<语句块3> -else对应语句块3在不发生异常时执行
finally :
<语句块4> -finally对应语句块4一定执行
实例5: 身体质量指数BMI
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))
程序的循环结构
遍历循环
遍历某个结构形成的循环运行方式
for <循环变量> in <遍历结构> : - 从遍历结构中逐一提取元素,放在循环变量中
<语句块>
遍历循环的应用
- 计数循环(N次)
for i in range(N) : - 遍历由range()函数产生的数字序列,产生循环
<语句块>
例:
>>> for i in range(5):
print(i)
0
1
2
3
4
- 计数循环(特定次)
for i in range(M,N,K) :
<语句块>
例:
>>> for i in range(1,6,2):
print("Hello:",i)
Hello: 1
Hello: 3
Hello: 5
- 字符串遍历循环
for c in s : - s是字符串,遍历字符串每个字符,产生循环
<语句块>
例:
>>> for c in "Python123":
print(c, end=",")
P,y,t,h,o,n,1,2,3,
- 列表遍历循环
for item in ls : - ls是一个列表,遍历其每个元素,产生循环
<语句块>
例:
>>> for item in [123, "PY", 456] :
print(item, end=",")
123,PY,456,
- 文件遍历循环
for line in fi : - fi是一个文件标识符,遍历其每行,产生循环
<语句块>
例:
>>> for line in fi :
print(line)
优美胜于丑陋
明了胜于隐晦
简洁胜于复杂
无限循环
由条件控制的循环运行方式
while <条件> : - 反复执行语句块,直到条件不满足时结束
<语句块>
无限循环的应用
无限循环的条件
>>> a = 3
>>> while a > 0 :
a = a - 1
print(a)
2
1
0
循环控制保留字(break 和 continue)
- break跳出并结束当前整个循环,执行循环后的语句
- continue结束当次循环,继续执行后续次数循环
- break和continue可以与for和while循环搭配使用
例:
>>> for c in "PYTHON" :
if c == "T" :
continue
print(c, end=" ")
PYHON
>>> for c in "PYTHON" :
if c == "T" :
break
print(c, end=" ")
PY
注:break仅跳出当前最内层循环
循环的高级用法
循环的扩展
循环与else
for <变量> in <遍历结构> : -当循环没有被break语句退出时,执行else语句块
<语句块1> -else语句块作为"正常"完成循环的奖励
else :
<语句块2> - 这里else的用法与异常处理中else用法相似
while <条件> :
<语句块1>
else :
<语句块2>
例:
>>> for c in "PYTHON" :
if c == "T" :
continue
print(c, end="")
else:
print("正常退出")
PYHON正常退出
>>> for c in "PYTHON" :
if c == "T" :
break
print(c, end="")
else:
print("正常退出")
PY
模块3: random库的使用
random库是使用随机数的Python标准库
- 伪随机数: 采用梅森旋转算法生成的(伪)随机序列中元素
- random库主要用于生成随机数
- 使用random库: import random
random库包括两类函数,常用共8个 - 基本随机数函数: seed(), random()
- 扩展随机数函数: randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()
基本随机数函数
函数 | 描述 |
---|---|
seed(a=None) | 初始化给定的随机数种子,默认为当前系统时间 >>>random.seed(10) #产生种子10对应的序列 |
random() | 生成一个[0.0, 1.0)之间的随机小数>>>random.random() 0.5714025946899135 |
例:
>>> import random
>>> random.seed(10)
>>> random.random()
0.5714025946899135
扩展随机数函数
函数 | 描述 |
---|---|
randint(a, b) | 生成一个[a, b]之间的整数 >>>random.randint(10, 100) 64 |
randrange(m, n[, k]) | 生成一个[m, n)之间以k为步长的随机整数 >>>random.randrange(10, 100, 10) 80 |
getrandbits(k) | 生成一个k比特长的随机整数 >>>random.getrandbits(16) 37885 |
uniform(a, b) | 生成一个[a, b]之间的随机小数 >>>random.uniform(10, 100) 13.096321648808136 |
choice(seq) | 从序列seq中随机选择一个元素 >>>random.choice([1,2,3,4,5,6,7,8,9]) 8 |
shuffle(seq) | 将序列seq中元素随机排列,返回打乱后的序列 >>>s=[1,2,3,4,5];random.shuffle(s);print(s) [3, 5, 1, 2, 4] |
实例6: 圆周率的计算
公式法:
#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))
蒙特卡罗方法:
#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))