Este módulo provee soporte para fracciones a nivel estándar. Se incluye desde la versión 2.6, y actualmente presenta total compatibilidad y similitud con Python 3.
Se constituye una fracción creando una instancia de la clase fractions.Fraction
, la única en el módulo. Se trata de un componente pequeño y fácil de utilizar. La clase permite varios métodos de construcción. Uno de los más confiables es a partir de una cadena, de la siguiente manera:
a = Fraction("3/5") # Tres quintos b = Fraction("-4/7") # Cuatro séptimos (negativo) c = Fraction("8") # Ocho enteros. Se omite el denominador, uno por defecto.
Por lo tanto, la sintaxis es [signo] numerador [/ denominador]
, siendo los elementos entre corchetes opcionales. En caso de pasar un parámetro incorrecto, las excepciones ValueError
y ZeroDivisionError
(si el denominador es 0
) son lanzadas. Por ejemplo, el siguiente código solicita una fracción y luego la imprime.
#!/usr/bin/env python # -*- coding: utf-8 -*- from fractions import Fraction # Compatibilidad entre versiones try: input = raw_input except NameError: pass while True: input_value = input("Ingrese una fracción (-3/5, por ejemplo): ") try: fraction = Fraction(input_value) except ValueError: print("¡Eso no es una fracción!") except ZeroDivisionError: print("El denominador no puede ser 0.") else: break print(fraction)
Nótese que las fracciones ingresadas son llevadas a su mínima expresión automáticamente. Por ejemplo, 30/50
es llevada a 3/5
(tres quintos); 60/10
es llevada a 6
(seis enteros). El código es compatible con ambas versiones.
Además, la clase permite construir las fracciones pasando numerador y denominador como números individuales:
a = Fraction(7, 6) # Siete sextos = 7/6
Puedes comprobar la eficacia de este método realizando:
>>> a = Fraction(7, 6) >>> print(a) 7/6 >>> str(a) '7/6'
Y por último puede construirse a partir de un número de coma flotante o decimal; el algoritmo de conversión se realiza automáticamente. Por ejemplo:
>>> a = Fraction(11.5) >>> print(a) 23/2
Si tu pregunta es por qué la fracción resultante es 23/2
, la respueta es que 11,5
se expresa como la fracción 115/10
y a su vez ésta se reduce a su mínima expresión (numerador y denominador se dividen por 5).
Si has intentado otro número y el resultado se ve algo extraño, se debe a los errores y limitaciones de los números de coma flotante explicados en este artículo (en inglés). Es por esto que recomiendo usar los métodos anteriores. Algunos ejemplos:
>>> Fraction(0.3) Fraction(5404319552844595, 18014398509481984) >>> Fraction(5.6) Fraction(3152519739159347, 562949953421312) >>> Fraction(1.2) Fraction(5404319552844595, 4503599627370496)
Tanto numerador como denominador pueden ser accedidos desde la misma instancia:
>>> a = Fraction(2, 7) >>> a.numerator 2 >>> a.denominator 7
Ahora puedes realizar operaciones aritméticas normalmente:
>>> a = Fraction(3, 5) >>> b = Fraction(1, 2) >>> a + b Fraction(11, 10) >>> a / b Fraction(6, 5) >>> a * b Fraction(6, 5) >>> a - b Fraction(1, 10)
Finalmente, el módulo añade la función gcd
(greatest common divisor, divisor común mayor o factor común) que retorna justamente lo que indica su nombre. Por ejemplo:
>>> from fractions import gcd # A partir de Python 3.5: from math import gcd >>> gcd(5, 10) 5 >>> gcd(17, 100) 1 >>> gcd(16, 100) 4
Versión
Python 2, Python 3
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter
en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.
Liz says:
¿Cómo introduzco una fracción en un vector?
Recursos Python says:
Hola, ¿a qué le llamas vector?
ndres says:
HOla, coloco en python Fraction (2,3) y me dice que Fraction no esta definido que hago ??a
Recursos Python says:
Hola, primero tenés que importar la clase.
from fractions import Fraction
Un saludo.