跟老齐学Python之??碌某?? target=


Posted in Python onSeptember 12, 2014

除法??碌模?唤鍪?ython。

整数除以整数

看官请在启动idle之后,练习下面的运算:

>>> 2/5
0
>>> 2.0/5
0.4
>>> 2/5.0
0.4
>>> 2.0/5.0
0.4

看到没有?麻烦出来了,如果从小学数学知识除法,以上四个运算结果都应该是0.4。但我们看到的后三个符合,第一个居然结果是0。why?

因为,在python里面有一个规定,像2/5中的除法这样,是要取整。2除以5,商是0(整数),余数是2(整数)。那么如果用这种形式:2/5,计算结果就是商那个整数。或者可以理解为:整数除以整数,结果是整数(商)。

继续实验,验证这个结论:

>>> 5/2
2
>>> 6/3
2
>>> 5/2
2
>>> 6/2
3
>>> 7/2
3
>>> 8/2
4
>>> 9/2
4

注意:这里是得到整数商,而不是得到含有小数位的结果后“四舍五入”。例如5/2,得到的是商2,余数1,最终5/2=2。并不是对2.5进行四舍五入。

浮点数与整数相除

列为看官注意,这个标题和上面的标题格式不一样,上面的标题是“整数除以整数”,如果按照风格一贯制的要求,本节标题应该是“浮点数除以整数”,但没有,现在是“浮点数与整数相除”,这是因为包含了以下三种情况:

被除数是浮点数,除数是整数
被除数是整数,除数是浮点数
被除数和除数都是浮点数
出结论之前,还是先做实验:

>>> 9.0/2
4.5
>>> 9/2.0
4.5
>>> 9.0/2.0
4.5
>>> 8.0/2
4.0
>>> 8/2.0
4.0
>>> 8.0/2.0
4.0

归纳,得到规律:不管是被除数还是除数,只要有一个数是浮点数,结果就是浮点数。所以,如果相除的结果有余数,也不会像前面一样了,而是要返回一个浮点数,这就跟在数学上学习的结果一样了。

>>> 10.0/3
3.3333333333333335

这个是不是就有点搞怪了,按照数学知识,应该是3.33333...,后面是3的循环了。那么你的计算机就停不下来了,满屏都是3。为了避免这个,python武断终结了循环,但是,可悲的是没有按照“四舍五入”的原则终止。

关于无限循环小数问题,小学都学习了,但是这可不是一个简单问题,看看维基百科的词条:0.999...,会不会有深入体会呢?

总之,要用python,就得遵循她的规定,前面两条规定已经明确了。

补充一个资料,供有兴趣的朋友阅读:浮点数算法:争议和限制
说明:以上除法规则,是针对python2,在python3中,将5/2和5.0/2等同起来了。不过,如果要得到那个整数部分的上,可以用另外一种方式:地板除.

>>> 9/2
4
>>> 9//2
4

python总会要提供多种解决问题的方案的,这是她的风格。

开始用轮子

python之所以受人欢迎,一个很重重要的原因,就是轮子多。这是比喻啦。就好比你要跑的快,怎么办?光天天练习跑步是不行滴,要用轮子。找辆自行车,就快了很多。还嫌不够快,再换电瓶车,再换汽车,再换高铁...反正你可以选择的很多。但是,这些让你跑的快的东西,多数不是你自己造的,是别人造好了,你来用。甚至两条腿也是感谢父母恩赐。正是因为轮子多,可以选择的多,就可以以各种不同速度享受了。

python就是这样,有各种各样别人造好的轮子,我们只需要用。只不过那些轮子在python里面的名字不叫自行车、汽车,叫做“模块”,有人承接别的语言的名称,叫做“类库”、“类”。不管叫什么名字把。就是别人造好的东西我们拿过来使用。

怎么用?可以通过两种形式用:

形式1:import module-name。import后面跟空格,然后是模块名称,例如:import os
形式2:from module1 import module11。module1是一个大模块,里面还有子模块module11,只想用module11,就这么写了。比如下面的例子:
不??铝耍?笛橐桓觯?/p>

>>> from __future__ import division
>>> 5/2
2.5
>>> 9/2
4.5
>>> 9.0/2
4.5
>>> 9/2.0
4.5

注意了,引用了一个模块之后,再做除法,就不管什么情况,都是得到浮点数的结果了。

这就是轮子的力量。

关于余数

前面计算5/2的时候,商是2,余数是1

余数怎么得到?

实验下面的操作:

>>> 5%2
1
>>> 9%2
1
>>> 7%3
1
>>> 6%4
2
>>> 5.0%2
1.0

符号:%,就是要得到两个数(可以是整数,也可以是浮点数)相除的余数。

前面说python有很多人见人爱的轮子(模块),她还有丰富的内建函数,也会帮我们做不少事情。例如函数divmod()

>>> divmod(5,2) #表示5除以2,返回了商和余数
(2, 1)
>>> divmod(9,2)
(4, 1)
>>> divmod(5.0,2)
(2.0, 1.0)

四舍五入

最后一个了,一定要坚持,今天的确有点??铝恕R?迪炙纳嵛迦耄?芗虻ィ?褪悄诮ê???ound()

动手试试:

>>> round(1.234567,2)
1.23
>>> round(1.234567,3)
1.235
>>> round(10.0/3,4)
3.3333

简单吧。越简单的时候,越要小心,当你遇到下面的情况,就有点怀疑了:

>>> round(1.2345,3)
1.234        #应该是:1.235
>>> round(2.235,2)
2.23        #应该是:2.24

哈哈,我发现了python的一个bug,太激动了。

别那么激动,如果真的是bug,这么明显,是轮不到我的。为什么?具体解释看这里,下面摘录官方文档中的一段话:

Note:
The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it's a result of the fact that most decimal fractions can't be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for more information.

原来真的轮不到我。(垂头丧气状。)

似乎除法的问题到此要结束了,其实远远没有,不过,做为初学者,至此即可。还留下了很多话题,比如如何处理循环小数问题,我肯定不会让有探索精神的朋友失望的,在我的github中有这样一个轮子,如果要深入研究,可以来这里尝试。

Python 相关文章推荐
Python程序设计入门(5)类的使用简介
Jun 16 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
Python中按键来获取指定的值
Mar 02 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
使用keras时input_shape的维度表示问题说明
Jun 29 Python
python实现数字炸弹游戏
Jul 17 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 Python
python 标准库原理与用法详解之os.path篇
Oct 24 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 Python
跟老齐学Python之用Python计算
Sep 12 #Python
跟老齐学Python之集成开发环境(IDE)
Sep 12 #Python
跟老齐学Python之Python安装
Sep 12 #Python
python里大整数相乘相关技巧指南
Sep 12 #Python
python里对list中的整数求平均并排序
Sep 12 #Python
python里将list中元素依次向前移动一位
Sep 12 #Python
python time模块用法实例详解
Sep 11 #Python
You might like
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python中int与str互转方法
2018/07/02 Python
如何用Python合并lmdb文件
2018/07/02 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
django云端留言板实例详解
2019/07/22 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
科研先进个人典型材料
2014/01/31 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
Python实现学生管理系统(面向对象版)
2021/06/24 Python
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL