【python学习笔记】程序控制结构

程序控制结构

  • 程序的分支结构
  • 实例5:身体质量指数BMI
  • 程序的循环结构
  • 模块3:random库的使用
  • 实例6:圆周率的计算

一、程序的分支结构

分支结构是根据判断结果二选择不同向前路径的运行方式

1.单分支结构
if   <条件>:
	<语句块>
2.二分支结构
if   <条件>:
	<语句块1>
else:
	<语句块2>

紧凑形式: 适用于简单表达式的二分支结构,只支持表达式的使用

  • <表达式1> if <条件> else <表达式2>
guess = eval(input())
print("猜{}了".format("对" if guess = 99 else "错"))
3.多分支结构
  • 注意多条件之间的包含关系
  • 注意变量取值范围的覆盖
if   <条件>:
	<语句块1>
elif:
	<语句块2>
	……
else :
	<语句块3>
4.条件判断及组合

除了操作符之外,python提供了三个用于条件组合的保留字:and、or、not
示例:

guess = eval(input())
if guess > 99 or guess < 99:
	print("猜错了")
elseprint("猜对了")
5.程序的异常处理

异常处理的基本使用:

try:
	<语句块1>
except [<异常类型>]:
	<语句块2>

异常处理的高级使用:

try:
	<语句块1>
except:
	<语句块2>
else:
	<语句块3>
finally:
	<语句块4>
#finally对应语句块4一定执行
#else对应的语句块3在不发生异常时执行

实例5:身体质量指数BMI

1.问题分析
  • BMI是对身体质量的刻画
  • BMI = 体重(kg) / 身高 ² (m ²)
  • 输入:给指定的体重和身高
  • 输出国内和国际标准
2.实例讲解

思路方法:

  • 难点在于同时输出国际和国内对应的分类
  • 思路1:分别计算并给出国际和国内BMI分类
  • 思路2:混合计算并给出国际和国内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))
# 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 28 <= BMI < 30:
    who, nat = "偏胖","肥胖"
else:
    who, nat = "肥胖", "肥胖"
print("BMI指标为:国际'{0}',国内'{0}'".format(who,nat))
3.“举一反三”

关注多分支条件的组合

  • 多分支条件之间的覆盖是重要问题
  • 程序可运作,但不正确,要多注意分支

二、程序的循环结构

1.遍历循环

遍历某个结构 形成的循环运行方式

for < 循环变量> in <遍历结构><语句块>
#从遍历结构中逐一提取元素,放在循环变量中 
2.无限循环

由条件控制的循环运行方式

 while <条件><语句块>

反复执行直到条件不满足时结束

3.循环控制保留字

break和continue

  • break跳出并结束当前整个循环,执行循环后的语句
  • continue结束当次循环,继续执行后续次数循环
  • break和continue可以与for和while循环搭配使用
4.循环的高级用法

循环与else

for <变量> in <遍历结构>:
	<语句块1>
else:
	<语句块2>

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

模块3:random库的使用

random库是使用随机数python的标准库

  • 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
  • random库主要用于生成随机数
  • 使用random库:import random
1. 基本随机函数
函数描述
seed(a = None)初始化给定的随机数种子,默认为当前系统时间>>> random.seed(10) #产生种子为10对应的序列
random()生成一个[0.0,1.0)之间的随机小数
2.扩展随机函数
函数描述
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中的元素随机排列,返回打乱后的序列

实例6:圆周率的计算

1.“圆周率的计算”问题分析
  • 公式:在这里插入图片描述

  • 蒙特卡罗方法:在这里插入图片描述

2.实例讲解
  • 公式:
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))
#圆周率值是:3.141592653589793
  • 蒙特卡罗方法:
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 += 1
pi = 4 * (hits / DARTS)
print("圆周率值是:{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter() - start))
#圆周率值是:3.141756
#运行时间是:0.64751s
3.举一反三
  • 使用time库的计时方法获得程序运行时间
  • 改变撒点数量,理解程序运行时间的分布
  • 初步掌握简单的程序性能分析方法
  • 在工程计算中寻找蒙特卡罗方法的应用场景
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

眉眼弯弯001

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

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

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

打赏作者

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

抵扣说明:

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

余额充值