Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình Python để xác định lớp cho các đối tượng số phức

Giả sử chúng ta muốn thực hiện các tác vụ số phức bằng cách xác định một lớp số phức với các phép toán sau -

  • add () để thêm hai số phức
  • sub () để trừ hai số phức
  • mul () để nhân hai số phức
  • div () để chia hai số phức
  • mod () để nhận môđun của các số phức

Các số phức sẽ được biểu diễn dưới dạng (a + bi). Chúng ta có hai số phức, sẽ thực hiện các phép toán này trên chúng. Bên trong lớp, chúng ta nạp chồng các phương thức add (), sub (), mul () và div () để chúng ta có thể sử dụng các toán tử để thực hiện các hoạt động. Chúng tôi cũng nạp chồng phương thức __str __ () để in số phức ở dạng thích hợp.

Vì vậy, nếu đầu vào giống như c1 =2 + 3i c2 =5-2i, thì đầu ra sẽ là (7,00 + 1,00i), (-3,00 + 5,00i), (16,00 + 11,00i), (0,14 + 0,66i ), 3,61, 5,39.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định lớp phức tạp với phần thực là phần thực và phần ảo là im
  • Xác định một hàm add (). Điều này sẽ mất o
  • trả về một đối tượng Complex mới với (re + o.re, im + o.im)
  • Xác định một hàm con (). Điều này sẽ mất o
  • trả về một đối tượng Complex mới với (re - o.re, im - o.im)
  • Xác định một hàm mul (). Điều này sẽ mất o
  • trả về một đối tượng Complex mới với (re * o.re -im * o.im, re * o.im + im * o.re)
  • Định nghĩa một hàm div (). Điều này sẽ mất o
  • m:=o.re * o.re + o.im * o.im
  • trả về một đối tượng Số phức mới với ((re * o.re + im * o.im) / m, (im * o.re - re * o.im) / m)
  • Xác định một hàm mod (). Điều này sẽ mất
  • trả về căn bậc hai của (re * re + im * im)
  • Quá tải __str __ ().
  • nếu im giống 0, thì
    • trả về tới hai chữ số thập phân
  • nếu re giống 0, thì
    • trả về tôi đến hai chữ số thập phân
  • nếu im <0, thì
    • return re - im i, cả hai (re và im có đến hai chữ số thập phân)
  • nếu không,
    • return re + im i, cả hai (re và im có đến hai chữ số thập phân)

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơ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 __str__(self):
      if self.im == 0:
         return '%.2f' % self.re
      if self.re == 0:
         return '%.2fi' % self.im
      if self.im < 0:
         return '%.2f - %.2fi' % (self.re, -self.im)
      else:
         return '%.2f + %.2fi' % (self.re, self.im)
      def mod(self):
         return sqrt(self.re*self.re+self.im*self.im)

def solve(comp1, comp2):
   print(comp1 + comp2)
   print(comp1 - comp2)
   print(comp1 * comp2)
   print(comp1 / comp2)
   print('%.2f' % comp1.mod())
   print('%.2f' % comp2.mod())

comp1 = Complex(2, 3)
comp2 = Complex(5, -2)
solve(comp1, comp2)

Đầu vào

2, 3
5, -2

Đầu ra

7.00 + 1.00i
-3.00 + 5.00i
16.00 + 11.00i
0.14 + 0.66i
3.61
5.39