![Python从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/265/27563265/b_27563265.jpg)
3.2 数字类型的操作
在3.1节中了解了数字类型包括整数类型、整数的按位运算、浮点数、复数类型和布尔类型。那么在这一节中将学习数字类型的基本操作方法。
3.2.1 内置的数值操作符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P48_35388.jpg?sign=1739265056-de135EtIns6BqDmeGKYCWnqXfcdRriOc-0-72dbf7efb0b259f83418687bfdd7524a)
在Python中,内置的操作运算符主要分为四种,分别是算术运算符、赋值运算符、逻辑运算符和关系运算符。其实例分别如下。
1. 算术运算符
算术运算符如表3-3所示。
表3-3 算术运算符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T48_35392.jpg?sign=1739265056-PP9i4bAZYdZXjJDKMllSO7CdE4lIlivf-0-523cb4a325f87ef65e282d72667e8ff0)
具体使用及输出如下。
【例3-8】算术运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P49_78665.jpg?sign=1739265056-FOONMVQtixyeIegWjLzn8xzLSARCZ0vU-0-d3534dac953fa530a1be50c935a1596e)
2. 赋值运算符
赋值运算符如表3-4所示。
表3-4 赋值运算符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T49_78668.jpg?sign=1739265056-8Nv8EWsFxBCvAkWbDJtccoPRaaCNdKTw-0-0f6ee8d117d41fcdb8904122628b23b8)
具体使用及输出如下。
【例3-9】赋值运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P49_78669.jpg?sign=1739265056-jdv6Q4P5sqrlBAPXSFdR0ZnhsHxjScDn-0-ae9b680afd41d3d82b941adfc334b70a)
注意:除法运算结果为浮点数,和被除数与除数的类型无关。
3. 逻辑运算符
逻辑运算符如表3-5所示。
表3-5 逻辑运算符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T50_36006.jpg?sign=1739265056-OFBHtF1gVqPhHzZI2tsvIoGUmLBguWmu-0-2f9a469a036aafe1ef98b927352b7c71)
逻辑运算主要与布尔值的判断和0、1操作有关。
【例3-10】逻辑运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P50_35906.jpg?sign=1739265056-Gn54Q6bU792tcRqiTNsK5Hjq5Eb8tzcy-0-692c0d252a9f60893dcd4f520ad12b08)
4. 比较运算符
比较运算符如表3-6所示。
表3-6 比较运算符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T51_78673.jpg?sign=1739265056-LFhounQ6dRkIrk3p2tj2v5Dzy8uESxPA-0-2317c4b5b8bee77e7e87bc0029f742cb)
【例3-11】比较运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P51_36094.jpg?sign=1739265056-hi2Gk5GIJgMBQVXamFJhqvsf00bYZuz9-0-97520203ce1fa37f43fbbf129ed75a6a)
3.2.2 内置的数值运算函数
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P51_36239.jpg?sign=1739265056-C6PziIuw68J3qlwTcDYAp7TELtrdNmBT-0-0d5e58018c323298f117279d72e66f3e)
内置的数值运算函数如表3-7所示。
表3-7 内置的数值运算函数
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T51_81318.jpg?sign=1739265056-Q72s4dIsBOODp9azT1mAWPsLmjH2wafZ-0-63904891f22016c765ef2bee4c56a062)
部分函数操作及其具体用法示例如下。
【例3-12】函数运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P52_78678.jpg?sign=1739265056-CKYdOLH9v3mxi2ygzLCK00dhnk0kqgCv-0-1def5a5912d4e4f6d3d8820418f645f6)
常见的函数操作中,部分函数的用法需要特殊记忆。下面列举的函数其用法虽然不广泛,但是对于理解Python的数据类型和存储有着较为直观的意义。
(1)函数round()与精度误差。
函数round()的作用为将浮点数A进行四舍五入,并指定小数的位数。关于舍入需要知道Python中浮点数的特征。
浮点数本身就是非精确数据。大多数十进制小数并不能完全用二进制小数来表示。因此,输入的十进制浮点数一般只能用二进制浮点数来进行近似。
例如在十进制中,对于分数1/3,将其写成小数时只能无限近似写成1.333…,同理,在面对十进制浮点小数例如0.1时,无法将其完美地换算为二进制数据,只能无限近似。Python中存在一个近似策略,用户面对的屏幕输出的十进制数值仅是被输出的一个近似值,其真实的值以二进制数值存储在机器上。上述情况告诉我们,Python以舍入形式进行数据的近似管理。
round()函数在使用上实际上也很简单。
【例3-13】round()函数。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P52_78679.jpg?sign=1739265056-8DBNwHLFakyvvPoXrMc5YLzbPd1rUhAt-0-2d77aeb10c213662e5a566082aac964c)
这和人们认知中的小数近似结果一致,即四舍五入,但是有时候考虑到前面提到的存储情况时就会出现另一种状况。
【例3-14】round()函数精度。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P52_78680.jpg?sign=1739265056-QnhZuvhEclV75xJZwn72thKY90Art2z5-0-42db3d190acd681d5cb0a056be0daee2)
可以清楚地看到,这似乎违背了四舍五入的基本法则,实际上这是由于计算机只能采用近似储存浮点数,导致精度误差所致。官方文档存在下列说明:
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P52_78681.jpg?sign=1739265056-v2eiRBdzlewzbRhOpnXQ0NAsB2tkCwBf-0-177f087fde1322af751b8e9e39fdcacb)
可以得知数据在近似转换为0、1储存时被进行了截断处理,因此导致了精度误差,为此round()近似函数实际上只能进行对精度要求不大的近似求值。关于精确计算,Python提供了其他选择,例如后续将要学到的math模块中的ceiling方法和将要介绍的decimal模块。
(2)pow()函数的使用。
pow(x,y[,z])函数看似等价于(x**y)%z。
【例3-15】pow()函数。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P53_78683.jpg?sign=1739265056-WWlEE9z5Wt2ZznflzTQ3yyScPLzvcmIv-0-63f00b74a13f73c60749430a5aea3f8f)
但是实际上,它们并不完全等价。
【例3-16】特殊pow()函数。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P53_78684.jpg?sign=1739265056-9UFv6wP5yFynZ2ZkWgLCyxe7NxBDHL9S-0-11a61a35d1e3ddb74bd93285262b1833)
可知,Python不允许第三个操作数为浮点数,这与x**y%z存在差异,可知在使用上并不完全等价。
3.2.3 内置的数字类型转换函数
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P53_36598.jpg?sign=1739265056-6eHRKQYrYuQRIB0kl8Rmc5p0vzUCVnYD-0-3cd6d0b5de8bc4ab1239dfc11b1e76c0)
内置的数字类型转换函数如表3-8所示。
表3-8 内置的数字类型转换函数
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T53_78687.jpg?sign=1739265056-00aPnzktpEEOJ7XOE98VANYiakxSY7MV-0-1529db9d5b432952d52b0de5e3e056de)
函数使用举例如下。
【例3-17】ascii()函数。
ascii()函数类似Python 2.X中的repr()函数,结果为返回这个指定可打印对象的字符串表示,如果此对象为非ascii字符就以转义字符型输出(\x,\u等),例如中文字符串,具体实例如下。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P53_78688.jpg?sign=1739265056-RnHLDZm90TUslSJyaqT5UbEq0MMCktha-0-0f12df2c8c1abeb4aca844e16de46d27)
其中,函数int(x[,base])和函数float(x[,base])内的第二个参数的含义通过以下实例来解释。
【例3-18】int()函数。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P54_78692.jpg?sign=1739265056-hGDfcyDGXgJ8PAe8VONZvIjdcyCyDlrR-0-595e9ecf65a9e510b9e5fda8f5bcc986)
通过实例可以知道,参数base的作用是指定第一个参数的进制类型。此时的x参数不可为数字,只能为字符串、数组或者将要学到的数组列表类型。
base默认为十进制,当指定为8时是八进制,为16时是十六进制等,但注意当其为0的时候,依旧表示十进制。
对于函数complex(real,[imag]),其实例如下。
【例3-19】complex()函数。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P54_78693.jpg?sign=1739265056-FPAm45HXafDr4DGmCxhBZTBR5stnDS3T-0-984cdd592883d376e27556c58b5bbbd4)
可知参数real和imag也可以为计算式,如果第一个参数是一个字符串,它将被解释为一个复数,并且必须在没有第二个参数的情况下调用该函数。第二个参数不可以为字符串。每个参数可以是任何数字类型(包括复数)。如果省略imag,则默认为零,构造函数用作int和float之类的数字转换。如果省略两个参数,则返回0j。