目录
前言
判断语句是编程系统中最重要的语句之一。生活中有很多需要用到判断的例子。以游戏为例,王者荣耀新出了一个英雄叫暃,他的大招是“当范围内的英雄血量低于20%时被秒杀”。这个“当……时”就是典型的判断语句。我大胆猜测肯定用了“if”语句(咳咳)。
判断语句怎么用呢?看下文就够了!
一、先举个栗子
编程时经常需要检查一系列条件,并据此决定采取什么措施。在Python中,"if"语句让你能够检查程序的当前状态,并采取相应的措施。
以下为例:
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
# 今天是星期一,如果想要在week中找到星期一,需要用到列表索引的相关知识
print('Today is', week[0])
该模块会打印输出:Today is Monday 这段话。但是很多情况下,列表中有什么元素程序员并不知道。如果一个列表是随机的,或者是不断增加更改的,你不可能知道每时每刻他其中会有什么元素,更不知道元素的顺序。这个时候,就需要用一个语句去判断列表中是否有这个元素。
week1 = [ '周四', '星期二', 'hello', 'Monday', 'Wednesday']
for day in week1:
if day == 'Monday':
print(day)
如上例所示,列表“week1”是我随手打的,它包含了各式各样的元素。我想在该列表中找到“Monday”这个元素,但我不知道它的位置和索引。
于是,采用了if语句,配以循环,使得day在列表中搜索,当找到“Monday”时,将其打印出来。这个例子能很好地看出来if的灵活性以及必要性,接下来的部分详细讲解这种语句的使用。
二、条件测试
每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试。Python根据条件测试的值为True还是False来决定是否执行if语句中的代码。如果条件测试的值为True,Python就执行紧跟在if语句后面的代码;如果为False,Python就忽略这些代码。
那么什么叫“值为True或False”的表达式呢?
1.相等检查
大多数条件测试都将一个变量的当前值同某一特定值进行比较。最简单的条件测试是检查变量的值是否与某个特定值相等,要判断两个值是否相等,需要使用双等号(==)。
a = 'sdfasdf'
b = 'dferq'
c = a == 'sdfasdf'
d = b == 'sdfasdf'
如以上代码所示,第一二行分别对a、b两个变量进行赋值,三四行分别对c、d两个变量进行赋值。运行代码,可以看出c的值为“True”,d的值为“False”。
观察上面代码。其中第三四行出现了三个等号。以第三行为例讲解。第一个等号意思为,将***赋值给变量c的含义;第二三个连续等号意思为,变量a的值是否等于****。所以第三行代码的意思为:将“变量a的值是否等于'sdfasdf'这个值,赋给变量c”。通过变量查看器,能看到c的值为True,表示变量a的值等于'sdfasdf',换句话说,变量a中存储的就是字符串'sdfasdf'。
这时候,我突然有个小想法。我们知道A和a是同一个字母,那么在Python眼中他们一样吗?尝试如下代码:
a = 'abc'
b = 'Abc'
c = a == b
Python给出了“False”的回答。看来在Python中,字母的大小写不同也会有不同的值。(这个值是什么?需要ASCII码的知识)
大小写字母的不同势必会给Python识别带来和人眼不同的两种结果。上面我们讲了,可以使用方法把所有字符串的首字母从小写变成大写,这里介绍几个大小写转换相关的内容。
2.大小写转换相关语句
s = 'AbCdEfGhIjk'
print(s.lower()) #返回小写字符串
print(s.upper()) #返回大写字符串
print(s.capitalize()) #字符串首字符大写
print(s.title()) #每个单词的首字母大写
print(s.swapcase()) #大小写互换
用这些方法,就可以让字符串的大小写按照想要的格式输出。比如:
Verification_Code = 'abdefdsa'
Input = 'ABdEfDSa'
print(Verification_Code == Input)
print(Verification_Code == Input.lower())
如上例,第一个print输出的是False,因为验证码和我输入的字母大小写不一致;而第二个print输出的是True,因为我把我的输入全部变成了小写字母。
这种思想常用于验证码比对。想起我小时候,验证码必须区分大小写,大小写填错了就完蛋了。后来慢慢的,所有验证码都可以无视大小写了,估计就是用了这种方法吧。
3.不等的对比
a = 'sdfasdf'
b = 'dferq'
print(a != b)
与上面第一个例子一样的赋值,区别是在比较的时候,“==”变成了“!=”,而打印出来的结果也从“False”变成了“True”。
正难则反,不等的意义就在此。
4.数的对比
对于数的对比,可以判断是否相等、是否不等,是否大于、是否小于、是否大于等于和是否小于等于。
a = 10
print(a == 5)
print(a != 5)
print(a >= 5)
print(a <= 5)
print(a > 5)
print(a < 5)
对于数字的判断,在计算中非常常用。
5.多条件的对比
Python中提供了“and”和“or”两个关键字。
1)求交集时用and
x = 4
y = 10
print(x > 2 and x < 6)
print(y > 2 and y < 6)
如上例所示,and语句连接的两个条件,如果都为真,则返回True,如果至少有一个假,则返回False。在逻辑中是交集关系。True代表逻辑1,False代表逻辑0。交集的意思是且。条件1 and 条件2 指满足条件1且满足条件2,才为真。
2)求并集时用or
x = 4
y = 10
print(x < 2 or x > 6)
print(y > 2 or y < 6)
如上例所示,or语句连接的两个条件,如果至少有一个为真,则返回True,如果都为假,则返回False。在逻辑中是并集关系。并集的意思是或。条件1 or 条件2 指满足条件1或者满足条件2,就可以为真。
6.列表中是不是包含或者不包含某个值
有时候,执行操作前必须检查列表是否包含特定值。比如在游戏商城搜索菜单中,要判断玩家输入的东西是否正在售卖,就需要查询该字段是否在列表中。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
print('Monday' in week)
print('星期一' in week)
print('星期一' not in week)
7.布尔表达式
在条件测试这一小节的第一个例子中,产生了如下截图:
三、初遇if语句
1.if语句的模板
if conditional_test:
do something
如上所示,if语句模板为:if+条件+冒号,当if后的条件为True时,执行缩进于if的内容。
Today = 'Wednesday'
if Today == 'Wednesday':
print('懒猪!')
print('该发博客了!')
如上,给变量Today赋值星期三,并且判断,如果今天是星期三,则打印“懒猪”、“该发博客了”。
if语句里的缩进和前面讲的for循环一样。如果if后的条件为True,则会执行if语句下面缩进的所有代码,否则跳过。而与if语句缩进相同的行和if同级,互相不管。上述两个打印语句都在if的缩进之内,所以都要执行。
2.if的好基友们
if有两个好基友,分别是elif和else。
他们的使用格式为:
if conditional_test1:
do something
elif conditional_test2:
do something
elif conditional_test3:
do something
else:
do something
else,如其英语意思一样,就是“否则…就…”,else后面不需要跟条件。如上所示,else下面的缩进内容是否执行,要看前三个条件是否都不满足。如果前面if和elif的条件都不满足,则执行else后面的内容。
elif是else+if拼起来的,意思是,“否则如果…就…”。elif后面需要跟一个条件,类似于if。当if的条件没有通过,这时,转到elif,判断elif后面的条件是否通过。如果通过则执行,如果不通过则不执行。
可以看出来,if是只有条件关系,else是只有否则关系,elif是否则+条件关系。
if必须放在最开头,可以有很多个,表示并列的多个条件,“如果…则…;如果…则…”。
elif放在if之后用,可以有多个,也可以没有。表示对上面所有条件否定后,再给出一个与上面不相交的条件,“如果上面都不满足…且…满足,则…”。
else放在最后,最多只能有一个,可以没有。表示对上面所有条件的否定,“如果上面都不满足…则…”。
这三种语句各有适应范围,在实战中注意区分。
3.用if语句操作列表
我们来设计一个游戏:设置j=1,令i在1到10中进行循环,每次循环后,将i和j的值相加并赋给j,如果j为偶数,则减掉列表开头一个元素。如果j为奇数,则在列表尾插入i。最后打印出列表。
首先这里用到了循环,这是以前的内容。根据描述,因为要在1到10之间循环,所以需要
for i in range(1,11):
然后是计算。首先需要将j与i循环相加。在Python中,循环相加有一种简便的表示方法:
例如想表示 i = i+1,这个例子常用在循环的计数器内,每进行一次循环就把计数器i加上1.在Python中,提供了一种简单的方法表示:i += 1.
则:
j = 1
for i in range(1,11):
j += i
接下来是判断部分。判断j是奇数还是偶数。这里有需要引出一个表达式:num % 2
其中num为任意数。
这个表达式的意思是,令num这个数和2做除法,求其余数。
很显然,偶数和2整除余0,奇数和2相除余1,利用这个特性,可以作为我们判断的条件语句。
if j&2 == 0:
del List[0] # 删除列表的第一个元素
elif j % 2 == 1:
List.append(j)
print(List)
如上所述。使用了if-elif语句。因为一个正整数不是奇数就是偶数,任意正整数除以2,余数不是0就是1,非此即彼。所以此时不需要elif,用else即可实现相同工作。
接着把他们拼在一起。
j = 1
for i in range(1,11):
j += i
if j % 2 == 0:
del List[0] # 删除列表的第一个元素
else:
List.append(j)
print(List)
这个代码的缩进有两层。其中if和elif这两个是同一层;for在最外层;两个增删列表的操作在第三层。而print也放在了最外层,这样可以在循环结束之后再打印输出。
这样,这个游戏就完成了,运行试试吧!
好的如果你真的试了,就会发现有报错。
仔细一检查,原来是说列表“List”没有被定义。
原来,Python不是人脑,他不能逢山开路,所有的初始列表、参数、变量都需要人手动去输入。所以需要在前面增加一个定义列表的句子,即将List定义为一个空列表。
j = 1
List = []
for i in range(1,11):
j += i
if j % 2 == 0:
del List[0] # 删除列表的第一个元素
else:
List.append(j)
print(List)
你有动手尝试吗?如果你有,你又会发现新的报错。怎么回事呢?
动笔一算,完蛋,这样产生的第一个数字是2,刚好是偶数。根据规则需要在列表中删除索引为0的元素。但是此刻列表并没有任何元素,所以不能删掉0索引。怎么办呢?可以进行一次判断。
j = 1
List = []
for i in range(1,11):
j += i
if j % 2 == 0:
if List == []:
print('列表为空,暂不删除')
else:
del List[0] # 删除列表的第一个元素
else:
List.append(j)
print(List)
用这种方法判断列表是否为空,如果是空,跳过删除元素这一步。同时将打印输出List放在了循环内,方便看出每一步进行了什么操作。
总结
以上,就完成了对判断语句if的简单学习,以及对if-elif-else语句的使用练习。在最后一个例子中,用到了非常多的循环、判断、缩进、列表操作等知识,同时还有取余数这个新操作。这些操作在将来有很大的用处,是很重要的基础知识。