Python的流程控制

一、引入

流程控制就是控制程序的执行流程(顺序),而程序的执行结构为三种结构:顺序结构、分支结构、循环结构。

顺序结构:同级代码从上到下去执行。(前面我们学习的都是顺序结构。程序从上到下执行。只要你写的代码。我都给你你执行一次,非常傻)

分支结构:用到if判断。条件成立时执行那块代码。条件不成立时执行那块代码。

循环结构:用到while循环和for循环。

二、分支结构

1、什么是分支结构

分支结构就是根据程序的条件判断的真假来执行不同分支对应的代码。

2、为什么要有分支结构

人们在某些情况下,需要做出判断。比如:如果今天中午肚子饿了,我就去吃饭。

人们在某种情况下,也是需要做出判断的,而计算机也是。比如:如果用户输入的密码正确,我就让她登录到后台页面。

3、如何使用分支结构

if语句的使用

语法结构:

'''
if (条件表达式1):       #  如果条件表达式的结构为True(真)则执行(if语句里面的代码)即代码1和代码2。
    代码1.......   # 注意由于代码1和代码2,是if语句里面的子结构,那么我们就需要在其前面加上四个空格。(一般为一个tab键)
    代码2.......
'''

示例:

age = int(input('请输入你的年龄: '))   # 接受用户输入的年龄
if (age > 16):          # 如果用户输入的年龄大于16,则输出你的岁数比我大哦
    print('你的岁数比我大哦')

运行示例:

Python的流程控制插图

可以看到,当用户输入20的时候,那么20 > 16,条件是成立的,因此执行if语句里面的。所以控制台打印出了 “你的岁数比我大哦”。

当用户输入的年龄小于16的时候,那么条件就不成立,则不执行if语句里面的代码。

if..else的使用

当我们想让if语句,当条件成立时执行if语句里面的代码,而当条件不成立时执行else语句里面的代码,那么我们就需要使用到if..else语句。

语法结构:

'''
if (条件表达式):    # 当条件成立时(True),则执行if语句里面的代码。即代码1和代码2.
    代码1....
    代码2....
else:  # 当条件不成立时(False),则执行else语句里面的代码。即代码1和代码2。
    代码3....
    代码4....
'''

age = int(input('请输入你的年龄: '))
if (age > 16):
    print('你的岁数比我大哦')

示例:

age = int(input('请输入你的年龄: '))
if (age > 16):
    print('你的岁数比我大哦')
else:
    print('你的岁数还没我大呢!!!')

运行示例:

Python的流程控制插图1
if..elif..else的使用

假设我们需要判断多个条件的时候,不需要分开写多个if语句,而我们一个if语句就可以完成。这时候我们就需要使用到if..elif..else了。

语法结构:

'''
if (条件表达式1):  # 如果条件1不成立则执行条件2的判断
    代码1....
    代码2....
elif (条件表达式2): 
    代码3....
    代码4....
else:
    代码4....
'''

示例:

score = int(input('请输入你的成绩: '))

if (score >= 90 and score <= 100):
    print('天秀之子!!!!')
elif (score > 100):
    print('你输入的成绩超出了范围')
elif (score >=80):
    print('有点秀')
elif (score >=70 and score >= 60):
    print('继续努力')
elif(score < 0 ):
    print('你的成绩菜到了负数...')
else:
    print('菜鸡一个')
Python的流程控制插图2
总结

条件可以是任意表达式,但最后的结果必须是布尔类型。可以是显式布尔类型也可以是隐式布尔类型。

示例:

if (True):
    print('hello 我是True')

if (10):
    print('hello 我是int类型的10,转为布尔类型为True')

if (0):
    print('hello world')
else:
    print("Hi 我是int类型的0,转为布尔类型为False")

运行示例:

Python的流程控制插图3

三、循环结构

1、什么是循环结构

循环结构就是重复执行某个代码块

2、为什么要有循环结构

当我们重复做某件事情的时候。比如说,在旧时代,我们去银行办理业务。我们要把我们的告诉柜台人员。而当我们密码错误的时候。柜台人员会重复的告诉我们密码错误。而我们计算机也是需要如此。当我们使用ATM机办理业务的时候,会提示我们输入密码。当我们密码输入错误的时候。会让我们重新输入。这就是一个循环的体现。

3、如何使用循环结构

1、while循环使用

在Python中有两种循环机制,有while循环和for循环。

''''
while 条件:
    要循环的代码1...
    要循环的代码2...
    要循环的代码3...

while循环的步骤:
步骤1: 如果条件为真,则执行while语句里面的代码1和代码2以及代码3....
步骤2: 执行代码123...再次判断条件是否为Ture,如果为True,则继续执行代码123。如果为False,则停止循环。
'''

示例一:while循环的基本使用:

打印出0-5之间的数字:

count = 0  # 设置初始值
while count < 6:  
    print(count)  # 打印count变量的值
    count += 1 #  每循环一次,count自身加1

运行示例:

Python的流程控制插图4

可以看到,当第一次循环的时候,count为0,之后在条件中判断 0 < 6,很显然条件是成立的,之后会执行我们while结构里面的代码。此时会在控制台print(count)的值。之后count自身加1,再赋值给自身。此时count的值为2。再次对条件进行判断,2 < 6,显然条件也是成立的,因此继续执行while语句里面的代码。所以会执行print(count),此时count的值为2。因此在控制台输出了2。之后count又自身加1,再赋值给自身。此时count为3。依次类推。直到count为6的时候。那么6 < 6,很显然为False。因此不会执行while语句里面的了,至此该循环就结束。

登录认证程序示例:

#  初步的程序预览
#  效果:接受用户输入的用户名和密码,从原先保存好的密码中查找。如果用户名和密码都正常,则打印出Login success。反之打印账号或密码错误。
username = 'admin'
pwd  = '123'

inp_user = input('请输入你的用户名: ')
inp_pwd = input('请输入你的密码: ')

if (inp_user == username and inp_pwd == pwd):
    print('Login  success')
else:
    print('账号或密码错误!!!')

运行示例:

Python的流程控制插图5

可以看到,当我们的密码输入错误时,只会打印出账号或密码错误,却不能再次输入。

对用户输入错误进行优化:

username = 'admin'
pwd  = '123'

#  第一次验证
inp_user = input('请输入你的用户名: ')
inp_pwd = input('请输入你的密码: ')

if (inp_user == username and inp_pwd == pwd):
    print('Login  success')
else:
    print('账号或密码错误!!!')

# 第二次验证
inp_user = input('请输入你的用户名: ')
inp_pwd = input('请输入你的密码: ')

if (inp_user == username and inp_pwd == pwd):
    print('Login  success')
else:
    print('账号或密码错误!!!')

# 第三次验证
inp_user = input('请输入你的用户名: ')
inp_pwd = input('请输入你的密码: ')

if (inp_user == username and inp_pwd == pwd):
    print('Login  success')
else:
    print('账号或密码错误!!!')

对用户输入错误的次数进行了修改。当用户名或密码输入错误。则会再次输入。直到三次验证用完之后。方不能输入。

程序运行示例二:

Python的流程控制插图6

可以看到,当我们用户和密码输入错误的时候,的确让我们再次输入了。直到输入了三次。方不能输入。

但是这个程序有个Bug。就是当用户登录成功的时候,还是会提示输入用户名和密码。

也就是说,不管登录成功与否,都要至少输入3次登录验证。

并且程序是写法,还是copy了三次相同的代码。进行三次验证。。。这样是很low的

那么此时我们就需要使用循环结构,在一定条件下重复执行某段代码。

那么我们对程序进行再次优化:

username = 'admin'
pwd  = '123'

flag =True
while flag:
    in_user = input('请输入你的用户名: ')
    in_pwd = input('请输入你的密码:')
    if (in_user == username and in_pwd == pwd):
        print('登录成功')
        flag = False
    else:
        print('账号或密码错误')

优化策略: 使用将True赋值与flag。之后flag的值作为条件。之后在while语句里面接收用户输入的用户名和密码。当用户名输入正确的时候。我们打印出登陆成功,且flag的值重新赋值为False。那么此时while再进行条件判断的时候。flag的值为False,所以至此循环就结束。反之,当用户名或密码输入错误的时候。则执行else中的语句,打印出”账号或密码错误“。此时它会继续看while的条件,此时flag的值还是为True,所以依旧让用户输入用户名和密码。

程序运行示例三:

Python的流程控制插图7

可以看到,当用户输入用户名和密码正确的时候,则打印出”登录成功”,则不再让用户再次输入。而当用户输入的用户或者密码错误的时候,则一直让用户去输入。直到输入成功为止。这就是循环为我们程序带来的好处。

程序示例四:while + break

使用了while循环之后,代码的确变的精简了,其实还有一种方法可以结束对死循环进行终止循环。那就是break

下面简单介绍以下break:

while True:
    print('hello')
    break  # 终止当前循环
    print('end===========')
Python的流程控制插图8

上图代码,很明显是一个死循环。但是为什么只打印了一次hello呢?也就是说程序只运行了一次。这就是因为break的存在。由于程序在第一次循环的时候,读到break,就直接退出当前循环了。因此"end======="也没有被打印出来。

程序示例五:while嵌套 + break

user = 'admin'
pwd = '123'
count = 0  #  初始化登录次数

while count < 3:   #  如果连续登录错误三次 退出登录
    in_user = input('请输入你的用户名: ') #  接收用户的输入
    in_pwd = input('请输入你的密码: ') #  接收用户的输入
    if (in_user == user and in_pwd == pwd):  # 判断用户名是否正确
        print('Login success!')
        while True: 
            cmd = input('[root@VM-0-14-centos]# ')  # 接受用户的输入
            if (cmd != 'exit'): # 如果用户输入的不是exit 则执行用户输入的命令s
                print('正在运行{x}命令'.format(x=cmd))
            else: #  如果用户输入的为exit,则打印程序退出,并break退出当前循环。
                print('程序退出')
                break
        break # 如果break掉内层死循环,则我们break掉外层循环即可。
    else: # 如果用户名或密码不正确 则错误计数 + 1
        count += 1

程序运行示例:

Python的流程控制插图9

当用户输入用户名或密码错误三次。则直接退出登录。如果用户登录成功,则进入到命令行界面。可以输入命令,当用户输入exit的时候,则退出当前程序的执行。

程序示例六:while嵌套 + flag

上诉程序,虽然大有可为,但是有些小的毛病,比如说用户输入三次退出登录,那么我们需要跟用户提示一下说:您连续输入错误3次。程序自动退出。

user = 'admin'
pwd = '123'
flag = True
count = 0
while flag:
    in_user = input('请输入你的用户名: ') #  接收用户的输入
    in_pwd = input('请输入你的密码: ') #  接收用户的输入
    if (in_user == user and in_pwd == pwd):  # 判断用户名是否正确
        print('Login success!')
        while True: 
            cmd = input('[root@VM-0-14-centos]# ')  # 接受用户的输入
            if (cmd != 'exit'): # 如果用户输入的不是exit 则执行用户输入的命令s
                print('正在运行{x}命令'.format(x=cmd))
            else: #  如果用户输入的为exit,则打印程序退出,并break退出当前循环。
                print('程序退出')
                break
        break # 如果break掉内层死循环,则我们break掉外层循环即可。
    else: # 如果用户名或密码不正确 则错误计数 + 1
        count += 1
        if (count == 3):
            print('由于您连续输入错误3次,程序自动退出')
            flag = False

当用户输入次数等于3次,则打印由于您连续输入错误3次,程序自动退出。其实这个使用break也可以实现。

程序运行示例:

Python的流程控制插图10

程序示例7 while + continue

break是直接终止当前循环,而continue则是跳过本次循环,开始下一次循环:

示例:

count = 0
while count < 10:
    count += 1
    if (count == 6 ):   
        continue  #  跳过当前循环
        print('end=================')
    else:
        print(count)

运行示例:

Python的流程控制插图11

可以看到,并没有打印出6,因为我们判断count=6的时候,则执行continue,因此执行到else中,本次循环就已经结束从头开始了。

使用while循环,打印出0 - 100之间的奇数。

奇数就是不能被2整除的数。

count = 0

while count < 100:
    count += 1
    if (count % 2 != 0):
        print(count)
    elif (count %2 == 0):
        continue

程序运行示例:

Python的流程控制插图12

当count除以2的余数不等于0的时候。那证明它不可以被2整除,则是奇数。如果count除以2的余数为0,则为偶数。那么我们continue跳过当前循环,开始下一轮即可。

该示例其实不适用continue也可以实现,只是方便讲解。

程序示例8 while + else

在while循环的后面,我们可以跟上else语句。只要while循环没有被break终止掉。else都可运行。

count = 0

while count < 5:
    count += 1
    print(count)
else:
    print('=========end===========')

程序运行示例:

Python的流程控制插图13

可以看到。else中的语句也被运行了。

Python的流程控制插图14

不管while循环是否循环,else都会被执行一次。

Python的流程控制插图15

如果while循环,被break终止,则不会执行else

2、for循环的使用

在Python中为什么提供了两种是循环机制、一是while循环。二则是我们的for循环。

while循环的次数取决于条件的真假。而for循环循环的次数。则取决于可迭代对象中的值。

其实for循环的功能,while循环都可以实现,只是在某种情况下,for循环更加简洁。

for 变量 in 可迭代对象:   # 可迭代对象可以是字符串、列表、元组、字典、集合
    代码1
    代码2
    .......

for循环示例一:

循环列表取值:

for name in ['x1ong','lxx','fxx','xxx']:
    print(name)

运行结果:
x1ong
lxx
fxx
xxx

程序运行步骤:
步骤1: 从列表['x1ong','lxx','fxx','xxx']读取第一个值,将该值赋值给变量name
步骤2:从列表['x1ong','lxx','fxx','xxx']读取第二个值,将该值赋值给变量name
步骤3:重复上面的取值,直到['x1ong','lxx','fxx','xxx']的值被取尽。

循环字符串取值:

使用for循环遍历字符串的时候,会将字符串中的逐个字符。进行取出。其取值与列表取值一致。

Python的流程控制插图16

循环字典取值:

循环字典取值,其实和上述基本一致。只是遍历字典取的是key。通过key我们可以访问到key对应的值

Python的流程控制插图17

for循环示例2:for + range()

打印 1 – 5 之间的数字。


for i in range(1,6):  #  range()函数包含开始不包含结束 所以我们要想打印到5,则需要在结束位置写6
    print(i)  # 1,2,3,4,5


# range()函数默认是从0开始的。所以我们不指定开始的话,会从0开始打印。
for j in range(6):
    print(j)  #   0,1,2,4,5

# range()函数可以设置步长,
for x in range(1,6,2):
    print(x)  # 从1开始 + 2 为 3  + 2 为 5  所以打印出是 1   3   5

for循环示例3:嵌套循环

for i in range(0,5):  
    print('外层循环')  
    for j in range(0,5): 
        print('内层循环')

程序运行结果:

Python的流程控制插图18

PS:for循环也可以使用break和continue。效果和while循环一致。

声明:本文章所整理学习的知识全部由Egon老师传授

Egon老师知乎首页:https://www.zhihu.com/people/xiaoyuanqujing

本文作者: x1ong
免责声明:本博客所有文章仅用于学习交流
转载声明:文章为作者原创文章 转载请注明来源
本文链接: https://www.giaoblog.com/python/16702.html
上一篇
下一篇