- 4.1 程序的分支结构
- 4.2 实例5:身体质量指数BMI
- 4.3 程序的循环结构
- 4.4 模块3:random库的使用
- 4.4 实例6:圆周率的计算
程序的分支结构
单分支结构
二分支结构
紧凑形式
guess=eval(input())
print("猜{}了".format("对" if guess==99 else "错"))
注意表达式的使用,而不是语句的使用
多分支结构
score=eval(input())
if score >=90:
grade="A"
elif score>=80:
grade="B"
elif score>=70:
grade="C"
elif score>=60:
grade="D"
print("输入成绩属于级别{}".format(grade))
条件判断及组合
操作符 | 数学符号 | 描述 |
---|---|---|
< | < < < | 小于 |
<= | ≤ \leq ≤ | 小于等于 |
>= | ≥ \geq ≥ | 大于等于 |
> | > > > | 大于 |
== | = = = | 等于 |
!= | ≠ \neq = | 不等于 |
用于条件组合的三个保留字
操作符及使用 | 描述 |
---|---|
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("猜错了")
if not True:
print("语句块2")
else:
print("语句块1")
guess=eval(input())
if not (guess==99):
print("猜对了")
else:
print("猜错了")
程序的异常处理
身体质量指数BMI
#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))
程序的循环结构
- 遍历循环(对应保留字for)
- 无限循环(对应保留字while)
- 循环控制保留字
- 循环的高级用法
注1:只要遍历结构是由多个元素构成的数据类型,都可以使用for in的方法
遍历循环
遍历某个结构形成的循环运行方式
for <循环变量> in <遍历结构>:
<语句块>
- 从遍历结构中逐一提取元素,放在循环变量中
- 由保留字for和in组成,完整遍历所有元素后结束
- 每次循环,所获得元素放入循环变量,并执行一次语句块
计数循环(N次)
for i in range(N):
<语句块>
- 产生由range()函数产生的数字序列,产生循环
>>> for i in range(4):
print(i)
0
1
2
3
>>> for i in range(4):
print("Hello:",i)
Hello: 0
Hello: 1
Hello: 2
Hello: 3
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 "Pyhon123":
print(c,end=",")
P,y,h,o,n,1,2,3,
列表遍历循环
for item in ls:
<语句块>
- ls是一个列表,遍历其每个元素,产生循环
>>> for item in [123,"PY",456]:
print(item,end=",")
123,PY,456,
文件遍历循环
for ine in fi:
<语句块>
- fi是一个文件标识符,遍历其每行,产生循环
无限循环
由条件控制的循环运行方式
while <条件>:
<语句块>
- 反复执行语句块,直到条件不满足时结束
循环控制保留字
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
>>> s="PYTHON"
>>> while s !="":
for c in s:
print(c,end="")
s=s[:-1]
PYTHON PYTHO PYTH PYT PY P
>>> s="PYTHON"
>>> while s !="":
for c in s:
if c=="T":
break
print(c,end="")
s=s[:-1]
PY PY PY PY PY P
#为了方便看清楚s的变化,修改代码如下:
>>> s="PYTHON"
>>> while s !="":
print("s",s)
for c in s:
if c=="T":
break
print(c,end="")
s=s[:-1]
print()
s PYTHON
PY
s PYTHO
PY
s PYTH
PY
s PYT
PY
s PY
PY
s P
P
循环的高级用法
for <循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>
while <条件>:
<语句块1>
else:
<语句块2>
- 当循环没有被break语句退出时,执行else语句块
- else语句快作为“正常”完成循环的奖励
- 这里else的用法与异常处理中else用法相似
>>> 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
random库的使用
- 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
- random库主要用于生成随机数
- 使用random库: import random
- 基本随机函数:seed(),random()
- 扩展随机数函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
随机数种子
函数 | 描述 |
---|---|
seed(a=None) | 初始化给定的随机数种子,默认为当前系统时间random.seed(10)# 产生种子10对于的序列 |
random() | 生成一个[0.0,1.0]之间的随机小数random.random() 0.9803957598667813 |
randint(a,b) | 生成一个[a,b]之间的整数>>> random.randint(10,100) 64 |
randrange(m,n,[,k]) | 生成一个[m,n]之间以k为步长的随机整数>>> random.randint(10,100,10) 80 |
getrandbits(k) | 生成一个k比特长的随机整数>>> random.getrandbits(16) 37885 |
uniform(a,b) | 生成一个[a,b]之间的随机小数>>> random.uniform(10,100) 62.02821710210233 |
choice(seq) | 从序列seq中随机选择一个元素>>> random.choice([1,2,3,4,5,6,7,8,9]) 4 |
shuffle(seq) | 将序列seq中元素随机排列,返回打乱后的序列>>> s=[1,2,3,4,5,6,7,8,9];random.shuffle(s);print(s) [4, 5, 6, 1, 2, 3, 7, 9, 8] |
实例6:圆周率的计算
#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))
举一反三
- 数学思维:找到公式,利用公式求解
- 计算思维:抽象一种过程,用计算机自动化求解
程序运行时间分析 - 使用time库的计时方法获得程序运行时间
- 改变撒点数量,理解程序运行时间的分布
- 初步掌握简单的程序性能分析方法
计算问题的扩展 - 不求解圆周率,而是某个特定图形的面积
- 在工程计算中寻找蒙特卡罗方法的应用场景