复数的实现

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"