1. Disseny i ús de classes: classe Experiment (3 punts)¶
Per analitzar una determinada malaltia del cor s’estudia el comportament d’una cèl·lula a la que se li ha inoculat un fàrmac. En un experiment concret, es treballa amb 5 cèl·lules: a algunes d’elles se’ls inocula el fàrmac a una concentració (micromolar) i a la resta no se’ls inocula res (cèl·lules de control).
Implementeu al mòdul experiments (fitxer
experiments.py) la classe Experiment
que representa un experiment com el descrit.
L’especificació de la classe Experiment és la següent:
- class experiments.Experiment(farmac)¶
Construeix una instància de la classe amb el nom del fàrmac donat.
Atributs
- farmac¶
Nom del fàrmac inoculat (string)
Mètodes
- medicacio()¶
Retorna el nombre de concentracions aplicades (concentracions diferents de 0).
Operacions
Operació
Resultat
exp[i]Retorna la fracció (instància de la classe
Fraction) corresponent a la concentraciói-èssima de l’experimentexp. El valoriha de satisfer0 <= i < 5exp[i]=tEstableix que la concentració
i-èssima de l’experiment és la fracció (instància de la classeFraction) obtinguda a partir det, que és un tuple de 2 elements corresponents al numerador i denominador de la fracció. El valoriha de satisfer0 <= i < 5
Implementació
A més dels atributs públics, la classe Experiment ha de
tenir un atribut privat que representi les 5 concentracions del
fàrmac en cadascuna de les 5 cèl·lules de l’experiment. Aquest atribut
ha de ser una llista de 5 instàncies de la classe
Fraction. Inicialment les instàncies són la
fracció nul·la amb numerador = 0 i denominador = 1.
Implementeu primer els mètodes
__init__()i__getitem__(). El mètode__init__()ha d’inicialitzar l’atribut públic i l’atribut privat. El mètode__getitem__()ha de retornar la fracció indicada d’aquesta llista. Exemples:>>> e = Experiment ('Propanolol') >>> e.farmac 'Propanolol' >>> e[0] Fraction(0, 1) >>> e[1] Fraction(0, 1) >>> e[2] Fraction(0, 1) >>> e[3] Fraction(0, 1) >>> e[4] Fraction(0, 1)
Disposeu de jocs de proves al fitxer
test-experiments-init-get.txt.A continuació implementeu el mètode
__setitem__(). Cal tenir en compte que el paràmetre és un tuple però els elements de la llista de concentracions són fraccions (instàncies a la classeFraction). Exemples:>>> e = Experiment ('Propanolol') >>> lconc = [(10, 1), (1, 5), (1, 1), (3, 10), (6, 10)] >>> for i, c in enumerate(lconc): ... e[i] = c >>> e[1] Fraction(1, 5) >>> e[4] Fraction(3, 5)
Disposeu dels jocs de proves al fitxer
test-experiments-set.txt.Finalment, implementeu el mètode
medicacio()que ha de retornar un enter: el nombre de cèl·lules de l’experiment que no són de control, és a dir les que tenen una concentració diferent de la fracció nul·la. Exemples:
>>> e1 = Experiment ('Fenoterol')
>>> e1[1] = (4, 5)
>>> e1[3] = (6, 3)
>>> e1.medicacio()
2
Disposeu dels jocs de proves al fitxer test-experiments-medicacio.txt.