Python中分数的相关使用教程


Posted in Python onMarch 30, 2015

你可能不需要经常处理分数,但当你需要时,Python的Fraction类会给你很大的帮助。在该指南中,我将提供一些有趣的实例,用于展示如何处理分数,突出显示一些很酷的功能。
1 基础

Fraction类在Lib/fractions.py文件中,所以可以这样导入:
 

from fractions import Fraction

有很多种实例化Fraction类的方法。

首先,你可以传入分子和分母:
 

>>> Fraction(1, 2)
Fraction(1, 2)

或者利用另一个分数进行实例化:
 

>>> f = Fraction(1, 2)
>>> Fraction(f)
Fraction(1, 2)

使用一个浮点数进行实例化:
 

>>> Fraction(2.5)
Fraction(5, 2)

或者使用一个 decimal:
 

>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)

最后一种方法,可能是最有趣的一种方法,你可以使用一个字符串实例化Fraction类:
 

>>> Fraction('9/16')
Fraction(9, 16)

本质上讲,Fraction类这么设计,目的就是为了让你在实例化该类之前不需要做很多处理。Fraction类知道如何处理多种不同的数据类型。
2 自动约分

约分并不是很难,但是对于一些复杂的分数,约分还是要费点事的。Fraction类在这方面特别有用,因为它能自动约分分数。
 

>>> Fraction(153, 272)
Fraction(9, 16)

纯粹靠想,你可能无法约分153/172,但是Fraction类能很快地完成约分。
3 二元运算

你可以像对待整数和浮点数一样,在Fraction对象上执行二元运算。

两个分数进行相加操作:
 

>>> Fraction(1, 2) + Fraction(3, 4)
Fraction(5, 4)

这样操作就很方便了,但是你也可以混合整数或浮点数。如你所料,Fraction对象和一个整数进行相加返回一个Fraction对象,但和一个浮点数进行相加返回一个浮点数。
 

>>> Fraction(5, 16) + 3
Fraction(53, 16)
>>> Fraction(5, 16) + 3.0
3.3125

这里有一些其他的二元运算的例子:
 

>>> Fraction(5, 16) - Fraction(1, 4)
Fraction(1, 16)
>>> Fraction(1, 16) * Fraction(3, 16)
Fraction(3, 256)
>>> Fraction(3, 16) / Fraction(1, 8)
Fraction(3, 2)

现在让我们试试乘方操作:
 

>>> Fraction(1, 8) ** Fraction(1, 2)
0.3535533905932738

它返回一个浮点数,可能是因为分数不能进行合理的计算。实际上我们可以使用limit_denominator方法得到一个近似的Fraction值。
 

>>> f = Fraction(1, 8) ** Fraction(1, 2)
>>> Fraction(f).limit_denominator()
Fraction(235416, 665857)

记住,你可以混合字符串和其他上边实例化部分中提到的数据类型。
 

>>> Fraction("1/2") + Fraction(2.0)
Fraction(5, 2)
>>> Fraction(2) * Fraction("  1/2  ")
Fraction(1, 1)

4 获取Fraction对象的属性

你已经有了一个Fraction对象,并且已经做了一些计算,现在我们如何访问它的属性呢?

不阅读文档的话,你或许会尝试Fraction.numerator和Fraction.denominator,事实证明你是正确的。
 

>>> f = Fraction(221, 234) + Fraction(1, 2)
>>> f.numerator
13
>>> f.denominator
9

或者作为一个字符串,打印整个分数:
 

>>> print f
13/9
>>> a = str(f)
>>> a
'13/9'
5 GCD

这不是Fraction类的一部分,它是在fractions库中的。利用它你可以快速找到两个数的最大公约数。

首先导入:
 

from fractions import gcd

一些例子:
 

>>> gcd(100, 75)
25
>>> gcd(221, 234)
13

6 总结

希望你已经学到了一些关于在Python中处理分数的东西。如果你想阅读更多内容,可以查看文档。如果你感觉学起来非常有动力,可以看看源代码。

如果你有更有趣的分数使用方法,告诉我,我会将它们添加到指南中。

Python 相关文章推荐
python输出当前目录下index.html文件路径的方法
Apr 28 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
Python实现excel转sqlite的方法
Jul 17 Python
Django自定义用户认证示例详解
Mar 14 Python
numpy中矩阵合并的实例
Jun 15 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
Python csv模块使用方法代码实例
Aug 29 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
Pytest中conftest.py的用法
Jun 27 Python
Python2.x中str与unicode相关问题的解决方法
Mar 30 #Python
分享一个常用的Python模拟登陆类
Mar 29 #Python
python实现查询IP地址所在地
Mar 29 #Python
python实现定时播放mp3
Mar 29 #Python
Python实现设置windows桌面壁纸代码分享
Mar 28 #Python
Python中的类与对象之描述符详解
Mar 27 #Python
深入理解Javascript中的this关键字
Mar 27 #Python
You might like
实现树状结构的两种方法
2006/10/09 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php实现源代码加密的方法
2015/07/11 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
JavaScript arguments 多参传值函数
2010/10/24 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
javascript动态创建对象的属性详解
2018/11/07 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
详解python中的hashlib模块的使用
2019/04/22 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
简单介绍Object类的功能、常用方法
2013/10/02 面试题
好家长事迹材料
2014/01/23 职场文书
教师产假请假条
2014/04/10 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
青年文明号申报材料
2014/12/23 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
Python基础之变量的相关知识总结
2021/06/23 Python
Nginx利用Logrotate实现日志分割
2022/05/20 Servers