Как стать автором
Поиск
Написать публикацию
Обновить
0
0
Дмитрий @tskdvraz0r

Пользователь

Отправить сообщение

Уж лучше сделали бы полноразмерный плазмоган, который стрелял бы мыльными пузырями!

Слабоумие и отвага... но это не точно!

%%ipytest
import sys
import pytest
from loguru import logger

# Function
def chess_board(
    numbers: list[str | int],
    is_stdin: bool
) -> str:
    logger.debug(f"{numbers=}, {type(numbers)}")
    logger.debug(f"{is_stdin=}, {type(is_stdin)}")
    
    for value, value_type in zip(
            (numbers, is_stdin),
            (list, bool)
    ):
        if not isinstance(value, value_type):
            error_message: str = "Некорректный тип данных;"
            logger.error(error_message)
            raise TypeError(error_message)
    
    if is_stdin:
        try:
            logger.info("Преобразование типов элементов списка из str в int;")
            numbers: list[int] = [int(x) for x in numbers]
        except ValueError:
            error_message: str = f"Некорректное значение. Невозможно преобразовать {x=} в int;"
            logger.error(error_message)
            raise ValueError(error_message)
    else:
        logger.info("Проверка типов элементов списка;")
        if not all(isinstance(x, int) for x in numbers):
            error_message: str = "Некорректный тип данных элемента;"
            logger.error(error_message)
            raise TypeError(error_message)
    
    return "YES" if sum(numbers) % 2 == 0 else "NO"

@pytest.mark.parametrize(
    ["test_numbers", "test_is_stdin", "expected_result"],
    [
        # Good cases
        ([1, 1, 2, 6], False, "YES"),
        ([2, 2, 2, 5], False, "NO"),
        ([2, 3, 8, 8], False, "NO"),
        (["1\n", "1\n", "2\n", "6"], True, "YES"),
        (["2\n", "2\n", "2\n", "5"], True, "NO"),
        (["2\n", "3\n", "8\n", "8"], True, "NO"),
        
        # Error cases
        ("1 2 3 4", False, TypeError),
        ((1, 2, 3, 4), False, TypeError),
        (1234, False, TypeError)
    ]
)
def test_chess_board(
        test_numbers: list[str | int],
        test_is_stdin: bool,
        expected_result: str
) -> None:
    if test_numbers in ["1 2 3 4", (1, 2, 3, 4), 1234]:
        with pytest.raises(expected_exception=TypeError):
            chess_board(
                numbers=test_numbers,
                is_stdin=test_is_stdin
            )
    
    else:
        assert chess_board(
            numbers=test_numbers,
            is_stdin=test_is_stdin
        ) == expected_result

# Main Program
if __name__ == '__main__':
    try:
        logger.info("Вызов функции 'chess_board';")
        print(
            chess_board(
                numbers=[1, 2, 3, 4],
                is_stdin=False
            )
        )
        logger.info("Успешное завершение функции 'chess_board';")

    except Exception as err:
        logger.error("Ошибка выполнения функции 'chess_board';")

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Data Analyst, Data Engineer
Python
OOP
SQL
PostgreSQL
MySQL
Git
Docker
Microsoft Excel
PowerBi
Pandas