2016-02-12 3 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

Вам просто нужно немного реорганизовать свой код. Инициализируйте 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 модуль только, чтобы сделать квадратные корни: вы можете использовать оператор ** возведения в степень, которая более эффективно, чем вызов функции ,

q_sqrt = q ** 0.5 
1

Ваша проблема заключается в том, что вы пытаетесь добавить отдельные компоненты в списке результатов, и что вы печатаете его на каждой итерации цикла. РезультатList должен быть вне вашего цикла, а 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 ('-----') 
Смежные вопросы