2016-02-12 20 views
2

我对Python编程非常陌生,我试图让我的二次方程求解器将x1和x2的答案“收集”到嵌套列表中。Python:通过方程结果创建嵌套列表

它解决了正确的结果方程式,我能够得到我想要的结果,但我无法将它们收集到循环结尾的相同列表中。下面的代码:

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

减少行print(resultList)'与print('-----')'具有相同的缩进量。 (投票结束不太可能帮助其他人) –

+1

提出的问题。 – msw

回答

2

你只需要稍微重新组织你的代码。在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]] 
----- 

BTW,没有必要导入math模块只是做平方根:你可以使用**幂运算符,这是不是让一个函数调用更有效。

q_sqrt = q ** 0.5 
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 ('-----')