py语法之流程控制

一、顺序结构

python 中所有的程序都由顺序、分支、循环三种结构组合而成,顺序结构是所有程序的默认执行规则,代码按照从上到下、从左到右的书写顺序,逐行依次执行,中间没有跳转、判断或重复,走完一行自动进入下一行。它的执行路径唯一,写的顺序就是运行的顺序,任何复杂程序的底层都包含顺序执行。

name = "小明"
age = 20
print("姓名:", name)
print("年龄:", age)

二 分支结构

2.1 什么是分支结构

根据条件判断的结果(True/False),选择性地执行某一段代码,跳过其他分支。用来处理 “满足条件才做、不同情况做不同事” 的场景。

2.2 为什么要用分支结构

我们需要根据条件来决定做什么事情,比如:如果今天下雨,就带伞。

程序中也设置了同样的的机制来控制计算机具备判断能力,即分支结构。

2.3 如何使用分支结构

2.3.1 if 语法

条件结构用if关键字来实现分支结构。

1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行。

2、条件可以是任意表达式,但执行结果必须为布尔类型。在if判断中所有的数据类型也都会自动转换成布尔类型。

  • None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
  • 其余均为True

完整语法如下:

if 条件1:   # 如果条件1的结果为True,就依次执行:代码1、代码2,......
    代码1
    代码2
    ......
elif 条件2: # 如果条件2的结果为True,就依次执行:代码3、代码4,......
    代码3
    代码4
    ......
elif 条件3: # 如果条件3的结果为True,就依次执行:代码5、代码6,......
    代码5
    代码6
    ......
else:     # 其它情况,就依次执行:代码7、代码8,......
    代码7
    代码8
    ......

2.3.2 if 单分支

案例1:女人的年龄>30岁,那么:叫她阿姨

age_of_girl=31
if age_of_girl > 30:
    print('阿姨好')

2.3.3 if 双分支

案例2:女人的年龄>30岁,那么:叫她阿姨,否则:叫她姐姐

age_of_girl=18
if age_of_girl > 30:
    print('阿姨好')
else:
    print('姐姐好')

案例3:女人的年龄 >=18 并且 <22 岁,身高 >170 ,体重 <100,还漂亮,那么:马上去表白,否则:叫阿姨好。

age_of_girl=18
height=171
weight=99
is_pretty=True
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    print('表白...')
else:
    print('阿姨好')

2.3.4 if 多分支

案例4:

如果成绩>=90,那么:优秀

如果成绩>=80且<90,那么:良好

如果成绩>=70且<80,那么:普通

其他情况:很差

score=input('>>: ')
score=int(score)
 
if score >= 90:
    print('优秀')
elif score >= 80:
    print('良好')
elif score >= 70:
    print('普通')
else:
    print('很差')

2.3.5 if 嵌套

案例5:女人的年龄 >=18 并且 <22 岁,身高 >170 ,体重 <100,还漂亮,那么:马上去表白,否则:叫阿姨好。

  • 在表白的基础上继续:如果表白成功,那么:在一起;否则:打印。。。
age_of_girl=18
height=171
weight=99
is_pretty=True
success=False
 
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    if success:
        print('表白成功,在一起')
    else:
        print('什么爱情不爱情的,哥不在乎')
else:
    print('阿姨好')

2.3.6 作业题

练习1: 登陆功能

name=input('请输入用户名字:').strip()
password=input('请输入密码:').strip()
if name == 'tony' and password == '123':
    print('tony login success')
else:
    print('用户名或密码错误')

练习2:根据用户输入内容打印其权限

#!/usr/bin/env python
#根据用户输入内容打印其权限
 
'''
egon --> 超级管理员
tom  --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
'''
name=input('请输入用户名字:')
 
if name == 'egon':
    print('超级管理员')
elif name == 'tom':
    print('普通管理员')
elif name == 'jack' or name == 'rain':
    print('业务主管')
else:
    print('普通用户')

三 循环结构

3.1 什么是循环结构

在条件成立的前提下,重复执行同一段代码,常常用来解决需要多次重复操作的问题,避免写大量重复代码。

3.2 为什么要用循环结构

我们某些时候需要重复做某件事情,比如吃饭需要重复夹菜。

程序中设置了相应的机制来控制计算机具备这种循环做事的能力。

3.3 while循环

3.3.1 while循环语法

python 中有 while 与 for 两种循环机制,其中 while 循环称之为条件循环。

while的运行步骤:

  • 步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
  • 步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,如果条件为False,则循环终止

语法如下:

while 条件:  
    代码1
    代码2
    代码3
    ......

插图:while循环

image-20260701160136059

3.3.2 while循环的基本使用

案例一:用户认证程序

用户认证程序的基本逻辑就是接收用户输入的用户名、密码然后与程序中存放的用户名、密码进行判断,一致则登陆成功,不一致则输出账号或密码错误。

通常认证失败的情况下,会要求用户重新输入用户名和密码进行验证,如果我们想给用户三次试错机会,本质就是将上述代码重复运行三遍,我先来写一个顺序结构!

username = "jason"
password = "123"
# 第一次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")

# 第二次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")
 
# 第三次验证
inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")
 

使用while循环实现

username = "jason"
password = "123"
# 记录错误验证的次数
count = 0
while count < 3:
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
    else:
        print("输入的用户名或密码错误!")
        count += 1

3.3.3 while+break

while用于进入循环,而break用于退出循环,即循环中一旦执行到break,就直接退出整个循环。

案例二:使用了while循环后,代码确实精简多了,但问题是用户输入正确的用户名密码以后无法结束循环,那如何结束掉一个循环呢?这就需要用到break了!

username = "jason"
password = "123"
# 记录错误验证的次数
count = 0
while count < 3:
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        break # 用于结束本层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

案例三:while循环嵌套+break

如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break。

username = "jason"
password = "123"
count = 0
while count < 3:  # 第一层循环
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        while True:  # 第二层循环
            cmd = input('>>: ')
            if cmd == 'quit':
                break  # 用于结束本层循环,即第二层循环
            print('run <%s>' % cmd)
        break  # 用于结束本层循环,即第一层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

案例四:while循环嵌套+tag的使用

针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束。

username = "jason"
password = "123"
count = 0
 
tag = True
while tag: 
    inp_name = input("请输入用户名:")
    inp_pwd = input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        while tag:  
            cmd = input('>>: ')
            if cmd == 'quit':
                tag = False  # tag变为False, 所有while循环的条件都变为False 
                break
            print('run <%s>' % cmd)
        break  # 用于结束本层循环,即第一层循环
    else:
        print("输入的用户名或密码错误!")
        count += 1

3.3.4 while+continue

案例五:break代表结束本层循环,而continue则用于结束本次循环,直接进入下一次循环。

# 打印1到10之间,除7以外的所有数字
number=11
while number>1:
    number -= 1
    if number==7:
        continue # 结束掉本次循环,即本次循环continue之后的代码都不会运行了,而是直接进入下一次循环
    print(number)

3.3.5 while+else

案例五:在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break 中止的话,就会执行else后面的语句,所以我们可以用else来验证,循环是否正常结束。

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦   #没有被break打断,所以执行了该行代码
-----out of while loop ------

如果执行过程中被break,就不会执行else的语句

count = 0
while count <= 5 :
    count += 1
    if count == 3:
        break
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
-----out of while loop ------ #由于循环被break打断了,所以不执行else后的输出语句

3.3.6 while 作业题

练习1:寻找1到100之间数字7最大的倍数(结果是98)

number=100
while number>0:
    if number%7==0:
        print(number)
        break
    number-=1

练习2:猜数字游戏(猜3次,猜学姐的年龄)

age=18
count=0
while count<3:
    count+=1
    guess = int(input(">>:"))
    if guess > age :
        print("猜的太大了,往小里试试...")
    elif guess < age :
        print("猜的太小了,往大里试试...")
    else:
        print("恭喜你,猜对了...")

3.4 for循环

循环结构的第二种实现方式是for循环,for循环可以做的事情while循环都可以实现,之所以用for循环是因为在循环取值(即遍历值)时for循环比while循环的使用更为简洁。

3.4.1 for的迭代对象

for 循环通过遍历可迭代对象进行循环,可迭代对象可以是字符串、列表或者字典,循环的次数取决于包含值的个数。我们之后会专门讲解可迭代对象。

语法:

for 变量名 in 可迭代对象: 
    代码一
    代码二
    ...

示例:for循环遍历列表

for item in ['a','b','c']:
    print(item)

参照上面示例来介绍 for 循环的运行步骤:

  • 从列表['a','b','c']中读出第一个值赋值给item(item=‘a’),然后执行循环体代码;
  • 从列表['a','b','c']中读出第二个值赋值给item(item=‘b’),然后执行循环体代码;
  • 重复以上过程直到列表中的值全部读完 后,结束循环。

image-20260701160027020

其他示例:

names = ["yss", "xiaozhouzhou", "tom", "jack", 'lili']
n = 0
while n < len(names):
    print(names[n])
    n += 1

info = [
    ["yss", 18, 10],
    ["tom", 28, 18],
    ["jack", 29, 38],
]
for a,b,c in info:
    print("name: %s , age: %s , level: %s" %(a,b,c) )
    
    
  
dic = {
    'name': "yss",
    'age': 18,
    'level': 10
}
for k in dic:
    print(k,dic[k])
    
    
for i in "ab你cdef":
    print(i)

3.4.2 for+range

range 用于产生一个随机数序列,本质是一个数组。

python2中 range 会真正创建一个数组出来,而python3中是即用即取,不会真正创建一个数组出来。

语法:range(首,尾,步长)
range(1,5) #1,2,3,4 左闭右开
range(1,5,2) #1,3

案例一:打印数字0-5

# 简单版:for循环的实现方式
for count in range(6):  # range(6)会产生从0-5这6个数
    print(count)
 
# 复杂版:while循环的实现方式
count = 0
while count < 6:
    print(count)
    count += 1

3.4.3 for+enumerate()

enumerate() 函数用于列举目标对象中的元素。对于列表来说列出列表中的值,对于字典来说列出字典中的key。

names = ["yss", "xiaozhouzhou", "tom", "jack", 'lili']
for i,name in enumerate(names):
    print(i,name)
    
dic = {'name':'yss','age':18,'level':10}
for k in enumerate(dic):
    print(k)

3.4.4 for循环嵌套

#请用for循环嵌套的方式打印如下图形:
*****
*****
*****
 
for i in range(3):
    for j in range(5):
        print("*",end='')
    print()  # print()表示换行

注意:break 、continue、else 也可以用于for循环,使用语法同while循环。

3.4.5 作业题

练习一:打印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print('%s*%s=%s' %(i,j,i*j),end=' ')
    print()

练习二:打印金字塔

# 分析
'''
#max_level=5
     *        # current_level=1,空格数=4,*号数=1
    ***       # current_level=2,空格数=3,*号数=3
   *****      # current_level=3,空格数=2,*号数=5
  *******     # current_level=4,空格数=1,*号数=7
 *********    # current_level=5,空格数=0,*号数=9
 
# 数学表达式
空格数=max_level-current_level
*号数=2*current_level-1
'''
# 实现:
max_level=5
for current_level in range(1,max_level+1):
    for i in range(max_level-current_level):
        print(' ',end='') #在一行中连续打印多个空格
    for j in range(2*current_level-1):
        print('*',end='') #在一行中连续打印多个空格
    print()
posted @ 2026-07-01 19:02  cuckooyang  阅读(17)  评论(0)    收藏  举报