待手绾青丝

待手绾青丝

待手绾青丝

庭中三千梨花树,再无一朵入我心。 心中只你一朵,似在心中,不在心中,可望可念可想不可及。

109 文章数
2 评论数
来首音乐
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

第六篇:流程控制

2022-05-28 / 0 评论 / 720 阅读 / 0 点赞

流程控制

一、介绍

流程控制也就是控制程序的流程,具体指的是控制程序的执行流程,然而程序的执行流程分成了三种结构:顺序结构分支结构循环结构

1、顺序结构

程序自上而下,按照顺序依次执行,就是顺序结构。

2、分支结构

1.什么是分支结构

所谓的分支结构,直白地讲就是根据条件的真假来执行不同的分支所对应的子代码块。

2.为什么要用分支结构

因为在我们的生活中,有时候与遇到选择的问题,比如说如果明天下雨,我们将如何如何,所以要让计算机也能够进行人类的选择操作,那么就需要让程序中有对应的机制来控制计算机具备这种人类的判断能力。

3.如何使用分支结构

1)单分支
# 结构
if 条件:  # 如果条件为True,那么就执行代码块中的代码
    代码块
    
# 案例
user_age = 22
if user_age >= 18:
    print('你成年了!')
2)双分支
if 条件:  # 如果条件为True,那么就执行代码块1中的代码,否则执行代码块2中的代码
    代码块1
else:
    代码块2
    
# 案例
score = 75
if score >= 60:
    print('你及格了')
else:
    print('你没有通过考试')
3)多分支
if 条件1:  # 如果条件1为True,那么就执行代码块1中的代码
    代码块1
elif 条件2:  # 如果条件1为False,条件2为True,那么就执行代码块2中的代码
    代码块2
elif 条件3:  # 如果条件2为False,条件3为True,那么就执行代码块3中的代码
    代码块3
else:  # 如果条件1、条件2、条件3为False,那么就执行代码块4中的代码
    代码块4
    
# 案例
score = input('请输入您的成绩:').strip()
score = int(score)
if score >= 90:
    print('优秀')
elif score >= 80:
    print('良好')
elif score >= 70:
    print('普通')
elif score >= 60:
    print('一般')
else:
    print('差劲')
.strip()
   # strip() 方法用于去除字符串开头和结尾处指定的字符(默认为空格或换行符)或字符序列,不会去除字符串中间对应的字符。
   # 相关函数有lstrip()和rstrip() 。用法与strip()相同。
   # lstrip()方法用于去除左边(开始)的空白字符;
   # rstrip()方法用于去除右边(末尾)的空白字符。

•在Python中使用相同的缩进程度(4个空格)来表示一组代码块
•条件可以是任意表达式,但是执行的结果必须是布尔类型
•只有0、None、''(空字符串、空字典、空列表等)这种情况转换成布尔类型之后是False,剩下的全是True
4)if嵌套
user_name = input('Please enter your user_name: ').strip()
if user_name == 'apple':
    user_pwd = input('Please enter your pwd: ').strip()
    if user_pwd == '123':
        print('Login Successful!')
    else:
        print('Password Error!')
else:
    print('UserName Error!')
    
# 对比:不嵌套
user_name = input('Please enter your name: ').strip()
user_pwd = input('Please enter your pwd: ').strip()
if user_name == 'tim cook' and user_pwd == 'apple':
    print('Login Successful!')
else:
    print('UserName or Password Error!')

3、循环结构

1.什么是循环结构

所谓的循环结构就是重复执行某一段代码块。

2.为什么要用循环结构

因为在我们的生活中,有时候需要重复做某一件事情,那么为了让计算机也能够重复做某件事,因此就拥有了循环结构的存在,所以程序中必须有相应的机制来控制计算机具备人的这种重复做某件事的技能。

Python 中,只有 for 循环与 while循环两种循环机制。

3.for循环

for 循环又称之为迭代循环,其语法格式请看:

1)格式
# 此时只需要知道可迭代对象可以是字符串、列表、字典,我们在后边会专门讲解可迭代对象
for 变量名 in 可迭代对象:
    代码块
    
# 案例
for item in [1, 2, 3, 4, 5]:
    print(item)
 # 结果
1
2
3
4
5
2)嵌套
"""
打印如下图形:
*****
*****
*****
"""

for i in range(3):
    for j in range(5):
        print('*', end='')
    print()

# 循环打印数字0-5
for item in range(6):
    print(item)
3)循环遍历字典
# for循环默认取的是字典的key赋值给变量名k
for k in {'name':'Tim Cook', 'age':60, 'gender':'male'}:  
    print(k)
4)range(start, stop, step) 的用法

range 是Python中的一个内置类,再 *Python3* 中,range用于产生一个可迭代的对象。具体用法如下代码所示:

# start 起始值,不指定默认为0
# stop  停止值,不指定默认为1
# step  步长
# range的特性:顾头不顾尾。直白的讲就是range(1, 10),其中stop为10,但实际上只能够取到9,并不能取到10,这就是所谓的顾头不顾尾。

# 正步长
for i in range(1, 6, 1):
    print(i)
    
'''
结果:
1
2
3
4
5
'''

# 负步长
for i in range(6, 1, -1):
    print(i)

'''
结果:
6
5
4
3
2
'''
5)enumerate()的用法

enumerate 用于在遍历可迭代对象的时候增加输出索引。具体用法如下代码所示:

string = 'Hello'
for i, ele in enumerate(string):
    print(i, ele)
    
# 结果
'''
0 H
1 e
2 l
3 l
4 o
'''
6)打印九九乘法表
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{j} * {i} = {i * j}\t', end='')
    print()
7)打印金字塔
# max_level = 10
         *                  # current_level=1,空格数=9,*号数量=1
        ***                 # current_level=2,空格数=8,*号数量=3
       *****                # current_level=3,空格数=7,*号数量=5
      *******               # current_level=4,空格数=6,*号数量=7
     *********              # current_level=5,空格数=5,*号数量=9
    ***********             # current_level=6,空格数=4,*号数量=11
   *************            # current_level=7,空格数=3,*号数量=13
  ***************           # current_level=8,空格数=2,*号数量=15
 *****************          # current_level=9,空格数=1,*号数量=17
*******************         # current_level=10,空格数=0,*号数量=19

# 数学表达式:
# 空格数 = max_level - current_level
# *号数 = 2 * current_level - 1
max_level = 10
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()

4.while循环

1)格式

while 循环又称之为条件循环,其语法格式请看:

while 条件:
    代码块
'''
如果条件为True,那么就一次执行代码块中的代码
执行完毕之后再次判断条件,如果条件为True则再次执行代码块中的代码,直到条件为False,则循环终止
'''
2)基本使用
"""
用户认证程序的基本逻辑就是接收用户输入的用户名以及密码,然后与程序中存放的用户名以及密码进行对比判断,
如果判断成功则登录成功,判断失败则打印账号或密码错误
"""


# 通常如果用户名或密码错误的情况下,我们会要求用户重新输入,并且有3次机会,那么本质上就是让上述代码执行3次,
user_name = 'Tim Cook'
user_pwd = 'apple'
# 记录错误验证的次数
times = 0
while times < 3:
    inp_uname = input('请输入用户名:').strip()
    inp_upwd = input('请输入密码:').strip()
    if inp_uname == user_name and inp_upwd == user_pwd:
        print('登录成功!')
    else:
        print('输入的用户名或密码错误')
        times += 1
3)while循环+break

使用了 while 循环之后,代码确实精简了很多,但是运行的时候我们会发现有一个问题,就是即使我们输入了正确的用户名以及密码,程序仍然提示我们要输入用户名以及密码,就是理论上来讲,如果用户名以及密码正确的话,就应该结束程序了,可是目前的情况是程序还会继续执行,这让我们很头大。那么如何结束掉一个循环呢?这就利用到 break 了!

user_name = 'Tim Cook'
user_pwd = 'apple'

times = 0  # 记录错误验证的次数
while times < 3:
    inp_uname = input('请输入用户名:').strip()
    inp_upwd = input('请输入密码:').strip()
    if inp_uname == user_name and inp_upwd == user_pwd:
        print('登录成功!')
        break  # 用于结束 本层 循环
    else:
        print('用户名或密码错误')
        times += 1
4)while 循环 + continue

break 代表结束本层循环,然而continue则用于跳过 *本次* 循环,直接进入下一次循环。

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

while 循环的后面,我们可以跟上 else 语句,当 while 循环正常执行完毕且没有被 break 终止,就会执行 else 后面的语句,所以我们可以使用 else 来验证循环是否正常结束

limit_times = 0
while limit_times < 5:
    limit_times += 1
    print('循环次数:', limit_times)
else:
    print('循环正常结束')  # 由于没有被break中断,所以执行了else中的代码块
    
-----------------执行结果如下-------------------
循环次数: 1
循环次数: 2
循环次数: 3
循环次数: 4
循环次数: 5
循环正常结束



# 如果循环的过程中被break中断,那么就不会执行else中的代码块,请看如下代码:
limit_times = 0
while limit_times < 5:
    limit_times += 1
    if limit_times == 3:
        break
    print('循环次数:', limit_times)
else:
    print('循环正常结束')
-----------------执行结果如下-------------------
循环次数: 1
循环次数: 2
6)while 循环嵌套 + break

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

user_name = 'Tim Cook'
user_pwd = 'apple'
limit_times = 0
while limit_times < 3:  # 第一层循环
    inp_name = input('请输入用户名:').strip()
    inp_pwd = input('请输入密码:').strip()
    if inp_name == user_name and inp_pwd == user_pwd:
        print(f'登录成功')
        while True:  # 第二层循环
            cmd = input('请按q退出:')
            if cmd == 'q':
                break  # 用于结束本层循环,也就是第二层循环
            print(f'run <{cmd}>')
        break  # 用于结束本层循环,也就是第一层循环
    else:
        print(f'用户名或密码错误')
        limit_times += 1
7)while 循环 + flag

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

user_name = 'tim cook'
user_pwd = 'apple'
flag = True

while flag:
    inp_uname = input('请输入用户名:')
    inp_upwd = input('请输入密码:')
    if inp_uname == user_name and inp_upwd == user_pwd:
        print(f'登录成功!')
        while flag:
            command = input('请输入命令>>>:')
            if command == 'q':
                flag = False
            print(f'Running <{command}>')
    else:
        print(f'登录失败!')
8)寻找1-100之间7的最大的倍数
num = 100
while num > 0:
    if num % 7 == 0:
        print(num)
        break
    num -= 1
9)猜数字
age = 18
limit_times = 0
while limit_times < 3:
    guess = int(input('请输入一个年龄:').strip())
    if guess > age:
        print('猜大了')
    elif guess < age:
        print('猜小了')
    else:
        print('恭喜您,猜对了')
        break
    limit_times += 1
文章不错,扫码支持一下吧~
上一篇 下一篇
评论
最新回复
文章目录
每日一句