我是Python编程的新手,我正试图让我的二次方程求解器将x1和x2的答案“收集”到嵌套列表中。
它使用正确的结果解决方程式问题,并且我能够像我想要的那样得到结果,但是我无法在循环结束时将它们收集到相同的列表中。代码如下:
from math import sqrt
abcList = [[1, 2, 1], [9, 12, 4], [1, -7, 0], [1, -2, -3]]
for abc in abcList:
a, b, c = abc
q = b**2 - 4*a*c
if q > 0:
q_sqrt = sqrt(q)
x1 = (-b + q_sqrt)/(2*a)
x2 = (-b - q_sqrt)/(2*a)
elif q == 0:
x1 = -b/(2*a)
x2 = x1
else:
raise ValueError("q is negative.")
resultList = []
print ('x1 = ', x1)
resultList.append(x1)
print ('x2 = ', x2)
resultList.append(x2)
#print ('a = ', a, ', b = ', b, 'and c = ',c)
print (resultList)
print ('-----')
这是我得到的结果:
x1 = -1.0
x2 = -1.0
[-1.0, -1.0]
x1 = -0.6666666666666666
x2 = -0.6666666666666666
[-0.6666666666666666, -0.6666666666666666]
x1 = 7.0
x2 = 0.0
[7.0, 0.0]
x1 = 3.0
x2 = -1.0
[3.0, -1.0]
-----
这是我想要的结果:
x1 = -1.0
x2 = -1.0
x1 = -0.6666666666666666
x2 = -0.6666666666666666
x1 = 7.0
x2 = 0.0
x1 = 3.0
x2 = -1.0
[[-1.0, -1.0], [-0.6666666666666666, -0.6666666666666666], [7.0, 0.0], [3.0, -1.0]]
-----
答案 0 :(得分:2)
您只需稍微重新组织代码即可。在resultList
循环之外初始化for
,并将每对答案附加为2元素列表。
from math import sqrt
abcList = [[1, 2, 1], [9, 12, 4], [1, -7, 0], [1, -2, -3]]
resultList = []
for abc in abcList:
a, b, c = abc
q = b**2 - 4*a*c
if q > 0:
q_sqrt = sqrt(q)
x1 = (-b + q_sqrt)/(2*a)
x2 = (-b - q_sqrt)/(2*a)
elif q == 0:
x1 = -b/(2*a)
x2 = x1
else:
raise ValueError("q is negative.")
#print ('a = ', a, ', b = ', b, 'and c = ',c)
print ('x1 = ', x1)
print ('x2 = ', x2)
resultList.append([x1, x2])
print (resultList)
print ('-----')
<强>输出强>
x1 = -1.0
x2 = -1.0
x1 = -0.666666666667
x2 = -0.666666666667
x1 = 7.0
x2 = 0.0
x1 = 3.0
x2 = -1.0
[[-1.0, -1.0], [-0.66666666666666663, -0.66666666666666663], [7.0, 0.0], [3.0, -1.0]]
-----
顺便说一句,没有必要导入math
模块只是为了做平方根:你可以使用**
指数运算符,这比进行函数调用更有效。 / p>
q_sqrt = q ** 0.5
答案 1 :(得分:1)
您的问题是您正在尝试将单个组件附加到结果列表,并且您正在循环的每次迭代中将其打印出来。 resultList必须在循环之外,x1和x2必须作为一对附加到resultList。请参阅以下内容:
from math import sqrt
abcList = [[1, 2, 1], [9, 12, 4], [1, -7, 0], [1, -2, -3]]
resultList = []
for abc in abcList:
a, b, c = abc
q = b**2 - 4*a*c
if q > 0:
q_sqrt = sqrt(q)
x1 = (-b + q_sqrt)/(2*a)
x2 = (-b - q_sqrt)/(2*a)
elif q == 0:
x1 = -b/(2*a)
x2 = x1
else:
raise ValueError("q is negative.")
print ('x1 = ', x1)
print ('x2 = ', x2)
resultList.append( [x1, x2] )
#print ('a = ', a, ', b = ', b, 'and c = ',c)
print (resultList)
print ('-----')