From ab5710ba22bcee7c29d4916d8fb31428067c8f41 Mon Sep 17 00:00:00 2001 From: Alexander Date: Fri, 3 Oct 2025 18:35:32 +0300 Subject: [PATCH] 20251003 --- .run/Тест BoolExtension.run.xml | 17 ++++ .../extensions/bool_extension.py | 59 ++++++++------ help/class_desc/enums/not_bool_action.md | 20 +++++ help/class_desc/extensions/bool_extension.md | 79 +++++++++++++++++++ help/index.md | 9 ++- tests/extensions/bool_extension_test.py | 21 +++++ 6 files changed, 178 insertions(+), 27 deletions(-) create mode 100644 .run/Тест BoolExtension.run.xml create mode 100644 help/class_desc/enums/not_bool_action.md create mode 100644 help/class_desc/extensions/bool_extension.md create mode 100644 tests/extensions/bool_extension_test.py diff --git a/.run/Тест BoolExtension.run.xml b/.run/Тест BoolExtension.run.xml new file mode 100644 index 0000000..9294e22 --- /dev/null +++ b/.run/Тест BoolExtension.run.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/anb_python_components/extensions/bool_extension.py b/anb_python_components/extensions/bool_extension.py index 288ca47..9d26b44 100644 --- a/anb_python_components/extensions/bool_extension.py +++ b/anb_python_components/extensions/bool_extension.py @@ -9,6 +9,9 @@ class BoolExtension: """ def __init__(self): + """ + Инициализация расширения. + """ pass @staticmethod @@ -37,30 +40,30 @@ class BoolExtension: for expression in expressions: # - если аргумент не является типом правда/ложь if not isinstance(expression, bool): - # -- если указано действие при не булевом значении - игнорирование - if if_not_bool == NotBoolAction.IGNORE: - # - игнорируем аргумент и продолжаем цикл - continue + match if_not_bool: + # -- если указано действие при не булевом значении - игнорирование + case NotBoolAction.IGNORE: + # - игнорируем аргумент и продолжаем цикл + continue - # -- если указано действие при не булевом значении - считать как истинное значение - if if_not_bool == NotBoolAction.IT_TRUE: - # --- добавляем True в массив проверяемых аргументов - check_array.append(True) - # --- и продолжаем цикл - continue + # -- если указано действие при не булевом значении - считать как истинное значение + case NotBoolAction.IT_TRUE: + # --- добавляем True в массив проверяемых аргументов + check_array.append(True) + # --- и продолжаем цикл + continue - # -- если указано действие при не булевом значении - считать как ложное значение - if if_not_bool == NotBoolAction.IT_TRUE: - # --- добавляем False в массив проверяемых аргументов - check_array.append(False) - # --- и продолжаем цикл - continue - - # -- если указано действие при не булевом значении - выбросить исключение - if if_not_bool == NotBoolAction.RAISE: - # --- то вызываем исключение - raise ValueError(f"{expression} не является булевым значением") + # -- если указано действие при не булевом значении - считать как ложное значение + case NotBoolAction.IT_FALSE: + # --- добавляем False в массив проверяемых аргументов + check_array.append(False) + # --- и продолжаем цикл + continue + # -- если указано действие при не булевом значении - выбросить исключение + case NotBoolAction.RAISE: + # --- то вызываем исключение + raise ValueError(f"{expression} не является булевым значением") else: # - иначе добавляем аргумент в массив проверяемых аргументов check_array.append(expression) @@ -72,10 +75,14 @@ class BoolExtension: return len(filtered) @staticmethod - def any_true(expressions: list[bool]) -> int: + def any_true(expressions: list[bool]) -> bool: """ - Возвращает количество истинных значений в списке аргументов. - :param expressions: Список аргументов. - :return: Количество истинных значений в списке аргументов. + Проверяет, есть ли хотя бы один истинный аргумент. + :param expressions: Выражения. + :return: Есть ли хотя бы один истинный аргумент, то вернется True, иначе False. """ - return 0 if len(expressions) == 0 else BoolExtension.true_count(expressions, NotBoolAction.IGNORE) + # Получаем количество истинных значений + true_count = BoolExtension.true_count(expressions, NotBoolAction.IGNORE) + + # Если количество истинных значений больше нуля, возвращаем True, иначе False + return True if true_count > 0 else False diff --git a/help/class_desc/enums/not_bool_action.md b/help/class_desc/enums/not_bool_action.md new file mode 100644 index 0000000..0aa5e94 --- /dev/null +++ b/help/class_desc/enums/not_bool_action.md @@ -0,0 +1,20 @@ +# Перечисление `NotBoolAction` + +Перечисление `NotBoolAction` предназначено для управления поведением программы в ситуациях, когда ожидается получение +булевого значения, однако получено другое. Оно описывает возможные стратегии реакции на такую ситуацию, что даёт +разработчику большую свободу выбора поведения системы. + +## Возможные варианты реакций: +- **IGNORE**: Игнорировать ситуацию и продолжить выполнение программы. +- **IT_TRUE**: Рассматривать любое небулевое значение как истину (True). +- **IT_FALSE**: Рассматривать любое небулевое значение как ложь (False). +- **RAISE**: Генерировать исключение, сигнализируя о критической ошибке. + +## Основная информация + +- **Имя файла**: anb_python_components\enums\not_bool_action.py +- **Автор**: Александр Бабаев +- **Версия**: 1.0.0 +- **Дата начала поддержки**: с версии 1.0 + +[На главную](../../index.md) \ No newline at end of file diff --git a/help/class_desc/extensions/bool_extension.md b/help/class_desc/extensions/bool_extension.md new file mode 100644 index 0000000..500c5c0 --- /dev/null +++ b/help/class_desc/extensions/bool_extension.md @@ -0,0 +1,79 @@ +# Класс `BoolExtension` + +Этот класс предназначен для предоставления расширенных возможностей работы с булевыми значениями в Python. Класс +обеспечивает удобные способы конвертации булевых значений в строки, подсчета количества истинных элементов в списках и +обнаружения наличия хотя бы одного истинного элемента среди списка выражений. + +## Основная информация + +- **Имя файла**: anb_python_components/extensions/bool_extension.py +- **Автор**: Александр Бабаев +- **Версия**: 1.0.0 +- **Дата начала поддержки**: с версии 1.0 + +## Атрибуты и методы класса + +### Метод `to_str` + +Конвертирует булево значение в строку, используя кастомизированные обозначения для значений `True` и `False`. + +**Параметры**: + +- `b`: Булево значение, которое необходимо преобразовать. +- `if_true`: Значение, которое возвращается, если булево значение равно `True` (по умолчанию "True"). +- `if_false`: Значение, которое возвращается, если булево значение равно `False` (по умолчанию "False"). + +`Пример использования`: + +```python +from anb_python_components.extensions.bool_extension import BoolExtension + +print(BoolExtension.to_str(True)) # True +print(BoolExtension.to_str(False, if_false="Нет")) # Нет +``` + +### Метод `true_count` + +Подсчитывает количество истинных значений в списке выражений, предлагая разные подходы к обработке не-булевых значений. + +**Параметры**: + +- `expressions`: Список булевых выражений. +- `if_not_bool`: Параметр, определяющий стратегию обработки небулевых значений. По умолчанию игнорируются. + Стратегии обработки небулевых значений определяются перечислением [`NotBoolAction`](../enums/not_bool_action.md). + +**Пример использования**: + +```python +from anb_python_components.enums.not_bool_action import NotBoolAction +from anb_python_components.extensions.bool_extension import BoolExtension + +expressions = [True, False, "Некорректное значение"] +count = BoolExtension.true_count(expressions, NotBoolAction.IT_TRUE) +print(count) # 2 +``` + +### Метод `any_true` + +Проверяет, присутствует ли хотя бы одно истинное выражение в списке. + +**Параметры**: + +- `expressions`: Список булевых выражений. + +**Пример использования**: + +```python +from anb_python_components.extensions.bool_extension import BoolExtension + +expressions = [False, False, True] +result = BoolExtension.any_true(expressions) +print(result) # True +``` + +## Заключение + +Класс `BoolExtension` существенно облегчает работу с булевыми значениями, предоставляя удобную обработку нестандартных +ситуаций и простое управление потоком логики в приложении. + +[На главную](../../index.md) \ No newline at end of file diff --git a/help/index.md b/help/index.md index a7d14d0..30122b4 100644 --- a/help/index.md +++ b/help/index.md @@ -8,9 +8,16 @@ ## Описание интерфейсов, классов и перечислений: +### Перечисления + +**Расположение модулей**: anb_python_components\enums\* + +- [перечисление `NotBoolAction`](class_desc/enums/not_bool_action.md) + ### Расширения стандартных типов **Расположение модулей**: anb_python_components\extensions\* - [класс `StringExtensionConstants`](class_desc/extensions/string_extension_constant.md) -- [класс `StringExtension`](class_desc/extensions/string_extension.md) \ No newline at end of file +- [класс `StringExtension`](class_desc/extensions/string_extension.md) +- [класс `BoolExtension`](class_desc/extensions/bool_extension.md) \ No newline at end of file diff --git a/tests/extensions/bool_extension_test.py b/tests/extensions/bool_extension_test.py new file mode 100644 index 0000000..301627a --- /dev/null +++ b/tests/extensions/bool_extension_test.py @@ -0,0 +1,21 @@ +# string_extension_test.py + +import unittest + +from anb_python_components.extensions.bool_extension import * + + +class BoolExtensionTest(unittest.TestCase): + def test_to_str(self): + self.assertEqual(BoolExtension.to_str(True, "да", "нет"), "да") + self.assertEqual(BoolExtension.to_str(False, "да", "нет"), "нет") + + def test_true_count(self): + self.assertEqual(BoolExtension.true_count([False, True, False, True, True, False, False]), 3) + + def test_any_true(self): + self.assertTrue(BoolExtension.any_true([False, True, False, True, True, False, False])) + + +if __name__ == '__main__': + unittest.main()