2. Multiplicació de dues sèries (5 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 no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar els elements d’un iterador.
Tenim dues seqüències de nombres i volem calcular els productes de cadascun dels elements i-èssims de les dues seqüències. Per exemple, els productes de la seqüència 2, 3, 5 amb la seqüència 10, 20, 30 són els nombres 20, 60, 150.
Ara bé, resulta que les dues seqüències no tenen sempre la mateixa llargada; en aquest cas, els productes cal calcular-los per a tots els elements de la més curta però conservar els valors de la seqüència més llarga quan arribem al final de la més curta. Per exemple, els productes de la seqüència 2, 3, 5 amb la seqüència 10, 20, 30, 70, 20 són els nombres 20, 60, 150, 70, 20.
Es demana que, en un fitxer anomenat multseq.py, hi deseu la funció especificada a continuació:
- multseq.productes_seq(it1, it2)¶
- Paràmetres:
it1 – iterable sobre una seqüència de nombres enters.
it2 – iterable sobre una altra seqüència de nombres enters.
- Retorna:
un iterador sobre els productes dels elements de it1 amb els de it2, fins arribar al final de la seqüència més llarga, tal com s’ha descrit.
Per exemple:
>>> it = productes_seq([2, 3, 5], [10, 20, 30, 70, 20])
>>> for r in it:
... print(r, end=',')
20,60,150,70,20,
>>> next(it, 'final') # comprovació que l'iterador s'ha exhaurit
'final'
Disposeu d’un joc de proves més complet al fitxer tests-prods.txt
Nota
Per a resoldre aquest exercici us pot ser útil fer servir la itertools.zip_longest(), entre altres.