在代码开发的过程中,条件判断、控制语句是必不可少的内容。它支撑起了整个开发项目的许多细节。比如单单在登录模块中,我们就需要:
1、判断账号密码的输入是否符合规范;
2、判断账号密码的值是否正确;
3、根据不同的账号密码输入状况去给与相应的提示或者继续不同的逻辑操作(如登录、报错等);
4、登录后我们需要跳转的页面、需要展示的内容等等
那么,Python中的条件判断是怎么样的呢?
bool布尔变量
在说条件判断之前,我们需要先弄清Python中用什么来表示真、假、对、错、存在、不存在等等。
在Python中,我们使用bool来表示我们所需要的的结果是真还是假。这儿的真假,分别对应了bool中的两个值,True和False。True为真,False为假。(注意:在有的语言中,用YES表示真,NO表示假。Python中不能这么使用)
所以当我们判断条件的返回值时,返回True的时候,表示当前条件判断成立;返回False的时候,表示当前条件判断不成立。
在bool中,还有一些情况来表示True或者False:
- Number不等于0,等于0的时候为False,其余不管大于还是小于,一律是True
- String为空("")的情况下为False,但是String为空格的情况下" ",是True
- Set、List、Dictionary为空的时候为False,不为空的时候为True。
逻辑运算符
在条件判断中,时常离不开逻辑运算符。判断大小、判断相等、判断成立条件、判断是不是某个容器的一部分等等。
# 比较运算符
a == b # a等于b(注意不能只用一个=,只用一个=是赋值运算符)
a < b # a小于b
a > b # a大于b
a >= b # a大于等于b
b <= b # b小于等于a
a != b # a不等于b
# 同一性运算符
a is b # a和b是同一个对象
a is not b # a和b不是同一个对象
# 成员运算符
a in b # a是容器b里的成员
a not in b # a不是容器b里的成员
# 布尔运算符(顺序运算符)
condition_a and condition_b
condition_a or condiction_b
注意,== 和 is 的区别:
- 实质上来说,== 是比较运算符,is 是同一性运算符
- == 用来比较符号两边的对象的value是否相等
- is 用来比较两边对象的唯一身份标识(内存地址)是否一致,可用id()方法打印查看
注意,and 和 or 的区别
- 表达式从左至右运算,若 or 左侧逻辑值 为 True, 则不继续校验 or 右侧的表达式。直接返回True
- 表达式从左至右运算,若 and 左侧逻辑值为True, 则继续校验 and 右侧的表达式,反之则不继续校验
- 如果判断中的所有 and 都为真,则返回最后一个真值,如果存在假值,则返回第一个假值(不是返回False)
- 如果判断中的 or 左侧为真,则直接返回真值,如果都为假,则返回最后一个假值(不是返回False)
- and 的优先级高于 or
断言
断言(Assert)的作用是,当关键词后边的条件判定为假的时候,程序自动崩溃且抛出AssertionError异常。
由上看来,断言为抛出异常导致程序崩溃,这对于程序的正常运行是极为不友好的,那么我们为什么需要断言呢?
这是因为,当我们才测试程序的时候,经常为需要临界值的判断或者欲调用值的判断。这个时候,如果传入的值超过临界值或者传入的类型不对的时候,程序也有可能会崩溃且崩溃原因不易排查。这个时候,我们就可以用断言辅以附加信息进行先行排查,让我们的程序在出发隐患点的时候先行抛出异常。
断言一般用在确保程序中某一个条件一定为真或者符合规范才能让程序正常工作的情况下。
也有可以校验错误且不抛出异常的判断语句,这边则需要用到try/except
try/except:
try:
a = 10
b = 0
c = a/b
except Exception as error:
print(error)
上述语句是一个会导致程序崩溃的语句,因为在数学中的除法里,0不能当除数,所以运行上述代码的情况下,会因0而崩溃。
为了不使这边的崩溃打断程序的运行,我们便使用try/except语句。使用该语句的情况下,即使出现会导致程序崩溃的情况也不会直接崩溃,而是会执行我们except后的操作。
except 后的 Exception 值是可以替换的,Exception是一个包含了所有错误异常的集合。当我们不知道可能会发生什么错误的情况下,我们便可以使用 Exception。
下面列举了 Exception 中常用的一些错误信息:
异常 | 描述 |
---|---|
NameError | 尝试访问一个没有申明的变量 |
ZeroDivisionError | 除数为0 |
SyntaxError | 语法错误 |
IndexError | 索引超出序列范围 |
KeyError | 请求一个不存在的字典关键字 |
IOError | 输入输出错误(比如你要读的文件不存在) |
AttributeError | 尝试访问未知的对象属性 |
ValueError | 传给函数的参数类型不正确,比如给int()函数传入字符 |
控制语句
Python中的控制语句又叫流程控制语句,主要为if、elif、else语句、while...else语句和for语句
if、elif、else语句
Python中的if、elif、else语句很经常搭配一起使用。主要用在条件判断、多种条件判断的场景下, 如:
login_person = input('请输入您登陆的身份')
if login_person == 'teacher':
pass
elif login_person == 'student':
pass
else login_person == 'admin':
pass
因为Python中没有switch的用法,所以当我们用到多种条件判断的时候,就需要用到if...elif...else的组合。这儿的elif就相当于我们其他于语言里的else if,可能是Python的创造者为了偷懒,就写成了elif的样子。
注意:if、elif、else后的“:”一定要记得写,且是写英文的“:”。
当我们需要多次执行一行代码或者一个代码块的代码时,可以使用循环语句。Python中提供的循环语句有while语句和for语句,另外再辅以break、continue、pass来完成整个循环。(注意:Python中没有do...while语句)
while...else
count = 0
while count < 100:
print(count)
count += 1
else:
print('count end')
当给定的判断条件的值为真的时候,便会一直执行while循环体中的代码。直到判断条件值为假的时候才会跳出循环,然后执行else中的语句(如果else语句存在)。
注意:
- else语句不一定非得添加,根据实际需求使用
- while语句千万不要用一直为真的判断语句,如直接用True,除非搭配break使用
- 当while循环被break中断的时候,else中的语句不会执行
for
names = ['Jim', 'Tim', 'Tom', 'John']
for name in names :
print(name)
for循环通常用于遍历有序数据类型(如list、tuple、range、str)、集合和字典。for的用法如上所示,可以直接放入一个要遍历的对象。同时for循环也可放入range用index迭代,如下:
names = ['Jim', 'Tim', 'Tom', 'John']
for index in range(len(names)) :
print(names[index])
for也可以与else搭配使用,具体用法与while...else一致。
break、continue、pass、exit()
- break:执行break语句的时候,会直接终止整个循环且跳出整个循环体
- continue:执行continue语句的时候,不会终止整个循环,只会跳出当前这一步的循环不执行,进而执行下一步的循环
- pass:不会做任何操作,只起到占位的作用,让系统不崩溃
- exit():会结束整个程序(慎用)