Python(3):程序的流程控制-if/match/for/while

程序的描述方式

自然语言

自然语言,就是使用人类语言、直接描述程序。
IPO - Input, Process, and Output

流程图

流程图使用一系列图形、流程线和文字说明描述程序的基本操作和控制流程,主要适用于较短的算法。

伪代码

是介于自然语言和编程语言之间的一种算法描述语言,如果程序比较小,可以直接用代码描述。

# 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)
  1. 条件判断:

    • condition 是一个表达式,其值为布尔型(TrueFalse)。
    • 如果 conditionTrue,则执行 if 语句块中的代码;否则,跳过该块。
  2. 使用比较运算符:

    • 比较运算符(如 ==, !=, <, >, <=, >=)可用于生成布尔型的条件。
  3. 单语句形式:

    • 单分支结构可以只包含一个语句,该语句直接跟在 if 后面,无需使用缩进。
  4. 布尔值的使用:

    • 可以直接使用布尔值或布尔型变量作为条件判断。
    • 利用布尔值的特性进行条件判断,如判奇偶、判空等。
  5. 表达式作为条件判断:

    • 表达式可以是一个单纯的布尔型变量。

双分支结构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]

  1. 自上至下执行,从if表达式开始执行,根据是否成立输出布尔值结果;执行表达式结果为False时会跳转至下一elif表达式,直到表达式执行为True时执行该if/elif下的语句块;若均为False,将执行else对应语句。
  2. 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

  1. for循环首先会判断遍历对象中是否存在元素。
  2. 若有,则取出一个元素赋值给循环变量,然后执行语句块的操作,再回到开头重复判断、赋值、执行语句块的操作。
  3. 直到所有对象从迭代对象中取出,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循环的四个步骤

  1. 初始化变量
  2. 条件判断
  3. 语句块
  4. 改变变量

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('您的机会已耗尽')

循环结构的嵌套

循环结构也可以嵌套,在一个循环结构中嵌套另外一个完整的循环结构就称为嵌套循环。

最后修改:2024 年 07 月 03 日
喵~