Python 3.7从零开始学
上QQ阅读APP看书,第一时间看更新

2.2 数据类型

计算机是可以做数学计算的机器,计算机程序理所当然可以处理各种数值。计算机能处理的远不止数值,还有文本、图形、音频、视频、网页等各种各样的数据,不同的数据需要定义不同的数据类型。Python 3中有6种标准的对象类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)。本节首先讲解Number数据类型,其他5种数据类型在后续章节介绍。

Python 3支持3种不同的数值类型:整型(int)、浮点型(float)、复数(complex)。

2.2.1 整型

int通常被称为整型或整数,是正、负整数,不带小数点。在Python 3中,整型没有限制大小,可以当作long类型使用,所以Python 3没有Python 2的long类型。

例如,公司组织旅游,大家坐上了大巴准备出发,现在需要统计有多少人在车上,老板吩咐小萌清点一下人数,小萌花了两分钟逐个点了一遍,总计51人。小萌在交互模式下输入:

     >>> 51
     51

这里使用的是整型。

到服务区后,大家休息了一下,再次准备出发时,老板又吩咐小萌清点一下人数。小萌苦笑一下,看来又得花两分钟清点人数了,为什么不叫一个人帮忙从车的另一头清点呢?于是小萌叫小智帮忙从另一头清点一下人数。一分钟后,小萌和小智在车中间碰上了,小智告诉小萌他的计数是25人,小萌在交互模式下输入:

     >>> 25+25
     50

小萌准备把数字报告给老板,突然想到上次报告的是51人,这次是50人,数字不同啊,还差1人,小萌在交互模式下输入:

     >>> 51-50
     1

怎么少了一人呢?小萌突然慌了,然后仔细一想,原来是把自己忘加上了,于是再次输入:

     >>> 25+25+1
     51

这次没问题了。于是小萌给了老板和上次一样的答案。老板示意司机可以发车了,又突然叫停,看天气挺热的,大家路上可能会口渴,于是吩咐小萌去服务区给每人买两瓶水,再买一大包糖给大家在路上补充能量。每人两瓶水,一共要买多少瓶呢?小萌在交互模式下输入:

     >>> 51*2
     102

一共要买102瓶水,这么多,于是小萌让小智帮忙一起去提水。

水和糖都买回来了,水好分,给每人两瓶就是,这一大包糖该怎么给大家呢?看包装袋上有总颗数,一共有153颗,每人多少颗呢?小萌在交互模式下输入:

     >>> 153/51
     3.0

好了,给每人发3颗糖就可以了。于是小萌高高兴兴发糖去了,小智也帮忙一起发,每人给3颗。糖终于发完了,小萌很惬意,坐下来补充能量。小萌突然想到了什么,有153颗糖,分给51人,每人3颗糖没错,但计算出来的结果怎么是3.0呢?假如有155颗糖,计算结果会是怎样的呢?输入以下数据:

     >>> 155/51
     3.0392156862745097

如果按这个结果分,就没有办法分了。这是怎么回事呢?

原因是:在整数除法中,除法(/)计算结果是浮点数,即使两个整数恰好整除,结果也是浮点数。如果只想得到整数的结果,丢弃可能的分数部分,可以使用地板除(//),整数的地板除(//)永远是整数,即使除不尽。

更改前面输入的数据:

     >>> 153//51
     3

这时就不是浮点数了。再看看155颗糖的结果:

     >>> 155//51
     3

153和155除以51都是3,这个就不对了。原来还有一个余数。

因为地板除(//)只取结果的整数部分,所以Python提供了一个余数运算,可以得到两个整数相除的余数,看看153和155对51的取余:

     >>> 153%51
     0
     >>> 155%51
     2

这次的结果就是想要的了。假如有155颗糖,就会多出2颗。小萌细细想着,嘴角泛起一丝自然的微笑,小智也发完糖了,过来向小萌汇报,看见小萌的表情,小智心里顿时暖暖的,无须报告了。

2.2.2 浮点型

浮点型由整数部分与小数部分组成,也可以使用科学计数法表示。

比如,小萌还在细想中,老板突然打断了她的思维,问她总共花了多少钱。小萌理了一下思绪,每瓶水3.3元,一共102瓶,总共多少钱呢?输入如下:

     >>> 3.3*102
     336.59999999999997

结果怎么这么长?小萌看傻了,不过冷静一看,原来是:整数和浮点数在计算机内部存储的方式不同,整数运算永远是精确的,而浮点数运算可能会有四舍五入的误差。

“老板,一共336.6元”。“好的,加上买糖的钱了吗”?小萌暗骂自己,瞧我这脑筋。再计算一次,每瓶水3.3元,一共102瓶,再加上一包糖15.5元,输入如下:

     >>> 3.3*102+15.5
     352.09999999999997

这结果好像很凌乱,应该这么输入:

     >>> 336.6+15.5
     352.1

这个结果就好看多了。报告给老板,一共花费352.1元。

小萌又开始思考了,浮点数相乘结果这么怪,浮点数的除法是怎样的呢?想到了就实践,输入如下:

     >>> 153/51.0
     3.0

这个结果和153除以51的结果是一样的,如果155除以51.0呢?输入如下:

     >>> 155/51.0
     3.0392156862745097

结果和155除以51也是一样的。那做地板除和取余又是怎样的呢?输入如下:

     >>> 155//51.0
     3.0
     >>> 155%51.0
     2.0

可以看出,得到的结果都是浮点型的。

2.2.3 复数

复数由实数部分和虚数部分构成,可以用a+bj或complex(a,b)表示,复数的实部a和虚部b都是浮点型。

Python支持复数,不过Python的复数我们当前阶段使用或接触得比较少,此处就不再具体讲解,读者有一个概念即可,有兴趣可以自行查阅相关资料。

2.2.4 数据类型转换

有时我们要对数据内置的类型进行转换,只需要将数据类型作为函数名即可。

数据的类型转换时有如下4个函数可以使用:

● int(x)将x转换为一个整数。

● float(x)将x转换为一个浮点数。

● complex(x)将x转换为一个复数,实数部分为x,虚数部分为0。

● complex(x, y)将x和y转换为一个复数,实数部分为x,虚数部分为y。x和y是数字表达式。

比如,小萌去购物,计算出应付金额是352.1元,超市老板为免除找零的麻烦,让小萌支付352元。Python中的转换可以执行如下:

     >>> int(352.1)
     352

很容易就得到了转换后的结果。但是金额的操作必须用浮点数进行记账,这个容易,用float函数就行了。输入如下:

     >>> float(352.1)
     352.1

这样就得到了浮点型数据。

结果跟输入的一样,这下怎么办呢?把int函数放入float函数中是否可以呢?尝试一下:

     >>> float(int(352.1))
     352.0

这里先把352.1取整,得到整数352,再用float将352转换成浮点数352.0,这样就得到我们需要的结果了。虽然输入的字符看起来有点复杂,但是还是得到结果了。

这其实是函数的嵌套,后面会进行具体介绍,此处做相关了解即可。

2.2.5 常量

所谓常量,就是不能改变现有的值的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量。

Python中有两个比较常见的常量,即PI和E。

PI:数学常量pi(圆周率,一般以π表示)。

E:数学常量e,即自然对数。

这两个常量将会在后续章节中使用,具体的用法在使用中体现。