HackerRank Python - Classes: Dealing with Complex Numbers
For this challenge, you are given two complex numbers, and you have to print the result of their addition, subtraction, multiplication, division and modulus operations.
The real and imaginary precision part should be correct up to two decimal places.
- import math
-
- class Complex(object):
- def __init__(self, real, imaginary):
- self.real = real
- self.imaginary = imaginary
-
- def __add__(self, no):
- a = self.real
- b = self.imaginary
- c = no.real
- d = no.imaginary
- return Complex(a + c, b + d)
-
- def __sub__(self, no):
- a = self.real
- b = self.imaginary
- c = no.real
- d = no.imaginary
- return Complex(a - c, b - d)
-
- def __mul__(self, no):
- a = self.real
- b = self.imaginary
- c = no.real
- d = no.imaginary
- real_mult = (a * c) - (b * d)
- imag_mult = (a * d) + (b * c)
- return Complex(real_mult, imag_mult)
-
- def __truediv__(self, no):
- a = self.real
- b = self.imaginary
- c = no.real
- d = no.imaginary
- real_numerator = a * c + b * d
- imag_numerator = b * c - a * d
- denom = c * c + d * d
- real_div = real_numerator / denom
- imag_div = imag_numerator / denom
- return Complex(real_div, imag_div)
-
- def mod(self):
- a = self.real
- b = self.imaginary
- return Complex(math.sqrt(a ** 2 + b ** 2), 0)
-
- def __str__(self):
- if self.imaginary == 0:
- result = '%.2f+0.00i' % (self.real)
- elif self.real == 0:
- if self.imaginary >= 0:
- result = '0.00+%.2fi' % (self.imaginary)
- else:
- result = '0.00-%.2fi' % (abs(self.imaginary))
- elif self.imaginary > 0:
- result = '%.2f+%.2fi' % (self.real, self.imaginary)
- else:
- result = '%.2f-%.2fi' % (self.real, abs(self.imaginary))
- return result
-
- if __name__ == '__main__':
- c = map(float, input().split())
- d = map(float, input().split())
- x = Complex(*c)
- y = Complex(*d)
- print(*map(str, [x+y, x-y, x*y, x/y, x.mod(), y.mod()]), sep='\n')