python 3,二次函数

python 3,二次函数,python,dictionary,default,Python,Dictionary,Default,我必须编写一个python函数,它可以求解任何形式的二次方程:ax2+bx+c=0,还可以处理某些系数为零的特殊情况,我必须编写一个带有3个可选关键字参数的函数,默认值为0。这样,只要二次项是a,线性项是b,常数是c,就可以将此函数用于任意阶系数。此外,如果系数为0,则可以省略系数。 我必须根据以下条件返回一个列表:根据这些系数,计算每个实解,并将它们作为列表返回,长度不超过2。 如果所有系数都为零,则返回None,因为在这种情况下,将有无穷多个解。 如果没有解决方案或只有复杂的解决方案,则返回

我必须编写一个python函数,它可以求解任何形式的二次方程:ax2+bx+c=0,还可以处理某些系数为零的特殊情况,我必须编写一个带有3个可选关键字参数的函数,默认值为0。这样,只要二次项是a,线性项是b,常数是c,就可以将此函数用于任意阶系数。此外,如果系数为0,则可以省略系数。 我必须根据以下条件返回一个列表:根据这些系数,计算每个实解,并将它们作为列表返回,长度不超过2。 如果所有系数都为零,则返回None,因为在这种情况下,将有无穷多个解。 如果没有解决方案或只有复杂的解决方案,则返回空列表。 如果有一个重数为2的实根,则返回一个长1的列表。 然而问题是,当我得到一个空字典作为输入时,我不知道如何设置字典的默认值。提前感谢您的帮助

这是我的密码

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
导入数学
定义二次解算(**dictr):
列表=[]
x1=dictr['a']
x2=dictr['b']
x3=dictr['c']
δ=x1*x1-4*x2*x3
如果(x1==0,x2==0,x3==0):
一无所获
如果(x1==0):
列表。追加(-x3/x2)
返回列表
如果(dictr['b']*dictr['b']-4*dictr['a']*dictr['c']0):
List.append((-x2+math.sqrt(delta))/2*x1)
List.append((-x2数学sqrt(delta))/2*x1)
返回列表

您可以更好地利用Python的功能来减少代码量(即关注基本条件):

def二次解算(参数):
a、 b,c=[abc中p的参数get(p,0)]#早点把这件事解决掉
如果a==0:如果b==0则返回[],否则返回[-c/b]#线性方程
b2_4ac=b*b-4*a*c#平方根下的部分
如果b2_4ac<0:返回[]#复杂结果
p、 n=(-b+b2_4ac**0.5)/2/a、(-b-b2_4ac**0.5)/2/a或-平方根结果
如果p==n,则返回[p],否则返回[p,n]#一个或两个解
二次解({'a':2,'b':3})#[0.0,-1.5]

是的,输入必须是字典,输出必须是列表,知道如何解决这个问题吗?我想问题是我不知道如何满足这个条件:我必须用3个可选关键字参数编写函数,默认值为0。这样,只要二次项是a,线性项是b,常数是c,就可以将此函数用于任意阶系数。此外,如果系数为0,则可以省略系数。这就是为什么当我输入输入{'c':-1,'b':1,'a':1}或{}时,我总是会遇到这样的错误:TypeError:quadratic_solve()得到了一个意外的关键字参数'c'或TypeError:quadratic_solve()缺少一个必需的位置参数:'dictr'。输入必须是一个字典,而不是一个INT…与带有默认值的参数完全相同。这只是Python中的标准参数解包,因此字典是一个不必要的复杂问题。对不起,我忘记更正一个错误,我应该编写dictr而不是**dictr(字典中有3个元素)。但是,我应该编写的函数是由系统自动测试的,它将字典作为输入传递,如{'c':-1,'b':1,'a':1}或{}。因此,我不能使用dictr['a'],dictr['b'],dictr['c']作为参数。我调整了示例,以便在函数中尽早解决参数结构问题。这样,代码的其余部分仍然清晰可见。
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]