1.1 数字
现在更多人把计算机叫作电脑,英文是Computer。只要提到它,普遍都会想到它能够比较快地做加减乘除,甚至乘方、开方等各种数学运算。
有一篇名为《计算机前世》的文章(参见:http://www.flickering.cn),这样讲到:
先来看看计算机(Computer)这个词是怎么来的。英文学得好的小伙伴看到Computer,第一反应是:“compute-er”,应该是个什么样的人吧,对,“做计算的人”。叮咚!恭喜你答对了。最先被命名为Computer的确实是人。也就是说,电子计算机(与早期的机械计算机)被赋予这个名字是因为他们执行的是被分配到的人的工作。“计算机”原来是工作岗位,它被用来定义一个工种,其任务是执行计算,诸如导航表、潮汐图表、天文历书和行星的位置要求等的重复计算,从事这个工作的人就是Computer,而且大多是女神。
原文还附有如图1-1所示的图片。
所以,以后要用第三人称来称呼Computer,请用She(她)。现在你明白为什么程序员中那么多“他”了吧,因为Computer是“她”。
图1-1 从事Computer工作的人
1.1.1 数字
在Python中,对数的规定比较简单,达到了小学数学水平即可理解。
首先,进入到Python的交互模式中,不管是什么操作系统,相信你总能找到那个交互模式。然后模仿下面的操作:
- >>> 3
- 3
- >>> 3333333333333333333333333333333333333333
- 3333333333333333333333333333333333333333L
- >>> 3.222222
- 3.222222
在交互模式下,如果输入3,就显示了3,这样的数称为整数,这个称呼和小学数学一样。
当输入一个比较大的整数时,Python会自动将这个大整数进行转换,转换的结果是一个“长整数”类型,为了表示它,会在其末尾显示一个L。由于这个操作是Python自动完成的,所以在现在的Python中,没有单独将“长整数”作为一个类型。
3.222222在数学里面称为小数,这里依然可以这么称呼,不过就像很多编程语言一样,习惯称之为“浮点数”。至于这个名称的由来,也是有点说道的,有兴趣可以搜索一下。
上述举例中都无符号(或者说是非负数),如果要表示负数,跟数学中的表示方法一样,前面填上负号即可。
值得注意的是,我们这里说的都是十进制的数。
除了十进制,还有二进制、八进制、十六进制都是在编程中可能用到的,这些知识不作为本书讲解的内容,读者要了解,可以寻找相关书籍,或者去网上搜索。
每个数字在Python中都是一个对象,比如前面输入的3就是一个对象。每个对象,在内存中都有自己的一个地址,这就是它的身份。
- >>> id(3)
- 140574872
- >>> id(3.222222)
- 140612356
- >>> id(3.0)
- 140612356
- >>>
用内建函数id()可以查看每个对象的内存地址,即身份。
内建函数,英文为built-in Function,读者根据名字也能猜个八九不离十了。不错,就是Python中已经定义好的内部函数。
以上三个不同的数字是三个不同的对象,具有三个不同的内存地址。特别要注意,在数学上,3和3.0是相等的,但是在这里,它们是不同的对象。
用id()得到的内存地址是只读的,不能修改。
了解了“身份”,再来看“类型”,也有一个内建函数供使用,即type()。
- >>> type(3)
- <type 'int'>
- >>> type(3.0)
- <type 'float'>
- >>> type(3.222222)
- <type 'float'>
<type‘int’>说明3是整数类型(Interger);<type‘float’>则告诉我们该对象是浮点型(Floating point real number)。与id()的结果类似,type()得到的结果也是只读的。
至于对象的值,在这里就是对象本身了。
看来对象也不难理解。
请保持自信,继续。
1.1.2 变量
仅仅写出“3、4、5”是远远不够的,在编程中,经常要用到“变量”和“数”(严格来讲是对象)建立起对应关系。例如:
- >>> x = 5
- >>> x
- 5
- >>> x = 6
- >>> x
- 6
在这个例子中,x=5就是在变量x和数5之间建立了对应关系,接着又建立了x与6之间的对应关系。我们可以看到,x先“是”5,后来“是”6。
在Python中,有这样一句话是非常重要的:对象有类型,变量无类型。怎么理解呢?
对象的类型,可以使用type()来查看,前面已经演示了。
当在Python中写入了5、6,Computer就自动在其内存中某个地方建立了这两个对象,就好比建造了两个雕塑,一个形状似5,一个形状似6,这两个对象的类型就是Int.
那个x就好比是一个标签,当x=5时,就是将x这个标签拴在了5上,通过这个x,就顺延看到了5,于是在交互模式中,“>>>x”输出的结果就是5,给人的感觉似乎是x就是5,而事实是x这个标签贴在5上面。同样的道理,当x=6时,标签就换位置了,贴到6上面。
所以,这个标签x没有类型之说,它不仅可以贴在整数类型的对象上,还能贴在其他类型的对象上,比如后面会介绍到的str(字符串)类型的对象等。
Python中变量的这个特点(即可以四处乱贴的标签)非常重要,它没有类型。
1.1.3 简单的四则运算
读者可以在交互模式中复习一下小学数学中的四则运算,并且报告给你小学数学老师,他(她)当初煞费苦心的教育成果在这里得到了应用。
- >>> 2+5
- 7
- >>> 5-2
- 3
- >>> 10/2
- 5
- >>> 5*2
- 10
- >>> 10/5+1
- 3
- >>> 2*3-4
- 2
上面的运算中,分别涉及四个运算符号:加(+)、减(-)、乘(*)、除(/)
另外,我相信读者已经发现了一个重要的公理:
计算机中的四则运算和小学数学中学习过的四则运算规则是一样的
要不怎么说人是高等动物呢,自己发明的东西,一定要继承自己已经掌握的知识,别跟自己的历史过不去。伟大的科学家们,在当初设计计算机的时候就想到我们现在学习的需要了,一定不能让后世子孙再学新的运算规则,就用小学数学里面的好了。感谢那些科学家先驱者,泽被后世。
下面计算3个算术题,看看结果是什么:
- 4 + 2
- 4.0 + 2
- 4.0 + 2.0
你可能愤怒了,这么简单的题目,就不要劳驾计算机了,太浪费了。
别着急,还是要运算一下,然后看看结果有没有不一样,要仔细观察哦。
- >>> 4+2
- 6
- >>> 4.0+2
- 6.0
- >>> 4.0+2.0
- 6.0
不一样的地方是:第一个公式结果是6,这是一个整数;后面两个是6.0,这是浮点数。
计算机做一些四则运算是不在话下的,但是,有一个问题请务必注意:在数学中,整数是可以无限大的,但是在计算机中,整数不能无限大。
因此,就会有某种情况出现,就是参与运算的数或者运算结果超过了计算机中最大的数了,这种问题称之为“整数溢出问题”。
1.1.4 整数溢出问题
在网上能够找到很多专门讨论“整数溢出”问题的文章。
在某些高级编程语言中,整数溢出是必须正视的,但是,在Python里面就无需忧愁了,原因就是Python为我们解决了这个问题,它支持“无限精度”的整数,所以,不用考虑整数溢出的问题,Int类型与任意精度的Long整数类可以无缝转换,超过Int范围的情况都将转换成Long类型。
体验一下大整数:
- >>> 123456789870987654321122343445567678890098876*1233455667789990099876543332387665443345566
- 152278477193527562870044352587576277277562328362032444339019158937017801601677976183816L
多么幸运呀,Python做了如此精妙的安排,免除了麻烦,所以选择学习Python就是珍惜光阴。
你还可以在交互模式下计算2的1000次幂,计算方法是:
- >>> 2 ** 1000
看看结果是什么?你会感到惊喜的。
上面计算结果的数字最后有一个L,表示这个数是一个长整数,你不用管它,反正是Python为我们搞定了大整数问题。