报错ValueError及Python导师匹配函数逻辑问题求助
问题分析与代码修正
关于 ValueError: Sample larger than population or is negative
你遇到的这个错误通常来自调用 random.sample() 这类函数时,请求的样本数量超过总体数量或为负数。但你提供的 mentors 函数代码里没有这类调用,该错误大概率来自你代码的其他部分。下面重点修正 mentors 函数的问题。
mentors 函数存在的问题
- 条件判断逻辑颠倒:需求是
10 ≤ X.subject - Y.subject ≤20(即X的分数减去Y的分数在10到20之间),但你的代码写成了X_mark -10 ≤ Y_mark ≤ X_mark -20,这会导致没有数值能满足条件(因为X_mark-10大于X_mark-20,下限高于上限)。正确条件应为X_mark -20 ≤ Y_mark ≤ X_mark -10,或直接判断10 <= x_mark - y_mark <=20。 - 未定义变量引用:代码中使用了
mentees_mapping但从未定义,实际你创建的字典是map,应检查X是否在map中。 - 循环范围限制过窄:内层循环只遍历从
i到末尾的学生,导致每个学生只能成为后续学生的导师,但需求未限制导师必须是列表中靠后的学生,应遍历所有学生。 - 变量名冲突:
map是Python内置函数,用作变量名会覆盖内置函数,建议改为更清晰的名称如mentors_map。 - 文档字符串参数不一致:文档字符串中第一个参数写的是
scores,但函数定义的参数是scores_dataset,需保持一致。
修正后的代码
def mentors(scores_dataset, subject): """ Get info about mentors Arguments: scores_dataset: list of dicts subject: string Return: result: dict key: integer (SeqNo) value: list of integers (SeqNo) """ mentors_map = {} n = len(scores_dataset) for i in range(n): mentor = scores_dataset[i] x_seq = mentor['SeqNo'] x_mark = mentor[subject] for j in range(n): mentee = scores_dataset[j] y_seq = mentee['SeqNo'] y_mark = mentee[subject] # 满足10 ≤ X分数 - Y分数 ≤20 if 10 <= x_mark - y_mark <= 20: if x_seq not in mentors_map: mentors_map[x_seq] = [y_seq] else: mentors_map[x_seq].append(y_seq) return mentors_map
内容的提问来源于stack exchange,提问作者Arindam
相关产品推荐
相关产品推荐

