Python函数max_and_min实现错误排查:元素级求和逻辑异常
问题排查:max_and_min函数实现错误
需求说明
编写函数max_and_min(t1, t2),接收两个等长元组,计算元素级求和(element-wise sums),返回包含所有求和结果的最大值与最小值的元组。
错误信息
Traceback (most recent call last): File "/home/codio/workspace/.guides/secure/test_max_and_min.py", line 8, in test_basic self.assertEqual(max_and_min((2, 3), (9, 1)), (11, 4)) AssertionError: Tuples differ: (12, 3) != (11, 4) First differing element 0: 12 11 - (12, 3) + (11, 4)
你的实现代码
def max_and_min(t1, t2): t3 =[] res =[] t = () l1=list(t1) l2=list(t2) for i in range (len(l1)): for j in range(len(l2)): t3.append(l1[i]+l2[j]) res.append(max(t3)) res.append(min(t3)) t=tuple(res) return t
错误原因
你用了双层循环,把两个元组的所有元素两两交叉相加了。以测试用例(2, 3)和(9, 1)为例,你的代码计算的是2+9、2+1、3+9、3+1,得到的求和列表是[11, 3, 12, 4],所以最大值是12,最小值是3,这和需求要求的**元素级求和(对应位置元素相加)**完全不符。
元素级求和要求的是:第一个元组的第n个元素 + 第二个元组的第n个元素,即测试用例中应该计算2+9=11、3+1=4,求和列表为[11,4],最终返回(11,4)。
修正后的代码
简洁版(用zip遍历对应元素)
def max_and_min(t1, t2): # 遍历两个元组的对应元素,计算元素级求和 element_sums = [a + b for a, b in zip(t1, t2)] # 返回最大值和最小值组成的元组 return (max(element_sums), min(element_sums))
索引遍历版(适合理解基础逻辑)
def max_and_min(t1, t2): element_sums = [] # 遍历索引,取对应位置的元素相加 for i in range(len(t1)): element_sums.append(t1[i] + t2[i]) return (max(element_sums), min(element_sums))
验证结果
用测试用例max_and_min((2, 3), (9, 1))测试,修正后的代码会计算得到求和列表[11,4],返回元组(11,4),与测试预期一致。
内容的提问来源于stack exchange,提问作者Won Lim
相关产品推荐
相关产品推荐

