Coral_1

  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.

  2. 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.