说起判断,那一定是开发语言必须有的,如果…那么…,和一款 IFTTT软件是一个思路。对于自动化任务,比如自动抓取网页关键词,自动下载小电影等,就是因为它可以执行条件判断。
if 单向判断
#单项判断 if...
if 8>6:
print('true')
需要注意的两个地方是所有的判断后面必须跟冒号,另外判断的内容首行缩进(四个空格或一个Tab)。冒号和缩进的作用是让python区分代码之间的层次,理解条件执行的顺序。
然后我们来个小的升级,把原来的判断加上前提赋值。
num = 8
if num>=9:
print('true')
运行之后,你会发现什么都没有发生。这是因为if的条件没有满足,所以跳过是第2行和第3行的判断。满足条件就继续运行(首行缩进代码),不满足就跳过判断。
if…else… 双向判断
#双向判断:if…else…
if 8>6:
print('true')
else:
print('flase')
双向判断中,if和else是平级的,所以else前面不需要缩进。平级的时候,他们两个的条件是互斥的,比如 if 8>6,那么else的隐藏判断条件就是8<6,因为else后面不能跟判断条件,所以else想要执行,必须跟着和他平级命令的if来设置。平级命令可以是if,也可以是for循环。
if…elif…else… 多向判断
比如我们要给学生的成绩进行打分,60以下不及格,60-80一般,80以上优秀该如何做呢?
Grade = 68
if Grade > 80:
print('优秀')
elif 60 <= Grade <= 80:
print('一般')
else:
print('不及格')
并且,elif需要一个平级命令的if(else也一样),但是可不需要后面的else,俗称要脸不要屁股!
注意:if和elif是不同的,if会遍历所有的条件,而elif是条件满足就停止了。else后面不能加判断条件,它的条件是前面所有条件的互斥条件。
并且使用elif时候,逻辑必须清晰,
if 嵌套
有点像剥洋葱,先确定外面的条件,然后在确定里面的。我们拿上面的打分做例子,60分作为分割线
Grade=36
if Grade>=60:
print('还不错哦~')
if Grade>=80:
print('你很优秀')
else:
print('你只是一般般')
else:
print('都没及格啊!')
if Grade>30:
print('你还有救')
else:
print('辍学吧')
注意:使用缩进判断条件和命令的等级。比如3-7行都是在第2行后面缩进的,意味着他们都属于 a>=60这个条件下的判断。第4行就是>=60和>=80,第6行虽然没有加,但是条件里面是互斥关系,所以它代表是>=60和<=80。
再写多层嵌套的时候,可以采取剥洋葱的方法,先确定外面的框架,然后在判断内部细节。
我们拓展一下,给评分加一个输入框来自定义分数,运行。
Grade = input('你考了多少分呢?')
if Grade >= 60:
print('还不错哦~')
if Grade >= 80:
print('你很优秀')
else:
print('你只是一般般')
else:
print('都没及格啊!')
if Grade > 30:
print('你还有救')
else:
print('辍学吧')
你会发现,这样写会报错,因为python会把所有input()函数输入框的内容默认定义为字符串,字符串和数字之间是无法判断的,报错代码:TypeError: ‘>=’ not supported between instances of ‘str’ and ‘int’
我们可以把判断的文字都改为字符串:
Grade = input('请输入一个数字:')
if Grade >= '60':
print('还不错哦~')
if Grade >= '80':
print('你很优秀')
else:
print('你只是一般般')
else:
print('都没及格啊!')
if Grade > '30':
print('你还有救')
else:
print('辍学吧')
你会发现,这样好麻烦啊,如果后面判断条件很多,都要给它们加引号,所以我们换个方式,把输入的文本提前转换为整数。
Grade = int(input('请输入一个数字:'))
if Grade >= 60:
print('还不错哦~')
if Grade >= 80:
print('你很优秀')
else:
print('你只是一般般')
else:
print('都没及格啊!')
if Grade > 30:
print('你还有救')
else:
print('辍学吧')