一、数字
数字是几乎在所有计算机语言中都必然存在一种基本的数据类型。在Python中,数字也是相当典型和普遍存在的。
严格意义上讲,在Python中,数字并不是一种严格意义上的对象类型,而是一组类似类型的分类。
为了全面深刻的理解Python的数字,我们今天从如下几个方面来进一步阐释数字在各个层面上的含义,及数字的各种运算规则。
1、数字是一种常量
在Python中,数字被定义为一种常量,而且这个常量的大小就是这个数字字面的大小,因此,也被称为字面常量。
例如:1,2,3,4,5
看见上面几个数字了吗?是的,没看见才怪。不就是5个数字嘛?!
没错,你看得很清楚,就是5个数字。
但是,在Python这种面向对象的语言中,还记得万物皆对象吧?所以,它们不仅是5个数字,它们还是5个对象,似乎这才是符合Python语言的描述。
既然是对象,它就有类型和值。那么,这5个对象是什么类型呢?它们的类型被称为常量,它们的值呢?当然你看到是什么,它的值就是什么。所以,这5个对象的值就是1,2,3,4,5。
哈哈,是不是感觉又绕回来了?
的确是有点绕,明明就是1、2、3、4、5嘛,
为什么偏要说他们是5个对象,
然后它们的值才是1、2、3、4、5呢?
这不是精神分裂吗?
哈哈!千万不要为这点小事精神分裂啊。
实在觉得绕了,就不必要太纠结了,
知道它们是数字(常量)就可以了,
然后知道它们有大小,
也就是有值,
而且,它们的值就是它们自己。
OK,还是让我分裂了,
不过,这回我大概是理解了。
2、数字可以转换为字符串
除了数字是常量外,我们还知道字符串也是常量。关于字符串的知识点,我们下节课再仔细聊。这里,我只想再次强调一下,这两个常量是可以相互转化的。
例如:
str(1)==’1’
int(‘1’)==1
这两个表达式的运算结果都是true。
但是,请注意,数字转化成字符串总是能成功的。但并不因此意味着,字符串转换为数字就一定能成功。
例如:
int(‘abc’)转换的结果会报错。
3、数字可以赋值给变量
毫无疑问,变量的发明是意义重大的。
要不然,我们会一直固守在算术运算的日子里不能自拔。数字到底是数字呢?还是数字?这样的日子将是漫长和无趣的。
所以,我一直认为代数比算术简单,设置一个x(未知数),这是何等的智慧,解决了多少曾经被算术题折磨得死去活来的少年的烦恼。
如今,它摇身一变,以变量的模样来了到计算机的语言里,继续拯救着昔日的少年!
是的,还是那个x,如今它被称作变量,我们可以给他赋值。你给他什么,它就拥有了什么。没错,可以给它数字,它便拥有了数字的值。关于变量我们会另文再讨论。
例如:x = 3
这时,数字3被赋值给了x变量,于是这个名字叫x的变量,就拥有了3的值。重要的是,从此以后,我们不再精神分裂了,x是变量的名,3是x的值。清楚明白!
当然,还可以将一个算式赋值给x。
例如:x = (2 + 1)*2
此时,x的值变成6了。
嗯,没错,x的值变了,它不像数字那样总是一个定值。
4、数字的运算
(1)加减法
>>> a = 1
>>> b = 2
>>> c = 3
>>> a + b + c
>>> 6
没错,变量的加减法,就是变量的值的加减法!
(2)乘法
>>> a = 1
>>> b = 2
>>> c = 3
>>> a * b * c
>>> 6
嗯,变量的乘法,还是变量的值的乘法!
(3)除法
>>> a = 6
>>> b = 4
>>> a/b
>>> 1.5
看起来这个没什么问题。是的,自从Python3.0以后,除法就不再那么容易出幺蛾子了。我说这话,就是想提醒大家,现在市场上还在流行Python2的版本,如果,你遇上了,或者你正好也在使用Python2的版本,那就得注意了。
它的结果会是这样的:
>>> a/b
>>> 1
咦?a/b不应该是等于1.5吗?四舍五入也等于2啊?
是的,因为在Python2的版本中,除法运算,如果除数和被除数都是整数时,结果仅取商的整数部分,并自动剔除了余数。
那如果,我希望得到一个准确的计算结果(含小数的)呢?
方法很简单,只需要除数或者被除数二者其一是小数(准确的说叫浮点数),就能得到一个完整的含小数部分的商。
比如:
>>> float(a)/b
>>> 1.5
>>> a/float(b)
>>> 1.5
所以,提醒大家,当你在程序代码中尝试使用除法的时候,你得小心一点,特别是仍然在使用Python2版本的用户。
对于乘法和除法运算,Python还给出了两种特殊的情况,** 和 //。
这是啥意思?连乘和连除?
不是的!应该说是乘方和整除的意思。
例如:
>>> 2**3
>>> 8
它表示2的3次方,也可以说是3个2连乘,所以,结果等于8。这个比较好理解。
但是,如果我们的除法使用//时,对于运算结果,有时就比较容易费解了。
先看例子。
>>> 6//4
>>> 1
>>> 6.0//4
>>> 1.0
>>> 6//4.0
>>> 1.0
>>> 6//-4
>>> -2
这意味着什么?这意味着如果你只想得到两个数相除的结果并取整的话,你就可以使用//来计算,它就只会给你一个整除的结果。
但是,它取整的方法是值得我们注意的,它不是简单的四舍五入,而是所谓的向下舍入的方法取整。
这是个啥意思呢?就是说对于除法的结果是小数时,参照四舍五入的方法,如果四舍五入的结果使其值变大了,就舍;反之,如果使其变小了,就入。所以,当这种除法的结果是正数时,小数部分通常被舍弃,如果为负数时,则参照四舍五入,余数大于等于5时入进来。
最后,请注意它的结果的数据类型,如果除数和被除数都是整数,结果也是整数,否则,只要其中一项是浮点数,结果还是浮点数。
(3)比较运算
数字的比较运算比较简单,基本等同于我们的数学中的比较运算。
x>y:x大于y;
x>=y:x大于等于y;
x==y:x等于y;
x<y:x小于y;
x<=y:x小于等于y;
x!=y:x不等于y。
需要注意的是,对于比较运算,它们的运算结果只有两种:true或者false。
(4)集合
为什么谈到数字运算时,我们会想到集合?实际上,主要还不是在运算的时候,更多的可能是在处理数据的时候,集合会给我们帮上大忙!
比如我们有一个数字型的列表a,如下:
>>> a = [1,2,2,3,4,4,5,6,7]
现在,我们处理这个列表a时,希望获得一个去除了其中的重复数字的列表。如果使用笨办法,能想到的应该是迭代循环了,通过循环比对,剔除重复是数字。
但是,如今Python有集合了,问题就变得简单很多了。
>>> a = set(a)
>>> a
>>> {1,2,3,4,5,6,7}#集合去重
>>> a = list(a)
>>> [1,2,3,4,5,6,7]#转换为列表
看看,集合去重多么强大!特别是数据量比较大的时候,简直威力无比了。
(5)内置数学函数模块
除了常规的加减乘除以外,有时我们还会遇到许多其他类型的运算和数字处理,神奇的Python为我们提供了丰富的内置函数,帮我们一招解决问题。
abs(x) #去绝对值
divmod(a,b) #取余数和商
float(x) #转换为浮点数
int(x) #转换为整数
pow(x,y[,z]) #幂运算(x的y次幂)
range(x) #产生一个从0开始不大于x的整数序列
round(x,n) #四舍五入,保留n位小数
sum() #对一个数字序列求和
bin(x) #转换为二进制
oct(x) #转换为八进制
hex(x) #转换为十六进制
以上列出的仅供参考,还有更多的内置函数。必要时,大家可以从Python的官方文档查询到更多的内置函数和用法。