【发布时间】:2023-03-27 10:10:02
【问题描述】:
代码如下:
class Complex:
def __init__(self, real, imaginary):
self.real = real
self.imaginary = imaginary
def __str__(self):
return "{}+({}i)".format(self.real, self.imaginary)
def add(self, second):
return Complex(self.real + second.real, self.imaginary + second.imaginary)
def subtract(self, second):
return Complex(self.real - second.real, self.imaginary - second.imaginary)
def multiply(self, second):
return Complex(self.real * second.real - self.imaginary * second.imaginary, self.imaginary * second.real + \
self.real * second.imaginary)
def divide(self, second):
x = float(second.real ** 2 + second.imaginary ** 2)
return Complex(self.real * second.real + self.imaginary * second.imaginary)/(x) + (self.imaginary * second.real - self.real * second.imaginary)/(x)
x = Complex(5,-8)
y = Complex(-1,3)
print(Complex.multiply(x,y))
print(Complex.divide(x,y))
错误是:
Traceback (most recent call last):
File "D:/PyCharm Community Edition 2017.3.2/PyCharmProjects/lab9/venv/lab9.3.py", line 23, in <module>
print(Complex.divide(x,y))
File "D:/PyCharm Community Edition 2017.3.2/PyCharmProjects/lab9/venv/lab9.3.py", line 16, in divide
return Complex(self.real * second.real + self.imaginary * second.imaginary)/(x) + (self.imaginary * second.real - self.real * second.imaginary)/(x)
TypeError: __init__() missing 1 required positional argument: 'imaginary'
所以我查看了其他类似的线程,发现不仅要初始化方法,还要初始化诸如 Complex().divide(x,y) 之类的类,但随后它说缺少 2 个实数和虚数参数,任何想法非常感谢您的解释。
【问题讨论】:
-
我认为它应该更像
print(x.multiply(y))。但理想情况下,您可能会将方法重命名为__mul__并执行print(x * y)。 -
阅读该行。你认为你通过了多少个论点?你认为括号如何匹配?哎呀,你甚至看到任何逗号吗?
-
乘法函数实际上工作得很好
-
也许,但我坚持我的意见。我的意思是对所有操作都做同样的事情。但是正如@user2357112 所说,您的直接问题在于
divide方法的return行。您不会同时传递实值和虚值。如果是我,我可能至少会将imaginary设为默认为 0 的关键字参数。 -
你知道 Python 在语言中内置了复数吗?