本篇文章记录的是Python流程控制的知识。
一、if判断
1、条件
在讲if判断之前简单说一下什么是条件。
条件的意思是事物存在、发展的影响因素,所具备或处于的状况。
(1)什么可以当做条件
上面是我们对条件的解释,不懂也可以,重要的是python中什么可以当做条件,以及从条件中最终得到什么,所有条件最终都会返回一个布尔值,就是我们常说的真和假,那么只要能返回布尔值,就可以当做条件。
a、显式布尔值
条件可以是:比较运算/逻辑运算等
3 > 2 # 返回的布尔值是True
age = 18
gender = "女"
age == 18 and gender == "女"
条件可以直接是True/False
b、隐式布尔值
所有的数据类型的值都可以当做条件去用,要和if连用
1,0 1.0 "1" , [1] , {"k1":"v1"}
其中0,None,空(空字符串,空字典,空列表。。)代表的布尔值都是False,其余的都是True
补充:在Python查看一个值对应的bool值,可以通过bool值查看。
print(bool(0))
print(bool(None))
print(bool(''))
print(bool([]))
print(bool({}))
2、if判断
(1)什么是if判断
实际上if判断在我们的生活中经常用,可能是你没有在意他,因为真的太平常不过了,你只需要把这个if翻译成如果,就有那味了。
(2)为什么要有if判断
就是让计算机/程序/py脚本能够像人一样判断一个条件是否成立,然后再去做某件事的功能。
(3)if判断语法
a、语法1
if 条件:
代码1
代码2
代码3
# 代码1,2,3 属于同一级别的代码,总体称为一组代码块,因为他们缩进相同,都是四个空格.
# 特点:按照自上而下的方式运行
# python用缩进来标识代码级别的,但是不能随意缩进
if 条件:
代码1
代码2
代码3
# 代码1,2,3 属于同一级别的代码,总体称为一组代码块,因为他们缩进相同,都是四个空格.
# 特点:按照自上而下的方式运行
# python用缩进来标识代码级别的,但是不能随意缩进
b、语法2
if 条件:
代码1
代码2
代码3
else:
代码1
代码2
代码3
# 当if后面的条件成立,即条件返回True,会执行if下面缩进的代码,else下面缩进的代码不会执行。
# 当if后面的条件不成立的时候,if下面的代码块不会执行,else下面的代码块这个时候会执行
age = 38
gender = '女'
star = '双子座'
if 16 < age < 20 and gender == '女' and star == '水平座':
print('我喜欢,我们在一起吧...')
else:
print('阿姨好,我逗你玩呢...')
print('其他代码')
c、语法3
判断多个条件是否成立,只要一个条件成立就不会再继续判断下面的条件了。
if 条件1:
代码1
代码2
代码3
elif 条件2:
代码1
代码2
代码3
elif 条件3:
代码1
代码2
代码3
....
d、语法4
也是if判断的最终版本:
if 条件1:
代码1
elif 条件2:
代码2
elif 条件3:
代码3
elif 条件4:
代码4
else:
代码5
# 这里的代码5是在所有条件都不成立时,才会执行.
(4)if嵌套
age = input('请输入你的年龄:')
age = int(age)
if 18 < age < 25:
gender = input('请输入你的性别:')
if gender == '女':
print('美女你好...')
is_merry = True
if not is_merry:
print('刚好我也是单身..')
else:
print('哈哈哈,我也有女朋友了,打扰了..')
else:
print('对不起,妹子才是我所喜欢的,打扰了')
else:
print('打扰了,我们年龄不相仿..')
二、while循环
1、循环
(1)什么是循环
循环就是重复的做某件事情
(2)为什么要有循环
就是为了让计算机/程序/py脚本能够像人一样重复的做某件事情。
2、while循环
(1)while语法
while 条件:
代码1
代码2
代码3 ( 循环体代码 )
while循环的执行流程
步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,如果条件为False,则循环终止
while循环是基于条件成立才工作的,所以while循环也可以叫做条件循环。
(2)while循环示例
count = 1
while count < 5:
print(count)
count += 1
print('循环结束...')
# 1
# 2
# 3
# 4
# 循环结束
3、死循与效率问题
(1)死循环
所谓死循环就是不会结束的循环,即条件一直是成立的while循环,他会不停的反复执行循环体的代码。
while True:
print('正在循环...')
a、纯计算的死循环
本质上死循环对计算机是无害的,但是如果循环体中的代码是纯计算的,那么你这个程序就会一直让CPU处于计算的状态,一秒都不会停的那种,那么对于整个程序来说就是有害的了。
while True:
1+1 # 这种状态下用不了多久你电脑的风扇就开始呼呼了,因为cpu一直在工作.
b、有IO操作的循环
这种情况下的死循环对整个程序来说是无害的,因为IO操作,CPU是不工作的,也就是说在这个死循环中,CPU不是一直反复执行这个循环体的代码。
while True:
content = input("请输入:")
print(content)
4、while循环应用案例
(1)用户认证程序
a、基本版
用户认证程序的基本逻辑就是接收用户输入的用户名密码与程序中存放的用户名密码进行判断,判断成功则登录成功,判断失败则输出账号或密码错误。
username = "admin"
password = "123456"
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
else:
print("输入用户名或密码错误!")
上面程序是已经把功能实现了,但是我们日常生活中,用户名或密码输入错误,程序都会让我们重新输入,所以我们的程序也应该可以做到重复输入,一想到重复操作,既然学过了while循环,那么你应该联想到这个,应该是循环几次呢?我们假定先让用户可以一直输入。
b、循环输入版
username = "admin"
password = "123456"
while 1:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
else:
print("输入的用户名或密码错误!")
虽然重复输入用while循环解决了,但是我们的程序出现了一个新的bug,那就是用户输入时,也会继续输入。
所以我们要解决用户输入正确的用户名和密码后,应该结束循环,那么我们来学习一下退出循环的两种方式,然后再优化我们的程序。
5、退出循环的两种方式
(1)基于条件退出循环
我们都知道死循环是条件一直成立,如果我们想要退出循环,那么只要把条件改为假即可,既然要对条件进行修改,那么我们就不能直接把条件的值放在while后面,而是通过一个变量来表示。
tag = True
while tag:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == password:
print("登陆成功")
# 改变条件退出循环,但是tag之后的代码还运行,下次循环判断条件时才生效
tag = False
else:
print("输入的用户名或密码错误!")
(2)break退出循环
break是python的保留字,一般和循环使用,作用是退出当前循环。
username = "admin"
passwd = "123456"
while 1:
inp_name = input("请输入用户名:")
inp_pwd = input("请输入密码:")
if inp_name == username and inp_pwd == passwd:
print("登陆成功")
# 只要运行到break就会立即终止本次循环
break
else:
print("输入的用户名或密码错误!")
通过break和修改条件两种方式都可以退出循环,区别就是一个还会继续执行到下一次的条件判断,另一个则是直接退出。
6、循环嵌套
循环是可以像if一样进行相互之间的嵌套
while True:
代码1
while True:
代码2
while True:
代码3
....
对于循环的嵌套也有两种退出的方法
(1)分层退出
while True:
代码1
break
while True:
代码2
break
while True:
代码3
break
....
(2)统一条件退出
tag = True
while tag:
代码1
while tag:
代码2
while tag:
代码3
tag = False
....
7、while+continue
(1)continue
continue是结束本次循环,直接进入下一次。
(2)逢7跳过
在0-9中只打印0,1,2,3,4,5,6,8,9
a、打印0-9
count = 0
while count < 10:
print(count)
count += 1
b、遇见7不打印
# 分析一下,不打印说明条件不成立,所以我们可以在7哪里设置一个if判断,并跳过该次打印
# 打印跳过但是自增并不需要跳过,所以还是需要自增
count = 1
while count < 10:
if count == 7:
count += 1
continue
print(count)
count += 1
强调:在continue之后添加同级代码毫无意义,因为永远无法运行
8、while+else
在while循环的后面,我们可以跟else语句,当while循环正常执行完并且中间没有被break中止的话,就会执行else后面的语句,所以我们可以用else来验证,循环是否正常结束。
(1)语法
while 条件:
代码1
代码2
...
else:
代码3
# 只有当while循环结束之后,并且没有被break打断,才会执行else里面的代码
count = 0
while count < 3:
print(count)
count += 1
else:
print('循环没有被break,我将会被打印.')
count = 0
while count < 3:
if count == 2:
break
count += 1
print(count)
else:
print("循环被break,我不会打印")
三、for循环
1、for循环
(1)什么是for循环
循环就是重复做某件事,for循环是python提供的第二种循环机制
(2)为何要有for循环
理论上for循环能做的事情,while循环都可以做,之所以要有for循环,是因为for循环在循环取值(遍历取值)🆚while循环更方便。
(3)如何使用for循环
for循环语法:
for 变量名 in 可迭代对象: # 可迭代对象可以是 字符串, 列表, 字典, 元组, 集合 range() 等...
代码1
代码2
代码3
...
2、for循环实例
(1)列表循环取值
a、简单版:
# 循环取出lst中的三个值,并打印.
lst = ["lxx",520,'npy']
for x in lst:
print(x)
for循环的执行流程是,当代码执行到for那局时,内部做的是把列表的第一个元素赋值给X,即x=“XYG”,然后再执行循环体中的代码,循环体中的代码执行完成后会跳回到for那局,如果列表中海油元素的话,继续执行赋值操作,即x=520,然后再执行循环体中的代码,如果没有元素了,for循环也就停止了,所以可以说for循环的次数取决于可迭代对象的元素的个数。
b、复杂版
lst = ["xyg",520,'npy']
i = 0
while i < 3:
print(l[i])
i += 1
(2)字典循环取值
a、简单版
dic = {'man':"lxx","love":"npy"}
for x in dic:
print(x,dic[x]) # 通过coding发现字典循环取到的是键
b、复杂版
while循环当然可以遍历字典了,但是太麻烦了。
(3)字符串循环取值
a、简单版
msg = 'pym love npy forever!'
for x in msg:
print(x) # 注意for循环会循环字符串中的每个字符,空格也是一个字符.
b、复杂版
msg = 'lxx love npy forever!'
i = 0
while i < 21:
print(msg[i])
i += 1
3、for循环和while循环的异同
(1)相同之处
都是循环,for循环可以做的事情,while循环也可以做
(2)不同之处
while循环称之为条件循环,循环次数取决于条件何时变为假,for循环称之为"取值循环",循环次数取决于in后包含的值的个数。
4、for循环补充
当for循环是用于取值时,变量名可以出现在循环体中,当for循环只是为了循环次数,可以在循环体中不使用变量名,但是在for后,必须写变量名,这个是语法规定。
(1)for+range
range是python提供一种内置的数据类型,就像字符串,列表等,都是python内置的数据类型:
range(stop) -> range object
结束
range(start, stop[, step]) -> range object
开始 结束 步长
# range有个特点就是顾头不顾尾
for i in range(5):
print(i) # 0,1,2,3,4
# 注意:py2中range返回的是一个列表
# py3中返回的是一个对象
通常情况下for循环喜欢和range(),搭配使用。
for+continue/else/break,其用法和while的是一毛一样的。
(2)for循环嵌套
# 外层循环循环一次,内层循环需要完整的循环完毕
# for 循环的嵌套
for i in range(3):
print('我是外层循环--->', i)
for j in range(5):
print('我是内存循环--->', j)
(3)for循环退出
while循环的退出有两种方式,但是for循环的话只有一种break方式
for i in range(10):
if i == 7:
break # 当i==7时,退出for循环
print(i)
(4)for+continue
使用for循环+continue实现逢7跳过。
for i in range(10):
if i == 7:
continue # 当i==7时,跳过本次循环
print(i)
(5)for+else
当for循环,循环接收,没有break退出就会进入else分支,如果在循环中出现了break,就不会走else:
for i in range(10):
if i == 7:
break
print(i)
else:
print("for循环结束没有break")
for i in range(10):
print(i)
else:
print("for循环结束没有break")