Ошибка в функции на 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, хранящий числа с абсолютной точностью.
