![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=1739045910-c0ri4v2KRtRYSxnXVe8aUEN570O9HKXx-0-cef7c2f7664b644e821142e4437ac0df)
说明
在算术操作符中使用%求余,如果除数(第二个操作数)是负数,那么取得的结果也是一个负值。
注意
使用除法(/或//)运算符和求余运算符时,除数不能为0,否则将会出现异常,如图3.1所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P60_6396.jpg?sign=1739045910-aXAXaLKS4SoIrzXAd1l49SqHfoHf647S-0-e5d7bb84283865071fb1d8bf15aab1e5)
图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=1739045910-q9Nz8bt52tKk6PpdpEp5kWoToT9xdly1-0-7d91c1bfb41ef557cf2203e20a61541f)
图3.2 某学员的成绩表
在IDLE中创建一个名称为score_handle.py的文件,然后在该文件中,首先定义3个变量,用于存储各门课程的分数,然后应用减法运算符计算分数差,再应用加法运算符和除法运算符计算平均成绩,最后输出计算结果。代码如下:
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P61_63287.jpg?sign=1739045910-cIa1K11VElasDzmJrs7NuT9j21fUApsv-0-1554151ed0b9d63bf7a0171ca2e1b98f)
运行结果如图3.3所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P61_6464.jpg?sign=1739045910-NTYu7l2JDyuPzEDpvyrQRsNzsP57F8S5-0-f250138aa2eaeb8087848c44a3938ebc)
图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=1739045910-PTMzU8W8o00oNz2FnfjO3fP7NG9V4xS2-0-cfddd468963ca83eac2a04a38b9f7bb0)
注意
混淆“=”和“==”是编程中最常见的错误之一。很多语言(而不只是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=1739045910-W1M06acZtBf8bN9tq57cppmefOWd2EBL-0-53f3350398bb94a3cfbb621534e1337f)
【例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=1739045910-juGjIrdZkzKFnUkCBAwjyyM3T9POorFt-0-c9491387ce924e343a89a3a9109d50b8)
运行结果如图3.4所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P63_8233.jpg?sign=1739045910-41NYOqzFbTjrWqvtLFkscLDzNTVBkOXV-0-7c41b3eb5faaa6e576ddb32c15c2c975)
图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=1739045910-RpVmf1CRiOYCVk9i9GY3RwaDOuW5kwFd-0-77c477e4f33b06ff570dd87a6b2fe1be)
表3.5 使用逻辑运算符进行逻辑运算的结果
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-T64_63901.jpg?sign=1739045910-T5CAcn0KQF6Icp8RpJ5GBBdRpjK4UWpI-0-ab034e1624755e8721f91848c123791e)
【例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=1739045910-ZchELw4MNUEcltfKkG4ylnYsv0vWqolD-0-60ff43883421547a60c40011e456c160)
说明
(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=1739045910-9GQmYYwCJ8wuUawsjjhaULoCkaJLosTn-0-96684ac069661fbafd320efc25cc63cc)
图3.5 符合条件的运行效果
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P64_8932.jpg?sign=1739045910-pNM1oXL5VVdlaD2lxZ95avmuxvdB2UXy-0-5b3eca2a0075980d81d3e124ddf9fcaf)
图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=1739045910-V1rt4zchwbai30UgFUuer5nUgb10kzTV-0-bce3b637c7d660a45af800f0e919f309)
图3.7 12&8的运算过程
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P65_8961.jpg?sign=1739045910-WCwAFcVR7mXAc6ialAfLVCHWtxY7TNDF-0-f4c4c42996c35cf8b54ed93bd1c95026)
图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=1739045910-KlxmaDW8M5bAWlLEySebnJuovA56ddzL-0-6427354636494685eb5f60807d5cd10c)
图3.9 31^22的运算过程
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P66_9003.jpg?sign=1739045910-PnVPzb1GuS5Ho3QCYIued0ombhF53lm4-0-77004f3cee771fab566fc52b764b0a0b)
图3.10 ~123的运算过程
在Python中使用print()函数输出图3.7~图3.10的运算结果,代码如下:
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P66_63294.jpg?sign=1739045910-8ag1qZjczPSb7Z3lleE7cumDuH9pgjYS-0-7dd0d871321c238a2485c7343239f2b7)
运算结果如图3.11所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P66_9004.jpg?sign=1739045910-SluWDavGAKyE3tnWdLw7novEnAwYwWSE-0-488d2d2c483f7b86ffb818b27d6eaa48)
图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=1739045910-aldpcfPSRJhsCn34S0h1U7V55OTRBzW0-0-240ceb9714c9f492ea07c41eec738956)
图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=1739045910-uOrQwdXlb7Y5lyJ9MDTzlYKZ6WRLVNc1-0-49bacd867ba11f71f861018ee83fc07a)
图3.13 正数的右移位运算过程
负数−80右移2位的运算过程如图3.14所示。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P67_9066.jpg?sign=1739045910-HltjuWiqeQ0bUlt9OXLiC2nj7c9wbPwo-0-349ebc8edd5197f9a7854020edfb4375)
图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=1739045910-rCuRrkP4PjWJempY68kAJKtYsg25DBxN-0-484d075f20cb3dd375b28726a3004b28)
运行上面的代码,将显示如图3.15所示的运行结果。
![](https://epubservercos.yuewen.com/2BBFA5/15253385604107806/epubprivate/OEBPS/Images/Figure-P68_9461.jpg?sign=1739045910-wF9C2dmmDe1ruVDn5POB0ef1MPI58Twq-0-422599eef1c747aded36ab92f55527fc)
图3.15 对密码进行加密和解密的结果