Você é membro de uma equipe de programação de biotecnologia responsável por criar um sistema para técnicos de laboratório, que os auxiliará na análise de medicamentos.
Seu objetivo é criar o aplicativo que permitirá que eles insiram suas descobertas no sistema, forneçam uma análise significativa e verifiquem a exatidão dos dados que enviaram.
Para concluir esta tarefa, usePython 3
.
Seu objetivo nesta parte é implementar a classe app.drug_analyzer.DrugAnalyzer
. Será responsável por analisar dados como os dados apresentados abaixo:
+-----------+-------------+------------------+-------------+
| pill_id | pill_weight | active_substance | impurities |
+-----------+-------------|------------------|-------------|
| L01-10 | 1007.67 | 102.88 | 1.00100 |
| L01-06 | 996.42 | 99.68 | 2.00087 |
| G02-03 | 1111.95 | 125.04 | 3.00004 |
| G03-06 | 989.01 | 119.00 | 4.00062 |
+-----------+-------------+-------------+-------------+-----
- A inicialização da classe pode ser feita a partir da lista de listas do Python (ou nada) e armazenada na instância
variável chamada
data
conforme exemplo abaixo:
>>> my_drug_data = [
... ['L01-10', 1007.67, 102.88, 1.00100],
... ['L01-06', 996.42, 99.68, 2.00087],
... ['G02-03', 1111.95, 125.04, 3.00100],
... ['G03-06', 989.01, 119.00, 4.00004]
... ]
>>> my_analyzer = DrugAnalyzer(my_drug_data)
>>> my_analyzer.data
[['L01-10', 1007.67, 102.88, 1.001], ['L01-06', 996.42, 99.68, 2.00087], ['G02-03', 1111.95, 125.04, 3.001], ['G03-06', 989.01, 119.0, 4.00004]]
>>> DrugAnalyzer().data
[]
- A classe também deve ter a opção de adicionar listas únicas ao objeto. Adicionando uma lista ao objeto
DrugAnalyzer
deve retornar uma nova instância deste objeto com um elemento adicional. Adicionando tipo impróprio ou uma lista com length deve gerar umValueError
. Um exemplo de uma saída de adição correta e errada é mostrado abaixo:
>>> my_new_analyzer = my_analyzer + ['G03-01', 789.01, 129.00, 0.00008]
>>> my_new_analyzer.data
[['L01-10', 1007.67, 102.88, 1.001], ['L01-06', 996.42, 99.68, 2.00087], ['G02-03', 1111.95, 125.04, 3.001], ['G03-06', 989.01, 119.0, 4.00004], ['G03-01', 789.01, 129.0, 8e-05]]
>>> my_new_analyzer = my_analyzer + ['G03-01', 129.00, 0.00008]
Traceback (the most recent call is displayed as the last one):
File "<stdin>", line 1, in <module>
ValueError: Improper length of the added list.
Implemente o método verify_series
dentro da classe app.drug_analyzer.DrugAnalyzer
.
O objetivo deste método é receber uma lista de parâmetros e usá-los para verificar se as pílulas descritas dentro da instância variável data
corresponde aos critérios fornecidos. Deve retornar um valor Boolean
como resultado.
A função seria chamada da seguinte forma:
verify_series(series_id = 'L01', act_subst_wgt = 100, act_subst_rate = 0,05, allowed_imp = 0,001)
Where:
-
o
series_id
é uma string de 3 caracteres que está presente no início de cadapill_id
, antes do sinal-
, por exemplo,L01
é oseries_id
empill_id = L01-12
. -
o
act_subst_wgt
é o peso esperado (mg) do conteúdo da substância ativa na série fornecida em um comprimido. -
o
act_subst_rate
é a taxa permitida de diferença entre o peso da substância ativa e o esperado (act_subst_wgt
). Por exemplo, para100 mg
, os valores aceitos seriam entre95
e105
. -
o
allowed_imp
é a taxa permitida de substâncias impuras nopill_weight
. Por exemplo, para1000 mg
pill_weight e taxa de0,001
, a quantidade permitida de impurezas é de1 mg
.
A função deve tomar todos os comprimidos que fazem parte do L01
série, some seus pesos e calcule se o
quantidade de active_substance
, assim como impurities
, corresponder às taxas indicadas.
Deve retornar True
se ambas as condições forem atendidas
e False
se alguma delas não for atendida.
O False
resultado deve significar que todos os parâmetros passados são adequados, mas o active_substance
quantidade ou o impurities
quantia é impróprio.
No caso de umseries_id
que não está presente no data
ou no caso de qualquer parâmetro impróprio, a função deve lançar um ValueError
.
Example:
>>> my_drug_data = [
... ['L01-10', 1000.02, 102.88, 1.00100],
... ['L01-06', 999.90, 96.00, 2.00087],
... ['G02-03', 1000, 96.50, 3.00100],
... ['G03-06', 989.01, 119.00, 4.00004]
... ]
>>> my_analyzer = DrugAnalyzer(my_drug_data)
>>> my_analyzer.verify_series(series_id = 'L01', act_subst_wgt = 100, act_subst_rate = 0.05, allowed_imp = 0.001)
False
>>> // O peso total de active_substances seria 198,88, que está dentro da taxa de 0.05 for 200 mg (2 * act_subst_wgt).
>>> // No entanto, a soma de impurezas seria 3,00187, que é mais do que 0.001*1999.92 (allowed_imp_rate * (1000.02 + 999.90).
>>> my_analyzer.verify_series(series_id = 'L01', act_subst_wgt = 100, act_subst_rate = 0.05, allowed_imp = 0.01)
True
>>> my_analyzer.verify_series(series_id = 'B03', act_subst_wgt = 100, act_subst_rate = 0.05, allowed_imp = 0.001)
Traceback (the most recent call is displayed as the last one):
File "<stdin>", line 1, in <module>
ValueError: B03 series is not present within the dataset.
Para executar os testes de unidade, use:
python setup.py pytest