定義複數物件的Python類程式
假設我們想要透過定義一個具有以下操作的複數類來執行復數任務:
- add():新增兩個複數
- sub():減去兩個複數
- mul():乘以兩個複數
- div():除以兩個複數
- mod():獲取複數的模
複數將以 (a + bi) 的形式顯示。我們將有兩個複數,並對它們執行這些操作。在類內部,我們過載 add()、sub()、mul() 和 div() 方法,以便我們可以使用運算子執行操作。我們還過載 __str__() 方法,以便以正確的形式列印複數。
因此,如果輸入類似於 c1 = 2+3i c2 = 5-2i,則輸出將為 (7.00 + 1.00i)、(-3.00 + 5.00i)、(16.00 + 11.00i)、(0.14 + 0.66i)、3.61、5.39。
為了解決這個問題,我們將遵循以下步驟:
- 定義具有實部 re 和虛部 im 的複數類
- 定義一個函式 add()。這將接收一個
- 返回一個新的 Complex 物件,其值為 (re + o.re, im + o.im)
- 定義一個函式 sub()。這將接收一個
- 返回一個新的 Complex 物件,其值為 (re - o.re, im - o.im)
- 定義一個函式 mul()。這將接收一個
- 返回一個新的 Complex 物件,其值為 (re * o.re -im * o.im, re * o.im + im * o.re)
- 定義一個函式 div()。這將接收一個
- m := o.re * o.re + o.im * o.im
- 返回一個新的 Complex 數物件,其值為 ((re * o.re + im * o.im)/m, (im * o.re - re * o.im)/m)
- 定義一個函式 mod()。這將接收
- 返回 (re * re + im * im) 的平方根
- 過載 __str__()。
- 如果 im 等於 0,則
- 返回保留兩位小數的 re
- 如果 re 等於 0,則
- 返回保留兩位小數的 im
- 如果 im < 0,則
- 返回 re - im i,re 和 im 都保留兩位小數
- 否則,
- 返回 re + im i,re 和 im 都保留兩位小數
示例
讓我們看看下面的實現來更好地理解
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)
輸入
2, 3 5, -2
輸出
7.00 + 1.00i -3.00 + 5.00i 16.00 + 11.00i 0.14 + 0.66i 3.61 5.39
廣告