Python语言程序设计第四章

顺序结构
分支结构
循环结构

方法论
-Python程序的控制语法及结构
实践能力
-学会编写带有条件判断及循环的程序

4.1 程序的分支结构

1、单分支结构
根据判断条件结果而选择不同向前路径的运行方式
if <条件>:
 <语句块>
单分支结构
单分支实例

guess = eval(input())
if guess == 99:
   print('猜对了')
if True:
   print('条件正确') 

2、二分支结构
根据判断条件结果而选择不同向前路径的运行方式
if <条件>:
 <语句块1>
else :
 <语句块2>
二分支结构
二分支实例

guess = eval(input())
if guess == 99:
   print('猜对了')
else:
   print('猜错了')
if True:
   print('语句块1') 
else:
   print('语句块2')

紧凑形式:适用于简单表达式的二分支结构
<表达式1> if <条件> else <表达式2>

guess = eval(input())
print('猜{}了'.format('对' if guess == 99 else '错'))

3、多分支结构
if <条件>:
 <语句块1>
elif :
 <语句块2>
……
else :
 <语句块3>
多分支结构
多分支实例
-注意多条件之间的包含关系
-注意变量取值范围的覆盖关系
对不同分数的分级问题:

score = eval(input())
if score >= 90:
   print('A')
elif score >= 80:
   print('B')
else:
   print('C')

4、条件判断及组合
操作符
操作符
用于条件组合的三个保留字
条件组合保留字
5、程序的异常处理
异常处理的基本使用
try :
 <语句块1>
except :
 <语句块2>
执行语句块1,如果没有异常继续往下,异常执行语句块2.
还可以区分不同的异常类型:
try :
 <语句块1>
except <异常类型>:
 <语句块2>
示例1

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

示例2

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

标注异常类型后,仅相应该异常
异常类型名字等同于变量
异常处理的高级使用
try :
 <语句块1>
except :
 <语句块2>
else :
 <语句块3>
finally :
 <语句块4>
-finally对应语句块4一定执行
-else对应语句块3在不发生异常时执行

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

BMI:对身体质量的刻画
-BMI:Body Mass Index
国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析
-定义:BMI = 体重 (kg) /身高2 (m2)
问题需求
-输入:给定体重和身高值
-输出:BMI指标分类信息(国际和国内)
思路方法
-思路1:分别计算并给出国际和国内BMI分类

#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))

-思路2:混合计算并给出国际和国内BMI分类

#CalBMIv2.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 25 <= bmi < 28:
    who, nat = "偏胖", "肥胖"
else:
    who, nat = "肥胖", "肥胖"
print("BMI数值为:国际‘{0}’,国内‘{0}’".format(who, nat))

**BMI标准
关注多分支条件的组合
-多分支条件之间的覆盖是重要问题
-程序可运行,但不正确,要注意多分支
-分支结构是程序的重要框架,读程序先看分支

4.3 程序的循环结构

1、遍历循环
遍历某个结构形成的循环运行方式
for <循环变量> in <遍历结构>:
 <语句块>
-由保留字for和in组成,完整遍历所有元素后结束
-每次循环,所获得元素放入循环变量,并执行一次语句块
遍历循环的应用
(1)计数循环(N次)
for i in range(N):
 <语句块>
-遍历由range()函数产生的数字序列,产生循环
for i in range(5):
 print(i)
for i in range(M,N,K):
 <语句块>
-遍历由range()函数产生的数字序列,产生循环,M到N,步长为K
(2)字符串遍历循环
for i in s:
 <语句块>
-s是字符串,遍历字符串每个字符,产生循环
for c in “Python123”:
 print(c, end=“,”)
输出:P, y, t, h, o, n, 1, 2, 3,
(3)列表遍历循环
for item in ls:
 <语句块>
-ls是一个列表,遍历其每个元素,产生循环
for item in [“Py”, 123, 456]:
 print(item, end=“,”)
输出:Py, 123, 456
(4)文件遍历循环
for line in fi:
 <语句块>
-fi是一个文件标识符,遍历其每行,产生循环
for line in fi:
 print(line)
输出:
第一行
第二行
第三行
2、无限循环
由条件控制的循环运行方式
while <条件>:
 <语句块>
-反复执行语句块,直到条件不满足时结束
-按Ctrl C退出无限循环程序
3、循环控制保留字
break和continue
-break跳出并结束当前整个循环,执行循环后的语句
-continue结束当次循环,继续执行后续次数循环
-break和continue可以与for和while循环搭配使用
-break仅跳出当前最内层循环
4、循环的高级用法
循环与else
for <循环变量> in <遍历结构>:
 <语句块1>
else:
 <语句块2>

while <条件>:
 <语句块1>
else:
 <语句块2>
-当循环没有被break语句退出时,执行else语句块
-else语句块作为“正常”完成循环的奖励
-这里else的用法与异常处理中else用法相似

4.4 模块3:random库的使用

1、random库概述
random库是使用随机数的Python标准库
-伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
-random库主要用于生成随机数
-使用random库:import random
random库包含两类函数,常用共8个
-基本随机数函数:seed(), random()
-扩展随机数函数:randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()

2、基本随机数函数
随机数种子
随机数种子
种子相同,随机序列、随机序列中的每一个数以及数之间的关系都是唯一确定的。
设定种子可以复现程序运行结果。
random函数
2、扩展随机数函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
需要掌握的能力
-能够利用随机数种子产生“确定”伪随机数
-能够产生随机整数
-能够对序列类型进行随机操作

4.5 实例6:圆周率的计算

圆周率的近似计算公式
圆周率的近似计算公式
蒙特卡罗方法
在这里插入图片描述
pi = S圆 / S(1/4矩形)

#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))

举一反三
理解方法思维
-数学思维:找到公式,利用公式求解
-计算思维:抽象一种过程,用计算机自动化求解
-谁更准确?
程序运行时间分析
-使用time库的计时方法获得程序运行时间
-改变撒点数量,理解程序运行时间的分布(程序主要运行时间花在循环上)
-初步掌握简单的程序性能分析方法
计算问题的扩展
-不求解圆周率,而是某个特定图形的面积
-在工程计算中寻找蒙特卡罗方法的应用场景

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值