Ошибка в функции на Python

Программа определяет, является ли последовательность геометрической или алгебраической. Всё работает, но лишь до того момента, пока все элементы в списке не станут типа float, в таком случае проверка на алгебраическую начинает работать неверно. Пример: 1.1 2.2 3.3 4.4 – алгебраическая прогрессия с отношением 1.1, но ф-я возвращает False.

sequence = str(input('Введите последовательность чисел: '))
lst = [float(i) for i in sequence.split()]


def is_geometric(lt):
    ratio = lt[1] / lt[0]

    for i in range(1, len(lt)):

        if lt[i] / lt[i-1] != ratio:
            return is_algeb(lt)

    return f'Данная последовательность является геометрической. Её отношение равно {ratio}'


def is_algeb(lt):
    ratio = lt[1] - lt[0]

    for i in range(1, len(lt)):

        if lt[i] - lt[i-1] != ratio:
            return 'Данный набор чисел не является последовательностью'

    return f'Данная последовательность является алгебраической. Её отношение равно {ratio}'


print(is_geometric(lst))

работа программы


Ответы (2 шт):

Автор решения: GrAnd

Сравнение чисел с плавающей запятой "в лоб" не работают из-за машинного представления числа. Используйте соответствующую функцию для этого.

        if not math.isclose(lt[i] - lt[i-1], ratio):
→ Ссылка
Автор решения: Scrzii

Вам нужно либо сравнивать числа учитывая погрешность, либо использовать тип данных Decimal, хранящий числа с абсолютной точностью.

→ Ссылка