欢迎回家
我们一直在改变

数和四则运算

计算机,原本是用来计算的。现在更多人把她叫做电脑,这两个词都是指computer。不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等。乃至于,有的人在口语中区分不开计算机和计算器。

有一篇名为《计算机前世》的文章,这样讲到:

还是先来看看计算机(computer)这个词是怎么来的。 英文学得好的小伙伴看到这货,computer

第一反应好像是:“compute-er”是吧,应该是个什么样的人就对了,就是啊,“做计算的人”。

叮咚!恭喜你答对了。

最先被命名为 computer 的确实是人。也就是说,电子计算机(与早期的机械计算机)被给予这个名字是因为他们执行的是此前被分配到人的工作。 “计算机”原来是工作岗位,它被用来定义一个工种,其任务是执行计算诸如导航表,潮汐图表,天文历书和行星的位置要求的重复计算。从事这个工作的人就是 computer,而且大多是女神!

原文还附有如下图片:

所以,以后要用第三人称来称呼computer,请用she(她)。现在你明白为什么程序员中那么多“他”了吧,因为computer是“她”。

在Python中,对数的规定比较简单,基本在小学数学水平即可理解。

那么,做为零基础学习这,也就从计算小学数学题目开始吧。因为从这里开始,数学的基础知识列位肯定过关了。

>>> 3
3
>>> 3333333333333333333333333333333333333333
3333333333333333333333333333333333333333
>>> 3.222222
3.222222

上面显示的是在交互模式下,如果输入3,就显示了3,这样的数称为整数,用int表示。这个称呼和小学数学一样。

如果输入一个比较大的数,第二个,那么多个3组成的一个整数,在Python中称之为长整数。为了表示某个数是长整数,Python 2会在其末尾显示一个L,Python 3中干脆把L都省略了,因为本来它也没有什么作用了。其实,现在的Python已经能够自动将输入的很大的整数视为长整数了。你不必在这方面进行区别。

这个功能重要,在于Python能自动处理大整数问题,不用担心溢出。什么是“溢出”,随后说明,或者在这里去Google它。

第三个,在数学里面称为小数,这里你依然可以这么称呼,不过就像很多编程语言一样,习惯称之为“浮点数”,用float表示。

注意,刚才我提到了小数,其实把小数称之为“浮点数”,这种说法并不准确。为此,“知乎”上有专门的解释,请阅读(原文地址:http://www.zhihu.com/question/19848808/answer/22219209

并不是说小数叫做浮点数。准确的来说:“浮点数”是一种表示数字的标准,整数也可以用浮点数的格式来存储。

当代大部分计算机和程序在处理浮点数时所遵循的标准是由IEEE和ANSI制定的。比如,单精度的浮点数以4个字节来表示,这4个字节可以分为三个部分:1位的符号位(0代表正数,1代表负数),8位用作指数,最后的23位表示有效数字。

“浮点数”的定义是相对于“定点数”来说的,它们是两种表示小数的方式。

所谓“定点”是指小数点的位置总是在数的某个特定位置。比如在银行系统中,小数点的位置总是在两位小数之前(这两位小数用来表示角和分)。其可以使用BCD码来对小数进行编码。

浮点格式则是基于科学计数法的,它是存储极大或极小数的理想方式。但使用浮点数来表示数据的时候,由于其标准制定方面的原因可能会带来一些问题,例如:某两个不同的整数在单精度浮点数的表示方法下很可能无法区分。

上述举例中,可以说都是无符号(或者说是非负数),如果要表示负数,跟数学中的表示方法一样,前面填上负号即可。

值得注意的是,我们这里说的都是十进制的数。

除了十进制,还有二进制、八进制、十六进制都是在编程中可能用到的,当然用六十进制的时候就比较少了(其实时间记录方式就是典型的六十进制)。

进制问题此处不是重点,建议读者自行查找资料阅读。

在Python中,每个数字都是真实存在的,相对于我们——人类——来讲,它真实存在,它就是对象(object)。

对象是一个深刻的术语,不管你是否理解,我先这么说,你先听着、用着,逐渐逐渐,就理解深入了。

还要注意,此对象非彼对象,但是学习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'>

在Python 3中,看到的是这样的结果:

>>> type(3)
<class 'int'>
>>> type(3.0)
<class 'float'>
>>> type(3.222222)
<class 'float'>

用内建函数能够查看对象的类型。

  • <type ‘int’>或者<class 'int'>,说明3是整数类型(Interger);
  • <type ‘float’>或者<class 'float'>,则告诉我们那个对象是浮点型(Floating point real number)。

与id()的结果类似,type()得到的结果也是只读的。

至于对象的值,在这里就是对象本身了。

看来对象也不难理解。请保持自信,继续。

变量

仅仅写出3、4、5是远远不够的,在编程语言中,经常要用到“变量”和“数”(在Python中严格来讲是对象)建立一个对应关系。例如:

>>> x = 5
>>> x
5
>>> x = 6
>>> x
6

在这个例子中,x = 5就是在变量x和数5之间建立了对应关系,接着又建立了x6`之间的对应关系。

我们可以看到,x先“是”5,后来“是”6。

在Python中,有这样一句话是非常重要的:对象有类型,变量无类型

怎么理解呢?

首先,5、6都是整数,Python中为它们取了一个名字,叫做“整数”类型的对象(或者数据),也可以说对象(或数据)类型是整数型,用int表示。

当我们在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的一个重要特征——对象有类型,变量无类型

理解否?如果没有理解,也不要紧张,继续学习,“发展是硬道理”,在发展中解决问题。

上面的知识,可以用来计算。

四则运算

按照下面要求,在交互模式中运行,看看得到的结果和用小学数学知识运算之后得到的结果是否一致

>>> 2 + 5
7
>>> 5 - 2
3
>>> 10 / 2
5
>>> 5 * 2
10
>>> 10 / 5 + 1
3
>>> 2 * 3 - 4
2

在Python 3中,上面的运算中,除法是有区别的,它们将是这样的:

>>> 10 / 2
5.0
>>> 10 / 5 + 1
3.0

这些运算中,分别涉及到了四个运算符号:加(+)、减(-)、乘(*)、除(/)

另外,我相信读者已经发现了一个重要的公理:

在计算机中,四则运算和数学中学习过的四则运算规则是一样的

要不说人是高等动物呢,自己发明的东西,一定要继承自己已经掌握的知识,别跟自己的历史过不去。伟大的科学家们,在当初设计计算机的时候就想到后辈小子们学习的需要了,一定不能让后世子孙再学新的运算规则,就用数学里面的好了。感谢那些科学家先驱者,泽被后世。

下面计算三个算术题,看看结果是什么

  • 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,这是浮点数。这意味着什么,你可以继续试验,看看能不能总结出什么规律。后面会用到。

似乎计算机做一些四则运算是不在话下的,但是,有一个问题请你务必注意:在数学中,整数是可以无限大的,但是在计算机中,整数不能无限大。为什么呢?(推荐去google,其实计算机的基本知识中肯定学习过了。)因此,就会有某种情况出现,就是参与运算的数或者运算结果超过了计算机中最大的数了,这种问题称之为“整数溢出问题”。

大整数

这里有一篇专门讨论这个问题的文章,推荐阅读:整数溢出

对于其它语言,整数溢出是必须正视的,但是,在Python里面,无忧愁,原因就是Python为我们解决了这个问题。

请阅读拙文:大整数相乘

可以在实验一下大整数相乘。

>>> 123456789870987654321122343445567678890098876 * 1233455667789990099876543332387665443345566
152278477193527562870044352587576277277562328362032444339019158937017801601677976183816L

Python 3中的计算结果,比上面的少L:

>>> 123456789870987654321122343445567678890098876 * 1233455667789990099876543332387665443345566
152278477193527562870044352587576277277562328362032444339019158937017801601677976183816

Python自动帮为我们解决大整数问题。这是Python跟很多其它编程语言大不一样的地方,也就是说,你尽可以放心,在Python中,整数的长度是不受限制的(当然,这句话有点绝对了)。

Python解忧愁,可是使用任意大的整数。

所以,选择学习Python就是珍惜光阴了。

强调知识点,有两个符号需要牢记(不记住也没关系,可以随时google,只不过记住后使用更方便)

  • 整数,用int表示,来自单词:integer
  • 浮点数,用float表示,就是单词:float

可以用一个命令:type(object)来检测一个数是什么类型。

>>> type(4)
<type 'int'>    #4是int,整数
>>> type(5.0)
<type 'float'> #5.0是float,浮点数
>>> type(988776544222112233445566778899887766554433221133344455566677788998776543222344556678)
<type 'long'>   #是长整数,也是一个整数

Python 3的结果是:

>>> type(4)
<class 'int'>
>>> type(5.0)
<class 'float'>
>>> type(988776544222112233445566778899887766554433221133344455566677788998776543222344556678)
<class 'int'>

两个版本有区别,在Python 3中,不再有long类型对象了,都归类为int类型。

浮点数

对于浮点数,通常情况也没有什么太神奇的,不过,有时候会遇到非常大或者非常小的浮点数,这时候通常会使用一种叫做“科学记数法”的方式表示。

>>> 9.8 ** -7.2
7.297468937055047e-08

在这个例子中,e-08表示的是10的-8次方,这就是科学记数法。当然,也可以直接使用这种方法写数字。

>>> a = 2e3
>>> a
2000.0

前面说到大整数问题的时候,Python帮我们解决了棘手的问题,使得整数可以无限大,但是,浮点数跟整数不同,它存在上限和下限,如果超出了上下的范围,就会出现溢出问题了。也就是说,如果计算的结果太大或者太小,乃至与已经不在Python的浮点数范围之内,就会有溢出错误。

>>> 500.0 ** 100000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: (34, 'Numerical result out of range')

请注意看刚才报错的信息,“out fo range”,就是超出了范围,溢出。所以,在计算中,如果遇到了浮点数,就要小心行事了。对于这种溢出,需要你在编写程序的时候处理,并担当相应的责任。

当然,也要看看Python 3中的结果如何:

>>> 500.0 ** 100000
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    500.0 ** 100000
OverflowError: (34, 'Result too large')

浮点数总要小心,它会因为“too large”而“out of range”。更要学会阅读程序中的报错信息,因为后面还会用到,比如除法。

赞(0)
未经允许不得转载:91coding » 数和四则运算
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

立即登录   注册

91CODING 小白轻松上手,大牛稳健进步

关于我们免责声明