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
dataconforme 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
DrugAnalyzerdeve 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_idempill_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 entre95e105. -
o
allowed_impé a taxa permitida de substâncias impuras nopill_weight. Por exemplo, para1000 mgpill_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