python学习-第四课时-程序的控制结构

程序的分支结构

单分支结构

根据判断条件结果而选择不同向前路径的运行方式

单分支示例

guess = eval(input())
if guess ==99:
    print("猜对了")

二分支结构

根据判断条件结果而选择不同向前路径的运行方式

二分支示例

guess = eval(input())
if guess ==99:
    print("猜对了")
else:
    print("猜错了")

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

<表达式1> if <条件> else <表达式2>

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

多分支结构

条件判断及组合

条件判断

操作符
操作符 数学符号 描述
< < 小于
<= 小于等于
>= 大于等于
> > 大于
== = 等于
!= 不等于

条件组合

用于条件组合的三个保留字
操作符及使用 描述
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("猜对了")

程序的异常处理

异常处理的基本使用

try:          try:
    <语句块1>      <语句块1>
except:       except <异常类型>:
    <语句块2>      <语句块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:           -else对应语句块3在不发生异常时执行
    <语句块3>
finally:        -finally对应语句块4一定执行
    <语句块4>

身体质量指数BMI

问题分析

BMI:对身体质量的刻画

-BMI:Body Mass Index
国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析
-定义:BMI = 体重(kg)/身高²(m²)

国际:世界卫生组织    国内:国家卫生健康委员会
分类 国际BMI值(kg/m²) 国内BMI值(kg/m²)
偏瘦 < 18.5 < 18.5
正常 18.5 ~ 25 18.5 ~ 24
偏胖 25 ~ 30 24 ~ 28
肥胖 ≥ 30 ≥ 28

实例讲解

#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))
nat = ""
if bmi < 18.5:
    nat = "偏瘦"
elif 18.5 <= bmi < 24:
    nat = "正常"
elif 24 <= bmi < 28:
    nat = "偏胖"
else:
    nat = "肥胖"
print("BMI 指标为:国内'{0}'".format(nat))
#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 <循环变量> in <遍历结构>:
    <语句块>
-从遍历结构中逐一提取元素,放在循环变量中
-由保留字for和in组成,完整遍历所有元素后结束
-每次循环,所获得元素放入循环变量,并执行一次语句块

计数循环(N次)

for i in range(N):
    <语句块>
-遍历由range()函数产生的数字序列,产生循环

计数循环(特定次)

for i in range(M,N,K):   #M开始,N之前结束,以K为步长
    <语句块>
-遍历由range()函数产生的数字序列,产生循环

字符串遍历循环

for c in s:
    <语句块>
-s时字符串,遍历字符串每个字符,产生循环

for c in "Python123":
    print(c,end=",")
======================= RESTART: E:\学习\Python\test.py =======================
P,y,t,h,o,n,1,2,3,

列表遍历循环

for item in ls:
    <语句块>
-ls是一个列表,遍历其每个元素,产生循环

for item in [123,"PY",456]:
    print(item,end=",")
======================= RESTART: E:\学习\Python\test.py =======================
123,PY,456,

文件遍历循环

for line in fi:
    <语句块>
-fi是一个文件标识符,遍历其每行,产生循环

无限循环

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

while <条件>:
    <语句块>
-反复执行语句块,直到条件不满足时结束

a = 3
while a > 0:
    a = a - 1
    print(a)
======================= RESTART: E:\学习\Python\test.py =======================
2
1
0

循环控制保留字

break和continue

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

for c in "PYTHON":
    if c == "T":
        continue
    print(c,end="")
======================= RESTART: E:\学习\Python\test.py =======================
PYHON
for c in "PYTHON":
    if c == "T":
        break
    print(c,end="")
======================= RESTART: E:\学习\Python\test.py =======================
PY
s = "PYTHON"
while s !="":
    for c in s:
        print(c,end="")
    s = s[:-1]
======================= RESTART: E:\学习\Python\test.py =======================
PYTHONPYTHOPYTHPYTPYP
s = "PYTHON"
while s !="":
    for c in s:
        if c == "T":
            break
        print(c,end="")
    s = s[:-1]
======================= RESTART: E:\学习\Python\test.py =======================
PYPYPYPYPYP

-break仅跳出当前最内层循环

循环的高级用法

循环与else

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

for c in "PYTHON":
    if c == "T":
        continue
    print(c,end="")
else:
    print("正常退出")
======================= RESTART: E:\学习\Python\test.py =======================
PYHON正常退出
for c in "PYTHON":
    if c == "T":
        break
    print(c,end="")
else:
    print("正常退出")
======================= RESTART: E:\学习\Python\test.py =======================
PY

random库的使用

基本介绍

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

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

random库包括两类函数,常用共8个

-基本随机数函数:seed(),random()
-扩展随机数函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()

基本随机数函数

函数 描述
seed(a=None)

初始化给定的随机数种子,默认为当前系统时间

>>>random.seed(10)  #产生种子10对应的序列

random()

生成一个[0.0,1.0)之间的随机小数

>>>random.random()

0.5714025946899135

>>> import random
>>> random.seed(10)
>>> random.random()
0.5714025946899135
>>> random.random()
0.4288890546751146

扩展随机数函数

函数 描述
randint(a,b)

生成一个[a,b]之间的整数

>>> random.randint(10,100)
97

randrange(m,n[,k])

生成一个[m,n)之间以k为步长的随机整数

>>> random.randrange(10,100,10)
40

getrandbits(k)

生成一个k比特长的随机整数

>>> random.getrandbits(16)
17764

uniform(a,b)

生成一个[a,b]之间的随机小数

>>> random.uniform(10,100)
41.50123291845979

choice(seq)

从序列seq中随机选择一个元素

>>> random.choice([1,2,3,4,5,6,7,8,9])
3

shuffle(seq)

将序列seq中元素随机排列,返回打乱后的序列

>>> s=[1,2,3,4,5,6,7,8,9];random.shuffle(s);print(s)
[7, 4, 8, 1, 6, 9, 2, 5, 3]

圆周率的计算

问题分析

圆周率的近似计算公式

实例讲解

圆周率的近似计算公式

#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))
====================== RESTART: E:/学习/Python/CalPiV1.py ======================
圆周率值是:3.141592653589793

蒙特卡罗方法

#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))
====================== RESTART: E:/学习/Python/CalPiV2.py ======================
圆周率值是:3.142588
运行时间是:0.85358s
>>> 
====================== RESTART: E:/学习/Python/CalPiV2.py ======================
圆周率值是:3.140644
运行时间是:0.84669s
>>> 
====================== RESTART: E:/学习/Python/CalPiV2.py ======================
圆周率值是:3.140296
运行时间是:0.94809s

猜你喜欢

转载自blog.csdn.net/weixin_43921596/article/details/87618773