Advertisement
Rementai

Bryły

Apr 20th, 2023
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.28 KB | None | 0 0
  1. #skonczone
  2. from abc import ABC, abstractmethod
  3.  
  4. class Kształt(ABC):
  5.     def __init__(self, nazwa):
  6.         self._nazwa = nazwa
  7.  
  8.     @property
  9.     def nazwa(self):
  10.         return self._nazwa
  11.  
  12.     @abstractmethod
  13.     def pole(self):
  14.         pass
  15.  
  16. class Koło(Kształt):
  17.     def __init__(self, nazwa, promien):
  18.         super().__init__(nazwa)
  19.         self._promien = promien
  20.  
  21.     def pole(self):
  22.         return 3.14 * self._promien ** 2
  23.  
  24. class Trójkąt(Kształt):
  25.     def __init__(self, nazwa, bok_a, bok_b, bok_c):
  26.         super().__init__(nazwa)
  27.         self._bok_a = bok_a
  28.         self._bok_b = bok_b
  29.         self._bok_c = bok_c
  30.  
  31.     def pole(self):
  32.         p = (self._bok_a + self._bok_b + self._bok_c) / 2
  33.         return (p * (p - self._bok_a) * (p - self._bok_b) * (p - self._bok_c)) ** 0.5
  34.  
  35. class Prostokąt(Kształt):
  36.     def __init__(self, nazwa, bok_a, bok_b):
  37.         super().__init__(nazwa)
  38.         self._bok_a = bok_a
  39.         self._bok_b = bok_b
  40.  
  41.     def pole(self):
  42.         return self._bok_a * self._bok_b
  43.  
  44. class Kwadrat(Prostokąt):
  45.     def __init__(self, nazwa, bok):
  46.         super().__init__(nazwa, bok, bok)
  47.  
  48. class TrójkątRównoboczny(Trójkąt):
  49.     def __init__(self, nazwa, bok):
  50.         super().__init__(nazwa, bok, bok, bok)
  51.  
  52. class Mixin():
  53.     def pole(self):
  54.         return sum([i.pole() for i in self.ściany])
  55.  
  56. class Czworościan(Mixin, Kształt):
  57.     def __init__(self, nazwa, bok):
  58.         Kształt.__init__(self, nazwa)
  59.         ściana1 = TrójkątRównoboczny('ściana1', bok)
  60.         ściana2 = TrójkątRównoboczny('ściana2', bok)
  61.         ściana3 = TrójkątRównoboczny('ściana3', bok)
  62.         ściana4 = TrójkątRównoboczny('ściana4', bok)
  63.         self.ściany = [ściana1, ściana2, ściana3, ściana4]
  64.  
  65. class Sześcian(Mixin, Kształt):
  66.     def __init__(self, nazwa, bok):
  67.         Kształt.__init__(self, nazwa)
  68.         ściana1 = Kwadrat('ściana1', bok)
  69.         ściana2 = Kwadrat('ściana2', bok)
  70.         ściana3 = Kwadrat('ściana3', bok)
  71.         ściana4 = Kwadrat('ściana4', bok)
  72.         ściana5 = Kwadrat('ściana5', bok)
  73.         ściana6 = Kwadrat('ściana6', bok)
  74.         self.ściany = [ściana1, ściana2, ściana3, ściana4, ściana5, ściana6]
  75.  
  76. class Piramida(Mixin, Kształt):
  77.     def __init__(self, nazwa, bok):
  78.         Kształt.__init__(self, nazwa)
  79.         ściana1 = Kwadrat('ściana1', bok)
  80.         ściana2 = TrójkątRównoboczny('ściana2', bok)
  81.         ściana3 = TrójkątRównoboczny('ściana3', bok)
  82.         ściana4 = TrójkątRównoboczny('ściana4', bok)
  83.         ściana5 = TrójkątRównoboczny('ściana5', bok)
  84.         self.ściany = [ściana1, ściana2, ściana3, ściana4, ściana5]
  85.  
  86. def main():
  87.     figury = [
  88.         Koło('Koło', 5),
  89.         Trójkąt('Trójkąt', 3, 4, 5),
  90.         Prostokąt('Prostokąt', 2, 3),
  91.         Kwadrat('Kwadrat', 4),
  92.         TrójkątRównoboczny('Trójkąt równoboczny', 6)
  93.     ]
  94.  
  95.     print("Figury:")
  96.  
  97.     for figura in figury:
  98.         print(f'{figura.nazwa}: pole = {figura.pole()}')
  99.  
  100.     bryły = [
  101.         Czworościan('Czworościan', 2),
  102.         Sześcian('Sześcian', 3),
  103.         Piramida('Piramida', 4)
  104.     ]
  105.  
  106.     print("\nBryły:")
  107.  
  108.     for bryła in bryły:
  109.         print(f'{bryła.nazwa}: pole = {bryła.pole()}')
  110.  
  111. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement