Поиск в сломанном массиве

Dimetra

Новичок
Пользователь
Ноя 22, 2022
9
1
3
Подскажите пожалуйста есть такое замечание по коду, строка
Python:
def binary_search(arr: list, x: int, left: int, right: int) -> int:
""функции внутри функций не стоит делать если в этом нет необходимости. Лучше вынести их на уровень модуля"" Как это правильно сделать?

Сам код:
Python:
def broken_search(nums: list, x: int) -> int:

    left: int = 0
    right: int = len(nums)

    def binary_search(arr: list, x: int, left: int, right: int) -> int:
        if left >= right:
            return -1
        mid = (left + right) // 2
        if arr[mid] == x:
            return mid
        elif x < arr[mid]:
            return binary_search(arr, x, left, mid)
        else:
            return binary_search(arr, x, mid + 1, right)

    def divide_search(arr: list, x: int, left: int, right: int) -> list:
        if right - left == 1:
            return [left, right]
        mid = (left + right) // 2
        if arr[left] <= arr[mid]:
            return [left, mid + 1] if arr[left] <= x <= arr[mid] else divide_search(nums, x, mid, right)
        else:
            return [mid, right] if arr[mid] <= x <= arr[-1] else divide_search(arr, x, left, mid)

    left_divide, right_divide = divide_search(nums, x, left, right)
    return binary_search(nums, x, left_divide, right_divide)


def test():
    arr = [19, 21, 100, 101, 1, 4, 5, 7, 12]
    assert broken_search(arr, 5) == 6
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
сделайте класс из broken_search, структура такая же у вас с функциями
или вообще функция broken_search убрать, остальные две функции вынесите выше, а две переменные просто будут глобальные
 

Форум IT Специалистов