Nota
¡Ayúdanos a traducir la documentación oficial de Python al Español! Puedes encontrar más información en Como contribuir. Ayuda a acercar Python a más personas de habla hispana.
fractions
— Números racionales¶
Source code: Lib/fractions.py
El módulo fractions
provee soporte para aritmética de números racionales.
Una instancia de Fraction puede construirse desde dos enteros, desde otro número racional, o desde una cadena de caracteres.
- class fractions.Fraction(numerator=0, denominator=1)¶
- class fractions.Fraction(other_fraction)
- class fractions.Fraction(float)
- class fractions.Fraction(decimal)
- class fractions.Fraction(string)
La primera versión requiere que numerator y denominator sean instancias de
numbers.Rational
y retorna una nueva instancia deFraction
con valornumerator/denominator
. Si denominator es0
, esto arrojará un errorZeroDivisionError
. La segunda versión necesita que other_fraction sea una instancia denumbers.Rational
y retorna una instancia deFraction
con el mismo valor. Las siguientes dos versiones aceptan igualmente instanciasfloat
odecimal.Decimal
y retornan una instanciaFraction
con exactamente el mismo valor. Nota que debido a los problemas usuales con la representación binaria en punto flotante (ver Aritmética de Punto Flotante: Problemas y Limitaciones), el argumento deFraction(1.1)
no es exactamente igual a 11/10, por lo queFraction(1.1)
no retornaFraction(11, 10)
como uno esperaría. (Mira la documentación para el métodolimit_denominator()
abajo.) La última versión del constructor espera una cadena de caracteres o una instancia Unicode. La forma usual para esta instancia es:[sign] numerator ['/' denominator]
donde el
sign
opcional puede ser “+” o “-” ynumerator
ydenominator
(si están presentes) son cadenas de caracteres de dígitos decimales (guiones bajos se pueden usar para delimitar dígitos como con las integrales literales en el código). Además, cualquier cadena de caracteres que represente un valor finito y sea aceptado por el constructor defloat
también es aceptado por el constructor deFraction
. En cualquier caso, la cadena de caracteres de entrada también puede tener espacios en blanco iniciales y / o finales. Aquí hay unos ejemplos:>>> from fractions import Fraction >>> Fraction(16, -10) Fraction(-8, 5) >>> Fraction(123) Fraction(123, 1) >>> Fraction() Fraction(0, 1) >>> Fraction('3/7') Fraction(3, 7) >>> Fraction(' -3/7 ') Fraction(-3, 7) >>> Fraction('1.414213 \t\n') Fraction(1414213, 1000000) >>> Fraction('-.125') Fraction(-1, 8) >>> Fraction('7e-6') Fraction(7, 1000000) >>> Fraction(2.25) Fraction(9, 4) >>> Fraction(1.1) Fraction(2476979795053773, 2251799813685248) >>> from decimal import Decimal >>> Fraction(Decimal('1.1')) Fraction(11, 10)
La clase
Fraction
hereda de la clase base abstractanumbers.Rational
, e implementa todos los métodos y operaciones de esa clase. Las instanciasFraction
son hashable, y deben ser tratadas como inmutables. AdicionalmenteFraction
tiene los siguientes propiedades y métodos:Distinto en la versión 3.9: La función
math.gcd()
ahora se usa para normalizar el numerator y denominator.math.gcd()
siempre retorna un tipoint
. Anteriormente, el tipo de GCD dependía de numerator y denominator.Distinto en la versión 3.11: Ahora se permiten guiones bajos al crear una instancia de
Fraction
a partir de una cadena de caracteres, siguiendo las reglas de PEP 515.Distinto en la versión 3.11:
Fraction
ahora implementa__int__
para satisfacer las comprobaciones de instancia detyping.SupportsInt
.Distinto en la versión 3.12: Se permite espacio alrededor de la barra para entrada de cadena de caracteres:
Fraction('2 / 3')
.Distinto en la versión 3.12:
Fraction
instancias ahora apoya formato de estilo flotante, con tipos de presentación"e"
,"E"
,"f"
,"F"
,"g"
,"G"
and"%""
.- numerator¶
Numerador de la fracción irreducible.
- denominator¶
Denominador de la fracción irreducible.
- as_integer_ratio()¶
Retorna una tupla de dos números enteros, cuyo relación es igual a la fracción original.La relación está en términos más bajos y tiene un denominador positivo.
Nuevo en la versión 3.8.
- is_integer()¶
Retorna
True
si la fracción es un número entero.Nuevo en la versión 3.12.
- classmethod from_float(flt)¶
Constructor alternativo que solo acepta instancias de
float
onumbers.Integral
. Ten cuidado queFraction.from_float(0.3)
no es lo mismo queFraction(3, 10)
.
- classmethod from_decimal(dec)¶
Constructor alternativo que solo acepta instancias de
decimal.Decimal
onumbers.Integral
.Nota
Desde Python 3.2 en adelante, puedes construir una instancia
Fraction
directamente desde una instanciadecimal.Decimal
.
- limit_denominator(max_denominator=1000000)¶
Busca y retorna la instancia de
Fraction
mas cercana aself
que tenga como denominador max_denominator. Este método es útil para encontrar aproximaciones racionales a un número en punto flotante determinado:>>> from fractions import Fraction >>> Fraction('3.1415926535897932').limit_denominator(1000) Fraction(355, 113)
o para recuperar un numero racional que esta representado como flotante:
>>> from math import pi, cos >>> Fraction(cos(pi/3)) Fraction(4503599627370497, 9007199254740992) >>> Fraction(cos(pi/3)).limit_denominator() Fraction(1, 2) >>> Fraction(1.1).limit_denominator() Fraction(11, 10)
- __floor__()¶
Retorna el máximo
int
<= self
. Este método puede accederse también a través de la funciónmath.floor()
:>>> from math import floor >>> floor(Fraction(355, 113)) 3
- __ceil__()¶
Retorna el mínimo
int
>= self
. Este método puede accederse también a través de la funciónmath.ceil()
.
- __round__()¶
- __round__(ndigits)
La primera versión retorna el valor
int
mas cercano aself
redondeando mitades al valor par. La segunda versión redondeaself
al múltiplo mas cercano deFraction(1, 10**ndigits)
(lógicamente, sindigits
es negativo), nuevamente redondeando mitades al valor par. Este método también puede accederse a través de la funciónround()
.
- __format__(format_spec, /)¶
Provee apoyo para el formato de estilo flotante de instancias
Fraction
a través del métodostr.format()
, la función incorporadaformat()
, o Formatted string literals. Los tipos de presentación"e"
,"E"
,"f"
,"F"
,"g"
,"G"
and"%"
son compatibles. Para estos tipos de presentación, el formato para unaFraction
objectx
sigue las reglas descritas para elfloat
tipo en la Especificación de formato Mini-Lenguaje sección.Aquí hay unos ejemplos:
>>> from fractions import Fraction >>> format(Fraction(1, 7), '.40g') '0.1428571428571428571428571428571428571429' >>> format(Fraction('1234567.855'), '_.2f') '1_234_567.86' >>> f"{Fraction(355, 113):*>20.6e}" '********3.141593e+00' >>> old_price, new_price = 499, 672 >>> "{:.2%} price increase".format(Fraction(new_price, old_price) - 1) '34.67% price increase'
Ver también
- Módulo
numbers
Las clases base abstractas que representan la jerarquía de números.