- Python程序设计:人工智能案例实践
- (美)保罗·戴特尔 哈维·戴特尔
- 1497字
- 2021-08-13 17:16:59
2.3 算术运算
下表总结了Python中的算术运算符,其中包括一些在代数中没有的符号。
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/049-2.jpg?sign=1739522947-9sVhuivm6c1SVN7f16l23akepTzdvwyR-0-02ded1833872674737a9380ef71f6f9a)
乘法(*
)
Python将星号(*
)作为乘法运算符,例如:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/049-3.jpg?sign=1739522947-L3mbQx1ZMOSucaso0gvyBCA7dyOAog7d-0-fb30206232eadf7c44b831a954107170)
求幂运算(**
)
求幂(**
)运算符计算一个数的幂,例如:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/049-4.jpg?sign=1739522947-n1TGBTPn56PA4H9dUYzKaoJv7O6a6Ugj-0-97100105001d94fea06c53cae5e92bd5)
如需计算平方根,可以使用1/2(即0.5)作为指数:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/049-5.jpg?sign=1739522947-E2XR0UwnBs0HJ29kLsAcs9k2e14TW5dW-0-6b932feb643b3e677fdd77b1d20dbf5f)
除法(/
)和整除(//
)
除法(/
)运算用分子除以分母,结果为带小数点的浮点数,如下所示:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/049-6.jpg?sign=1739522947-w6CPVDswivG1FqBp3eOtijny8kKuhZb4-0-c2d53a358d6870208e7357a0cbc8c438)
整除(//
)用分子除以分母,得到不大于结果的最大整数。Python会直接截断(丢弃)小数部分:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/050-1.jpg?sign=1739522947-0ojQvdT1Hmyum5YbUofuYyEbNv5yAjmq-0-4ab67b8216a4a6a4689ef3f0d4d5bb78)
使用除法(/
)时,-13除以4的结果为-3.25,如下:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/050-2.jpg?sign=1739522947-H39s8fJh6OeahJ6RSqwPuLRe4cI1Y43u-0-85dc9da80a5f7194265dcc800ebd2a52)
整除(//
)的结果为不大于-3.25的最大整数,即-4,如下:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/050-3.jpg?sign=1739522947-mrLAVoz8TuCuWJXsjeg7kNOD2zaJPEeV-0-5b21c361cd92e009a87274d837993636)
异常和回溯
Python不允许用“/
”或“//
”除以零,否则将导致异常,表示有问题发生:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/050-4.jpg?sign=1739522947-L7nhPt5uk1HlKoyZAGwdK1HIeeRd6Tzk-0-f0fd49dcd823e6bd5d9aba2c2ea58744)
Python使用回溯来报告异常。上面的回溯表示发生了类型为ZeroDivisionError
的异常(大多数异常的名称以Error
结尾)。在交互模式下,下面这行异常信息中的10
表示导致异常的代码段编号
<ipython-input-10-cd759d3fcf39> in <module>()
以---->
开头的行显示导致异常的代码。当产生异常的代码段包含多行代码时,--->
右侧的数字1
表示导致异常的语句是代码段内的第1行。异常信息的最后一行显示异常名,后跟冒号(:
)和更加详细的异常信息:
ZeroDivisionError: division by zero
第9章对异常进行了详细的讨论。
如果在代码中使用了尚未创建的变量,也会发生异常。以下代码段试图将整数7
与未定义的变量z
相加,这将会产生NameError
异常:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/051-1.jpg?sign=1739522947-vWQJnxAbuMeMW4f9E4rrzagjsSsP8zqP-0-c03ccdec70b29894af0849a33ad8867e)
取余运算符
取余运算符(%)计算左操作数除以右操作数后得到的余数:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/051-2.jpg?sign=1739522947-qStMSGID4cnY90CptUpvR5hUclxDYKzC-0-8b17408a88c593fec37b9f1c0602f9c8)
上面的代码段中,17
除以5
的商为3
,余数为2
。取余运算符通常用于整数,但也可以用于其他类型的数字,例如:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/051-3.jpg?sign=1739522947-6lAFMrZwTYVWqWAqTD0sAgrWD8TueVx8-0-64861071a8f4775c52df55cb336e6e1b)
直线形式
在编译器或解释器中一般不能使用形如的代数形式,必须使用Python的运算符以直线形式来表示。上面的表达式可以写为a
/
b或者a//
b(表示整除),这样所有的运算符和操作数都呈水平排列。
用括号表示分组表达式
与在代数中一样,括号将Python的表达式组合在一起。例如,下面的代码先计算5+3
,然后再用10
乘以5+3
的结果,如下:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/051-5.jpg?sign=1739522947-jSP1606cbhLaCr8YUSZqfHle7QsqoV0c-0-6bb376de575246c702d970d841098b8e)
如果没有括号,计算结果是不同的,如下:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/051-6.jpg?sign=1739522947-CpOvrnA6ZkuzvSfUMmOrJSzxtvHjEgrR-0-36a73b963bb253228c292bc19a915654)
如果去掉括号会得到相同的结果,则括号是多余的(不必要的)。
运算符优先级规则
Python在算术表达式中使用运算符时遵守以下运算符优先级规则(通常与代数中的规则相同):
1. 首先计算括号中的表达式,因此可以使用括号强制表达式按照我们希望的运算顺序进行计算。括号具有最高级别的优先级。在含有嵌套括号的表达式中,例如(a/(b-c)
),优先计算最内层括号中的表达式(即b-c
)的值。
2. 接下来是求幂运算。如果表达式包含多个求幂运算,Python会按照从右到左的顺序进行计算。
3. 再往下计算乘法、除法、整除和模。如果表达式包含多个乘法、除法、整除和模运算,Python按照从左到右的顺序计算。乘法、除法、整除和模运算的优先级相同。
4. 最后计算加法和减法。如果表达式包含多个加法和减法运算,Python会按照从左到右的顺序进行计算。加法和减法也具有相同的优先级。
有关运算符及其优先级的完整列表(从最低到最高的顺序),请参阅https://docs.python.org/3/reference/expressions.html#operator-prece-dence。
运算符的结合性
当提到Python按照从左到右的顺序做运算时,指的是运算的结合性。例如,在下面的表达式中:
a + b + c
加法运算符(+
)从左到右结合,就好像加了括号一样,形如(a+b)+c
。除了从右到左结合的取幂运算符(**
)之外,其他Python运算符的结合性都是从左到右。
冗余括号
为了使表达式更加清晰,可以使用冗余括号对子表达式进行分组。例如,二次多项式
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/052-2.jpg?sign=1739522947-8iaHnghqIzQ84liCGAtJLHV29rrnYZTo-0-4322d7bd06966230667137738e8bac09)
可以用括号括起来,如下所示:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/052-3.jpg?sign=1739522947-6sB9EJTxfmgg6I5n4Ga9pke4XsrcDFlW-0-467236c9c4d5135a3f3593488dcd5f1b)
这样的表达更加清晰。此外,将复杂的表达式分解为由更短、更简单的表达式构成的语句序列,也可以提高程序的清晰度。
操作数的类型
算术运算符既可以连接整数,也可以连接浮点数。如果连接的两个操作数都是整数,计算结果为整数,但除法(/
)运算符除外,因为它的结果总是一个浮点数。如果两个操作数都是浮点数,则结果为浮点数。既有整数也有浮点数的表达式称为混合类型表达式,这种表达式的结果是浮点型。