python 3, квадратичная c функция - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно написать функцию python, которая может решить любое квадратное c уравнение в форме: ax2 + bx + c = 0, также обработать особый случай, когда некоторые из коэффициентов равны нулю, у меня есть написать функцию с 3 необязательными аргументами ключевого слова, со значением по умолчанию 0. Таким образом, можно использовать эту функцию с любым порядком коэффициентов, при условии, что член quadrati c равен a, линейный равен b и постоянный это c. Кроме того, можно не указывать коэффициенты, если они равны 0. И мне нужно возвращать список на основе следующих условий: Из этих коэффициентов рассчитать каждое реальное решение и вернуть их в виде списка, не длиннее 2. Вернуть None, если все коэффициенты равны нулю, потому что в этом случае у вас будет бесконечное количество решений. Если решения нет или есть только сложные, вернуть пустой список. Если существует реальное root с кратностью 2, верните один длинный список. Однако проблема в том, что я не знал, как установить значения словаря по умолчанию, когда я получаю пустой словарь в качестве входных данных. Заранее благодарю за помощь!

Это мой код

import math
def quadratic_solve(**dictr):
    List=[]
    x1=dictr['a']
    x2=dictr['b']
    x3=dictr['c']
    delta=x1*x1-4*x2*x3
    if (x1==0 and x2==0 and x3==0):
        return None
    if (x1==0):
        List.append(-x3/x2)
        return List
    if(dictr['b']*dictr['b']-4*dictr['a']*dictr['c']<0) :
        return List
    if(x2*x2-4*x1*x3>0) :
        List.append((-x2+math.sqrt(delta))/2*x1)
        List.append((-x2-math.sqrt(delta))/2*x1)
        return List

1 Ответ

1 голос
/ 10 апреля 2020

Вы могли бы лучше использовать функцию Python, чтобы уменьшить объем кода (т. Е. Сосредоточиться на основных условиях):

def quadratic_solve(params):
    a,b,c = [params.get(p,0) for p in "abc"]   # get this out of the way early
    if a==0: return [] if b==0 else [-c/b]     # linear equation
    b2_4ac = b*b-4*a*c                         # part under the square root
    if b2_4ac < 0: return []                   # complex result 
    p,n = (-b+b2_4ac**0.5)/2/a, (-b-b2_4ac**0.5)/2/a # + or - square root results
    return [p] if p==n else [p,n]              # one or two solutions


quadratic_solve({'a':2,'b':3}) # [0.0, -1.5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...