Les classes Sala i Teatre

La classe Seient

La classe Seient representa el seient d’una sala

class seient.Seient(lliure=True, tipus='PALADRETA')

Atributs:

lliure

Booleà que indica l’estat del seient: lliure (True) o no (False).

tipus

String que indica el tipus de seient. Pot ser: 'PALADRETA', 'PALAESQUERRA' o 'SENSEPALA', en funció de si té pala i a quin costat la té.

Mètodes:

tePala()

Retorna un booleà indicant si el seient té pala (True) o no (False).

tePalaDreta()

Retorna un booleà indicant si el seient té pala dreta (True) o no (False).

estaLliure()

Retorna un booleà indicant si el seient està lliure (True) o no (False).

ocupa()

Canvia l’estat del seient a ocupat.

allibera()

Canvia l’estat del seient a lliure.

treuPala()

Canvia l’atribut tipus a 'SENSEPALA'

posaPala(pala)

Canvia l’atribut tipus a pala, que pot ser 'PALADRETA' o 'PALAESQUERRA'

La classe Seient també suporta la funció str que retorna un string que representa un seient que pot ser dels 6 tipus següents: 'PD-L', 'PE-L', 'SP-L', 'PD-O', 'PE-O', 'SP-O', on 'PD', 'PE' i 'PD' signifiquen pala dreta, esquerra i sense pala respectivament i 'L' significa seient lliure i 'O' ocupat.

Dissenyeu aquesta classe i guardeu-la al fitxer seient.py

Disposeu de jocs de proves al fitxer test-seients.txt.

La funció tipologia_seients

Al mateix fitxer seient.py, dissenyeu la funció tipologia_seients() que, donada una llista de seients, retorna tres enters indicant, respectivament, el nombre de seients amb pala dreta, amb pala esquerra i sense pala de la llista.

Disposeu de tests al fitxer test-tipus.txt

Avís

Aneu amb compte al desar aquesta funció al fitxer seient.py, perquè és una funció del mòdul seient, però no és un mètode de la classe Seient. Cal definir-la a nivell del mòdul i no dins del bloc de la classe.

La classe Sala

Dissenyeu la classe Sala que representa una sala amb un nombre de files i un nombre de seients a cada fila (instàncies de la classe Seient), que serà sempre el mateix. Tant la numeració de les files com de les columnes comença per 1. La primera fila és la més propera a l’escenari i el seient de més a l’esquerra és el primer seient de cada fila. Deseu aquesta classe al fitxer sala.py. L’especificació d’aquesta classe és la següent:

class sala.Sala(nfiles=10, nseients=10)

Atributs públics:

nfiles

Nombre de files

nseients

Nombre de seients per cada fila (el mateix per totes)

Aquesta classe ha de suportar les operacions següents:

Operació

Resultat

s[pos]

Retorna la instància de la classe Seient que ocup la posició pos de la sala s

s[pos] = c

Posa una instància de la classe Seient, c, a la posició pos de la sala s

La posició pos ha de ser una tupla (fila, seient) indicant el número de la fila i del seient dins la fila.

La classe Sala també suporta la funció str que retorna un string que representa la sala amb el format següent: cada seient es representa pel seu string corresponent i, a més, cada seient està separat del seient contigu per un espai en blanc (” “) i entre cada parell de files consecutives hi ha un salt de línia (”\n”).

Cal guardar la classe Sala en el fitxer sala.py. Per dissenyar la classe Sala cal tenir en compte el següent:

  1. A part dels atributs públics, en cal un de privat, per guardar la informació de tots els seients de la sala. Aquest atribut pot ser una llista imbricada on cada subllista representa una fila.

  2. Inicialment, a la sala totes les cadires estaran lliures i seran amb la pala a la dreta

  3. Tingueu en compte que la posició de la fila i seient comença per 1 i en canvi la indexació en les llistes comença per 0.

  4. Per a què la funció str proporcioni la funcionalitat desitjada, haureu de dissenyar el mètode __str__. Observeu que aquest mètode ha estat implementat també en la classe Seient i que, per tant, podeu utilitzar la funció str per representar un seient.

Disposeu de jocs de proves al fitxer test-sala.txt.

Les funcions ocupa_seients i esquerrans

  1. Al mòdul sala.py, dissenyeu la funció ocupa_seients() que, donada una sala i una llista de posicions, modifica la sala de forma que aquestes posicions estiguin ocupades. Les posicions venen donades com tuples de la forma (fila, seient).

    Disposeu de tests al fitxer test-ocupa.txt

  2. Al mòdul sala.py, dissenyeu la funció esquerrans() que, donats dos enters, nf i nc, retorna una sala amb nf files i nc seients a cada fila i on les cadires de més a l’esquerra de cada fila tinguin pala esquerra i la resta tinguin pala dreta. Les cadires han d’estar totes lliures.

    Disposeu de tests al fitxer test-esquerrans.txt

Avís

Aneu amb compte al desar aquestes dues funcions al fitxer sala.py, perquè són funcions del mòdul sala, però no mètodes de la classe Sala. Cal definir-les a nivell del mòdul i no dins del bloc de la classe.

Avís

Heu d’implementar aquestes funcions usant exclusivament les operacions de consulta (p[g]) i l’assignació (p[g] = c). No heu d’usar atributs privats. També cal usar els mètodes de la classe Seient.

La classe Teatre

Dissenyeu la classe Teatre que deriva de la classe Sala i que com a particularitat té tots els seients sense pala. Deseu aquesta classe en el fitxer teatre.py.

class teatre.Teatre(nfiles=10, nseients=10)

Atributs públics i mètodes: els mateixos que la classe base

Per dissenyar aquesta classe només cal dissenyar el seu mètode __init__.

Disposeu de tests al fitxer test-teatre.txt.

Solucions

Disposeu de solucions als fitxers seient.py, sala.py i teatre.py.