fractions

Consulta: https://docs.python.org/3.5/library/fractions.html

Alcuni problemi si prestano al calcolo simbolico con le frazioni (esatte…) piuttosto che con i numeri decimali (approssimati…): M.C.D., m.c.m., equazioni, sistemi, …

Il modulo fractions prevede la classe Fraction con la quale si può operare facilmente con le frazioni.
Molte delle funzioni predefinite rimangono funzionanti anche con le frazioni.

Anche il modulo di terze parti sympy prevede la classe Rational per operare con le frazioni.

Costruttori

fractions.Fraction()Restituisce (0, 1)
fractions.Fraction(10)
fractions.Fraction.from_decimal(10)
Restituisce (10, 1)
fractions.Fraction(11, 10)Restituisce (11, 10)
fractions.Fraction(1.1)
fractions.Fraction.from_float(1.1)
NON restituisce (11, 10): (2476979795053773, 2251799813685248)
fractions.Fraction('11/10')Restituisce (11, 10)
fractions.Fraction('1.1')Restituisce (11, 10)
fractions.Fraction('11/10')Restituisce (11, 10)
fractions.Fraction(f)Restituisce una copia della frazione f

Operatori

Tipo?
f1 + f2FractionAddizione
f1 - f2FractionSottrazione
f1 * f2FractionMoltiplicazione
f1 / f2FractionDivisione
f1 ** nFractionPotenza n-esima
f1 < f2bool
f1 <= f2bool
f1 > f2bool
f1 >= f2bool
f1 == f2bool
f1 != f2bool

Funzioni / metodi / proprietà

Tipo?
abs(f)FractionRestituisce la frazione senza segno
f.as_integer_ratio()tupleRestituisce una coppia di interi il cui rapporto è uguale a f
f.denominatorintRestituisce il denominatore di f
f.limit_denominator()
f.limit_denominator(n)
FractionRestituisce la frazione più vicina a f.
Con il  denominatore non maggiore di n.
max(f1, f2, ...)Fraction
min(f1, f2, ...) Fraction
f.numeratorintRestituisce il numeratore di f
pow(f, n)FractionRestituisce la potenza n-esima di f
round(f, n)FractionRestituisce la frazione più vicina a f con a denominatore 10**n (?)
sum(z)FractionRestituisce la somma di una sequenza di frazioni

Si possono applicare le funzioni di uso comune e ottenere float/int

  • float(f), int(f), pow(f1, f2), round(f), ...
  • math.ceil(f), math.floor(f), math.sqrt(f), ...
  • random.uniform(f1, f2), ...

Prova

import fractions
import math

n1=10; d1=12
n2=12; d2=10

a=fractions.Fraction(n1, d1) # costruttore
b=fractions.Fraction(n2, d2)

print('a =', a)
print('b =', b)
print()
print(a, '+' , b, '=', a+b ) # operatori matematici
print(a, '-' , b, '=', a-b )
print(a, '*' , b, '=', a*b )
print(a, '/' , b, '=', a/b )
print(a, '**', 2, '=', a**2)
print()
print(a, '<' , b, '=', a < b ) # operatori di confronto
print(a, '<=', b, '=', a <= b) 
print(a, '>' , b, '=', a < b ) 
print(a, '>=', b, '=', a >= b)
print(a, '==', b, '=', a == b)
print(a, '!=', b, '=', a != b)
print()
print('     abs('  , a        , ') =', abs(a)            ) # funzioni
print('math.ceil(' , a        , ') =', math.ceil(a)      )
print('     float(', a        , ') =', float(a)          )
print('math.floor(', a        , ') =', math.floor(a)     )
print('     int('  , a        , ') =', int(a)            )
print('     pow('  , a, ',', 2, ') =', pow(a,2)          )
print('     pow('  , a, ',', b, ') =', pow(a,b)          )
print('     round(', a        , ') =', round(a)          )
print('     round(', a, ',', 1, ') =', round(a,1)        )
print()
print('numerator   =', a.numerator  ) # metodi
print('denominator =', a.denominator)
print('fractions.Fraction.from_float(1.1) =', fractions.Fraction.from_float(1.1))
print('limit_denominator(2) =', a.limit_denominator(2))