Coral_1¶
Una coral té emmagatzemada la informació dels seus cantaires en una llista de tuples. A cada tuple hi ha tres elements: el nom (string), el tipus de veu (string: “soprano”, “contralt”, “tenor” o “baix”) i un indicatiu (booleà) de si el cantaire pot actuar com a solista (True) o no (False). Al mòdul
coral.py, dissenyeu la funció dicc_solistes que, a partir d’una llista d’aquestes característiques, calculi i retorni un diccionari les claus del qual siguin el tipus de veu i els valors una llista amb dos elements: el nombre de cantaires que tenen aquell tipus de veu i el nombre de cantaires amb aquell tipus de veu que poden actuar com a solistes. El diccionari haurà d’incloure sempre els quatre tipus de veu tot i que algun no aparegui a la llista. Per exemple:>>> lcant = [('Josefina', 'contralt', True), ('Pepet', 'baix', False), ... ('Josep', 'tenor', True), ('Fina', 'soprano', True), ... ('Pepeta', 'soprano', True), ('Josemari', 'tenor', True), ... ('Mariajo', 'soprano', False), ('Fineta', 'soprano', True), ... ('Xema', 'baix', True), ('Mariajosep', 'contralt', True), ... ('Pep', 'tenor', True)] >>> d = dicc_solistes(lcant) >>> d == {'baix': [2, 1], 'soprano': [4, 3], 'tenor': [3, 3], 'contralt': [2, 2]} True
Nota
Podeu descarregar el fitxer amb tests
test_solistes.txt.Aquesta coral disposa d’un diccionari per cada obra a representar amb la mateixa estructura que el descrit a l’apartat anterior. En aquest cas, els dos enters a les llistes de cada element del diccionari indiquen, respectivament, el nombre mínim de cantaires i solistes de cada corda necessaris per aquella obra.
Dissenya la funció representable que rebi com a paràmetres un diccionari de les característiques de l’obtingut a l’apartat anterior i un altre diccionari corresponent a una obra i retorni True si la coral pot representar l’obra i False en cas contrari. Per exemple,
>>> dcant = {'baix': [7, 1], 'soprano': [15, 3], 'tenor': [9, 0], 'contralt': [10, 2]} >>> ave_verum = {'baix': [2, 0], 'soprano': [4, 0], 'tenor': [3, 0], 'contralt': [2, 0]} >>> representable(dcant, ave_verum) True >>> cant_senyera = {'baix': [7, 0], 'soprano': [10, 0], 'tenor': [10, 0], 'contralt': [10, 0]} >>> representable(dcant, cant_senyera) False >>> stabat_mater = {'baix': [6, 1], 'soprano': [10, 1], 'tenor': [6, 1], 'contralt': [8, 1]} >>> representable(dcant, stabat_mater) False
Nota
Podeu descarregar el fitxer amb tests
test_representable.txt.
Solució
Disposeu d’una solució al fitxer coral.py.