Delegats de classe

Els alumnes d’una classe han escollit el/la seu delegat/da de classe. Les votacions s’han recollit en una llista on cada element és un vot. Es demana que dissenyeu les següents funcions, que haureu de desar al fitxer delegats.py:

delegats.vots_cand(lvots, lcand)

Donada la llista dels vots lvots i la llista dels noms del candidats possibles lcand (tots els alumnes de la classe), retorna un diccionari de freqüències, és a dir, un diccionari que tingui com a claus tots els candidats possibles i com a valors el nombre de vots que han obtingut. A més, el diccionari ha de tenir la clau “nuls” que tindrà com a valor tots els vots nuls, és a dir els vots que no corresponen a cap candidat. Per exemple:

>>> lvots = ['Anna', 'Enric', 'Roger', 'Roger', 'Anna', 'Enric', 
... 'Enric', 'Bart Simpson', 'Josep', 'Enric', 'Anna', 'Enric', 'Pol']
>>> lcand = ['Anna', 'Arnau', 'Enric', 'Josep', 'Roger', 'Pol','Zaira']
>>> vots_cand (lvots, lcand) ==  {'Anna': 3, 'Arnau':0, 'Enric': 5,
... 'Josep': 1, 'Pol': 1, 'Roger': 2, 'Zaira': 0, 'nuls': 1}
True

Nota

Podeu descarregar el fitxer amb tests test_vots_cand.txt.

delegats.quants_vots(dvots, nom)

Donat un diccionari com l’obtingut a la primera pregunta i un nom de candidat, retorni un tuple format per un booleà i un enter. Si el nom és al diccionari, el booleà serà True i l’enter serà el nombre de vots corresponent; en cas contrari, el booleà serà False i l’enter-1.

>>> d =  {'Anna': 3, 'Arnau':0, 'Enric': 5, 'Josep': 1,
... 'Pol': 1, 'Roger': 2, 'Zaira': 0, 'nuls': 1}
>>> quants_vots(d, 'Enric')
(True, 5)
>>> quants_vots(d, 'Pau')
(False, -1)

Nota

Podeu descarregar el fitxer amb tests test_quants_vots.txt.

delegats.percent_nuls(dvots)

Donat un diccionari de freqüències com el retornat per vots_cand, retorna el tant per cent de vots nuls respecte al vots totals. Suposeu que hi ha com a mínim un vot al diccionari. Per exemple,

>>> d =  {'Anna': 3, 'Arnau':0, 'Enric': 5, 'Josep': 1,
... 'Pol': 1, 'Roger': 2, 'Zaira': 0, 'nuls': 1}
>>> print("{:.2f}".format(percent_nuls(d)))
7.69

Nota

Podeu descarregar el fitxer amb tests test_percent_nuls.txt.

delegats.guanya(dvots)

Donat un diccionari de freqüències com el retornat per vots_cand, retorna una llista ordenada alfabèticament amb els candidats guanyadors, és a dir els que han obtingut el nombre màxim de vots (la llista té més d’un element si hi ha empat). Per exemple,

>>> d =  {'Anna': 3, 'Arnau':0, 'Enric': 5, 'Josep': 1,
...  'Pol': 1, 'Roger': 2, 'Zaira': 0, 'nuls': 1}
>>> guanya(d)
['Enric']
>>> d =  {'Anna': 3, 'Arnau':0, 'Enric': 5, 'Josep': 1, 'Pol': 1,
...  'Roger': 2, 'Zaira': 0, 'nuls': 1, 'Domenica': 5}
>>> guanya(d)
['Domenica', 'Enric']

Nota

Podeu descarregar el fitxer amb tests test_guanya.txt.

Solució

Disposeu d’una solució al fitxer delegats.py.