![人工智能开发语言:Python](https://wfqqreader-1252317822.image.myqcloud.com/cover/281/29974281/b_29974281.jpg)
3.4 运算符和表达式
3.4.1 算术运算
Python中的算术表达式与其他语言基本一致,常用算术表达式见表3-18。
表3-18 常用算术表达式
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/182.jpg?sign=1739497962-j79uG44NWPZVcWjzZJEASRObx5y68Nbc-0-105081373d517f09d2d6d8cbfc839b50)
另外再介绍两种算术运算表达式。
1)取整除法(//)
包括向上取整、向下取整、向零取整。向上取整时,所取整数大于实际值,如:
7.8//3==3.0
7.8//-3==-2.0
向下取整时,所取整数小于实际值,如:
7.8//3==2.0
-7.8//3==-3.0
向零取整时,所取整数的绝对值小于实际值的绝对值,如:
7.8//3==2.0
-7.8//3==-2.0
Python采用的是向下取整的方式,这点需要读者注意。
2)取模(%)
又称取余,计算两个变量取整除法(//)后的余数,计算公式为:
remainder = x – (x//y)*y,其中x为被除数,y为除数。
举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/183.jpg?sign=1739497962-cQL75S1iOEyj8C43KB1zKKrW81VdBVMh-0-63b925bd7991bda39276baef6df16c30)
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/184.jpg?sign=1739497962-GXfefam27OyktlAKJs1mRsqiFXaN6wEy-0-e2a5cf372ed41d16f4081580c8869a9a)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/185.jpg?sign=1739497962-yuOBBZXv507DYnuKRrpaQfADXPHqDhdu-0-51799e1e0c637f49f4f70f227d9d718c)
注意:在不同语言中,取模计算的方法可能不同。
3.4.2 关系运算符
关系运算符也称比较运算符,其结果为一般布尔值(True或者False),见表3-19。
表3-19 关系运算符
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/186.jpg?sign=1739497962-QbEdQCwT39BgrsltIxLQT6VFu0Eck4BT-0-555029423fbac32dcb4ecb76c0918b3b)
3.4.3 赋值运算
Python中的赋值运算表达式见表3-20。
表3-20 赋值运算表达式
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/187.jpg?sign=1739497962-bu3Yeu5lcRF3d9x6h0hAsDHDewnTw7Vd-0-b3d613f12be9ecbf06e21021f7daf74a)
3.4.4 逻辑运算
Python语言支持的逻辑运算包括与、或、非三种,表达式见表3-21。
表3-21 逻辑运算表达式
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/188.jpg?sign=1739497962-qKBDh69N41ccQhOPfiAvudLEkpSb8Sl6-0-c37609a653a807d7427be5f0efb78839)
注意:数值0、空字符串、空元组、空集合、空列表、空字典、None值相当于布尔值False。举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/189.jpg?sign=1739497962-t95wbfjZx7nSCGGdIR2s5JYJpuHuwNcH-0-47568ac1150c145a7ed1600103175460)
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/190.jpg?sign=1739497962-f1vr8w8las05qSVucOYWJ7rtXnbq8NeC-0-32e8a32cab458ae6c9d2588f5e5923f2)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/191.jpg?sign=1739497962-ut5Gp7vRnrVTMYFamh0tPihsBnMnICp1-0-dd360524ee182b6ff7d3b13dc06498ea)
3.4.5 位运算
位运算是以二级制数的位为对象的运算方法。Python中位运算包括位与(&)、位或(|)、位异或(^)以及位取反(~)、位左移(<<)、位右移(>>)等,见表3-22。
表3-22 位运算
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/192.jpg?sign=1739497962-0R7RqKV0gC9b8JKUTvG8hSxRnXiqvxLh-0-144dc73ed978d69ff1c1752f4f00452a)
为了更清楚地说明以上运算符的作用,下面举例说明。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/193.jpg?sign=1739497962-wsA03ZtTG3YSRkBdy9sm4Nv4zLMyJBaK-0-fe22590b39bc45b2f2b9e94103686a11)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/194.jpg?sign=1739497962-ndbXqsP1xGW8cgHxnHSjaFBtFHvweff6-0-1cd61c41a7dc02b43c7855cea8c9d657)
Python中的左移运算与C/C++、Java等语言有区别,造成这一问题的原因在于Python把int类型的数值视为无精度类型,不会发生溢出而进行截取的情况。解决这个问题的方法有两种:一种是在Python中自己编写一个函数,模拟其他语言的规则来实现左移;另外一种是使用其他语言实现左移,然后在Python中调用。
3.4.6 身份运算
身份运算用来比较两个对象的内存位置(内存地址),常用的有两个,见表3-23。
表3-23 身份运算
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/195.jpg?sign=1739497962-NM1pDG8WnJLeikanSCpfwcpMtrRHMB67-0-48c87931b7c971ab9284b393662df75c)
身份运算(is)与比较运算(==)之间的主要区别是,is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值(内容)是否相等。例如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/196.jpg?sign=1739497962-9sWN8YzLiIWBGt6gUxokJTkMGjztTpDt-0-d023b35ffb8f8d0e6fc0c68ba995a452)
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/197.jpg?sign=1739497962-6mGujOHoqvWtdABPv4VqIiwJS7IqAyVR-0-cdccaf42c2c9b7de58c0fdb2a35500dd)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/198.jpg?sign=1739497962-bh9EyHZppLSJoPOyulcKkpISFParKfFF-0-ec01dfde2666b3fdcd0728810de0c52d)
3.4.7 成员运算
成员运算用来判断某个变量是否为某个序列变量的子成员。序列变量可以是字符串、元组、列表等类型变量,见表3-24。
表3-24 成员运算
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/199.jpg?sign=1739497962-HmtrufOqPRUS5lycTNoVc3njE2NXzljF-0-4126b8d857c924c4d84c6dfb0742588f)
实例说明:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/200.jpg?sign=1739497962-uBfL5KsKxpVVUTBq7Xlad8WdIQ6T31FB-0-5ea21b0b6c6d84d3bde9420235e70cee)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/201.jpg?sign=1739497962-wtcYJkBb0oQMGdTqrBUenrbSAvnK5US3-0-d2842099e24e8c72aac917f0fdb25155)
可以看出,操作符左边的变量也可以为元组、列表等类型。
3.4.8 运算符优先级
表3-25按照从优先级从高到低的顺序列出了Python中的各种运算符。
表3-25 运算符优先级
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/202.jpg?sign=1739497962-VKgfY1asmUBzJxb8yGANf1mE6uC7jKEk-0-1745dae9d55c156091b4c50eb0a15b7d)
运算符的优先级顺序必须牢记,如果一时不明确,可以使用小括号把需要一起计算的片段包围起来,这样小括号内的片段会被当做一个整体来对待,如下面实例:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/203.jpg?sign=1739497962-QJIQsqCdkl3x1VVMYGOthsbpS1CeJSZ7-0-8f0f95ff04e15e924ab29e21435334a4)