Em primeiro lugar, definimos a função que calcula o mdc entre dois inteiros, possibilitando a posterior simplificação das frações resultantes da soma e da subtração.
O passo seguinte é definir a função soma.
A função subtração aproveita a função soma, invertendo o sinal da segunda fração.
def mdc(a, b):
return a if b == 0 else mdc(b, a % b)
def soma(f1, f2):
_mdc = mdc(f1[1], f2[1])
return (f1[0] * f2[1] + f2[0] * f1[1]) // _mdc, f1[1] * f2[1] // _mdc
def subtracao(f1, f2):
return soma(f1, (-f2[0], f2[1]))
x = (1, 2)
w = (-1, 21)
z = (4, 7)
print(soma(x, z))
print(subtracao(x, z))
print(soma(w, z))
print(subtracao(w, z))
Observações:
- Foi assumido que as funções sempre são duplas de inteiros. Para uma solução mais cuidadosa, é indicado usar assert para garantir a adequação dos parâmetros.
- Em Python, há vantagem ao usar dupla para representar as frações em vez de usar lista: As tuplas são objetos imutáveis.