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学习之Anaconda的使用与配置方法
Jan 04 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
Python3 元组tuple入门基础
Feb 09 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
浅谈Python中的模块
Jun 10 Python
python语言的优势是什么
Jun 17 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页面实现定时跳转的方法
2014/10/31 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
模拟select的代码
2011/10/19 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
在Python中使用模块的教程
2015/04/27 Python
python比较2个xml内容的方法
2015/05/11 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
JPA的优势都有哪些
2013/07/04 面试题
见习期自我鉴定范文
2014/03/19 职场文书
询价采购方案
2014/06/09 职场文书
介绍信的格式
2015/01/30 职场文书
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL