流程控制也就是控制程序的流程,具体指的是控制程序的执行流程,然而程序的执行流程分成了三种结构:顺序结构、分支结构、循环结构。
程序自上而下,按照顺序依次执行,就是顺序结构。
所谓的分支结构,直白地讲就是根据条件的真假来执行不同的分支所对应的子代码块。
因为在我们的生活中,有时候与遇到选择的问题,比如说如果明天下雨,我们将如何如何,所以要让计算机也能够进行人类的选择操作,那么就需要让程序中有对应的机制来控制计算机具备这种人类的判断能力。
# 结构
if 条件: # 如果条件为True,那么就执行代码块中的代码
代码块
# 案例
user_age = 22
if user_age >= 18:
print('你成年了!')
if 条件: # 如果条件为True,那么就执行代码块1中的代码,否则执行代码块2中的代码
代码块1
else:
代码块2
# 案例
score = 75
if score >= 60:
print('你及格了')
else:
print('你没有通过考试')
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
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!')
所谓的循环结构就是重复执行某一段代码块。
因为在我们的生活中,有时候需要重复做某一件事情,那么为了让计算机也能够重复做某件事,因此就拥有了循环结构的存在,所以程序中必须有相应的机制来控制计算机具备人的这种重复做某件事的技能。
在 Python 中,只有 for 循环与 while循环两种循环机制。
for 循环又称之为迭代循环,其语法格式请看:
# 此时只需要知道可迭代对象可以是字符串、列表、字典,我们在后边会专门讲解可迭代对象
for 变量名 in 可迭代对象:
代码块
# 案例
for item in [1, 2, 3, 4, 5]:
print(item)
# 结果
1
2
3
4
5
"""
打印如下图形:
*****
*****
*****
"""
for i in range(3):
for j in range(5):
print('*', end='')
print()
# 循环打印数字0-5
for item in range(6):
print(item)
# for循环默认取的是字典的key赋值给变量名k
for k in {'name':'Tim Cook', 'age':60, 'gender':'male'}:
print(k)
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
'''
enumerate 用于在遍历可迭代对象的时候增加输出索引。具体用法如下代码所示:
string = 'Hello'
for i, ele in enumerate(string):
print(i, ele)
# 结果
'''
0 H
1 e
2 l
3 l
4 o
'''
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{j} * {i} = {i * j}\t', end='')
print()
# 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()
while 循环又称之为条件循环,其语法格式请看:
while 条件:
代码块
'''
如果条件为True,那么就一次执行代码块中的代码
执行完毕之后再次判断条件,如果条件为True则再次执行代码块中的代码,直到条件为False,则循环终止
'''
"""
用户认证程序的基本逻辑就是接收用户输入的用户名以及密码,然后与程序中存放的用户名以及密码进行对比判断,
如果判断成功则登录成功,判断失败则打印账号或密码错误
"""
# 通常如果用户名或密码错误的情况下,我们会要求用户重新输入,并且有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
使用了 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
break 代表结束本层循环,然而continue则用于跳过 *本次* 循环,直接进入下一次循环。
# 打印除了7以外的1-10之间的所有整数
number = 0
while number < 10:
number += 1
if number == 7:
continue # 结束掉本次循环,即本次循环continue之后的代码都不会运行了,而是直接进入下一次循环
print(number)
在 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
如果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
针对于嵌套多层的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'登录失败!')
num = 100
while num > 0:
if num % 7 == 0:
print(num)
break
num -= 1
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