2. Pagament de nòmines (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 no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements d’un iterador.

Es demana que implementeu la funció següent que calcula dos iteradors nous, cada un genera una seqüència de dades que contenen el nom del treballador i el sou ha de percebre pels treballadors que cobren menys d’una quantitat i els que cobren igual o més, i l’import total dels sous. Deseu-la al fitxer pagament.py:

pagament.pagament_nomines(it, preu_hora, q_llindar)
Paràmetres:
  • it – iterador que genera una seqüència de tuples. Cada tupla és un string (nom d’un treballador) i un enter (hores que ha treballat).

  • preu_hora – enter que correspon al preu que ha de cobrar cada treballador per hora treballada.

  • q_llindar – enter que correspon a partir del qual considerem que té un sou alt.

Retorna:

it1, it2 i total.

Tipus de retorn:

  • it1 iterador que genera una seqüència de tuples. Cada tupla és un string (nom d’un treballador) i un enter (sou que li correspon per hores que ha treballat). Es generaran les dades de treballadors amb sou menor que q_llindar.

  • it2 iterador que genera una seqüència de tuples. Cada tupla és un string (nom d’un treballador) i un enter (sou que li correspon per hores que ha treballat). Es generaran les dades de treballadors amb sou major o igual a q_llindar.

  • total enter que correspon a la suma de tots els sous que s’han de pagar.

Per exemple:


>>> from pagament import pagament_nomines

>>> it=iter([('pere', 40), ('pau', 36), ('mar', 70), ('josep', 50)])

>>> it1, it2, total= pagament_nomines(it, 20, 900)

>>> total
3920

>> list(it1)
[('pere', 800), ('pau', 720)]
>>> list(it2)
[('mar', 1400), ('josep', 1000)]

>>> it=iter([('pere', 40), ('pau', 36), ('mar', 70), ('josep', 50)])

>>> it1, it2, total= pagament_nomines(it, 10, 100)
>>> total
1960

>> next(it1, 'Acabada')
'Acabada'

>>> next(it2)
('pere', 400)
>>> next(it2)
('pau', 360)

Disposeu d’un joc de proves més complet en el fitxer tests-pagament.txt