我无法在Python类中为复数创建__div__
方法,该方法应将两个复数相除。
这是我的代码:
class Complex(object):
def __init__(self, real = 0, imag = 0):
self.real = real
self.imag = imag
def __str__(self):
if self.imag > 0:
return str(self.real) + "+" + str(self.imag) + "i"
elif self.imag < 0:
return str(self.real) + str(self.imag) + "i"
def __div__(self, other):
x = self.real * other.real + self.imag * other.imag
y = self.imag * other.real - self.real * other.imag
z = other.real**2 + other.imag**2
real = x / z
imag = y / z
return Complex(real, imag)
no = Complex(2,-8)
no2 = Complex(3,7)
print(no/no2)
不幸的是,我的方法行不通。有什么建议吗?
答案 0 :(得分:3)
__div__
在Python 3中不再存在。它被/的__truediv__
和// //的__floordiv__
取代。
答案 1 :(得分:2)
它是__truediv__
,而不是__div__
。 __div__
是旧的Python 2“ floordiv表示整数,truediv表示非整数”除法的名称。
在修复问题时,可能应该在else
中添加一个__str__
大小写。
答案 2 :(得分:1)
您需要创建一个方法__div__(self, other)
,在其中您将no分开,同时还要创建一个新方法__opposite__(self)
,以便在进行乘数运算时更改符号,
还调用方法如何定义即no / no1不是上帝方法
使用@johnO解决方案,忽略了__truediv__
因此OP可以使用no/no2
来除以两个复数。
请参见下面的代码
类Complex(对象): def init (自我,真实= 0,imag = 0): self.real =真实 self.imag = imag
def __str__(self):
if self.imag > 0:
return str(self.real) + "+" + str(self.imag) + "i"
elif self.imag < 0:
return str(self.real) + str(self.imag) + "i"
def __opposite__(self):
self.real =self.real
self.imag = self. imag if self.imag<0 else self.imag * -1
def __truediv__(self, other):
other.__opposite__()
x = self.real * other.real - self.imag * other.imag
y = self.imag * other.real + self.real * other.imag
z = other.real**2 + other.imag**2
self.new_real = x / z
self.new_imag = y / z
if self.new_imag>0:
result = "{} + {}i".format(self.new_real, self.new_imag)
else:
result = "{} {}i".format(self.new_real, self.new_imag)
return result
no = Complex(4,5)
no2 = Complex(2,6)
print(no/no2)
输出
0.24 + 0.68i