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) | Restituisce (10, 1) |
fractions.Fraction(11, 10) | Restituisce (11, 10) |
fractions.Fraction(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 + f2 | Fraction | Addizione |
f1 - f2 | Fraction | Sottrazione |
f1 * f2 | Fraction | Moltiplicazione |
f1 / f2 | Fraction | Divisione |
f1 ** n | Fraction | Potenza n-esima |
f1 < f2 | bool | … |
f1 <= f2 | bool | … |
f1 > f2 | bool | … |
f1 >= f2 | bool | … |
f1 == f2 | bool | … |
f1 != f2 | bool | … |
Funzioni / metodi / proprietà
Tipo | ? | |
---|---|---|
abs(f) | Fraction | Restituisce la frazione senza segno |
f.as_integer_ratio() | tuple | Restituisce una coppia di interi il cui rapporto è uguale a f |
f.denominator | int | Restituisce il denominatore di f |
f.limit_denominator() | Fraction | Restituisce la frazione più vicina a f. Con il denominatore non maggiore di n. |
max(f1, f2, ...) | Fraction | … |
min(f1, f2, ...) | Fraction | … |
f.numerator | int | Restituisce il numeratore di f |
pow(f, n) | Fraction | Restituisce la potenza n-esima di f |
round(f, n) | Fraction | Restituisce la frazione più vicina a f con a denominatore 10**n (?) |
sum(z) | Fraction | Restituisce 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))