Написать функцию info(dots, dot), которой передаются два параметра — последовательность точек dots и ещё одна точка dot. Точка — это кортеж или список из двух вещественных чисел, последовательность dots может быть итератором. В dots лежат координаты вершин (возможно, невыпуклого) многоугольника без самопересечений (это проверять не надо). Функция должна возвращать три значения: периметр многоугольника, информацию о том, выпуклый ли он, и принадлежит ли точка многоугольнику.
1 tri = (0, 0), (0, 4), (3, 0)
2 dot, dot2, odot, odot2 = (1, 1), (1, 2), (2, 1), (-1, -1)
3 print("{:.2f} {} {}".format(*info(tri, dot)))
4 print("{:.2f} {} {}".format(*info(tri, odot)))
5 print("{:.2f} {} {}".format(*iter(info(tri + (odot,), dot2))))
6 print("{:.2f} {} {}".format(*info(tri + (odot,), odot2)))
Наверное, эту задачу можно решать вообще без применения itertools. Однако поскольку мы упражняемся именно в итераторах, просьба решать её с максимальным использованием итераторов.
12.00 True True 12.00 True True 12.65 False True 12.65 False False
Кажется мне, что задача сложная, поэтому… (нажмите «Комментарии» в шапке страницы, чтобы прочитать спойлер)

Как делал я:
Написал функцию, которая определяет угол $$\hat{ABC}$$ между тремя точками A, B, и C с учётом направления (если угол > 180°, берётся дополнительный к нему). Здесь мне помог math.atan2
Научился делать циклическую последовательность троек точек (то есть всех углов многоугольника)
Принадлежность точки D: сумма углов $$\hat{ADB}$$ , где A и B — это все стороны многоугольника; если эта сумма блиска к 360°, точка лежит внутри многоугольника, а если к 0° — вне его
Получилось так: