Xây dựng lớp Complex đại diện cho số phức a + bi với các phép toán: cộng, trừ, nhân, chia, mô-đun. Nạp chồng các toán tử +, -, *, / và phương thức __str__ để in đẹp.
Ví dụ: c1 = 2+3i, c2 = 5-2i → kết quả các phép toán và mô-đun.
Các phương thức chính
__add__:(re1+re2, im1+im2)__sub__:(re1-re2, im1-im2)__mul__:(re1*re2 - im1*im2, re1*im2 + im1*re2)__truediv__: nhân tử và mẫu với liên hợp của mẫu, chia cho bình phương mô-đun mẫu.mod():sqrt(re² + im²)__str__: định dạng"a ± bi"với 2 chữ số thập phân.
Ví dụ mã nguồn
from math import sqrt
class Complex:
def __init__(self, real, imag):
self.re = real
self.im = imag
def __add__(self, o):
return Complex(self.re + o.re, self.im + o.im)
def __sub__(self, o):
return Complex(self.re - o.re, self.im - o.im)
def __mul__(self, o):
return Complex(self.re*o.re - self.im*o.im,
self.re*o.im + self.im*o.re)
def __truediv__(self, o):
m = o.re*o.re + o.im*o.im
return Complex((self.re*o.re + self.im*o.im)/m,
(self.im*o.re - self.re*o.im)/m)
def mod(self):
return sqrt(self.re*self.re + self.im*self.im)
def __str__(self):
if self.im == 0:
return f'{self.re:.2f}'
if self.re == 0:
return f'{self.im:.2f}i'
if self.im < 0:
return f'{self.re:.2f} - {abs(self.im):.2f}i'
return f'{self.re:.2f} + {self.im:.2f}i'
def solve(comp1, comp2):
print(comp1 + comp2)
print(comp1 - comp2)
print(comp1 * comp2)
print(comp1 / comp2)
print(f'{comp1.mod():.2f}')
print(f'{comp2.mod():.2f}')
comp1 = Complex(2, 3)
comp2 = Complex(5, -2)
solve(comp1, comp2)
Đầu vào / Đầu ra
Input: 2, 3 5, -2
Output: 7.00 + 1.00i
-3.00 + 5.00i
16.00 + 11.00i
0.14 + 0.66i
3.61
5.39