python:从入门到放弃 04 流程控制
流程控制理论
流程控制即为控制事物的执行流程,具体体现在我们编写的程序执行的顺序上。
1.顺序结构
之上而下的依次执行
2.分支结构
根据某些条件的判断做出不同的执行流程
3.循环结构
根据某些条件的判断循环反复的做相同的事情
1.在python中使用缩进来表示代码的从属关系
if num == 18:
print('Rain')
#缩进相同时即为同一个代码块,在其他语言中也有用{}括起来表示同一个代码块。
2.并不是所有的代码都可以有子代码(从属的代码)
3.如果多行代码属于同一个父代码 那么这多行代码需要保证相同的缩进
#在python中推荐使用四个空格来表示缩进(四个好看一些)
4.具有相同缩进量的代码彼此之间按照顺序结构执行 没有从属关系 平起平坐
流程控制之if判断
1.if
"""
语法结构
if 条件:
条件成立之后执行的子代码(可以有多行)
"""
num = 1
if num == 1:
print('Rain')
#打印Rain
2.if...else
"""
语法结构
if 条件:
条件成立之后执行的子代码(可以有多行)
else:
条件不成立执行的子代码(可以有多行)
"""
num = input('输入1')
if num == '1':
print('1')
else:
print('0')
#当输入1时,打印 1。输入其他的,打印 0
3.if...elif...else
"""
语法结构
if 条件1:
条件1成立执行的子代码(可以有多行)
elif 条件2:
条件1不成立条件2成立执行的子代码(可以有多行)
elif 条件3:
条件1和2都不成立 条件3成立执行的子代码(可以有多行)
else:
上述所有的条件都不成立执行的子代码(可以有多行)
中间的elif可以有多个
"""
分支结构练习题
1.编写一个用户登录程序
如果用户名是Rain并且密码是123 则打印登录成功
如果不是则打印用户名或密码错误
2.编写一个成绩评判系统
如果成绩大于90 则打印优秀
如果成绩大于80 则打印良好
如果成绩大于70 则打印一般
如果成绩大于60 则打印及格
如果成绩小于60 则打印挂科
流程控制之while循环
"""
语法结构
while 条件:
条件成立之后执行的循环体代码
1.先判断条件是否成立 如果成立则执行循环体代码
2.循环体代码执行完毕后 再次判断条件是否成立 如果成立则继续执行循环体代码 如果不成立则跳出循环
"""
但问题来了,我们可以开启循环,但当程序进入死循环后,会不断的循环,不会停下来,所以我们用while语句配合其他关键字可以达成一些想要的效果。
# 实现ATM的输入密码重新输入的功能
while True:
user_db = 'nick'
pwd_db = '123'
inp_user = input('username: ')
inp_pwd = input('password: ')
if inp_user == user_db and pwd_db == inp_pwd:
print('login successful')
else:
print('username or password error')
#虽然代码功能实现了,但是循环没有停下
1.while + break
break的意思是终止掉当前层的循环,执行其他代码。
while True:
print('1')
print('2')
break
print('3')
#只会打印1 2
2.while + continue
continue的意思是终止本次循环,直接进入下一次循环
n = 1
while n < 10:
if n == 8:
# n += 1 # 如果注释这一行,则会进入死循环
continue
print(n)
n += 1
#不会打印8
3.while + else
当while没有被关键字break主动结束的情况下 ,正常结束循环体代码之后会执行else的子代码
n = 1
while n < 3:
print(n)
n += 1
else:
print('else子代码')
#1
#2
#else子代码
4.while嵌套
有时候我们需要将while语句嵌套在一起,我们知道,break语句只能退出当前层。所以每多嵌套一次while语句我们就要多写一个break语句,但我们可以通过布尔值来解决这个问题。
flag = True
while flag:
username = input('username>>>:')
password = input('password>>>:')
if username == 'jason' and password == '123':
print('登录成功')
while flag:
cmd = input('请输入您的指令>>>:')
if cmd == 'q':
print('下次光临')
flag = False
print('正在执行您的指令:%s' % cmd)
else:
print("用户名或密码错误")
#即将每一层while循环的条件都使用同一个bool值为True的变量名,当程序修改其为False时,会退出所有的while循环。
流程控制之for循环
一般情况下涉及到循环取值的时候 都会考虑使用for循环而不是while循环
"""
语法结构
for 变量名 in for循环对象: # 字符串、列表、字典、元组、集合
for循环的循环体代码
每次执行都会将循环对象中的一个元素赋值给变量名
ps:针对for循环语法结构中的变量名 也应该做到见名知意
如果真的没有合适的名字可以使用常用的变量名i、j、k、v、num、item...
"""
name_list = ['jason', 'kevin', 'tony', 'tank', 'oscar']
# 使用while循环依次打印出列表中所有的元素
count = 0
while count < 5:
print(name_list[count])
count += 1
# 使用for循环依次打印出列表中所有的元素
for name in name_list:
print(name)
jason
kevin
tony
tank
oscar
for循环的循环次数受限于容器类型的长度,而while循环的循环次数需要自己控制。for循环也可以按照索引取值。
print(list(range(1, 10)))
for i in range(1, 10): # range顾头不顾尾
print(i)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
1
2
3
4
5
6
7
8
9
其中比较特殊的是字典,循环字典只能获取到字典的key,value无法直接获取,后续可通过字典的内置方法来用for循环取值
userinfo_dict = {'username': "jason", 'age': 18, 'gender': 'male'}
for i in userinfo_dict:
print(i)
username
age
gender
range关键字
range方法在python2和python3中有所区分
- 在python2中range是直接产生一个列表 元素很多的情况下比较占用空间,在python2中有一个xrange ,其实就是python3里面的range
- 在python3中range相当于哆啦A梦的口袋 不占空间但是可以取出很多数据,在python3中就只有一个range了。
for i in range(101):
print(i)#打印1~100 顾头不顾尾
# 用法1 括号内只写一个数字 默认从0开始 顾头不顾尾
# for i in range(10):
# print(i)
# 用法2 括号内写两个数字 自定义起始位置 顾头不顾尾
# for i in range(1, 10):
# print(i)
# 用法3 括号内写三个数字 第三个数字表示的是等差数列的差值 默认情况下是1
# for i in range(1, 10, 2):
# print(i)
for循环补充
while循环可以通过与其他方法一起使用来达成一些效果,同样的,for循环也可以。
# for+break
break结束本层for循环
# for+continue
continue结束本次for循环 直接开始下一次
# for+else
for循环正常结束之后运行else子代码
"""与while一致"""
小作业
1.编写一个猜年龄的游戏
基本要求
如果不对的情况下可以猜三次 如果对了直接结束
拔高练习
三次机会用完之后提示用户是否继续猜测 如果用户输入了y
则再给用户三次机会 如果用户输入n则直接结束
number = 3
count = 1
my_age = 20
while count < 4:
Guess_age = input('猜猜我的年龄>>>')
Guess_age = int(Guess_age)
if Guess_age == my_age:
print('猜对了!!!ヾ(✿゚▽゚)ノ')
break
else:
number -= 1
print('猜错了!ε=(´ο`*)))唉 还剩%s次机会' % number)
count += 1
if count == 4:
is_continue = input('请输入是否继续(y/n)>>>')
if is_continue == 'Y' or is_continue == 'y':
count = 1
number = 3
else:
print('游戏结束')