实现筛选n1或n2倍数的函数触发AssertionError,求排查修正
问题排查与代码修正
问题分析
- 逻辑判断错误:需求是筛选n1或n2的倍数,但代码中误用了
and运算符,这只会保留同时是n1和n2公倍数的元素,完全不符合需求。 - 类型不匹配问题:当输入
nums是numpy数组时,遍历得到的元素是numpy.int64类型,直接存入列表后与普通整数列表比较会导致断言失败。
修正后的代码
def exercise_3(nums, n1, n2): multiples = [] for i in nums: # 替换and为or,满足"是n1或n2倍数"的条件 if i % n1 == 0 or i % n2 == 0: # 转换为原生int类型,避免numpy类型与普通int比较不相等的问题 multiples.append(int(i)) return multiples
验证结果
修正后重新运行测试用例:
- 调用
exercise_3(np.arange(20), 3, 4)会返回[3, 4, 6, 8, 9, 12, 15, 16, 18],与断言预期完全一致。 - 第二个测试用例
exercise_3(np.arange(300), 17, 27)的返回结果也将匹配给定的预期列表。
内容的提问来源于stack exchange,提问作者lncomp05
相关产品推荐
相关产品推荐

