复数的实现
implementation of complex numbers
我有这部分代码,我需要在 class 中实现或修改必要的方法,以便程序产生以下输出。
c1 = 1+2i
c2 = 3-4i
c3 = -5
c4 = 6i
c5 = -7i
c6 = 0
c1 + c2 = 4-2i
c1 - c2 = -2+6i
c1 * c2 = 11+2i
conjugate of c1 = 1-2i
表示复数的 Complex class 的实现缺失。显然,复数的属性是它的实部和虚部(浮点数),不需要是受保护的属性。但我不知道如何实现它才能获得上面的输出。
到目前为止我有:
代码:
class Complex:
def __init__(self, real, imag):
self.real = real
self.imag = imag
def __str__(self):
return str(self.real) + "+" + str(self.imag) + "i"
def main():
c1 = Complex(1, 2)
print("c1 =", c1)
c2 = Complex(3, -4)
print("c2 =", c2)
c3 = Complex(-5, 0)
print("c3 =", c3)
c4 = Complex(0, 6)
print("c4 =", c4)
c5 = Complex(0, -7)
print("c5 =", c5)
c6 = Complex(0, 0)
print("c6 =", c6)
print("c1 + c2 =", c1 + c2)
print("c1 - c2 =", c1 - c2)
print("c1 * c2 =", c1 * c2)
c7 = c1.conjugate()
print("conjugate of c1 =", c7)
if __name__ == "__main__":
main()
def main()
无法更改
输出:
c1 = 1+2i
c2 = 3+-4i
c3 = -5+0i
c4 = 0+6i
c5 = 0+-7i
c6 = 0+0i
您完全可以使用内置复数。 Python 像其他一些语言一样使用 j
作为虚数单位,这与通常使用小写字母 i
的数学相反。
def main():
c1 = 1+2j
print("c1 =", c1)
c2 = 3-4j
print("c2 =", c2)
c3 = -5+0j
print("c3 =", c3)
c4 = 0+6j
print("c4 =", c4)
c5 = 0-7j
print("c5 =", c5)
c6 = 0+0j
print("c6 =", c6)
print("c1 + c2 =", c1 + c2)
print("c1 - c2 =", c1 - c2)
print("c1 * c2 =", c1 * c2)
c7 = c1.conjugate()
print("conjugate of c1 =", c7)
if __name__ == "__main__":
main()
给出输出:
c1 = (1+2j)
c2 = (3-4j)
c3 = (-5+0j)
c4 = 6j
c5 = -7j
c6 = 0j
c1 + c2 = (4-2j)
c1 - c2 = (-2+6j)
c1 * c2 = (11+2j)
conjugate of c1 = (1-2j)
如果您不介意添加括号,那么您就完成了。否则,您可以像这样进行输出格式化:
print(f"conjugate of c7 = {c7.real}{c7.imag:+}j")
编辑:
如果你的 main()
方法需要使用 Complex
class,你可以只包装内置函数:
class Complex(complex):
pass
这是可行的,因为您的 Complex
class 与内置 complex
数据类型具有相同的原型。您甚至可以按照您的建议重载 __str__(self)
并且只要请求 str()
它就可以工作。所以 Complex
class 可能看起来像这样:
class Complex(complex):
def __str__(self):
return str(self.real) + "+" + str(self.imag) + "i"
我有这部分代码,我需要在 class 中实现或修改必要的方法,以便程序产生以下输出。
c1 = 1+2i
c2 = 3-4i
c3 = -5
c4 = 6i
c5 = -7i
c6 = 0
c1 + c2 = 4-2i
c1 - c2 = -2+6i
c1 * c2 = 11+2i
conjugate of c1 = 1-2i
表示复数的 Complex class 的实现缺失。显然,复数的属性是它的实部和虚部(浮点数),不需要是受保护的属性。但我不知道如何实现它才能获得上面的输出。
到目前为止我有:
代码:
class Complex:
def __init__(self, real, imag):
self.real = real
self.imag = imag
def __str__(self):
return str(self.real) + "+" + str(self.imag) + "i"
def main():
c1 = Complex(1, 2)
print("c1 =", c1)
c2 = Complex(3, -4)
print("c2 =", c2)
c3 = Complex(-5, 0)
print("c3 =", c3)
c4 = Complex(0, 6)
print("c4 =", c4)
c5 = Complex(0, -7)
print("c5 =", c5)
c6 = Complex(0, 0)
print("c6 =", c6)
print("c1 + c2 =", c1 + c2)
print("c1 - c2 =", c1 - c2)
print("c1 * c2 =", c1 * c2)
c7 = c1.conjugate()
print("conjugate of c1 =", c7)
if __name__ == "__main__":
main()
def main()
无法更改
输出:
c1 = 1+2i
c2 = 3+-4i
c3 = -5+0i
c4 = 0+6i
c5 = 0+-7i
c6 = 0+0i
您完全可以使用内置复数。 Python 像其他一些语言一样使用 j
作为虚数单位,这与通常使用小写字母 i
的数学相反。
def main():
c1 = 1+2j
print("c1 =", c1)
c2 = 3-4j
print("c2 =", c2)
c3 = -5+0j
print("c3 =", c3)
c4 = 0+6j
print("c4 =", c4)
c5 = 0-7j
print("c5 =", c5)
c6 = 0+0j
print("c6 =", c6)
print("c1 + c2 =", c1 + c2)
print("c1 - c2 =", c1 - c2)
print("c1 * c2 =", c1 * c2)
c7 = c1.conjugate()
print("conjugate of c1 =", c7)
if __name__ == "__main__":
main()
给出输出:
c1 = (1+2j)
c2 = (3-4j)
c3 = (-5+0j)
c4 = 6j
c5 = -7j
c6 = 0j
c1 + c2 = (4-2j)
c1 - c2 = (-2+6j)
c1 * c2 = (11+2j)
conjugate of c1 = (1-2j)
如果您不介意添加括号,那么您就完成了。否则,您可以像这样进行输出格式化:
print(f"conjugate of c7 = {c7.real}{c7.imag:+}j")
编辑:
如果你的 main()
方法需要使用 Complex
class,你可以只包装内置函数:
class Complex(complex):
pass
这是可行的,因为您的 Complex
class 与内置 complex
数据类型具有相同的原型。您甚至可以按照您的建议重载 __str__(self)
并且只要请求 str()
它就可以工作。所以 Complex
class 可能看起来像这样:
class Complex(complex):
def __str__(self):
return str(self.real) + "+" + str(self.imag) + "i"