Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from typing import Tuple, List
- class InputError(Exception):
- """Класс для обработки ошибок ввода."""
- def __init__(self, message: str):
- super().__init__(message)
- class Logger:
- """Класс для логирования попыток ввода."""
- @staticmethod
- def log(message: str) -> None:
- print(f"[LOG] {message}")
- class InputValidator:
- """Класс для валидации ввода."""
- @staticmethod
- def validate(value: float) -> Tuple[bool, str]:
- if value < 0:
- return False, "Число должно быть неотрицательным."
- return True, ""
- class InputHandler:
- def __init__(self) -> None:
- self.user_input: float = 0.0
- self.attempts: int = 0 # Счетчик попыток ввода
- def get_input(self) -> None:
- while True:
- self.attempts += 1
- try:
- raw_input = input("Введите число: ")
- self.user_input = float(raw_input)
- is_valid, error_message = InputValidator.validate(self.user_input)
- if not is_valid:
- Logger.log(f"Попытка {self.attempts}: {error_message}")
- print(error_message)
- continue
- Logger.log(f"Попытка {self.attempts}: Успешный ввод {self.user_input}")
- break
- except ValueError:
- Logger.log(f"Попытка {self.attempts}: Некорректный ввод '{raw_input}'.")
- print("Пожалуйста, введите корректное число.")
- class NumberChecker:
- def __init__(self, number: float) -> None:
- self.__number: float = number # Приватный атрибут
- def is_in_range(self, lower: float, upper: float) -> bool:
- return lower <= self.__number <= upper
- def check_ranges(self) -> List[str]:
- results: List[str] = []
- if self.is_in_range(1, 4):
- results.append("Число находится в диапазоне от 1 до 4.")
- if self.is_in_range(5, 8):
- results.append("Число находится в диапазоне от 5 до 8.")
- if not results:
- results.append("Число вне заданных диапазонах.")
- return results
- class OutputHandler:
- def display_results(self, results: List[str]) -> None:
- for message in results:
- print(message)
- def main() -> None:
- input_handler = InputHandler()
- input_handler.get_input()
- checker = NumberChecker(input_handler.user_input)
- results = checker.check_ranges()
- output_handler = OutputHandler()
- output_handler.display_results(results)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment