![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=1739597201-LIDTF8KDMmkgV5mu1d7HE9H4cXHPr8nH-0-22796d586e4a736f21adb6f2ef8e8b3b)
在Python中,内置的操作运算符主要分为四种,分别是算术运算符、赋值运算符、逻辑运算符和关系运算符。其实例分别如下。
1. 算术运算符
算术运算符如表3-3所示。
表3-3 算术运算符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T48_35392.jpg?sign=1739597201-AT7Lou2dKUgJ0Fz3ivYIU233iTVrJxnO-0-b745ad2c753b541c7974a56dbe3f0032)
具体使用及输出如下。
【例3-8】算术运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P49_78665.jpg?sign=1739597201-yZpG8w34LWByXVpjzUZY1QBe7ivnWcuD-0-48a644689d7d638778d0fbf3819afd7b)
2. 赋值运算符
赋值运算符如表3-4所示。
表3-4 赋值运算符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T49_78668.jpg?sign=1739597201-l7kb6CiV548XLcwJNL9QZfeYvzyZ6Ij2-0-313f58df45d1b164dd9ca67eb90bb71b)
具体使用及输出如下。
【例3-9】赋值运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P49_78669.jpg?sign=1739597201-4iPMljuRZcuvmIhvTciem2693RukEOE9-0-ee0d000d8b768bc931ee5b7520873123)
注意:除法运算结果为浮点数,和被除数与除数的类型无关。
3. 逻辑运算符
逻辑运算符如表3-5所示。
表3-5 逻辑运算符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T50_36006.jpg?sign=1739597201-SXCdtMM1bjQsq8nB6J6AKE1bRU3RU6vk-0-997fef2c725a18695b8ef21b0eea988f)
逻辑运算主要与布尔值的判断和0、1操作有关。
【例3-10】逻辑运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P50_35906.jpg?sign=1739597201-QpPtQHlpmjauMwa2aWQCitVNQiZ6fVZJ-0-a313e73ef43069645342b5165ded18e7)
4. 比较运算符
比较运算符如表3-6所示。
表3-6 比较运算符
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T51_78673.jpg?sign=1739597201-RK6UmmMK3LkcaeCBkqjNOS93wHCbjvWd-0-e244f52aa994ec711f63f137bec1c578)
【例3-11】比较运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P51_36094.jpg?sign=1739597201-cYoUYmCUjLaEK1S0eTODLNF7NtcCqGdE-0-5473440dc43fb704d54d1cf2a74ab52f)
3.2.2 内置的数值运算函数
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P51_36239.jpg?sign=1739597201-Xs1tGmXuFvH7c9VtixJZwUIUkjEsOzwT-0-1b1ca090e96b913c1b9760eed4218221)
内置的数值运算函数如表3-7所示。
表3-7 内置的数值运算函数
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T51_81318.jpg?sign=1739597201-fXzfJfTK1H0oz7lhb6ZRMemEvpuTrF62-0-dd56e4053938177061c20e8246f7c28f)
部分函数操作及其具体用法示例如下。
【例3-12】函数运算。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P52_78678.jpg?sign=1739597201-F8YbM9cfoXsrpJDvridALbj13qsIYSSt-0-a215e0e2b592bf549d6a8975b35bc72b)
常见的函数操作中,部分函数的用法需要特殊记忆。下面列举的函数其用法虽然不广泛,但是对于理解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=1739597201-CS8CMgA0QyIBFzvBU1MH9B3d7A9UbvwY-0-71c3f985cebc01256f536d78aa21009b)
这和人们认知中的小数近似结果一致,即四舍五入,但是有时候考虑到前面提到的存储情况时就会出现另一种状况。
【例3-14】round()函数精度。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P52_78680.jpg?sign=1739597201-DRkKS38mwtwxVA9b3ocYyqvCHOk2XuBX-0-b462da6a515e2601ebba56e07128cf33)
可以清楚地看到,这似乎违背了四舍五入的基本法则,实际上这是由于计算机只能采用近似储存浮点数,导致精度误差所致。官方文档存在下列说明:
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P52_78681.jpg?sign=1739597201-wGGbSYDWJsIu8wnx5kFbg1kF36UEsFnm-0-5949d172f47de8671b7a294cd7fde2d5)
可以得知数据在近似转换为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=1739597201-ss3E3f9uQGiQUZMN4JPIt2d5nJp7E9n5-0-dc12403ed586c35a2503b3b341876540)
但是实际上,它们并不完全等价。
【例3-16】特殊pow()函数。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P53_78684.jpg?sign=1739597201-fxeJ63btFndoXQlXf6woQSCNj32s1GGt-0-ca713b9b1decc3510e018b1fa8730504)
可知,Python不允许第三个操作数为浮点数,这与x**y%z存在差异,可知在使用上并不完全等价。
3.2.3 内置的数字类型转换函数
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P53_36598.jpg?sign=1739597201-rTrEGost6DFrm9JM5JMfmsvWhb31kssR-0-85a379bf9f9609dbe6b10bd162a84149)
内置的数字类型转换函数如表3-8所示。
表3-8 内置的数字类型转换函数
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-T53_78687.jpg?sign=1739597201-DN9cysozM75EIWIN4PiQEtEOsRvgAIW2-0-8f515027d16d641f7d1d7faf0e0d786c)
函数使用举例如下。
【例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=1739597201-PxjZ97H3NH6QgU3MMTU7fQIxhIPZUlp3-0-bff96758b47f87b29ee3b78b6274f940)
其中,函数int(x[,base])和函数float(x[,base])内的第二个参数的含义通过以下实例来解释。
【例3-18】int()函数。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P54_78692.jpg?sign=1739597201-aOWqE11sj1jqw4s7D5vX1KVWwjilqZ3k-0-6665362ff90bdc85dc677213c289805e)
通过实例可以知道,参数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=1739597201-CxwyL3gDlu5NU6HZm0BJsnQXCk0xvX7I-0-dc69d3347c49fd2ebd19a72420560684)
可知参数real和imag也可以为计算式,如果第一个参数是一个字符串,它将被解释为一个复数,并且必须在没有第二个参数的情况下调用该函数。第二个参数不可以为字符串。每个参数可以是任何数字类型(包括复数)。如果省略imag,则默认为零,构造函数用作int和float之类的数字转换。如果省略两个参数,则返回0j。