4.1单分支结构
单分支结构(最简单)
根据判断条件结果而选择不同向前路径的运行方式
if<条件>:
<语句块>
单分支示例:
guess=eval(input())
if guess==99:
print("猜对了")
二分支结构
根据判断条件结果而选择不同向前路径的运动方式
if<条件>:
<语句块1>
else:
<语句块2>
二分支示例:
guess=eval(input())
if guess==99:
print("猜对了")
else:
print("猜错了")
紧凑形式:适用于简单表达式的二分支结构
<表达式1> if <条件> else <表达式2>
guess = eval(())
print("猜{}了".format("对" if guess==99 else"错"))
多分支结构
if<条件>
<语句块1>
elif:
<语句块2>
......
else:
<语句块2>
对不同分数分级的问题
多分支结构示例(代码正确,逻辑错误):
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的逻辑非 |
程序的异常处理
异常代码信息:
num = eval(input("请输入一个整数"))
print(num**2)
当用户没有输入整数时,会产生异常,异常文字信息:
异常处理:try和except
示例1:
try:
num = eval(input("请输入一个整数"))
print(num**2)
except NameError:
print("输入不是整数")
注意:标注异常类型后,仅响应此类异常。异常类型名字等同于变量名
异常处理高级使用
try:
<>
except:
<>
else:
<>
finally:
<>
- finally对应语句块4一定执行
- else对应语句块3在不发生异常时执行
4.2身体质量指数BMI
- BMI:Body Mass Index
- 定义:BMI=体重(kg)/身高2(m2)
思路方法
- 难点在于同时输出国际和国内对应的分类
- 思路1:分别计算并给出国际和国内BMI分类
- 思路2:混合计算并给出国际和国内BMI分类
BMI实例1(国际):
#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))
BMI实例2(国内):
#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))
BMI实例3(混合):
#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))
举一反三
- 多分支条件之间的覆盖是重要问题
- 程序可运行,但如果不正确,要注意多分支
- 分支结构是程序的主要框架,读程序先看分支
4.3程序的循环结构
遍历循环
遍历某个结构形成的循环运行方式
for <循环变量> in <遍历结构>:
<语句块>
- 有保留字for和in组成,完整遍历所有元素后结束
- 每次循环,所获得元素放入循环变量,并执行一次语句块
应用:
1. 计数循环(N次) - 遍历由range()函数产生的数字序列,产生循环
for i in range(N):
计数循环(特定次)
for i in range(M,N,K):
<语句块>
2. 字符串遍历循环
- s是字符串,遍历字符串每个字符,产生循环
for c in s :
<语句块>
3. 列表遍历循环
- ls是一个列表,遍历其每一个元素,产生循环
``python
for item in ls:
<语句块>
**4. 文件遍历循环**
- fi是文件标识符,遍历其每行,产生循环
```python
for line in fi :
<语句块>
无限循环
由条件控制的循环运行方式
while<条件>:
<语句块>
- 反复执行语句块,直到条件不满足时结束
(Ctrl+C退出循环)
循环控制保留字
break和continue
- break跳出并结束当前整个循环,执行循环后的语句
- continue结束当次循环,继续执行后续次数循环
-
break和continue可以与for和while循环搭配使用
s="python"
while s !=""
for c in s :
if c =="T"
break
print(c,end="")
s = s[:-1]
输出PYPYPYPYPYP
- 一个break仅跳出当前最内层循环
循环的高级用法
循环与else
- 当循环没有被break语句退出时,执行else语句块
- else语句块作为“正常”完成循环的奖励
-
这里else的用法与异常处理中else用法相似
4.4模块3:random库
random库是使用随机数的Python标准库
- 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
- random库主要用于生成随机数
- 使用random库: import random
random库包括两类函数,常用共8个 - 基本随机数函数:seed(),random()
- 扩展随机数函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
基本数种子
函数 | 描述 |
---|---|
seed(a=None) | 初始化给定的随机数种子,默认为当前系统时间 |
random() | 生成一个[0.0,1.0]之间的随机小数 |
扩展随机函数
函数 | 描述 |
---|---|
randint(a,b) | 生成一个[a,b]之间的整数 |
randrange(m,n[,k]) | 生成一个[m,n)之间以k为步长的随机整数 |
getrandbits(k) | 生成一个k比特长的随机整数 |
uniform(a,b) | 生成一个[a,b]之间的随机小数 |
choice(seq) | 从序列seq中随机选择一个元素 |
shuffle(seq) | 将序列seq中元素随机排列,返回打乱后的序列 |
4.5“圆周率”的计算
实例1(公式法):
#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))
(换行增加可读性,不影响语法)
实例2(蒙特卡罗):
#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))
举一反三
- 数学思维:找到公式,利用公式求解
- 计算思维:抽象一种过程,用计算机自动化求解