Classe ComplexNumber

Vous êtes chargé de créer une classe ComplexNumber qui encapsule le comportement d'un nombre complexe. Un nombre complexe est un nombre qui peut s'exprimer sous la forme a + bi, où a et b sont des nombres réels, et i est une solution de l'équation x2=−1x^2 = -1. Comme aucun nombre réel ne satisfait cette équation, i est appelé un nombre imaginaire (−1\sqrt{-1}).

Votre classe ComplexNumber doit avoir les attributs suivants :

  • real : la partie réelle du nombre complexe (a)

  • imaginary : la partie imaginaire du nombre complexe (b)

Vous devez implémenter les méthodes magiques suivantes :

  • __add__ : Cette méthode doit additionner deux nombres complexes et retourner un nouvel objet ComplexNumber représentant le résultat : (a1+a2)+(b1+b2)i(a_1 + a_2) + (b_1 + b_2) i.

  • __sub__ : Cette méthode doit soustraire un nombre complexe d'un autre et retourner un nouvel objet ComplexNumber représentant le résultat : (a1−a2)+(b1−b2)i(a_1 - a_2) + (b_1 - b_2) i.

  • __mul__ : Cette méthode doit multiplier deux nombres complexes et retourner un nouvel objet ComplexNumber représentant le résultat : (a1⋅a2−b1⋅b2)+(a1⋅b2+b1⋅a2)i(a_1 \cdot a_2 - b_1 \cdot b_2) + (a_1 \cdot b_2 + b_1 \cdot a_2) i.

  • __truediv__ : Cette méthode doit diviser un nombre complexe par un autre et retourner un nouvel objet ComplexNumber représentant le résultat : a1⋅a2+b1⋅b2a22+b22+b1⋅a2−a1⋅b2a22+b22i\frac{ a_1 \cdot a_2 + b_1 \cdot b_2 }{ a_2^2 + b_2^2 } + \frac{ b_1 \cdot a_2 - a_1 \cdot b_2 }{ a_2^2 + b_2^2 }i.

En plus des méthodes magiques numériques, vous devez également implémenter une méthode magique __str__ qui renverra le nombre complexe sous la forme <real> + <imaginary> i.

Entrée

Sortie

print(ComplexNumber(1, 1) + ComplexNumber(2, 2)); print(ComplexNumber(2, 3) - ComplexNumber(1, 1)); print(ComplexNumber(2, 3) * ComplexNumber(1, 1)); print(ComplexNumber(2, 2) / ComplexNumber(1, 1)); print(ComplexNumber(1, 1) - ComplexNumber(2, 3))

3 + 3 i
1 + 2 i
-1 + 5 i
2.0 + 0.0 i
-1 + -2 i

Constraints

Time limit: 1.6 seconds

Memory limit: 512 MB

Output limit: 1 MB