Python(3):程序的流程控制-if/match/for/while
程序的描述方式
自然语言
自然语言,就是使用人类语言、直接描述程序。
流程图
流程图使用一系列图形、流程线和文字说明描述程序的基本操作和控制流程,主要适用于较短的算法。
伪代码
是介于自然语言和编程语言之间的一种算法描述语言,如果程序比较小,可以直接用代码描述。
# coding:utf-8
r=eval(input('请输入圆的半径'))
area=3.14*r*r # 面积
perimeter=2*3.14*r # 周长
print('圆的面积是:',area,'周长是:',perimeter)
程序的组织结构
顺序结构
按照程序语句的自然顺序,从上到下,依次执行每条语句的语序。
# 演示:顺序结构语句
# 赋值运算符的顺序:从右到左
name='张三'
age=20
a=b=c=d=100 # 链式赋值
a,b,c,d='room' # 字符串分解赋值
print(a)
print(b)
print(c)
print(d)
# 输入/输出语句也是典型的顺序语句
name=input('请输入姓名:')
age=eval(input('请输入年龄:')
luck_number=eval(input('请输入幸运数字:')
print('姓名:',name)
print('年龄:',age)
print('幸运数字:',luck_number)
选择结构(分支结构)
按照条件选择执行不同的代码段。
单分支结构if
# 演示1:单分支结构if
num=eval(input('请输入您的6位中奖号码:'))
if num==987654: # 等值判断
print('恭喜您,中奖了!')
if num!=987654:
print('您未中本期大奖')
# 以上if判断的表达式是通过比较运算符计算得出,结果是布尔类型
# 演示2:利用布尔值的if
n=98
if n%2: # 利用了0布尔值为False的特性
print(n,'是奇数')
if not n%2:
print(n,'是偶数')
# 字符串判空:空字符串布尔值为False
x=input('请键入:')
if x:
print('x是一个非空字符串')
if not x:
print('x空')
# 演示3:表达式也可以是一个单纯的布尔型变量
flag=eval(input('请键入一个布尔值True或False:'))
if flag:
print('flag的值为True')
if not flag:
print('flag的值为False')
# 单个语句可以直接加在冒号后,多了不行
a=10
b=5
if a>b:max=a # 语句块只有一句,赋最大值
print('a和b的最大值为:',max)
条件判断:
condition
是一个表达式,其值为布尔型(True
或False
)。- 如果
condition
为True
,则执行if
语句块中的代码;否则,跳过该块。
使用比较运算符:
- 比较运算符(如
==
,!=
,<
,>
,<=
,>=
)可用于生成布尔型的条件。
- 比较运算符(如
单语句形式:
- 单分支结构可以只包含一个语句,该语句直接跟在
if
后面,无需使用缩进。
- 单分支结构可以只包含一个语句,该语句直接跟在
布尔值的使用:
- 可以直接使用布尔值或布尔型变量作为条件判断。
- 利用布尔值的特性进行条件判断,如判奇偶、判空等。
表达式作为条件判断:
- 表达式可以是一个单纯的布尔型变量。
双分支结构if...else
# 演示1:双分支结构if...else
num=eval(input('请输入您的6位中奖号码:'))
if num==987654: # 等值判断
print('恭喜您,中奖了!')
else:
print('您未中本期大奖')
# 演示2:使用条件表达式简化代码
print('-'*10,'简化版本1','-'*10)
res='恭喜您中奖了!' if num==987654 else '您未中本期大奖'
print(res) # 判断True,直接输出print(res);判断False,输出else后的赋值
print('-'*10,'简化版本2:省去赋值','-'*10)
print('恭喜您中奖了!' if num==987654 else '您未中本期大奖')
多分支结构if...elif...(else)
[][7]
- 自上至下执行,从if表达式开始执行,根据是否成立输出布尔值结果;执行表达式结果为False时会跳转至下一elif表达式,直到表达式执行为True时执行该if/elif下的语句块;若均为False,将执行else对应语句。
- else语句块在多分支结构中不是必须的。
# 演示:多分支结构的使用-成绩评级
score=eval(input('请输入成绩:'))
if score<0 or score>100:
print('成绩有误!')
elif 0<=score<60:
print('F')
elif 60<=score<70:
print('D')
elif 70<=score<80:
print('C')
elif 80<=score<90:
print('B')
else:
print('A')
选择结构的嵌套
单分支结构、双分支结构和多分支结构在实际开发中是可以互相嵌套使用的,内层的分支结构将作为外层分支结构的语句块使用。
# 演示:嵌套if的使用
ans=input('你喝酒了吗?')
if ans=='y': # 酒驾嫌疑
prf=eval(input('自动检测酒精含量:')
if prf<20:
print('不构成酒驾,祝您一路顺风')
elif prf<80:
print('酒驾')
else:
print('醉驾')
else:
print('祝您一路顺风')
多条件选择结构
and连接多条件:与逻辑
# 演示:and连接多条件
usr_n=input('键入用户名:')
usr_pw=input('键入密码:')
if usr_n=='leozhn' and usr_pw=='nhzoel':
print('登录成功')
else:
print('用户名或密码错误,请重试')
or连接多条件:或逻辑
# 演示:or连接多条件
score=eval(input('请输入成绩:'))
if score<0 or score>100:
print('成绩有误!')
else:
print('成绩有效,为:',score)
模式匹配结构match...case
该功能为Python 3.11的新特性,适用于字符串类型的快速匹配。
# 演示:match...case
scr=input('请输入成绩等级:')
match scr:
case 'A':
print('优秀')
case 'B':
print('良好')
case 'C':
print('中等')
case 'D':
print('及格')
case 'F':
print('不及格')
循环结构
遍历循环结构for
- for循环首先会判断遍历对象中是否存在元素。
- 若有,则取出一个元素赋值给循环变量,然后执行语句块的操作,再回到开头重复判断、赋值、执行语句块的操作。
- 直到所有对象从迭代对象中取出,for循环结束。
遍历for循环的对象
- 字符串
- 文件
- 组合数据类型
range
函数(区间函数,用于产生一个前闭后开的整数区间,即[n,m)
)
# 演示1:for循环遍历字符串
for i in 'hello':
print(i)
'''
输出结果:
h
e
l
l
o
'''
# 演示2:for循环遍历range函数所指区间
for i in range(1,11):
#print(i) # 输出结果同上,会展示1~10的整数
if i%2==0:
print(i,'是偶数') # 找出1~10的偶数
# 演示3:使用for和range计算1~10的累加和
s=0 # 用于存储累加和
for i in range(1,11):
s+=i # s=s+i
print('1~10的整数累加和为',s)
# 演示4:判断100~999之间的水仙花数
a=b=c=0 # 用于存储个位、十位和百位上的数字
for i in range(100,1000):
a=i//100 # 获取百位上的数字
b=i//10%10 # 获取十位上的数字
c=i%10 # 获取个位上的数字
if i==a**3+b**3+c**3:
print(i,'是一个千位以内的水仙花数')
遍历循环结构for...else
执行else语句的情况:只有循环正常完成所有遍历时,才会输出else语句。
# 演示:遍历循环的扩展形式
s=0 # 存储累加和
for i in range(1,10):
s+=i
else:
print('1-10之间的累加和为:',s)
无限循环结构while
while是有条件的无限循环结构。它如同if函数,会先判断表达式是否成立,再执行语句块并重复循环,或输出结果。
while循环的四个步骤
- 初始化变量
- 条件判断
- 语句块
- 改变变量
while语句结构
# 演示1:while循环的使用
asw=input('今天要上课吗?y/n') # 初始化变量
while asw=='y' # 条件判断
print('好好学习,天天向上') # 语句块
asw=input('今天要上课吗?y/n') # 改变变量
# 演示2:求1~100的累加和
s=0 # 存储累加和
i=1 # 初始化变量
while i<=100: # 条件判断
s+=i # 语句块(s=s+i,累加每次循环i的赋值和)
i+=1 # 改变变量(i=i+1,使得i的值变化)
print('1到100之间的累加和:',s)
无限循环结构while...else
# 演示:求1~100的累加和
s=0 # 存储累加和
i=1 # 初始化变量
while i<=100: # 条件判断
s+=i # 语句块(s=s+i,累加每次循环i的赋值和)
i+=1 # 改变变量(i=i+1,使得i的值变化)
else:
print('1到100之间的累加和:',s)
# 演示2:模拟用户登录
i=0 # 初始化变量
while i<3:
usr_name=input('请输入用户名:')
usr_pw=input('请输入密码:')
if usr_name=='leo' and usr_pw='888888':
print('登录成功')
i=10 # 改变变量i:i大于3,退出循环
else:
if i<2:
print('用户名或密码不正确,您还有',2-i,'次机会')
i+=1 # 改变变量i
if i==3:
print('您的机会已耗尽')
循环结构的嵌套
循环结构也可以嵌套,在一个循环结构中嵌套另外一个完整的循环结构就称为嵌套循环。