Python3中的条件判断、控制语句、逻辑语句详解

在代码开发的过程中,条件判断、控制语句是必不可少的内容。它支撑起了整个开发项目的许多细节。比如单单在登录模块中,我们就需要:
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():会结束整个程序(慎用)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容