1.3 fractions模块
数学世界中,浮点数还可以用分数形式展示,不可约简的分数形式往往更简洁直观。
国际惯例的时刻到了,介绍完一个知识点,来点练习加强一下学习效果
>>> from fractions import Fraction
(1)中规中矩地用两个参数来实例化Fraction类
>>> Fraction(2,-4) Fraction(-1, 2) # 1:Fraction()会把实例化参数约分后输出;2:会把分母上的负号“-”转到分子上 >>>
(2)只用一个整数来实例化Fraction类
>>> Fraction(3) Fraction(3, 1) #看到没,实例化时输入的参数3是赋值给分子,而分母是默认参数1 >>>
(3)只用一个字符串实例化Fraction类
>>> Fraction(')
Fraction(4, 1)
>>>
>>> Farction('s')
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
Farction('s')
NameError: name 'Farction' is not defined
>>>
>>> Fraction('4.1')
Fraction(41, 10)
>>>
#如果使用字符串进行初始化时,fractions模块使用内置的正则表达式进行匹配
>>> Fraction('\t\n 1.2 \t\n')
Fraction(6, 5) #正则表达式把字符串两侧的空格、Tab、换行符都给剔除了
#脑子中突然闪现出一个调皮的想法:我把空格、Tab、换行符放在数字中间会如何
>>> Fraction('1, \t\n 2')
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
Fraction('1, \t\n 2')
File "C:\Users\dddd\AppData\Local\Programs\Python\Python35\lib\fractions.py", line 146, in __new__numerator)
ValueError: Invalid literal for Fraction: '1, \t\n 2' # 啊!好爽!!
#我又要调皮了,如果一个浮点数的只有小数位会怎么样?
>>> Fraction('-.25')
Fraction(-1, 4) #这样也行!!!
#最后的最后,怎么能忽略了数学中的科学计数法表示的数呢
>>> Fraction('1.2*e-6')
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
Fraction('1.2*e-6')
File "C:\Users\dddd\AppData\Local\Programs\Python\Python35\lib\fractions.py", line 146, in __new__numerator)
ValueError: Invalid literal for Fraction: '1.2*e-6'
>>> Fraction('1e-6')
Fraction(1, 1000000)
>>> Fraction('e-6')
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
Fraction('e-6')
File "C:\Users\dddd\AppData\Local\Programs\Python\Python35\lib\fractions.py", line 146, in __new__numerator)
ValueError: Invalid literal for Fraction: 'e-6'
>>>
#可见并不是什么字符串都可以作为Fraction的参数的,需要是整形或浮点型转化成的浮点数
(4)以分数作为参数实例化Faction类
>>> Fraction(1/7)
Fraction(2573485501354569, 18014398509481984) # 我操!什么鬼?
>>> Fraction('1/7')
Fraction(1, 7)
>>>
>>> Fraction('-1/7')
Fraction(-1, 7)
>>> Fraction('1/-7')
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
Fraction('1/-7')
File "C:\Users\dddd\AppData\Local\Programs\Python\Python35\lib\fractions.py", line 146, in __new__numerator)
ValueError: Invalid literal for Fraction: '1/-7'
#不知道为什么每次看到报错都会有心痛的感觉
>>> Fraction('1/(-7)')
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
Fraction('1/(-7)')
File "C:\Users\dddd\AppData\Local\Programs\Python\Python35\lib\fractions.py", line 146, in __new__numerator)
ValueError: Invalid literal for Fraction: '1/(-7)'
#看来用'a/b'的形式的参数实例化Fraction时,负号'-'只能加在a前边了
>>>
(5)有时候将浮点数或者Decimal作为Fraction实例的初始化数据可能会遇到舍入误差(二进制的浮点数是不精确的)的问题,如调用Fraction(1.2)时不返回Fraction(12, 10)的。这时Fraction类提供了一个实例函数limit_denominator() 来减小这种舍入误差。
>>> Fraction('1/7').limit_denominator(max_denominator=100)
Fraction(1, 7)
>>> Fraction(1/7).limit_denominator(max_denominator=100)
Fraction(1, 7)
>>> Fraction(1/7)
Fraction(2573485501354569, 18014398509481984)
>>>
>>> Fraction(1.2)
Fraction(5404319552844595, 4503599627370496)
>>> Fraction(1.2).limit_denominator(max_denominator=100)
Fraction(6, 5)
>>>
3,由于Fraction类继承了numbers.Rational类并且重载了该类多有的方法,所以其实例可以直接进行一些算数运算、关系运算等。
先实例化两个Fraction对象 x = Fraction(1,2) y = Fraction(1,3)
(1)+
>>> x + y Fraction(5, 6)
(2)-
>>> x - y Fraction(1, 6)
(3)*
>>> x * y Fraction(1, 6)
(4)/
>>> x / y Fraction(3, 2)
(5)用Python内置函数abs()处理一下呢
>>> x*(-1) Fraction(-1, 2) >>> abs(x*(-1)) #内置函数能正常处理哦 Fraction(1, 2) 内置函数能处理,math模块中的函数肯定也能处理咯,试一下 >>> import math >>> math.ceil(x) 1 >>> math.floor(x) 0
关于fraction模块就介绍这么多吧,其实我目前还在自学阶段,没有什么实践的机会,等将来用到了再多去多了解一些。
1.3 fractions模块的更多相关文章
- python decimal和fractions模块
1.简介 默认,浮点数学缺乏精确性 decimal 模块提供了一个 Decimal 数据类型用于浮点数计算.相比内置的二进制浮点数实现 float这个类型有助于金融应用和其它需要精确十进制表达的场合, ...
- Python3 学习第十弹: 模块学习三之数字处理
math模块 提供基础的数学函数, cos(3.14) = -0.999..(弧度制) acos(1) = 0.0 sqrt(9) = 3.0 degrees(3.14) = 179.9999..(弧 ...
- python的标准模块
本文用于记录python中的标准模块,随时更新. decimal模块(解决小数循环问题): >>> import decimal >>> a = decimal.D ...
- Python之复数、分数、大型数组数学运算(complex、cmath、numpy、fractions)
一.复数的数学运算 复数可以用使用函数 complex(real, imag) 或者是带有后缀j的浮点数来指定 a=complex(2,4) print(a) # (2+4j) b=2-5j # 获取 ...
- Python基本语法
目录缩进流程控制语句表达式函数对象的方法类型数学运算 缩进Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯.并且Python语言利用缩进表示语句块的开始和退 ...
- Python成长笔记 - 基础篇 (二)python基本语法
Python的设计目标之一是让代码具备高度的可阅读性.它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观.它不像其他的静态语言如C.Pascal那样需要重复书写声明语句,也不像 ...
- Python 入門語法和類型(转载学习)
http://www.cnblogs.com/mcdou/archive/2011/08/02/2125016.html Python的设计目标之一是让源代码具备高度的可读性.它设计时尽量使用其它语言 ...
- deciaml(十进制浮点运算)
# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #========== ...
- python 数字类型
数值类型:整型(int)-通常被称为是整型或整数,是正或负整数,不带数点.长整型(long integers)-无限大小的整数,整数最后是一个大写或者小写的L浮点型(floadting point r ...
随机推荐
- Centos7-两台Centos机器间复制文件
我又两台Centos机器,一台192.168.1.1:另一台192.168.1.2 现在在将192.168.1.1上的一个文件复制到192.168.1.2.登陆到192.168.1.1然后运行命令 命 ...
- linux_inotify
什么是inotify? 拥有强大.粒细粒度.异步文件系统事件监控机制,监控文件系统中添加.删除.修改.移动等各种事件 版本支持: 内核 2.6.13以上版本,inotify-tools 是实施监控的软 ...
- MySQL查询结果复制到新表(更新、插入)
MySQL中可以将查询结果复制到另外的一张表中,复制的话通常有两种情况,一种是更新已有的数据,另一种是插入一条新记录.下面通过例子来说明.首先构建两个测试表. 表t1: 表t2: 1.如果t2表中存在 ...
- 【转】awk用法介绍
1. 介绍 Awk是由Aho.Weinberger和Kernighan三位科学家开发的,特别擅长文本处理的linux 工具,该工具是 linux 下最常用的工具之一.Awk不是普通的工具,其实,也是一 ...
- YII关联字段并带搜索排序功能
1.简介 从接触yii框架到现在已经快有两个月了,但是自己对yii框架的了解程度并不是很深,并没有系统地去学习,仅仅只是在做项目的时候遇到不懂得知识才去翻手册. 在上一个项目中因为需要将关联的表的字段 ...
- selenium的使用技巧及集成到scrapy
为了爬取拉钩,今天学习了selenum的使用技巧. from scrapy.http import HtmlResponse class JSPageMiddleware(object): ...
- 高通HAL层之Sensor HAL
高通的HAL层其实分为两种,一种是直接从kernel这边报数据上来的,由sensor HAL层来监听,另一种是走ADSP的模式,HAL层是通过qmi的形式进行监听的: 走ADSP架构的可以看下面的博客 ...
- ansible playbook实践(二)-基础相关命令
ansible相关的命令: ansible 用来执行ansible管理命令 ansible-doc 用来获取模块的帮助文档 ansible-playbook 当有众多任务时,可编写成playbook ...
- 如何让oracle DB、监听和oem开机启动(dbstart)
如何让oracle DB.监听和oem开机启动(dbstart) 让oracle DB.监听和oem开机启动(dbstart) Oracle提供了伴随操作系统自动重启的功能,在Windows中,可以修 ...
- BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]
题意: $n$个人排队打饭,第$i$个人口味$a_i$,能容忍最多身后第$b_i$个人先打饭. 先后两人$i,j$做饭时间为$a_i & a_j - a_i | a_j$ 求最少时间 一开始想 ...