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编程中基本的数学计算使用
Feb 04 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
深入理解Python对Json的解析
Feb 14 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
如何使用Python 打印各种三角形
Jun 28 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 Python
基于Python生成个性二维码过程详解
Mar 05 Python
Python基于traceback模块获取异常信息
Jul 23 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
Opencv实现二维直方图的计算及绘制
Jul 21 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
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
JS Array对象入门分析
2008/10/30 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
iView框架问题整理小结
2018/10/16 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
Python实现按中文排序的方法示例
2018/04/25 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
Python文件路径名的操作方法
2019/10/30 Python
python对execl 处理操作代码
2020/06/22 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
什么是.net
2015/08/03 面试题
幼儿园教师奖惩制度
2014/02/01 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
统招统分证明
2015/06/23 职场文书
初中思想品德教学反思
2016/02/24 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript