import sys import cmath class Quadratic: domain: str = f"(-∞, ∞)" def __init__(self, a: float, b: float, c: float): self.a: float = a self.b: float = b self.c: float = c self.h: float = self.b / 2 * self.a self.k: float = (self.a * self.h**2) + (b * self.h) + self.c self.zero_first: complex = ( -self.b + cmath.sqrt((self.b ** 2) - 4 * self.a * self.c)) / 2 * self.a self.zero_second: complex = ( -self.b - cmath.sqrt((self.b ** 2) - 4 * self.a * self.c)) / 2 * self.a self.zeroes: list[str] = [ f"{self.zero_first.real if self.zero_first.imag == 0 else self.zero_first}", f"{self.zero_second.real if self.zero_second.imag == 0 else self.zero_second}" ] self.quad_form: str = f"f(x) = {a if a != 1 else ''}x^2 + {f"{b}x" if b != 0 else '0'} + {c}" self.vert_form: str = f"f(x) = {a if a != 1 else ''}(x - {self.h})^2 + {self.k}" self.vertex: str = f"({self.h}, {self.k})" self.axis_symmetry: str = f"x={self.h}" if self.a < 0: self.range = f"(-∞, {self.k})" elif self.a > 0: self.range = f"({self.k}, ∞)" else: raise Exception def __str__(self): return self.quad_form def print(self) -> None: print(f"Quadratic Form: {self.quad_form}") print(f"Vertex Form: {self.vert_form}") print(f"Vertex: {self.vertex}") print(f"Axis of Symmetry: {self.axis_symmetry}") print(f"Zeroes:") for zero in set(self.zeroes): print(f"\t{zero}") print(f"Domain: {self.domain}") print(f"Range: {self.range}") def solve(self, x: float) -> float: return self.a * x**2 + self.b * x + self.c def main() -> int: if len(sys.argv) >= 4: try: a = float(sys.argv[1]) b = float(sys.argv[2]) c = float(sys.argv[3]) except Exception as error: print("Invalid arguments. The first through third arguments must be numbers.") print(error) return 1 else: try: a = float(input("a > ")) b = float(input("b > ")) c = float(input("c > ")) except Exception as error: print("Invalid arguments. a-c must be numbers.") print(error) return 1 print() Quadratic(a, b, c).print() return 0 if __name__ == '__main__': try: sys.exit(main()) except KeyboardInterrupt: sys.exit(130) except Exception as e: print(f"FATAL: {e}") sys.exit(1)