python之流程控制


目录
  • 流程控制理论
    • 什么是流程控制
    • 执行流程的分类
      • 顺序结构
      • 分支结构
      • 循环结构
  • 必知必会
  • 分支结构之if语句
    • 单if分支
    • if与else分支
    • if与elif与else分支
    • if的嵌套
    • if的练习题
      • 题目
      • 答案
  • 循环结构之while循环
  • 循环结构之for循环
  • break与continue
    • break的应用
    • continue的应用
  • 作业
    • 答案

流程控制理论

什么是流程控制

流程控制其实就是控制事物的执行流程

执行流程的分类

顺序结构

顺序结构是最简单的程序结构,它是从上往下依次执行的。

分支结构

分支结构就是根据某些条件的判断做出不同的执行流程。

循环结构

循环结构就是根据某些条件的判断循环反复的做相同的事情,直到有一个循环结束的条件。

必知必会

  1. 在python当中,我们都是使用缩减来表示代码的从属关系,比如:

    if True:
        语句1
        语句2
    语句3
    

    这段代码中语句1和语句2都是附属于if语句的,语句3是与if同一级别的,我们也可以称语句1和语句2是if语句的子代码。

  2. 并不是所有的代码都可以有子代码的,如果一行代码的结尾是冒号结束,那么下一行必定是这行代码的子代码。

  3. 如果多行代码属于同一个父代码,那么这个多行代码需要保证相同的缩进。在python中推荐使用四个空格来表示缩进,或者是按Tab键来缩进。

  4. 具有相同缩进量的代码彼此之间按照顺序结构执行。

分支结构之if语句

单if分支

语法结构:

if 判断条件:
    执行语句
    ...

这段语法表示:当判断条件成立时,执行后面的语句。

举例:

# 如果age大于等于18,则打印“已成年”
if age >= 18:
    print('已成年')

if与else分支

语法结构:

if 判断条件:
    语句1
    ...
else:
    语句2
    ...

这段语法表示:当判断条件成立时,执行语句1,否则执行语句2。

举例:

# 如果age大于等于18,则打印“已成年”,否则打印“未成年”
if age >= 18:
    print('已成年')
else:
    print('未成年')

if与elif与else分支

语法结构:

if 条件1:
    语句1
    ...
elif 条件2:
    语句2
    ...
elif 条件3:
    语句3
    ...
else:
    语句4
    ...

这段代码表示:当满足条件1时,执行语句1;当不满足条件1,满足条件2时,执行语句2;当不满足条件1,且不满足条件2时,满足条件3时,执行语句3;当以上条件都不满足时,执行语句4。

举例:

# 年龄划分
if age < 18: # 如果年龄在18岁以下,打印“少年”
    print('少年')
elif age < 30: # 如果年龄在18岁及以上,30岁以下,打印“青年”
    print('青年')
elif age < 40: # 如果年龄在30岁及以上,40岁以下,打印“壮年”
    print('壮年')
elif age < 50 # 如果年龄在40岁及以上,50岁一下,打印“中年”
	print('中年')
else: # 如果不符合以上条件,则是50岁及以上的年龄,打印“老年”
    print('老年')

if的嵌套

其实在if的子代码当中,我们还可以再添加数个if代码分支,这个我们称为if的嵌套。

语法结构:

if 条件1:
    语句1
    if 条件2:
        语句2
        ...
    ...

举例:

# country表示国家,province表示省份
if country == "中国":# 如果国家是中国,则进入子代码
    if province == "上海":# 如果省份是上海,则打印内容
        print('他在中国,是上海人')
else:# 如果country不是中国,说明他是外国人
    print('他是外国人')

if的练习题

题目

  1. 编写一个用户登录程序,如果用户名是'user',并且密码是'123 ',则打印登录成功,如果不是则打印用户名或密码错误。
  2. 编写一个成绩评判系统,90分以上打印优秀,70分以上打印良好,60分以上打印及格,60分以下打印不及格。

答案

  1. username = input("请输入用户名:") # 获取用户名
    password = input("请输入密码:") # 获取密码
    if username == 'user' and password == '123': # 如果用户名为'user',并且密码为'123',则打印'登录成功'
        print("登录成功")
    else: # 否则打印'用户名或密码错误'
        print("用户名或密码错误")
    
  2. grades = int(input("请输入成绩:")) # 获取成绩,并将成绩从字符串类型转换成整型
    
    if grades > 90: # 成绩大于90,打印优秀
        print('优秀')
    elif grades > 70: # 成绩大于70,打印良好
        print('良好')
    elif grades > 60: # 成绩大于60,打印及格
        print('及格')
    else: # 成绩小于60,打印不及格
        print('不及格')
    

循环结构之while循环

语法结构:

while 判断条件:
    执行语句
    ...

这段代码表示:当判断条件为True时,执行子代码中的语句,子代码中的语句执行完后,再次判断条件是否为True,如果为True,则继续执行子代码;如果为False,则跳出while循环。

举例:

a = 0 # 给a赋值0
while a < 10: # 判断a是否小于10,小于10则进入循环,否则结束while循环
    print(a) # 每经过一次循环,打印a的值
    a += 1 # 每经过一次循环,a的值都会加1

循环结构之for循环

语法结构:

for 变量名 in 可迭代对象:
    语句1
    ...

在for循环中,会遍历可迭代对象,按顺序把可迭代对象中的每一个值赋给变量名。

目前可迭代对象需要知道的有:字符串、列表、字典....

举例:

# 案例1,遍历字符串
for s in 'abcde': # 遍历'abcd',拆分成'a', 'b', 'c', 'd'赋值给变量s
    print(s) # 打印s
'''
输出结果
a
b
c
d
'''
# 案例2,遍历列表
for l in [1, 2, 'a']: # 遍历[1, 2, 'a'],拆分成1, 2, 'a'赋值给变量l
    print(l) # 打印l
'''
输出结果
1
2
a
'''
# 案例3,遍历字典
for k in {'name':'tom', 'age': 18, 'sex':'男'}: # 遍历字典时只会将字典中的key赋值给变量名,也就是'name', 'age', 'sex'赋值给变量k
    print(k) # 打印k
'''
输出结果
name
age
sex
'''
# 案例4,range函数
for i in range(4): # range(4)可以把他看作是列表[0, 1, 2, 3],或者[0,4)的整数
    print(i)
'''
输出结果
0
1
2
3
'''

break与continue

break的应用

break主要用于直接结束本层循环。

举例:

a = 1
while True: # 整个死循环
    print(a) # 打印a的值
    if a == 4: # 当a的值为4时,跳出while循环
        break # 跳出本层循环
    a += 1 # 每次循环a的值加1
'''
输出结果
1
2
3
4
'''

continue的应用

break主要用于结束当前这次的循环,直接进入下一次循环。

举例:

# 只输出偶数
a = 0
while a < 10: # 当a < 10时,进入循环
    if a % 2 == 0: # 当a除2余数为0时,说明是偶数
        a += 1 # a加1
        continue # 跳过下面的语句,直接进入下一次循环
    a += 1 # a加1
    print(a) # 打印a
'''
输出结果
2
4
6
8
10
'''

作业

编写一个猜数字的游戏。

基本要求:

如果不对的情况下可以猜三次,如果对了直接结束。

拔高练习:

三次机会用完之后提示用户是否继续猜测,如果用户输入了y,则再给用户三次机会,如果用户输入n则直接结束。

答案

num = 65 # 自己定义一个数字
count = 3 # 机会次数为3

while count > 0: # 如果剩余机会大于0次,继续猜测

    guess_num = int(input("请输入你要猜的数字:")) # 获取输入的数字并转换成整型

    if guess_num < num: # 如果猜测的数字比定义的数字小
        print("猜小了!")
        count -= 1 # 剩余机会减1次
        print("你还有%d次机会!" % count) # 输出剩余机会
    elif guess_num == num: # 如果猜中了数字
        print("恭喜你,猜中了")
        break # 退出循环,结束游戏
    else: # 不是猜小了,也没猜中,那就是猜大了
        print("猜大了!")
        count -= 1 # 剩余机会减1次
        print("你还有%d次机会!" % count) # 输出剩余机会

    if count == 0: # 判断剩余机会是否为0
        print("你的机会已用尽,是否继续(输入y继续,输入n结束):")
        while True: # 死循环
            is_continue = input() # 获取用户输入的值

            if is_continue == 'y': # 如果输入的是'y'
                count = 3 # 剩余机会重新变为3
                break # 结束本层的死循环
            elif is_continue == 'n': # 如果输入的是'n'
                print("欢迎再次游玩!") 
                break # 结束本层的死循环
            else: # 如果用户没有输入'y'或者'n',则提示
                print("请输入y或者n!")