Guest User

Untitled

a guest
Dec 4th, 2024
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.87 KB | None | 0 0
  1. from typing import Tuple, List
  2.  
  3. class InputError(Exception):
  4.     """Класс для обработки ошибок ввода."""
  5.     def __init__(self, message: str):
  6.         super().__init__(message)
  7.  
  8. class Logger:
  9.     """Класс для логирования попыток ввода."""
  10.     @staticmethod
  11.     def log(message: str) -> None:
  12.         print(f"[LOG] {message}")
  13.  
  14. class InputValidator:
  15.     """Класс для валидации ввода."""
  16.     @staticmethod
  17.     def validate(value: float) -> Tuple[bool, str]:
  18.         if value < 0:
  19.             return False, "Число должно быть неотрицательным."
  20.         return True, ""
  21.  
  22. class InputHandler:
  23.     def __init__(self) -> None:
  24.         self.user_input: float = 0.0
  25.         self.attempts: int = 0  # Счетчик попыток ввода
  26.  
  27.     def get_input(self) -> None:
  28.         while True:
  29.             self.attempts += 1
  30.             try:
  31.                 raw_input = input("Введите число: ")
  32.                 self.user_input = float(raw_input)
  33.  
  34.                 is_valid, error_message = InputValidator.validate(self.user_input)
  35.                 if not is_valid:
  36.                     Logger.log(f"Попытка {self.attempts}: {error_message}")
  37.                     print(error_message)
  38.                     continue
  39.  
  40.                 Logger.log(f"Попытка {self.attempts}: Успешный ввод {self.user_input}")
  41.                 break
  42.             except ValueError:
  43.                 Logger.log(f"Попытка {self.attempts}: Некорректный ввод '{raw_input}'.")
  44.                 print("Пожалуйста, введите корректное число.")
  45.  
  46. class NumberChecker:
  47.     def __init__(self, number: float) -> None:
  48.         self.__number: float = number  # Приватный атрибут
  49.  
  50.     def is_in_range(self, lower: float, upper: float) -> bool:
  51.         return lower <= self.__number <= upper
  52.  
  53.     def check_ranges(self) -> List[str]:
  54.         results: List[str] = []
  55.         if self.is_in_range(1, 4):
  56.             results.append("Число находится в диапазоне от 1 до 4.")
  57.         if self.is_in_range(5, 8):
  58.             results.append("Число находится в диапазоне от 5 до 8.")
  59.         if not results:
  60.             results.append("Число вне заданных диапазонах.")
  61.         return results
  62.  
  63. class OutputHandler:
  64.     def display_results(self, results: List[str]) -> None:
  65.         for message in results:
  66.             print(message)
  67.  
  68. def main() -> None:
  69.     input_handler = InputHandler()
  70.     input_handler.get_input()
  71.  
  72.     checker = NumberChecker(input_handler.user_input)
  73.     results = checker.check_ranges()
  74.  
  75.     output_handler = OutputHandler()
  76.     output_handler.display_results(results)
  77.  
  78. if __name__ == "__main__":
  79.     main()
Advertisement
Add Comment
Please, Sign In to add comment