Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Fraction:
- count = 0 # atrybut klasy - zlicza liczbę utworzonych obiektów
- def __init__(self, numerator, denominator=1):
- if denominator == 0:
- raise ValueError("Mianownik nie może być równy zero")
- self.numerator = numerator
- self.denominator = denominator
- Fraction.count += 1
- def __str__(self):
- return f"{self.numerator}/{self.denominator}"
- def __add__(self, other):
- numerator = self.numerator * other.denominator + other.numerator * self.denominator
- denominator = self.denominator * other.denominator
- result = Fraction(numerator, denominator)
- return result.simplify()
- def __sub__(self, other):
- numerator = self.numerator * other.denominator - other.numerator * self.denominator
- denominator = self.denominator * other.denominator
- result = Fraction(numerator, denominator)
- return result.simplify()
- def __mul__(self, other):
- numerator = self.numerator * other.numerator
- denominator = self.denominator * other.denominator
- result = Fraction(numerator, denominator)
- return result.simplify()
- def __truediv__(self, other):
- numerator = self.numerator * other.denominator
- denominator = self.denominator * other.numerator
- result = Fraction(numerator, denominator)
- return result.simplify()
- @staticmethod
- def _gcd(a, b):
- while b != 0:
- a, b = b, a % b
- return a
- def simplify(self):
- gcd = self._gcd(self.numerator, self.denominator)
- self.numerator //= gcd
- self.denominator //= gcd
- return self
- def __eq__(self, other):
- if isinstance(other, int):
- other = Fraction(other)
- if not isinstance(other, Fraction):
- return False
- self.simplify()
- other.simplify()
- return self.numerator == other.numerator and self.denominator == other.denominator
- def __lt__(self, other):
- if isinstance(other, int):
- other = Fraction(other)
- if not isinstance(other, Fraction):
- raise TypeError("Nie można porównywać ułamka z innym typem")
- common_denominator = self.denominator * other.denominator
- self_numerator = self.numerator * other.denominator
- other_numerator = other.numerator * self.denominator
- return self_numerator < other_numerator
- @classmethod
- def from_decimal(cls, decimal):
- if not isinstance(decimal, (float, int)):
- raise TypeError("Nieprawidłowy typ argumentu")
- numerator = decimal.as_integer_ratio()[0]
- denominator = decimal.as_integer_ratio()[1]
- return cls(numerator, denominator)
- def __del__(self):
- Fraction.count -= 1
- def main():
- f1 = Fraction(3, 4)
- f2 = Fraction(1, 2)
- print(f1 + f2) # wyświetli 5/4
- print(f1 - f2) # wyświetli 1/4
- print(f1 * f2) # wyświetli 3/8
- print(f1 / f2) # wyświetli 3/2
- f3 = Fraction.from_decimal(0.25)
- print(f3) # wyświetli 1/4
- print(Fraction.count) # wyświetli 3
- # porównanie ułamków przy użyciu metody __eq__
- if f1 == f2:
- print("Ułamki są równe")
- else:
- print("Ułamki są różne")
- # porównanie ułamków przy użyciu metody __lt__
- if f1 < f2:
- print("Ułamek f1 jest mniejszy niż f2")
- else:
- print("Ułamek f1 jest większy lub równy f2")
- # utworzenie ułamka z użyciem metody from_decimal
- f3 = Fraction.from_decimal(0.5)
- print(f3)
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement