![人工智能开发语言: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=1739253344-XcFtrXmOo2fXFHatA9U16NVNCp38Y9D6-0-bd021cbf974ab6fb8fc08070b40c2583)
另外再介绍两种算术运算表达式。
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=1739253344-Nyxp2lNZRmGFV27zAkj83AergJP0wb32-0-1ba4285a4b4904832487027e1a0bdb4f)
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/184.jpg?sign=1739253344-ZK1W1JPwbXMvIg5xZmxG94XSU8I8eaF7-0-c2b582879b5a7258a927c6538a0d7b39)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/185.jpg?sign=1739253344-IKurSVtLuUDf9RnV6fOQnUKvmugedzR0-0-ce4cb7d61e5a6a69f5b2ee188c0f20ba)
注意:在不同语言中,取模计算的方法可能不同。
3.4.2 关系运算符
关系运算符也称比较运算符,其结果为一般布尔值(True或者False),见表3-19。
表3-19 关系运算符
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/186.jpg?sign=1739253344-QRgOm4yidHfCUSPYDTExpl2EBGOdQ9e0-0-08745c293bd120f78ea325a3796ee317)
3.4.3 赋值运算
Python中的赋值运算表达式见表3-20。
表3-20 赋值运算表达式
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/187.jpg?sign=1739253344-th8zF45hOHfxcOzZr2JxKyYiSLGE0LqM-0-024f6a37430fa42f3530d41f9bf2c3de)
3.4.4 逻辑运算
Python语言支持的逻辑运算包括与、或、非三种,表达式见表3-21。
表3-21 逻辑运算表达式
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/188.jpg?sign=1739253344-4HrnvwxtAdsFmn5ucI6UpnIdL5JxcYsL-0-bf92b703a99a50665aa7d9c106437226)
注意:数值0、空字符串、空元组、空集合、空列表、空字典、None值相当于布尔值False。举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/189.jpg?sign=1739253344-naGDNGeBZObbgYHAMsVqwZDhttystuon-0-1572e759ec32f0e9753edbe3a7842f57)
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/190.jpg?sign=1739253344-8DOt4eHChkioozG9wXR5NHNN40Usk9zj-0-f83a90bc26b3bd5c650e7474f967c521)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/191.jpg?sign=1739253344-ijstXVsBPrqQTWSKrYMAltsQNK24bhNm-0-712cd4228f1421497dc6fc724027c41a)
3.4.5 位运算
位运算是以二级制数的位为对象的运算方法。Python中位运算包括位与(&)、位或(|)、位异或(^)以及位取反(~)、位左移(<<)、位右移(>>)等,见表3-22。
表3-22 位运算
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/192.jpg?sign=1739253344-ap493X3Z0sMZLOc8hMeQcrLCdvHGOWpD-0-484064d9ec28083299c6f4d3475019c8)
为了更清楚地说明以上运算符的作用,下面举例说明。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/193.jpg?sign=1739253344-LsJ8nWJmlBc96uYiV2Nz7x1uNgKBIYBK-0-6677fb9278336ad8443bf8ca6461fa56)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/194.jpg?sign=1739253344-PagsxTJmPS3jHwxAVvkWdJa9AbD0Z8Q5-0-f2e4642b8ce1d97ae48fcb7fb1d6948d)
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=1739253344-MIGWhO2miE35m0AzghE11BhxSDLWqA1R-0-0f14a0d22a6eb5d8c959e9787e7cdc44)
身份运算(is)与比较运算(==)之间的主要区别是,is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值(内容)是否相等。例如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/196.jpg?sign=1739253344-SiDNbvtpAjyeP8rSOhP2TkAHpKymBH5h-0-f1d209209265301f1c32b18d65a3487b)
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/197.jpg?sign=1739253344-VF6BXtLRMe1Qg2LTXnKy0mghnv5giXz7-0-f5a34b41c344111ac5ce372191043f33)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/198.jpg?sign=1739253344-IOmpf0t5G9tqkSS3RGuog2fBnc61F1ry-0-7a9a0927677a3d13eac83698229bf967)
3.4.7 成员运算
成员运算用来判断某个变量是否为某个序列变量的子成员。序列变量可以是字符串、元组、列表等类型变量,见表3-24。
表3-24 成员运算
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/199.jpg?sign=1739253344-IYsCTAJ38wEjSbrA8rHFFPb4Yilg4YDF-0-07a7187834031cd655d7e3591d393960)
实例说明:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/200.jpg?sign=1739253344-TdD4ySpnQ0vT7YpcoP4d98IsWn5Mub9O-0-5c27d5c7eb552831b3859eaa300c7810)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/201.jpg?sign=1739253344-eOC0DXxrThHElPCQk4E4pLBoIFG4UDvM-0-6e599bfa949254729509ad8a30726110)
可以看出,操作符左边的变量也可以为元组、列表等类型。
3.4.8 运算符优先级
表3-25按照从优先级从高到低的顺序列出了Python中的各种运算符。
表3-25 运算符优先级
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/202.jpg?sign=1739253344-9x05ZhgxFrjUq7BTFsa4vqiAYVoGbJd7-0-717265bda2be0c8516445bf9bc6cef6f)
运算符的优先级顺序必须牢记,如果一时不明确,可以使用小括号把需要一起计算的片段包围起来,这样小括号内的片段会被当做一个整体来对待,如下面实例:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/203.jpg?sign=1739253344-ei6TBFX8guoRIjzljKMdk0xUD1WDWQMv-0-6aa51393bc64d30330c24f5ef9570046)