main
1class Ammunition: 2 def __init__(self, name: str, weight: float, price: float): 3 if weight <= 0 or price <= 0: 4 raise ValueError("вага/ціна мають бути > 0") 5 self.name = name 6 self.weight = weight 7 self.price = price 8 9 def __repr__(self): 10 return f"{self.__class__.__name__}({self.name}, вага:{self.weight}, ціна:{self.price})" 11 12 13class Armor(Ammunition): 14 def __init__(self, name: str, weight: float, price: float, defense: int): 15 super().__init__(name, weight, price) 16 self.defense = defense 17 18 19class Weapon(Ammunition): 20 def __init__(self, name: str, weight: float, price: float, damage: int): 21 super().__init__(name, weight, price) 22 self.damage = damage 23 24 25class Node: 26 def __init__(self, data: Ammunition): 27 self.data = data 28 self.next = None 29 self.prev = None 30 31 32class AmmunitionAestheticList: 33 def __init__(self, data=None): 34 self.head = None 35 self.tail = None 36 self._size = 0 37 38 # пер типу_констр 39 if data is not None: 40 if isinstance(data, Ammunition): 41 self.append(data) 42 elif hasattr(data, '__iter__') and not isinstance(data, (str, bytes)): 43 for item in data: 44 self.append(item) 45 else: 46 raise TypeError("невірний тип констр") 47 48 def append(self, item: Ammunition): 49 if not isinstance(item, Ammunition): 50 raise TypeError("треба об амун") 51 52 new_node = Node(item) 53 if not self.head: 54 self.head = new_node 55 self.tail = new_node 56 else: 57 self.tail.next = new_node 58 new_node.prev = self.tail 59 self.tail = new_node 60 self._size += 1 61 62 def clear(self): 63 self.head = None 64 self.tail = None 65 self._size = 0 66 67 def remove(self, item: Ammunition) -> bool: 68 # лог вид вузла 69 curr = self.head 70 while curr: 71 if curr.data == item: 72 if curr.prev: 73 curr.prev.next = curr.next 74 else: 75 self.head = curr.next 76 77 if curr.next: 78 curr.next.prev = curr.prev 79 else: 80 self.tail = curr.prev 81 82 self._size -= 1 83 return True 84 curr = curr.next 85 raise ValueError("елемент відсутній") 86 87 def __len__(self) -> int: 88 return self._size 89 90 def __getitem__(self, index: int) -> Ammunition: 91 if index < 0 or index >= self._size: 92 raise IndexError("індекс за меж") 93 94 curr = self.head 95 for _ in range(index): 96 curr = curr.next 97 return curr.data 98 99 def __iter__(self): 100 curr = self.head 101 while curr: 102 yield curr.data 103 curr = curr.next 104 105 106if __name__ == "__main__": 107 try: 108 # Тут виправлено: додали шкоду 45 для меча та 30 для лука 109 sword = Weapon("Меч", 3.5, 400, 45) 110 armor = Armor("Щит", 7.0, 250, 30) 111 112 # констр 1 порож 113 list_empty = AmmunitionAestheticList() 114 print(f"довжина: {len(list_empty)}") 115 116 # ... констр 2 один 117 list_single = AmmunitionAestheticList(sword) 118 for x in list_single: 119 print(x) 120 121 # констр 3 кол 122 standart_list = [sword, armor, Weapon("Лук", 1.8, 150, 30)] 123 list_coll = AmmunitionAestheticList(standart_list) 124 125 # елем кол 126 for item in list_coll: 127 print(item) 128 129 print(f"\nелемент за індексом 1: {list_coll[1]}") 130 131 list_coll.remove(armor) 132 # після вид елем 133 for item in list_coll: 134 print(item) 135 136 print(f"нова довжина: {len(list_coll)}") 137 138 except (ValueError, TypeError, IndexError) as e: 139 print(f"помилка виконання: {e}")
class
Ammunition:
2class Ammunition: 3 def __init__(self, name: str, weight: float, price: float): 4 if weight <= 0 or price <= 0: 5 raise ValueError("вага/ціна мають бути > 0") 6 self.name = name 7 self.weight = weight 8 self.price = price 9 10 def __repr__(self): 11 return f"{self.__class__.__name__}({self.name}, вага:{self.weight}, ціна:{self.price})"
14class Armor(Ammunition): 15 def __init__(self, name: str, weight: float, price: float, defense: int): 16 super().__init__(name, weight, price) 17 self.defense = defense
Inherited Members
20class Weapon(Ammunition): 21 def __init__(self, name: str, weight: float, price: float, damage: int): 22 super().__init__(name, weight, price) 23 self.damage = damage
Inherited Members
class
Node:
26class Node: 27 def __init__(self, data: Ammunition): 28 self.data = data 29 self.next = None 30 self.prev = None
Node(data: Ammunition)
class
AmmunitionAestheticList:
33class AmmunitionAestheticList: 34 def __init__(self, data=None): 35 self.head = None 36 self.tail = None 37 self._size = 0 38 39 # пер типу_констр 40 if data is not None: 41 if isinstance(data, Ammunition): 42 self.append(data) 43 elif hasattr(data, '__iter__') and not isinstance(data, (str, bytes)): 44 for item in data: 45 self.append(item) 46 else: 47 raise TypeError("невірний тип констр") 48 49 def append(self, item: Ammunition): 50 if not isinstance(item, Ammunition): 51 raise TypeError("треба об амун") 52 53 new_node = Node(item) 54 if not self.head: 55 self.head = new_node 56 self.tail = new_node 57 else: 58 self.tail.next = new_node 59 new_node.prev = self.tail 60 self.tail = new_node 61 self._size += 1 62 63 def clear(self): 64 self.head = None 65 self.tail = None 66 self._size = 0 67 68 def remove(self, item: Ammunition) -> bool: 69 # лог вид вузла 70 curr = self.head 71 while curr: 72 if curr.data == item: 73 if curr.prev: 74 curr.prev.next = curr.next 75 else: 76 self.head = curr.next 77 78 if curr.next: 79 curr.next.prev = curr.prev 80 else: 81 self.tail = curr.prev 82 83 self._size -= 1 84 return True 85 curr = curr.next 86 raise ValueError("елемент відсутній") 87 88 def __len__(self) -> int: 89 return self._size 90 91 def __getitem__(self, index: int) -> Ammunition: 92 if index < 0 or index >= self._size: 93 raise IndexError("індекс за меж") 94 95 curr = self.head 96 for _ in range(index): 97 curr = curr.next 98 return curr.data 99 100 def __iter__(self): 101 curr = self.head 102 while curr: 103 yield curr.data 104 curr = curr.next
AmmunitionAestheticList(data=None)
34 def __init__(self, data=None): 35 self.head = None 36 self.tail = None 37 self._size = 0 38 39 # пер типу_констр 40 if data is not None: 41 if isinstance(data, Ammunition): 42 self.append(data) 43 elif hasattr(data, '__iter__') and not isinstance(data, (str, bytes)): 44 for item in data: 45 self.append(item) 46 else: 47 raise TypeError("невірний тип констр")
49 def append(self, item: Ammunition): 50 if not isinstance(item, Ammunition): 51 raise TypeError("треба об амун") 52 53 new_node = Node(item) 54 if not self.head: 55 self.head = new_node 56 self.tail = new_node 57 else: 58 self.tail.next = new_node 59 new_node.prev = self.tail 60 self.tail = new_node 61 self._size += 1
68 def remove(self, item: Ammunition) -> bool: 69 # лог вид вузла 70 curr = self.head 71 while curr: 72 if curr.data == item: 73 if curr.prev: 74 curr.prev.next = curr.next 75 else: 76 self.head = curr.next 77 78 if curr.next: 79 curr.next.prev = curr.prev 80 else: 81 self.tail = curr.prev 82 83 self._size -= 1 84 return True 85 curr = curr.next 86 raise ValueError("елемент відсутній")