流程控制

什么是流程控制

控制流程的执行流程

流程控制的分类

顺序结构:从上往下依次执行

分支结构:根据条件判断真假,执行不同的子代码

循环结构:根据条件判断是否重复执行子代码

必知必会

  1. 在python中使用缩进来表示代码的从属关系
  2. 并不是所有的代码都可以有子代码
  3. 如果多行代码同属于一个父代码,就要保证相同的缩进
  4. 相同缩进的代码彼此之间按照顺序结构执行,没有从属关系

补充:一行代码冒号(相当于要拥有子代码)结束,那么紧挨着下一行必是缩进

分支结构

分支结构

if语法

语法结构

if 条件1:
    条件1成立执行的代码块

if与else分支

语法结构

if 条件1:
    条件1成立执行的代码块
else:
    条件1不成立执行的代码块

if与elif与else分支

语法结构

if 条件1:
     条件1成立执行的代码块
elif 条件2:
    条件1不成立,条件2成立执行的代码块
elif 条件3:
    条件1不成立,条件2也不成立,条件3成立执行的代码块
else:
    条件1、2、3都不成立执行的代码块
  

if 嵌套

语法结构

if 条件1:
    条件1成立执行的代码块
    if 条件2:
        条件1成立,并且条件2也成立执行的代码块
    else:
        条件1成立,但条件2不成立执行的代码块
else:
    条件1不成立执行的代码块

分支结构练习题

练习一

编写一个用户登录程序,如果用户名是kevin并且密码是123 则打印登录成功,如果不是则打印用户名或密码错误

# 1.输入用户名  strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
user_name = input("请输入用户名:").strip()
# 2.输入密码
password = input("请输入密码:").strip()
# 3.判断输入的用户名是否等于kevin,并且输入的密码是否等于123
if user_name == 'kevin' and password == '123':
    # 4.判断条件为True,执行此代码
    print("欢迎用户%s" % user_name)
else:
    # 5.判断条件为False,执行此代码
    print("密码或者账号错误")

练习二

编写一个成绩评判系统,如果成绩大于90 则打印优秀,如果成绩大于80 则打印良好,如果成绩大于70 则打印一般,如果成绩大于60 则打印及格,如果成绩小于60 则打印挂科

# 1.输入你的成绩
score = input("输入你的成绩")
# 2.判断输入的是数字,isdigit()方法检测字符串是否只由数字组成
while not score.isdigit():
    # 3.判断为不是,执行此代码
    score = input('请输入数字,重新输入你的成绩 ')
# 4.强制将输入数据类型,转换为int类型
score = int(score)
# 5.如果大于90,执行子代码
if score > 90:
    print('优秀')
# 6.如果大于80,执行子代码
elif score > 80:
    print('良好')
# 7.如果大于70,执行子代码
elif score > 70:
    print('一般')
# 8.如果大于60,执行子代码
elif score > 60:
    print('及格')
# 9.其他情况,执行子代码
else:
    print('挂科')

循环结构

循环结构

while 循环语法

语法结构

while 条件1:
    条件1成立执行的循环体代码块
    循环体代码块执行完毕之后再次进行判断条件,直至条件不成立

while与 break 使用

语法结构

while 条件1:
    条件1成立执行的循环体代码块
    循环体代码块执行完毕之后再次进行判断条件,直至条件不成立
    break  # 用于结束本层循环(break只能结束所在那层循环)

while 与 continue 使用

语法结构

while 条件1:
    条件1成立执行的循环体代码块
    循环体代码块执行完毕之后再次进行判断条件,直至条件不成立
    continue  # 用于结束本次循环,直接开始下一次循环

while 与else 使用

语法结构

while 条件1:
    条件1成立执行的循环体代码块
    循环体代码块执行完毕之后再次进行判断条件,直至条件不成立
else:
    循环体代码正常运行结束 则会执行该子代码块

while 嵌套

语法结构

while 条件1:
    条件1成立执行的循环体代码块
    循环体代码块执行完毕之后再次进行判断条件,直至条件不成立
    if 条件1:
        条件1成立执行的代码块
        while 条件1:
            条件1成立执行的循环体代码块
            循环体代码块执行完毕之后再次进行判断条件,直至条件不成立
    else:
        条件1不成立执行的代码块

while嵌套与 “变量名”使用

while循环嵌套很多层,如果要在某一层直接退出所有循环,可以让在while循环的条件共用一个变量名,该变量的初始变量值为True,在需要结束的循环层将变量值改成False,则所有循环层都结束

使用

编写一个用户登录程序,如果用户名是kevin并且密码是123 则进入输入指令系统,按键q可以结束程序,如果不是则打印用户名或密码错误,并重复登录

# 6.定义一个变量名
is_flag = True
# 7.判断is_flag是否为True
while is_flag:

    # 1.输入用户名  strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
    user_name = input("请输入用户名:").strip()
    # 2.输入密码
    password = input("请输入密码:").strip()
    # 3.判断输入的用户名是否等于kevin,并且输入的密码是否等于123
    if user_name == 'kevin' and password == '123':
        # 4.判断条件为True,执行此代码
        print("欢迎用户%s" % user_name)
        # 8.判断is_flag是否为True
        while is_flag:
            # 9.判断为True,输入指令
            cmd = input("请输入指令:").strip()
            print("正在执行指令:%s" % cmd)
            # 10.判断指令是否为q
            if cmd == 'q':
                # 11.判断是q执行此代码
                print("bye,bye~")
                # 12.设置is_flag全局变量值为False
                is_flag = False
    else:
        # 5.判断条件为False,执行此代码
        print("密码或者账号错误")
  

while 死循环

语法结构

while True:
  循环体代码块,除非遇到break

补充:死循环会影响电脑的性能,一直占用CPU工作,甚至会造成硬件的损坏

for 循环语法 (高频率)

语法结构

for 变量名 in 循环对象  # 可以是字符串、列表、字典、元祖、集合
    循环体代码块  # 每次执行都会依次将循环对象的元素赋值给变量名

⚠️注意:

  1. 对于for循环语法结构中的变量名,应该是见名知意
  2. 循环字典只能取到字典中的keyvalue无法直接获取
  3. 循环字典、集合是无序的

for 与 break使用

语法结构

for 变量名 in 循环对象  # 可以是字符串、列表、字典、元祖、集合
    循环体代码块  # 每次执行都会依次将循环对象的元素赋值给变量名
    break  # 用于结束本层循环(break只能结束所在那层循环)

for 与 continue使用

语法结构

for 变量名 in 循环对象  # 可以是字符串、列表、字典、元祖、集合
    循环体代码块  # 每次执行都会依次将循环对象的元素赋值给变量名
    continue  # 用于结束本次循环,直接开始下一次循环

for嵌套

语法结构

for 变量名 in 循环对象  # 可以是字符串、列表、字典、元祖、集合
    循环体代码块  # 每次执行都会依次将循环对象的元素赋值给变量名
    for 变量名 in 循环对象  # 可以是字符串、列表、字典、元祖、集合
    循环体代码块  # 每次执行都会依次将循环对象的元素赋值给变量名

range函数用法

函数语法*

range(start, stop[, step])

参数说明:

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0,5)
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5)是[0, 1, 2, 3, 4]没有5
  • step:步长,默认为1。例如:range(0, 5)等价于 range(0, 5, 1)

补充:

rangepython2 python3的区别

  1. python2range直接输出是个列表,在元素很多的情况下比较占用空间
  2. 在python2中有一个xrange 其实就是python3里面的range
  3. python3 range() 返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表

循环结构练习题

练习一

编写一个猜年龄的游戏,如果不对的情况下可以猜三次 如果对了直接结束,三次机会用完之后提示用户是否继续猜测,如果用户输入了y,则再给用户三次机会,如果用户输入n则直接结束

# TODO:写任何业务 都应该先搭建主体功能 之后再考虑配套优化
# 1.定义真是的年龄
real_age = 18
# 7.定义一个记录用户猜测次数的计数器
guess_count = 1
# 5.将需要反复执行的代码缩进到while子代码中
while True:
    # 9.判断当前用户到底猜测了几次
    if guess_count == 4:
        # 10.提示用户已经尝试了三次 是否继续尝试
        is_again = input('您已经尝试了三次 是否继续(y/n)>>>:')
        # 11.判断用户是否继续
        if is_again == 'y':
            # 12.重置用户尝试的次数
            guess_count = 1
        else:
            # 13.直接结束循环
            print('下次记得来玩哟!!!')
            break
    # 2.获取用户猜测的年龄
    guess_age = input('请输入猜测的年龄>>>:')
    # 3.将字符串类型的数字转换成整型类型的数字
    guess_age = int(guess_age)  # 该代码可能会报错 暂且忽略
    # 4.比较猜测的年龄和真实年龄
    if guess_age > real_age:
        print('哎呀 讨厌 猜大了')
        guess_count += 1  # 8.猜错了就应该自增依次
    elif guess_age < real_age:
        print('不好意思 没那么小')
        guess_count += 1  # 8.猜错了就应该自增依次
    else:
        print('哈哈哈 你真棒!!!')
        # 6.一旦猜对了 立刻结束循环
        break

练习二

打印一个金字塔

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

小知识

什么是爬虫

通过编写代码去网络上爬取我们需要的数据

案例

import requests
url = 'https://www.changchen.cc/archives/%s/'
for i in range(0, 100, 1):
    real_url = url % i
    response = str(requests.get(real_url))
    if '200' in response:
        print(real_url)
    # 通过代码请求页面获取页面数据
    # 然后根据业务需求筛选出特定的内容
Last modification:March 9, 2022
如果觉得我的文章对你有用,请随意赞赏