![Python从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/576/26793576/b_26793576.jpg)
3.1 运算符
运算符是一些特殊的符号,主要用于数学计算、比较大小和逻辑运算等。Python的运算符主要包括算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符和位运算符。使用运算符将不同类型的数据按照一定的规则连接起来的式子,称为表达式。例如,使用算术运算符连接起来的式子称为算术表达式,使用逻辑运算符连接起来的式子称为逻辑表达式。下面将对一些常用的运算符进行介绍。
3.1.1 算术运算符
算术运算符号是处理四则运算的符号,在数字的处理中应用得最多。常用的算术操作符如表3.1所示。
表3.1 算术运算符
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-T60_63898.jpg?sign=1739276275-cGp0pnIZ5llZNpear5abm4hei8DEZENd-0-12453e0b18b414802636c5240f0b224c)
说明
在算术操作符中使用%求余,如果除数(第二个操作数)是负数,那么取得的结果也是一个负值。
注意
使用除法(/或//)运算符和求余运算符时,除数不能为0,否则将会出现异常,如图3.1所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P60_6396.jpg?sign=1739276275-J3BXlUPuTdPJMHOQ3CsBpJlglovzJUUQ-0-73845ae65650062be6729d96d6ddf8c3)
图3.1 除数为0时出现的错误提示
【例3.1】 计算学生成绩的分差及平均分。(实例位置:资源包\TM\sl\03\01)
某学员3门课程成绩如图3.2所示,编程实现:
Python课程和English课程的分数之差;
3门课程的平均分。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P61_6463.jpg?sign=1739276275-lUFKOuIOnWmphJ0C8LwRkmYv3Amcy8QD-0-cfb028856bbf0e9412c588ab5af7dd83)
图3.2 某学员的成绩表
在IDLE中创建一个名称为score_handle.py的文件,然后在该文件中,首先定义3个变量,用于存储各门课程的分数,然后应用减法运算符计算分数差,再应用加法运算符和除法运算符计算平均成绩,最后输出计算结果。代码如下:
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P61_63287.jpg?sign=1739276275-5Gz9FHLBLpVpkNNLO0pJVHtG42D1OT7c-0-c96ac5d64818e8f39606e065dec9e020)
运行结果如图3.3所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P61_6464.jpg?sign=1739276275-kRYCAVtAbCnWJao2Fi69RyTgNfQ7g9Q8-0-adf5d328cb7d0955078f740efc6002e0)
图3.3 计算学生成绩的分数差及平均分
说明
在Python 2.x中,除法运算符(/)的执行结果与Python 3.x不一样。在Python 2.x中,如果操作数为整数,则结果也将截取为整数。而在Python 3.x中,结果为浮点数。例如,7/2,在Python 2.x中结果为3,而在Python 3.x中结果为3.5。
3.1.2 赋值运算符
赋值运算符主要用来为变量等赋值。使用时,可以直接把基本赋值运算符“=”右边的值赋给左边的变量,也可以进行某些运算后再赋值给左边的变量。在Python中常用的赋值运算符如表3.2所示。
表3.2 常用的赋值运算符
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-T62_63288.jpg?sign=1739276275-GYx1uUZEnNjmZb6iJflcmFTXHycmTGBW-0-4e8ce6a69162fe9b9c23ccfa213de8b5)
注意
混淆“=”和“==”是编程中最常见的错误之一。很多语言(而不只是Python)都使用了这两个符号,另外每天都有很多程序员用错这两个符号。
3.1.3 比较(关系)运算符
比较运算符,也称为关系运算符。用于对变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回True,如果为假,则返回False。比较运算符通常用在条件语句中作为判断的依据。Python中的比较运算符如表3.3所示。
表3.3 Python的比较运算符
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-T62_63289.jpg?sign=1739276275-c3SEz2v7N80uTCXzwK2y8zaw5KfgG9SL-0-007f55ecbfda0b06b0a0e92c0fabc4e5)
【例3.2】 使用比较运算符比较大小关系。(实例位置:资源包\TM\sl\03\02)
在IDLE中创建一个名称为comparison_operator.py的文件,然后在该文件中定义3个变量,并分别使用Python中的各种比较运算符对它们的大小关系进行比较,代码如下:
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P63_63290.jpg?sign=1739276275-3vJLJXbgN5WoGENkOmjZTyJOZpjAS7aa-0-43de024b012c984ad881e525e9d4289e)
运行结果如图3.4所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P63_8233.jpg?sign=1739276275-UvORsXxg9f80q3OBP9X7BlIgHk8K1Hse-0-5021ebe0b7739f0c27e0742683735e62)
图3.4 使用关系运算符比较大小关系
3.1.4 逻辑运算符
假定某面包店,在每周二的下午7点至8点和每周六的下午5点至6点,对生日蛋糕商品进行折扣让利活动,那么想参加折扣活动的顾客,就要在时间上满足“周二并且7:00 PM~8:00 PM”或者“周六并且5:00 PM~6:00 PM”,这里就用到了逻辑关系,Python中也提供了这样的逻辑运算符来进行逻辑运算。
逻辑运算符是对真和假两种布尔值进行运算,运算后的结果仍是一个布尔值,Python中的逻辑运算符主要包括and(逻辑与)、or(逻辑或)、not(逻辑非)。表3.4列出了逻辑运算符的用法和说明。
使用逻辑运算符进行逻辑运算时,其运算结果如表3.5所示。
表3.4 逻辑运算符
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-T63_63900.jpg?sign=1739276275-IZI9G3XQo6oFenSTMVfDK8rIn5QsPDKf-0-e30d7a34f183e1646da795f55e531ae2)
表3.5 使用逻辑运算符进行逻辑运算的结果
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-T64_63901.jpg?sign=1739276275-jYumsUBi6lW4Yjm5pm6sECcbmlYy2p2X-0-fe22ae75a78a3748458cc2e83bbc9f1d)
【例3.3】 参加面包店的打折活动。(实例位置:资源包\TM\sl\03\03)
在IDLE中创建一个名称为sale.py的文件,然后在该文件中使用代码实现3.1.4节开始描述的场景,代码如下:
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P64_63293.jpg?sign=1739276275-8NVEnFbMGE3RftHusSEAq7BqJ28jPsj0-0-d677469ada83c8692f93f8609c41ace9)
说明
(1)第2行代码中,input()方法用于接收用户输入的字符序列。
(2)第3行代码中,由于input()方法返回的结果为字符串类型,所以需要进行类型转换。
(3)第5行和第7行代码使用了if…else条件判断语句,该语句主要用来判断是否满足某种条件,该语句将在第4章进行详细讲解,这里只需要了解即可。
(4)第5行代码中对条件进行判断时,使用了逻辑运算符and、or和关系运算符==、>=、<=。
按快捷键F5运行实例,首先输入星期为“星期一”,然后输入时间为8,将显示如图3.5所示的结果,再次运行程序,输入星期为“星期六”,时间为18,将显示如图3.6所示的结果。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P64_8927.jpg?sign=1739276275-2T6okRgqxh47HMFqcOLlECJiwjRtQ3Ue-0-f1b827cde98a9a354b2f027d7a10deb5)
图3.5 符合条件的运行效果
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P64_8932.jpg?sign=1739276275-9fEr7vxxpA03NWF52GEutSdmm07LL16Y-0-2b6947ed854ab8688ca3c9a78b10c253)
图3.6 不符合条件的运行效果
说明
本实例未对输入错误信息进行校验,所以为保证程序的正确性,请输入合法的星期和时间。另外,有兴趣的读者可以自己试着添加校验功能。
3.1.5 位运算符
位运算符是把数字看作二进制数来进行计算的,因此,需要先将要执行运算的数据转换为二进制,然后才能执行运算。Python中的位运算符有按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移位(<<)和右移位(>>)运算符。
说明
整型数据在内存中以二进制的形式表示,如整型变量7的32位二进制表示是00000000 00000000 00000000 00000111,其中,左边最高位是符号位,最高位是0表示正数,若为1则表示负数。负数采用补码表示,如−7的32位二进制表示为11111111 11111111 11111111 11111001。
1.“按位与”运算
“按位与”运算的运算符为“&”,它的运算法则是:两个操作数据的二进制表示,只有对应位都是1时,结果位才是1,否则为0。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同,如图3.7所示。
2.“按位或”运算
“按位或”运算的运算符为“|”,它的运算法则是:两个操作数据的二进制表示,只有对应位都是0,结果位才是0,否则为1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同,如图3.8所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P65_8960.jpg?sign=1739276275-sNgWEkIk07S56Y5ceIJxk3wbYqvScRbq-0-3ed39aadaaaa299b780499250601732b)
图3.7 12&8的运算过程
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P65_8961.jpg?sign=1739276275-WEvdugn9zSSsHy8riWRnz4ICKvTy51hO-0-dfca5bfbbfaea1e099ded5f6994eaa69)
图3.8 4|8的运算过程
3.“按位异或”运算
“按位异或”运算的运算符是“^”,它的运算法则是:当两个操作数的二进制表示相同(同时为0或同时为1)时,结果为0,否则为1。若两个操作数的精度不同,则结果数的精度与精度高的操作数相同,如图3.9所示。
4.“按位取反”运算
“按位取反”运算也称“按位非”运算,运算符为“~”。“按位取反”运算就是将操作数对应二进制中的1修改为0,0修改为1,如图3.10所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P66_9002.jpg?sign=1739276275-NTiyyoQCesjL0eN8WaUfXPyrXE6y0szA-0-09d077f337471d9233e69ad5d0e48d44)
图3.9 31^22的运算过程
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P66_9003.jpg?sign=1739276275-Ua5fqEn5MMx3ZJB1lWyLvsckKzUTneW1-0-17fec59ff939bea7d7503b6c0b967d5c)
图3.10 ~123的运算过程
在Python中使用print()函数输出图3.7~图3.10的运算结果,代码如下:
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P66_63294.jpg?sign=1739276275-dfL6jW7j3fEcwzdarhmrQZtczS2yg73u-0-77a5541dc887a5238913f0faf45f5bd8)
运算结果如图3.11所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P66_9004.jpg?sign=1739276275-yXWClsSN1BZsGDobQTTNVYdJ5QBtXL0q-0-326d9d9f7cbe73f3c40a65cb25c75d28)
图3.11 图3.7~图3.10的运算结果
5.左移位运算符<<
左移位运算符<<是将一个二进制操作数向左移动指定的位数,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用0补充。左移位运算相当于乘以2n。
例如,int类型数据48对应的二进制数为00110000,将其左移1位,根据左移位运算符的运算规则可以得出(00110000<<1)=01100000,所以转换为十进制数就是96(48×2);将其左移2位,根据左移位运算符的运算规则可以得出(00110000<<2)=11000000,所以转换为十进制数就是192(48×22),其执行过程如图3.12所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P66_9005.jpg?sign=1739276275-LuoRymCXaPT5c7W4TI13WQBDVrScuODM-0-8566e513df36dbfcb79eee95e81a7e3a)
图3.12 左移位运算
6.右移位运算符>>
右移位运算符>>是将一个二进制操作数向右移动指定的位数,右边(低位端)溢出的位被丢弃,而在填充左边(高位端)的空位时,如果最高位是0(正数),左侧空位填入0;如果最高位是1(负数),左侧空位填入1。右移位运算相当于除以2n。
正数48右移1位的运算过程如图3.13所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P67_9065.jpg?sign=1739276275-1vvcwquZu5yz9ufXDhSVfP3bMSmeipDP-0-64da69869c788395ab03570f2b3017eb)
图3.13 正数的右移位运算过程
负数−80右移2位的运算过程如图3.14所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P67_9066.jpg?sign=1739276275-5mazMf7fmH6a429AdUVURyTfWjglkKiN-0-39a56633b7aaf6f0a2935d674c8e9da8)
图3.14 负数的右移位运算过程
说明
由于移位运算的速度很快,在程序中遇到表达式乘以或除以2n的情况时,一般采用移位运算来代替。
【例3.4】 使用位移运算符对密码进行加密。(实例位置:资源包\TM\sl\03\04)
在IDLE中创建一个名称为encryption.py的文件,然后在该文件中定义两个变量,一个用于保存密码,一个用于保存加密参数,然后应用左移位运算符实现加密,并输出结果,最后应用右移位运算符实现解密,并输出结果,代码如下:
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P67_63295.jpg?sign=1739276275-IH8O31c7n9EquQQOT2fVdYlUv5UsdsTq-0-1eaa4857b833f33e3d2038f82d24df8f)
运行上面的代码,将显示如图3.15所示的运行结果。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P68_9461.jpg?sign=1739276275-Bn07aQixna1gwJ3GkmFZ1frKe5SXaI0E-0-6f7d12ebf909f1b5d422b20cf85b3fbf)
图3.15 对密码进行加密和解密的结果