如何让自定义二次公式函数支持列表输入以批量求解二次方程
批量求解二次方程的函数修正方案
你的代码核心问题出在循环的迭代方式上:for x,y,z in a,b,c会依次把整个a列表、b列表、c列表作为迭代对象,而不是按位置取出每组对应的(a_i, b_i, c_i)。下面是修正后的实现:
a = [1,2,3,4] b = [2,4,6,8] c = [3,6,9,12] def quad_func(a, b, c): x1_values = [] x2_values = [] # 使用zip打包三个列表,按位置取出每组参数 for x, y, z in zip(a, b, c): discriminant = y**2 - 4*x*z # 计算两个根,Python会自动处理判别式为负的复数情况 x1 = (-y + discriminant**0.5) / (2*x) x2 = (-y - discriminant**0.5) / (2*x) x1_values.append(x1) x2_values.append(x2) return x1_values, x2_values # 调用测试 x1s, x2s = quad_func(a, b, c) print("x1结果:", x1s) print("x2结果:", x2s)
关键修正点:
- 用
zip(a, b, c)替代a,b,c:zip会把三个列表中同一位置的元素打包成元组,循环时每次取出一组对应的二次方程参数。 - 新增判别式变量:把
y**2 -4*x*z单独提取为discriminant,既提升代码可读性,也方便后续扩展判别式判断逻辑(比如区分实根/复根)。 - 自动处理复数解:当判别式为负时,Python的
**0.5会返回复数类型,无需额外处理即可得到复根。
内容的提问来源于stack exchange,提问作者Bryn Owen-Conway
相关产品推荐
相关产品推荐

