def binary_search(user_list, item):
    """ Бинарный поиск элемент в списке

    Функция получает отсортированный список и значение, которое необходимо найти.
    Если значение присутствует в массиве, то функция возвращает его позицию.
    Бинарный поиск работает только в том случае, если список отсортирован.
    При бинарном поиске каждый раз исключается половина чисел.

    :param user_list: отсортированный список
    :param item: значение, которое нужно найти
    :return: позицию item

    """
    low = 0  # Начальная граница
    high = len(user_list) - 1  # Конечная граница

    while low <= high:  # Пока эта часть не сократится до одного элемента...
        mid = (low + high) // 2  # проверяем средний элемент
        guess = user_list[mid]
        if guess == item:  # Значение найдено
            return mid
        if guess > item:  # Много
            high = mid - 1
        else:  # Мало
            low = mid + 1
    return None