Python语言程序设计第4周笔记(第4章 程序的控制结构)

4.1 程序的分支结构

  1. 程序的控制结构
    在这里插入图片描述
  2. 单分支结构:根据判断条件结果而选择不同向前路径的运行方式
    在这里插入图片描述
eg1:
guess = eval(input()) 
if guess == 99: 
	print("猜对了")
eg2:
if True: 
	print("条件正确")
  1. 二分支结构:根据判断条件结果而选择不同向前路径的运行方式
    在这里插入图片描述
eg1:
guess = eval(input()) 
if guess == 99: 
	print("猜对了") 
else : 
	print("猜错了")
eg2:
if True: 
	print("语句块1") 
else : 
	print("语句块2")
  • 紧凑形式:适用于简单表达式的二分支结构
<表达式1> if <条件> else <表达式2>
eg3:
guess = eval(input())
print("猜{}了".format("对" if guess==99 else "错"))
  1. 多分支结构:对不同分数分级的问题
  • 注意多条件之间的包含关系
  • 注意变量取值范围的覆盖
    在这里插入图片描述
  • 给成绩分等级的参考代码
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)) 
  1. 分支结构的举一反三:关注多分支条件的组合
  • 多分支条件之间的覆盖是重要问题
  • 程序可运行,但如果不正确,要注意多分支
  • 分支结构是程序的重要框架,读程序先看分支
  1. 条件判断(操作符)及组合(用于条件组合的三个保留字)
操作符数学符号
<<
<=
>>
>=
===
!=
操作符及使用描述
x and y两个条件x和y的逻辑
x or y两个条件x和y的逻辑
not x条件x的逻辑
eg1:
guess = eval(input()) 
if guess > 99 or guess < 99: 
	print("猜错了") 
else : 
	print("猜对了")
eg2:
if not True: 
	print("语句块2") 
else : 
	print("语句块1")
  1. 程序的异常处理

在这里插入图片描述
在这里插入图片描述

eg1:
try : 
	num = eval(input("请输入一个整数: ")) 
	print(num**2) 
except : 
	print("输入不是整数") 
eg2:
try : 
	num = eval(input("请输入一个整数: ")) 
	print(num**2) 
except NameError: 
	print("输入不是整数") 

4.2 实例5: 身体质量指数BMI

  • BMI:Body Mass Index
    • 国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析
  • BMI = 体重 (kg) / 身高2 (m2)
  • 标准如下
分类国际BMI值国内BMI值
偏瘦<18.5<18.5
正常18.5 ~ 2518.5 ~ 24
偏胖25 ~ 3024 ~ 28
肥胖≥30≥28
#CalBMIV1.py
height, weight = eval(input("请输入身高(m)和体重(kg)【逗号隔开】:"))
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))
#CalBMIV2.py
height, weight = eval(input("请输入身高(m)和体重(kg)【逗号隔开】:"))
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(who))
#CalBMIV3.py
height, weight = eval(input("请输入身高(m)和体重(kg)【逗号隔开】:"))
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 程序的循环结构

  1. 遍历循环:遍历某个结构形成的循环运行方式
  • 计数循环(N次):遍历由range()函数产生的数字序列,产生循环
for i in range(N) :
	<语句块>
eg1:
for i in range(5): 
	print(i)
#0
#1
#2
#3
#4
eg2:
for i in range(5): 
	print("Hello:",i)
#Hello: 0
#Hello: 1
#Hello: 2
#Hello: 3
#Hello: 4
  • 计数循环(特定次):遍历由range()函数产生的数字序列,产生循环
for i in range(M,N,K) :
	<语句块>
eg1:
for i in range(1,6): 
	print(i)
#1
#2
#3
#4
#5
eg2:
for i in range(1,6,2): 
	print("Hello:",i)
#Hello: 1
#Hello: 3
#Hello: 5
  • 字符串遍历循环:s是字符串,遍历字符串每个字符,产生循环
for c in s : 
	<语句块>
eg:
for c in "Python123": 
	print(c, end=",")
#P,y,t,h,o,n,1,2,3,
  • 列表遍历循环:ls是一个列表,遍历其每个元素,产生循环
for item in ls : 
	<语句块>
eg:
for item in [123, "PY", 456] : 
	print(item, end=",")
#123,PY,456,
  • 文件遍历循环:fi是一个文件标识符,遍历其每行,产生循环
for line in fi : 
	<语句块>
eg:
for line in fi : 
	print(line)
  1. 无限循环:由条件控制的循环运行方式,反复执行语句块,直到条件不满足时结束
eg:
a = 3
while a > 0 : 
	a = a + 1 
	print(a) 
#(CTRL + C 退出执行) 
  1. 循环控制保留字:break 和 continue
  • break跳出并结束当前整个循环(break仅跳出当前最内层循环),执行循环后的语句
  • continue结束当次循环,继续执行后续次数循环
  • break和continue可以与for和while循环搭配使用
eg1:
for c in "PYTHON" : 
	if c == "T" : 
		continue 
	print(c, end="")
eg2:
for c in "PYTHON" :
	if c == "T" : 
		break 
	print(c, end="")
eg3:
s = "PYTHON" 
while s != "" : 
	for c in s : 
		print(c, end="") 
	s = s[:-1]
#PYTHONPYTHOPYTHPYTPYP
eg4:
s = "PYTHON" 
while s != "" : 
	for c in s : 
		if c == "T" : 
			break 
		print(c, end="") 
	s = s[:-1]
#PYPYPYPYPYP
  1. 循环的高级用法:循环与else
  • 当循环没有被break语句退出时,执行else语句块
  • else语句块作为"正常"完成循环的奖励
  • 这里else的用法与异常处理中else用法相似
for <变量> in <遍历结构> : 
	<语句块1>
else : 
	<语句块2>
while <条件> : 
	<语句块1> 
else : 
	<语句块2>
eg1:
for c in "PYTHON" : 
	if c == "T" : 
		continue 
	print(c, end="") 
else: 
	print("正常退出") 
#PYHON正常退出
eg2:
for c in "PYTHON" : 
	if c == "T" : 
		break 
	print(c, end="") 
else: 
	print("正常退出") 
#PY

4.4 模块3: random库的使用

  • random库是使用随机数的Python标准库,主要用于生成随机数
  • 伪随机数: 采用梅森旋转算法生成的(伪)随机序列中元素
  • 使用random库: import random

r a n d o m 库包括两类函数 { 基本随机数函数: s e e d ( ) , r a n d o m ( ) 扩展随机数函数: r a n d i n t ( ) , g e t r a n d b i t s ( ) , u n i f o r m ( ) , r a n d r a n g e ( ) , c h o i c e ( ) , s h u f f l e ( ) random库包括两类函数 \begin{cases} 基本随机数函数: seed(), random()\\ 扩展随机数函数: randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()\\ \end{cases} random库包括两类函数{基本随机数函数:seed(),random()扩展随机数函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()

  1. 基本随机数函数
  • 使用random.seed()给定随机数种子,程序可以复现
    在这里插入图片描述
  1. 扩展随机数函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.5 实例6: 圆周率的计算

  • 圆周率的近似计算公式
    在这里插入图片描述
#CalPiV1.py
pi = 0
N = 100#假设无穷大是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))
  • 举一反三:理解方法思维

    • 数学思维:找到公式,利用公式求解
    • 计算思维:抽象一种过程,用计算机自动化求解
  • 举一反三:对于程序运行时间的分析

    • 使用time库的计时方法获得程序运行时间
    • 改变撒点数量,理解程序运行时间的分布:程序的主要时间用在循环部分
    • 初步掌握简单的程序性能分析方法
  • 举一反三:计算问题的扩展

    • 不求解圆周率,而是某个特定图形的面积
    • 在工程计算中寻找蒙特卡罗方法的应用场景
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清梦daydream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值