流程控制
流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:
- 顺序结构:自上而下依次运行(之前我们写的代码都是顺序结构)
- 分支结构:在运行过程中根据条件的不同可能会执行不同的流程(用到if判断)
- 循环结构:在运行过程中有些代码需要反复执行(用到while与for)
分支结构:if判断
必知必会:
- 1、条件都会转成布尔值,从而决定代码是否执行
- 2、在python中使用缩进来表示代码的从属关系
- 3、并不是所有代码都可以拥有子代码
- 4、同属于你某个代码的多行子代码必须要保持相同的缩进量
- 5、在python中推荐使用相同缩进(四个空格表示一个缩进)来标识一组代码块(上一行代码结尾如果是冒号,那么下一行代码必须缩进)
什么是分支结构
分支结构就是根据条件判断的真假去执行不同分支对应的子代码
为何要用分支结构
为了让计算机像人一样根据条件的判断结果去做不同的事情
用if关键字来实现分支结构
if 条件1:
...
条件1成立后执行的子代码块
elif 条件2:
...
条件1不成立,条件2成立后执行的子代码块
else:
...
上述条件都不满足就走这段
注意:
条件可以是任意表达式,但执行结果必须为布尔类型 在if判断中所有的数据类型也都会自动转换成布尔类型
- None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
- 其余均为True
单if分支结构
if 条件:
...
条件成立后执行的子代码块
print("end...")
# 案例:年龄小于22,叫小伙子
age = 20
if age < 22:
print("毛儿都没长齐的家伙")
if..else连用(双分支)
if 条件:
...
条件成立后执行的子代码块
else:
...
if条件不成立就走这段
# 案例:猜年龄
age = 22
if age < 20:
print("小伙子好")
else:
print("傻不拉几的")
if…elif…else连用(多分支)
if 条件1:
...
条件1成立后执行的子代码块
elif 条件2:
...
条件1不成立,条件2成立后执行的子代码块
elif 条件3:
...
条件1和2都不成立,条件3成立后执行的子代码块
else:
...
上述所有条件都不成立就走这段
# 案例:
# 如果成绩 >= 90:优秀
# 如果成绩 >= 80且< 90:良好
# 如果成绩 >= 70且< 80:普通
# 其他情况:很差
score = 83
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("普通")
else:
print("很差")
if判断之嵌套
# 一定要图文相结合去消化理解吸收
# 案例:在相亲的基础上继续,如果牵手成功,那么:在一起,否则。。。
age = 26
height = 165
weight = 99
is_success = True
if age < 28 and height > 160 and weight < 100:
print('小姐姐能否牵手')
# 判断小姐姐是否会牵手
if is_success:
print('吃饭 看电影 天黑了...')
else:
print('去你妹的 变态!')
else:
print('可惜了')
循环结构:while循环
- 什么是while循环
- 循环就是重复做某件事,while循环是Python提供第一种循环机制称之为:条件循环
- 为何要有while循环
- 为了控制计算机能够像人一样去重复做某件事
while循环基本语法
while 条件:
...
条件成立之后循环执行的子代码块
"""
while的运行步骤:
1、如果条件为真,那么依次执行子代码块
2、执行完毕后再次判断条件,如果条件为True则再次执行子代码块如果条件为False,则循环终止
"""
while True:
# 1.获取用户输入的用户名和密码
username = input('请输入用户名>>>:')
password = input('请输入密码>>>:')
# 2.判断用户名和密码是否正确
if username == 'jack' and password == '123':
print('登录成功!')
else:
print('登录失败,请重新输入!')
# 注意:死循环---》条件永远为True
结束while循环的两种方式
方式一:全局标志位
- 特点:等到本次循环体代码运行完毕后,下一次循环判断条件时才会生效
# 标志位的使用
count = 0
flag = True
while tag:
if count == 5:
flag = False # 把条件改为False
print(i)
count += 1
方式二:break
- 特点:break立即结束本层while循环
count = 0
tag = True
while tag:
if count == 5:
# tag = False
break
print(i)
count += 1
while嵌套
while循环嵌套+全局标志位的使用
- 针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,“全局标志位”就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束
flag = True
while flag: # 第一层循环
while flag: # 第二层循环
flag = False # tag变为False,所有while循环的条件都变为False
# 案例:
flag = True
while flag:
inp_user = input("请输入用户名>>>: ")
inp_pwd = input("请输入密码>>>: ")
if inp_user == "jack" and inp_pwd == "123":
print('登录成功')
# break
flag = False
else:
print('用户名或密码错误')
while循环嵌套+break的使用
- 如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break
while True: # 第一层循环
while True: # 第二层循环
while True: # 第三层循环
break # 终止第三层循环
break # 终止第二层循环
break # 终止第一层循环
# 案例:
while True:
inp_user = input("请输入用户名>>>: ")
inp_pwd = input("请输入密码>>>: ")
if inp_user == "jack" and inp_pwd == "123":
print('登录成功!')
while True:
print("""
0 退出
1 取款
2 存款
3 转账
""")
choice = input("请输入您的命令编号:")
if choice == "0":
break
elif choice == "1":
print("正在取款。。。")
elif choice == "2":
print("正在存款。。。")
elif choice == "3":
print("正在转账。。。")
else:
print("输入的指令不存在")
break
else:
print('用户名或密码错误')
while+continue:跳过本次循环,直接进入下一次循环
# 使用while循环打印出0-5但是不打印2和4
# 1.定义一个起始变量
count = 0
# 2.循环
while count < 6:
if count == 2 or count == 4:
count += 1
continue # continue同级别之后千万别写代码,写了也不会运行
# 3.打印变量的值
print(count)
# 4.变量值自增1
count += 1
"""
continue会让循环体代码直接回到条件判断处重新判断
"""
# 案例:
while True:
inp_user = input("username>>>: ")
inp_pwd = input("password>>>: ")
# 判断用户名和密码是否正确
if inp_user == "jack" and inp_pwd == "123":
print('登录成功') # 输入正确登录成功
break # 结束循环
else:
print('用户名或密码错误')
# continue # 一定不要加在最后一步
while+else:else的子代码块会在while循环正常死亡时运行,没有被break干掉就叫正常死亡
# 案例一:正常死亡,循环正常执行
count = 0
while count < 5:
if count == 2:
count += 1
continue
print(count)
count += 1
else:
print('====>')
# 案例二:非正常死亡,如果执行过程中被break,就不会执行else的语句
count = 0
while count < 5:
if count == 2:
break
print(count)
count += 1
else:
print('====>')
死循环:条件永远为True
while True:
print(1)
"""死循环会让CPU极度繁忙 甚至奔溃"""
小练习:
"""
猜年龄的游戏
普通要求
用户可以有三次猜错的机会 如果过程中猜对了直接退出
拔高要求
三次机会用完之后提示用户是否继续尝试 如果是则再给三次机会 如果否则直接结束
"""
real_age = 18 # 定义固定的年龄变量
count = 0 # 定义输入次数变量
while True:
# 三次机会用完会执行
if count == 3:
choice = input("三次机会已用完啦!是否继续?\n重新请输入'q',退出请输入't'>>>:")
if choice == 'q' or choice == 'Q':
count = 0 # 将猜测次数置为0
else:
print('游戏已结束'.center(35, '='))
break
print('猜年龄游戏'.center(35, '*'))
age = int(input('请输入年龄>>>:'))
if age < real_age:
print('害!猜小了,你还有:%s 次机会!' % (2 - count))
elif age > real_age:
print('害!猜大了,你还有:%s 次机会,!' % (2 - count))
else:
print('好家伙猜对了,真厉害呀!')
break
count += 1
循环结构:for循环
- 什么是for循环
- 循环就是重复做某件事,for循环是python提供第二种循环机制
- 为何要有for循环
- 理论上for循环能做的事情,while循环都可以做
- 之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁
for循环基本语法
for 变量名 in 可迭代对象: # 可迭代对象可以是字符串,列表,字典,元组,集合
...
for循环体代码
# 例1
for i in ['a','b','c']:
print(i)
# 运行结果
a
b
c
# 参照例1来介绍for循环的运行步骤
# 步骤1:从列表['a','b','c']中读出第一个值赋值给item(item=‘a’),然后执行循环体代码
# 步骤2:从列表['a','b','c']中读出第二个值赋值给item(item=‘b’),然后执行循环体代码
# 步骤3: 重复以上过程直到列表中的值读尽
for循环的基本用法
# 案例1:遍历列表
names = ["kevin", "tom", "jack", "lili", "lxx", "xxx"]
for x in names:
print(x)
for x,y in [["name","kevin"],["age",18],["gender","male"]]: # x,y = ['name', 'kevin']
print(x,y)
# 案例2:遍历字典
dic={"k1":111,'K2':2222,"k3":333}
for x in dic: # for 循环默认取的是字典的key赋值给变量名k
print(x,dic[x])
# 案例3:遍历字符串
for x in "hello":
print(x)
msg="you can you up,no can no bb"
for x in msg:
print(x)
- 总结for循环与while循环的异同
- 1、相同之处:
- 都是循环,for循环可以干的事,while循环也可以干
- 2、不同之处:
- while循环称之为条件循环,循环次数取决于条件何时变为假
- for循环称之为”取值循环”,循环次数取决in后包含的值的个数
- 1、相同之处:
for+break:同while循环一样
for i in [11,22,33,44,55]:
if i == 33:
break
print(i)
for+continue:同while循环一样
for i in [11,22,33,44,55]:
if i == 33:
continue
print(i)
for+else:同while循环一样
for i in [11,22,33,44,55]:
if i == 33:
break
print(i)
else:
print('++++++++>')
range 关键字
for + range控制循环次数:range()
- in后直接放一个数据类型来控制循环次数有局限性:
第二种:两个参数 自定义起始位置 顾头不顾尾
for i in range(4, 10): print(i)
第三种:三个参数 第三个数字用来控制等差值
for i in range(2, 100, 10): print(i)
“””
range在不同版本的解释器中 本质不同
在python2.X中range会直接生成一个列表
在python2.X中有一个xrange也是迭代器(老母猪)
在python3.X中range是一个迭代器(老母猪) 节省内存空间 python2.X中xrange就是python3.x里面的range “””
python2版本演示
‘’’
range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1,9) # 1…8 [1, 2, 3, 4, 5, 6, 7, 8]
range(1,9,1) # 1 2 3 4 5 6 7 8 [1, 2, 3, 4, 5, 6, 7, 8] range(1,9,2) # 1 3 5 7 [1, 3, 5, 7] ‘’’
for i in range(30): print(‘===>’) username=’kevin’ password=’123’ for i in range(3): inp_name = input(‘请输入您的账号:’) inp_pwd = input(‘请输入您的密码:’)
if inp_name == username and inp_pwd == password:
print('登录成功')
break
else: print(‘输错账号密码次数过多’)
<a name="35e0727e"></a>
### enumerate 关键字
**for + enumerate**
```python
i,name=(0,"kevin")
for i,name in enumerate(["kevin","tom","jack"]): # [(0,"kevin"),(1,"tom"),(2,"jack")]
print(i,name)
for x in enumerate({"k1":111,"k2":2222,"k3":3333}):
print(x)
for循环的嵌套使用
# for i in range(3):
# for j in range(5):
# print("*", end='')
# print()
for i in range(1, 10):
for j in range(1, i + 1):
print('%s*%s=%s' % (i, j, i * j), end=' ')
print()