导言是:
你是一个生物技术编程小组的成员,该小组负责为实验室技术人员创建一个系统,该系统将协助他们进行药物分析。您的目标是创建一个应用程序,让他们将发现输入到系统中,提供有意义的分析,并验证他们发送的数据的正确性。任务:本部分的目标是实现
app.drug_analyzer.DrugAnalyzer类。它将负责分析如下数据:+-----------+-------------+------------------+-------------+,pill_id,pill_weight,pill_weight,active_substance,active_substance,杂质+类的初始化可以从Python(或nothing)列表中完成,并存储在实例变量data中,如下所示:>>> my_drug_data =[....,.] >>> my_analyzer = DrugAnalyzer(my_drug_data) >>> my_analyzer.data [,,>,] >>> DrugAnalyzer().data []类还应该有一个选项将单个列表添加到对象中。向DrugAnalyzer对象添加一个列表应该会返回这个对象的一个新实例,其中包含一个额外的元素。添加不正确的类型或长度不正确的列表应该会引发ValueError。一个正确和错误的加法输出示例如下所示:>>> my_new_analyzer = my_analyzer + >>> my_new_analyzer.data [,,>,] >>> my_new_analyzer = my_analyzer + Traceback (最近的调用显示为最后一个):文件"",第1行,在 ValueError:添加列表的不正确长度中。第2部分在verify_series类中实现app.drug_analyzer.DrugAnalyzer方法。该方法的目标是接收参数列表,并使用它们来验证实例变量数据中描述的药丸是否符合给定的标准。因此,它应该返回一个布尔值。函数的调用方式如下: verify_series(series_id = 'L01',act_subst_wgt = 100,act_subst_rate = 0.05,allowed_imp = 0.001),其中:
series_id是一个3个字符长的字符串,出现在每个pill_id的开头,在符号之前;例如,L01是pill_id = L01-12中的series_id。act_subst_wgt是一个药丸中给定系列中活性物质含量的预期重量(mg)。act_subst_rate是活性物质重量与预期重量的允许差值。例如,对于100毫克,接受的数值将在95至105之间。allowed_imp是pill_weight中允许的不纯物质的比率。例如,对于1000毫克pill_weight和0.001倍率,允许的杂质量是1毫克。这个函数应该取所有属于L01系列的药丸,把它们的重量相加,并计算出active_substance的数量以及杂质是否与给定的速率相匹配。如果满足这两种条件,它应该返回True,如果没有满足条件,则返回False。False结果表明,所有通过的参数都是适当的,但活性物质的数量或杂质的数量都不适当。如果数据中根本不存在series_id,或者参数不正确,则函数应该抛出一个ValueError。请想一想在这种情况下可能出现的边缘情况是什么。示例:>>> my_drug_data =[.,.] >>> 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)假>>> /总active_substances重量为198.88,在给定速率范围内为2 mg (2 * act_subst_wgt)。>>> //但杂质之和为3.00187,大于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.0001,allowed_imp = 0.0001) True >>> my_analyzer.verify_series(series_id = ' B03 ',act_subst_wgt = 100,act_subst_rate = 0.05,allowed_imp = 0.001)追溯(最近的调用显示为最后一个):文件"",第1行,在 ValueError: B03系列中不在数据集中。
my代码通过了所有的测试
在我第一次失败后,我试图使代码尽可能紧凑和轻巧,使用列表理解和消除不必要的变量,尽管它只给我的分数增加了5%。有人能告诉我我的代码出了什么问题吗?我怎样才能写出更好的代码?
(得分: 58%)
class DrugAnalyzer:
def __init__(self, data):
self.data = data
def __add__(self, data):
if len(data) == 4:
if all(isinstance(i, float) for i in data[1:]) and isinstance(data[0], str):
self.data = self.data + [data]
return self
else:
raise ValueError('Improper type on list added')
else:
raise ValueError('improper length on list added')
def verify_series(
self,
series_id: str,
act_subst_wgt: float,
act_subst_rate: float,
allowed_imp: float,
) -> bool:
pills = [pill for pill in self.data if series_id in pill[0]]
if pills:
return act_subst_wgt*len(pills)-(act_subst_wgt * len(pills) * act_subst_rate) < sum([i[2] for i in pills]) < act_subst_wgt*len(pills)+(act_subst_wgt * len(pills) * act_subst_rate) and sum([i[3] for i in pills]) < allowed_imp*sum([i[1] for i in pills])
else:
raise ValueError(f'There is no {series_id} series in database')(得分: 55%)
class DrugAnalyzer():
def __init__(self,data):
self.data = data
def __add__(self,data1):
if len(data1) < 4:
raise ValueError('improper lenght of list added')
if type(data1[0]) == str:
if type(data1[1]) and type(data1[2]) and type(data1[3]) == float:
self.data = self.data + [data1]
return self
else:
raise ValueError('Improper type on list added')
else: raise ValueError('Improper type on list added')
def verify_series(
self,
series_id: str,
act_subst_wgt: float,
act_subst_rate: float,
allowed_imp: float,
) -> bool:
serie = []
for pill in self.data:
if series_id in pill[0]:
serie.append(pill)
active = []
imp = []
weight = []
print(serie)
for pill in serie:
weight.append(pill[1])
active.append(pill[2])
imp.append(pill[3])
if serie == 0:
raise ValueError('the serie isnt in list')
dif = (act_subst_wgt*len(serie))*act_subst_rate
if act_subst_wgt*len(serie)-dif < sum(active) < act_subst_wgt*len(serie)+dif and sum(imp) < allowed_imp*sum(weight):
return True
else:
return False发布于 2021-07-31 05:16:55
我不知道代码是如何得分的,但是平坦比嵌套要好。如果您想要引发异常,请尽早进行。考虑一下
def __add__(self, data):
if len(data) != 4:
raise ValueError('improper length on list added')
if not all(isinstance(i, float) for i in data[1:]) or not isinstance(data[0], str):
raise ValueError('Improper type on list added')
self.data = self.data + [data]
return self我也不清楚为什么你坚持data[1:]是float。只要定义了Fraction和<,+和D5就会正常工作,就像许多其他类型一样。
series_id是一个3个字符长的字符串,出现在每个pill_id的开头,在-符号之前。
我看不出这个需求是如何实现的。
act_subst_wgt*len(pills)-(act_subst_wgt * len(pills) * act_subst_rate) < sum([i[2] for i in pills]) < act_subst_wgt*len(pills)+(act_subst_wgt * len(pills) * act_subst_rate) and sum([i[3] for i in pills]) < allowed_imp*sum([i[1] for i in pills])是完全不可读的。
https://codereview.stackexchange.com/questions/265563
复制相似问题