From b78df34527ab26e4caa95174fc9f47b774641782 Mon Sep 17 00:00:00 2001 From: Andreas Bergman Date: Tue, 12 Mar 2024 12:37:32 +0100 Subject: [PATCH] Update name of vectorstack to numericstack and add additional functionality --- 2024/tuesday_tips/generics/main.py | 8 ++--- 2024/tuesday_tips/generics/numeric_stack.py | 34 +++++++++++++++++++++ 2024/tuesday_tips/generics/vector_stack.py | 12 -------- 3 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 2024/tuesday_tips/generics/numeric_stack.py delete mode 100644 2024/tuesday_tips/generics/vector_stack.py diff --git a/2024/tuesday_tips/generics/main.py b/2024/tuesday_tips/generics/main.py index 905e8f19..2475710c 100644 --- a/2024/tuesday_tips/generics/main.py +++ b/2024/tuesday_tips/generics/main.py @@ -1,5 +1,5 @@ from stack import Stack -from vector_stack import VectorStack +from numeric_stack import NumericStack def main() -> None: @@ -9,11 +9,11 @@ def main() -> None: print(f"Stack of ints: {stack}") - vector_stack = VectorStack[int]() + numeric_stack = NumericStack[int]() - vector_stack.push(1) + numeric_stack.push(1) - print(f"Vector of ints: {vector_stack}") + print(f"Vector of ints: {numeric_stack}") if __name__ == "__main__": diff --git a/2024/tuesday_tips/generics/numeric_stack.py b/2024/tuesday_tips/generics/numeric_stack.py new file mode 100644 index 00000000..b4800808 --- /dev/null +++ b/2024/tuesday_tips/generics/numeric_stack.py @@ -0,0 +1,34 @@ +from typing import Literal +from stack import Stack + + +class NumericStack[T: (int, float)](Stack[T]): + def __getitem__(self, index: int) -> T: + return self._container[index] + + def __setitem__(self, index: int, value: T) -> None: + if 0 <= index < len(self._container): + self._container[index] = value + else: + raise IndexError("Stack index out of range") + + def sum(self) -> T | Literal[0]: + return sum(self._container) + + def average(self) -> float: + if self.is_empty(): + return 0 + + total: T | Literal[0] = self.sum() + + return total / self.size() + + def max(self) -> T | None: + if self.is_empty(): + return None + return max(self._container) + + def min(self) -> T | None: + if self.is_empty(): + return None + return min(self._container) diff --git a/2024/tuesday_tips/generics/vector_stack.py b/2024/tuesday_tips/generics/vector_stack.py deleted file mode 100644 index 7535e2ee..00000000 --- a/2024/tuesday_tips/generics/vector_stack.py +++ /dev/null @@ -1,12 +0,0 @@ -from stack import Stack - - -class VectorStack[T: (int, float)](Stack[T]): - def __getitem__(self, index: int) -> T: - return self._container[index] - - def __setitem__(self, index: int, value: T) -> None: - if 0 <= index < len(self._container): - self._container[index] = value - else: - raise IndexError("Stack index out of range")