Python语言程序设计——第四周 程序的控制结构

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

程序的分支结构

单分支结构

Python语言程序设计——第四周 程序的控制结构_第1张图片

二分支结构

Python语言程序设计——第四周 程序的控制结构_第2张图片
Python语言程序设计——第四周 程序的控制结构_第3张图片
紧凑形式

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

注意表达式的使用,而不是语句的使用

多分支结构

Python语言程序设计——第四周 程序的控制结构_第4张图片

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("猜错了")

程序的异常处理

Python语言程序设计——第四周 程序的控制结构_第5张图片
Python语言程序设计——第四周 程序的控制结构_第6张图片
Python语言程序设计——第四周 程序的控制结构_第7张图片

身体质量指数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))

Python语言程序设计——第四周 程序的控制结构_第8张图片

程序的循环结构

  • 遍历循环(对应保留字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是一个文件标识符,遍历其每行,产生循环
    Python语言程序设计——第四周 程序的控制结构_第9张图片

无限循环

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

while <条件>:
   <语句块>
  • 反复执行语句块,直到条件不满足时结束
    Python语言程序设计——第四周 程序的控制结构_第10张图片

循环控制保留字

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

随机数种子

Python语言程序设计——第四周 程序的控制结构_第11张图片

函数 描述
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库的计时方法获得程序运行时间
  • 改变撒点数量,理解程序运行时间的分布
  • 初步掌握简单的程序性能分析方法
    计算问题的扩展
  • 不求解圆周率,而是某个特定图形的面积
  • 在工程计算中寻找蒙特卡罗方法的应用场景

你可能感兴趣的:(Python语言程序设计——第四周 程序的控制结构)