关系运算符和If判断式
程序的功能除了执行加减乘除的计算之外,有些时候还需要比较资料。例如输入学生成绩的程序,必须检查使用者输入的分数是否在0和100之间。否则如果不小心输入1000分,计算结果就不合理。另外可能还要判断成绩是否及格,以便记录不及格的学生名单。这个单元我们要介绍如何使用「关系运算符」和「If判断式」来检查资料。
关系运算符就是数学中的「大于」、「等于」…这些比较数值大小的运算符号。因为它们是用来比较资料的大小关系,所以叫做关系运算符(也有人称它们为「比较运算符」)。
Python语言有6种关系运算符,这6种关系运算符的用法,就如同数学中的用法一样,只不过使用的符号有些差异,请参考表1的说明。
表1 Python的关系运算符
运算符功能
运算符号
范例
大于
>
# value1和value2是整数、浮点数
#或是Decimal浮点数的物件
5 > 3.29
value1 > 100
value1 + value2 > 1.23e2
大于等于
>=
#请参考第一个范例的注解
5 >= 3.29
value1 >= 100
value1 >= 1.23e2 + value2
小于
<
#请参考第一个范例的注解
-5 < 3.29
value1 < 100
value1 + value2 < 1.23e2
小于等于
<=
#请参考第一个范例的注解
-5 <= 3.29
value1 <= 100
value1 <= 1.23e2 * value2
等于
==
#请参考第一个范例的注解
-5 == -5
value1 == 100
value1 == 1.23e2 * value2
不等于
!=
#请参考第一个范例的注解
-5 != 3.29
value1 != 100
value1 != 1.23e2 * value2
关系运算符是属于二元运算符,因为单项资料无法比较,必须有二项资料才能够互相比较,例如:
3 < 5
我们把这个运算式称为「关系运算式」,因为它是由关系运算符组成。关系运算式的执行结果只有「对」或「错」二种情况。「对」在程序中叫做True;「错」在程序中叫做False。True和False是布林值,我们已经在前面单元做过介绍。以上面的范例来说,它的执行结果是True。关系运算式也可以比较数值物件的大小,如以下范例:
score >= 60
ch_score < en_score
也可以比较算术运算式:
ch_score + en_score >= 180
math_score * 2 < ch_score + en_score
因为关系运算符的优先顺序比算术运算符低,所以程序会先把算术运算式计算完毕,再进行比较。Python的关系运算符还有一项特殊功能,就是可以串接起来,例如:
0 <= score <= 100
en_score < ch_score < math_score
使用关系运算符的时候,要特别注意是否需要等号。例如要判断分数是否及格,可以在下列二个关系运算式中择一使用(假设score是一个整数):
score >= 60
score > 59
这二个运算式比较的分数不一样,第一个式子是用60分来比较,因此需要等号,第二个式子是用59分来比较所以不需要等号。另外,如果score是浮点数或是Decimal浮点数,那么第二个式子就不适用,因为59和60之间的浮点数会被误判为及格。初学者在使用关系运算式的时候,很容易漏掉这些细节,要特别留意。
补充说明
Python语言的关系运算符可以串接起来,使用上很方便。如果读者以后有机会学习C、C++或是Java这些程序语言,要注意它们的关系运算符不可以串接起来,而是要用And逻辑运算符,把多个关系运算式组合起来。
通常要比较资料大小,第一个想到的一定是数值资料。但是其实Python语言的关系运算符不但可以比较数值,还可以比较字串,例如以下运算式是合法的:
'abc' > 'ABC'
问题是,它是True还是False?要回答这个问题,必须了解如何比较字串。其实很简单,只要掌握以下二个观念即可:
把一个字串想像成是一个队伍,要比较的时候,先派第一个字元出来比。如果分出大小,比较就结束了。如果二个字元一样,再派下一个字元出来比。
比较字元大小是根据字元的「字元码」。不论是大写英文字母、小写英文字母、或是!@#$...这些特殊字元,在电脑中都有一个对应的字元码。我们可以利用ord()这个内建函式取得字元的字元码。
现在回到前面的问题。要比较'abc'和'ABC'这二个字串,就是先比较'a'和'A'的字元码。执行ord('a')可以得到'a'的字元码是97,执行ord('A')可以得到'A'的字元码是65,所以'a'的字元码比较大,也就是'a'大于'A',因此这个关系运算式的结果是True。