我试图学习Python中的类属性。我正在尝试求解2X2方程。从用户那里获得6个值之后,我尝试在该类中进行事务处理,但它给出了一个错误。你能帮我吗?
import numpy as np
class HomogenEquation():
def __init__(self,number):
self.number = number
self.value=0
def isSolvable(self,a,d,b,c):
return (a*d)-(b*c)==0
def getXY(self,a,b,c,d,e,f):
x = np.array([[a, b],[c,d]])
y = np.array([e, f])
print(np.linalg.solve(x,y))
a=int(input("a: "))
a_value= HomogenEquation(a)
b=int(input("b: "))
b_value= HomogenEquation(b)
e=int(input("e: "))
e_value= HomogenEquation(e)
c=int(input("c: "))
c_value= HomogenEquation(c)
d=int(input("d: "))
d_value= HomogenEquation(d)
f=int(input("f: "))
f_value= HomogenEquation(f)
if a.isSolvable(a,d,b,c):
getXY(a,b,c,d,e,f)
else:
print("The equation has no solution.")
答案 0 :(得分:1)
首先,如果我了解您课堂的目的,那么您实施的是错误的。
这是我的想法:
您不需要为每个数字创建该类的多个实例,因为您的类不是。这是一个方程类。假设您的代码需要重新构造。可以实现多种实现,但是您对我来说毫无意义。
您可以改进的地方:
因此,只需更改代码即可获得结果:
import numpy as np
class HomogenEquation():
def __init__(self, a, b, c, d, e, f):
# initializing class with all variables all together
self.a = a
self.b = b
self.c = c
self.d = d
self.e = e
self.f = f
def isSolvable(self):
return (self.a * self.d) - (self.b * self.c) == 0
def getXY(self):
x = np.array([[self.a, self.b],[self.c, self.d]])
y = np.array([self.e, self.f])
return np.linalg.solve(x, y)
好吧,所以现在类结构很有意义(但仍有一些事情有待改进)
因此,要使用它,您只需要用所有数字初始化一个实例并调用t的方法:
# btw this input looks not right, but I'll leave it
a=int(input("a: "))
b=int(input("b: "))
e=int(input("e: "))
c=int(input("c: "))
d=int(input("d: "))
f=int(input("f: "))
equation = HomogenEquation(a,b,c,d,e,f) # creating one instance for equation
if equation.isSolvable():
print(equation.getXY()) # and calling it's methods
else:
print("The equation has no solution.")
注释:该代码仍具有多个缺点,但现在可以使用类了。
希望这对您将来的学习有所帮助!
答案 1 :(得分:0)
您引用的对象错误。 a, b, c, d, e, f
的类型为int
,其中a_value, b_value, c_value, d_value, e_value, f_value
的类型为HomogenEquation
。
您可能想要:
if a_value.isSolvable(a,d,b,c):
getXY(a,b,c,d,e,f)
else:
print("The equation has no solution.")
答案 2 :(得分:0)
您有以下课程:
class HomogenEquation:
def __init__(self,number):
self.number = number
self.value=0
def isSolvable(self,a,d,b,c):
return (a*d)-(b*c)==0
def getXY(self,a,b,c,d,e,f):
x = np.array([[a, b],[c,d]])
y = np.array([e, f])
print(np.linalg.solve(x,y))
如果要收集用户输入然后创建对象,可以执行以下操作:
# in the main method
a = int(input("Number: "))
# Collect all the other values the same way.
# Create an object of HomogenEquation
a_value = HomogenEquation(a)
print(a_value.isSolvable(a,b,c,d,e,f))