3. Congruents (4 punts)¶
Avís
Per a resoldre aquest exercici no es poden fer servir iteracions (ni for ni while ), només les funcions predefinides de Python i les dels mòduls itertools, functools i operator. Tampoc es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements dels iterables.
Definim que una fracció és congruent amb una altra si tenen el mateix denominador, i l’operació de mòdul entre numerador i denominador de cadascuna coincideix.
Es demana que al mòdul congruents (fitxer congruents.py) facis la funció generadora següent:
- congruents.congruent_nums(it, fra)¶
- Paràmetres:
it – iterador sobre una seqüència (potencialment infinita) d’instàncies de la classe
fractions.Fraction.fra – instància de la classe
fractions.Fraction.
- Retorna:
dos iteradors sobre les seqüències d’enters dels numeradors de les fraccions de
itque són congruents ambfra: el 1r amb els numeradors positius i el 2n amb els negatius. Ambdós segueixen el mateix ordre de l’iterador d’entradait.
Per exemple:
>>> l = [Fraction(1, 3), Fraction(3, 3), Fraction(4, 3), Fraction(2, 6)]
>>> l.extend([Fraction(14, 6), Fraction(5, 3), Fraction(-2, 3), Fraction(-22, 6)])
>>> it1, it2 = congruent_nums(iter(l), Fraction(1, 3))
>>> it1 == iter(it1) and list(it1) == [1, 4, 1, 7] and it2 == iter(it2) and list(it2) == [-2, -11]
True
Disposes d’un joc de proves més complet al fitxer congruent_nums-test.txt