下命令的如果…就…逻辑,就是与计算机沟通的逻辑——条件判断,其作用就是明确地让计算机知道:在什么条件下,该去做什么。

Python之所以能完成自动化任务,比如自动抓取网页关键词,自动下载小电影等,就是因为它可以执行条件判断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import time print('如果你想拥有无限的力量和能量,那必须夺得力量宝石') time.sleep(2) print('如果你想扭曲时空和任意地传送,那必须夺得空间宝石') time.sleep(2) print('如果你想任意地修改现实,无视任何宇宙规律,那必须夺得现实宝石') time.sleep(2) print('如果你想到达任何一个时间点,无论是古老的年代还是遥远的未来,那必须夺得时间宝石') time.sleep(2) print('如果你想控制生者和死者的灵魂,那必须夺得灵魂宝石') time.sleep(2) print('如果你想拥有不朽的精神力量并操控任何人的思维,那必须夺得心灵宝石') time.sleep(2) print('那么,如果让你来选择的话,你想要获得哪颗宝石呢?') time.sleep(2) print('请在以下六个选项【1 力量宝石 ;2 空间宝石;3 现实宝石 ;4 时间宝石;5 灵魂宝石 ;6 心灵宝石;】中,选择你最想获得的宝石吧!') time.sleep(3) answer=input('请将对应数字输入在冒号后: ') if answer=='1': print('我告诉你哦,力量宝石保存在山达尔星的新星军团的总部基地') time.sleep(3) elif answer=='2': print('空间宝石在洛基手里') time.sleep(3) elif answer=='3': print('雷击已将现实宝石交给收藏家保管') time.sleep(3) elif answer=='4': print('奇异博士愿意用时间宝石换取钢铁侠的性命') time.sleep(3) elif answer=='5': print('必须献祭自己心爱的人才能得到灵魂宝石') time.sleep(3) else: print('幻视头上的心灵宝石被绯红女巫摧毁,但可用时间宝石复原') time.sleep(3) |
1 2 3 4 5 6 7 8 9 10 11 |
#输出结果: 如果你想拥有无限的力量和能量,那必须夺得力量宝石 如果你想扭曲时空和任意地传送,那必须夺得空间宝石 如果你想任意地修改现实,无视任何宇宙规律,那必须夺得现实宝石 如果你想到达任何一个时间点,无论是古老的年代还是遥远的未来,那必须夺得时间宝石 如果你想控制生者和死者的灵魂,那必须夺得灵魂宝石 如果你想拥有不朽的精神力量并操控任何人的思维,那必须夺得心灵宝石 那么,如果让你来选择的话,你想要获得哪颗宝石呢? 请在以下六个选项【1 力量宝石 ;2 空间宝石;3 现实宝石 ;4 时间宝石;5 灵魂宝石 ;6 心灵宝石;】中,选择你最想获得的宝石吧! 请将对应数字输入在冒号后: 4 奇异博士愿意用时间宝石换取钢铁侠的性命 |
在Python宇宙,条件判断语句总共有三种表现形式,我们先从最简单的单向判断:if开始说起:
单向判断:if
单向判断:if代表什么呢?相传上面的六颗宝石是宇宙中最强大的东西。如果一个人同时拥有六颗宝石,ta就可以实现包括毁灭宇宙在内的所有事情。
1 2 3 4 5 6 7 8 9 |
# 为宝石数量赋值 stonenumber=6 # 条件:如果你拥有的宝石数量大于等于6个 if stonenumber>=6: # 结果:显示‘你拥有了毁灭宇宙的力量’的结果 print('你拥有了毁灭宇宙的力量') |
第一步,用赋值运算符=对当前情况进行赋值:将你拥有的宝石个数6赋值给变量——宝石数stonenumber。
第二步,确定if条件:如果变量stonenumber的值>=个数6时,就执行冒号后,下一行的命令。
第三步,用print()命令打印出结果:你拥有了毁灭宇宙的力量。所以,if语句的单向判断逻辑,我们可以这样归纳:

在条件判断代码中的冒号:后、下一行内容的前面,会空几个格,但这是为什么呢?

首先,在计算机的沟通语言中,空格的学名叫缩进,比如我们写文章都要空两个格,这就叫首行缩进。
对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个Tab键】
并且,在if条件语言中,缩进不需要我们手动按空格键。当你用英文输入法打:后按回车,我们的开发工具(用来编写Python代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。
此时,被缩进的内容(print()函数)和if条件语句组成了一个代码块(一个整体),成为了if条件下的内部命令。
这意味着:如果赋值满足if条件,计算机就会准确执行if条件内部的命令(即缩进的代码块)。
错误代码:
1 2 3 4 5 6 7 8 9 10 |
# 赋值语句:为宝石数量赋值 stonenumber=6 # 条件:如果你拥有的宝石数量大于等于6个 if stonenumber>=6: # 结果:显示‘你拥有了毁灭宇宙的力量’的结果 print('你拥有了毁灭宇宙的力量') |
1 2 3 |
print('你拥有了毁灭宇宙的力量') ^ IndentationError: expected an indented block |
会出现IndentationError: expected an indented block(缩进错误:期望一个缩进块)的报错。
这是因为,当我们去掉缩进时,if条件和print命令成为了两个不同的代码组,属于平行关系。你看:if条件下面,缺少了可以执行的动作。我们想一下:无论条件成不成立,都不会执行什么操作,这个条件的存在没有任何意义。
单向判断:if的代码逻辑及语法格式:

1 2 3 4 5 6 7 8 9 |
# 为宝石数量赋值 stonenumber=2 # 条件:如果你拥有的宝石数量大于等于6个 if stonenumber>=6: # 结果:显示‘你拥有了毁灭宇宙的力量’的结果 print('你拥有了毁灭宇宙的力量') |
首先,第一行的赋值语句【stonenumber=2】是后面if条件判断语句的前提情况,然而并不满足『stonenumber>=6』这个条件,所以不会执行条件下的『print』操作。
计算机是一行行往下执行代码的。所以,当第一行赋值情况的前提不满足if的条件时,Python的逻辑就会判断:条件不满足,无法执行if条件下的命令,从而自动跳过,执行下一行命令。

但是,在上方代码中,除了if之外,我们并没有设置其他的命令去让Python执行。因此,Python自然就无法输出结果。
双向判断:if…else…
在Python宇宙,我们可以利用if的双向判断形式:if…else…去实现这个行动:当宝石数量还没达到6颗的时候,需要带着卡魔拉去沃弥尔星寻找灵魂宝石。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 赋值语句:为宝石数量赋值 stonenumber=3 # 条件:如果你拥有的宝石数量大于等于6个 if stonenumber>=6: # 结果:显示‘你拥有了毁灭宇宙的力量’的结果 print('你拥有了毁灭宇宙的力量') # 条件:当赋值不满足if条件时,执行else下的命令 else: # 结果:显示‘去找灵魂宝石’的结果 print('带着卡魔拉去沃弥尔星寻找灵魂宝石') |
很多时候,我们不能把鸡蛋放在一个篮子里,要做好两手准备:如果不满足条件时,我们要怎么办。
Python则很贴心地,让我们借用if…else…语句,让码农们有了另一种选择——【如果…不满足,就…】

在if…else条件语句中,if和else各自抱团,形成两个不同的代码块。表示的是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。

如果用我们上面宝石的例子讲解的话,if定义的就是宝石数>=6,而else定义的则是宝石数<6。

而由于赋值【stonenumber=3】,并不满足【if stonenumber>=6:】这个条件,所以不能执行【print(‘你拥有了毁灭宇宙的力量’)】的命令。
只能走第二条else:的路——执行print(‘带着卡魔拉去沃弥尔星寻找宝石’)的结果。

测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 要先为体重赋值,101斤 weight=101 # 如果体重超过100斤的条件下,就……(条件后需加冒号) if weight>100: # 就打印结果:不吃了!(注意检查是否自动缩进) print('不吃了') # 如果体重没有超过100斤的条件,就……(else条件前无缩进,条件后需加冒号) else: # 就打印:放心吃吧(注意检查是否自动缩进) print('放心吃吧') |

多向判断:if…elif…else…
国际惯例,在思考如何用代码实现某个目标时,首先,我们需要先来梳理一下逻辑。
在代码中,我们需要添加三个如果:如果宝石数>=6,如果0<宝石数<=5,如果宝石数等于0。并产生3个对应的执行结果。
那么,在判断3个或3个以上的条件时,我们就需要借助Python中的多向判断命令:if…elif…else…。
这三者共同构成了多向判断的命令逻辑关系:如果if的条件不满足,就按顺序看是否满足elif的条件,如果不满足elif的条件,就执行else的命令。
并且,当判断的条件超过3个时,中间的多个条件都可以使用elif。


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 为宝石数量赋值 stonenumber=5 # 条件:如果你拥有的宝石数量大于等于6个 if stonenumber>=6: # 结果:显示‘就拥有了毁灭宇宙的力量’的结果 print('你拥有了毁灭宇宙的力量') # 条件:如果想让宝石数量停留在5个以下,至少一个 elif 0<stonenumber<=5: # 结果:显示‘绯红女巫需要亲手毁掉幻视额头上的心灵宝石’的结果 print('绯红女巫需要亲手毁掉幻视额头上的心灵宝石') # 条件:当赋值不满足if和elif条件时,执行else下的命令,宝石数量为0个 else: # 结果:显示‘需要惊奇队长逆转未来’的结果 print('需要惊奇队长逆转未来') |
首先,第一行的赋值,会按照从上到下的顺序挨个试一遍,看自己满足哪个条件,满足了就不往下走,不满足就继续试,试到出结果为止。
其次,elif的运行本质上和else一样,已经带有其他条件的意思,所以elif后可以不接else。
比如上面的代码,stonenumber=5会对下面的if elif else条件逐个扫描,看看自己满足哪一个,就执行哪个条件底下的命令。
很显然,第二个条件elif 0<stonenumber<=5刚好能与stonenumber=5的前提相匹配,于是,执行elif底下的命令:print(‘绯红女巫需要亲手毁掉幻视额头上的心灵宝石’)**。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#当宝石数量为0颗的时候,可以输出"需要惊奇队长逆转未来" stonenumber=0 #为宝石数量赋值 if stonenumber>=6: #条件:如果你拥有的宝石数量大于等于6个 print('你拥有了毁灭宇宙的力量') #结果:显示‘就拥有了毁灭宇宙的力量’的结果 elif 0<stonenumber<=5: # 条件:如果想让宝石数量停留在5个以下,至少一个 print('绯红女巫需要亲手毁掉幻视额头上的心灵宝石') #结果:显示‘绯红女巫需要亲手毁掉幻视额头上的心灵宝石’的结果 # 条件:当赋值不满足if和elif条件时,执行else下的命令,宝石数量为0个 else: #结果:显示‘需要惊奇队长逆转未来’的结果 print('需要惊奇队长逆转未来') |

sildenafil 150mg without prescription – sildenafil uk buy gabapentin 800mg pill
metoprolol over the counter – lopressor us tadalafil 10mg cost
buy norvasc generic – buy amlodipine 5mg generic order prilosec 20mg without prescription
glucophage 1000mg pill – glucophage 1000mg cost atorvastatin pills
ivermectin tablets uk – purchase zithromax without prescription zithromax 250mg us
oral cialis 10mg – buy cialis 20mg pill cost tadalafil 5mg
cost amoxicillin – viagra pills 50mg sildenafil 100mg price
prednisone brand – prednisone 40mg ca buy isotretinoin 40mg online
online casino no deposit bonus – slots real money buy prednisone 40mg generic
order tadalafil sale – ivermectin 3mg for humans cheap erectile dysfunction pills
tadalafil 5 mg tablet – cheap tadalafil pills stromectol tablets for humans for sale
sildenafil 50mg uk – sildenafil online purchase ranitidine without prescription
buy careprost without prescription – careprost online buy desyrel cost
buy budesonide generic – quetiapine online buy cefuroxime pill
sildenafil us – purchase disulfiram pills disulfiram canada
cephalexin 500mg price – purchase erythromycin online cheap order erythromycin 250mg online cheap
ivermectin 6mg – stromectol buy ivermectin lotion cost
cost plaquenil 200mg – order hydroxychloroquine order plaquenil online cheap
cialis 20 mg – cialis pills 5mg is cialis generic