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实现文件按照日期命名的方法
Jul 09 Python
浅析python中的分片与截断序列
Aug 09 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
如何使用VSCode愉快的写Python于调试配置步骤
Apr 06 Python
python对html过滤处理的方法
Oct 21 Python
python实现维吉尼亚加密法
Mar 20 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
python SVM 线性分类模型的实现
Jul 19 Python
详解Python文件修改的两种方式
Aug 22 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 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
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
使用python实现扫描端口示例
2014/03/29 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
python paramiko模块学习分享
2017/08/23 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Python谱减法语音降噪实例
2019/12/18 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
UDP协议功能
2013/01/06 面试题
介绍一下linux的文件系统
2012/03/20 面试题
两道JAVA笔试题
2016/09/14 面试题
房地产开盘策划方案
2014/02/10 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
计生专干事迹
2014/05/28 职场文书
施工单位安全责任书
2014/07/24 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
小学生学习保证书
2015/02/26 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python