在python中为线性方程创建一个类

时间:2016-03-16 17:27:17

标签: python class math

我无法解决这个问题。我的目标是创建一个包含以下内容的类:

  • 数据字段a,b,c,d,e,f with get methods
  • 具有a,b,c,d,e,f
  • 参数的构造函数
  • 六个获取a,b,c,d,e,f
  • 的方法
  • 一个名为isSolvable()的方法,如果ad-bc为no 0则返回true
  • 方法getX()和getY()返回等式的解。

    class LinearEquation:

求解2x2系统的线性方程式。

def __init__(self, a, b, c, d, e, f)
            self.__a = a
            self.__b = b
            self.__c = c
            self.__d = d
            self.__e = e
            self.__f = f

    def getA(self):
        return self.__a

    def getB(self):
        return self.__b

    def getC(self):
        return self.__c

    def getD(self):
        return self.__d

    def getE(self):
        return self.__e

    def getF(self):
        return self.__f

    def isSolvable(self):
        if (a*d-b*c)!=0:
            return True

    def getX(self):
        x = (e*d-b*f)/ (a*d-b*c)
        return x

    def getY(self):
        y = (a*f-e*c) / (a*d-b*c)
        return y

这是我的测试方程式,但我对他们的工作没有好运。

from LinearEquation import LinearEquation

def main():
    a, b, c, d, e, f =eval(input("Enter a, b, c, d, e, f: "))
    denominator=(a*d-b*c)
    if denominator==0:
        print("The equation has no solution")
    else:
        print("X is",getX(),"and y is",getY())


main()

2 个答案:

答案 0 :(得分:0)

您应该与您的成员变量名称保持一致:如果您将其初始化为self.__a,则必须始终将其称为self.__a

在函数中进行测试时,所有分支都应返回一个值。在进行除法之前,您应该确保分母不为空。

如果你在程序中多次使用相同的表达式,那么不要重复自己的规则说你应该计算一次。

通过这些修复,代码变为:

class solver:
    def __init__(self, a, b, c, d, e, f):
            self.__a = a
            self.__b = b
            self.__c = c
            self.__d = d
            self.__e = e
            self.__f = f
            self.__det = self.__a*self.__d-self.__b*self.__c

    def getA(self):
        return self.__a

    def getB(self):
        return self.__b

    def getC(self):
        return self.__c

    def getD(self):
        return self.__d

    def getE(self):
        return self.__e

    def getF(self):
        return self.__f

    def isSolvable(self):
        return self.__det != 0


    def getX(self):
        if not self.isSolvable(): return None
        x = (self.__e*self.__d-self.__b*self.__f)/ self.__det
        return x

    def getY(self):
        if not self.isSolvable(): return None
        y = (self.__a*self.__f-self.__e*self.__c) / self.__det
        return y

答案 1 :(得分:0)

这是一个有效的解决方案。如果不能解决x和y返回null

printf

应该提一下,如果没有将行列式转换为浮动,则可能会出现非整数解的舍入错误