Напишите класс Geom(база, знаменатель), задающий геометрическую прогрессию, нумерация членов которой идёт с нуля. Сконструированный объект — бесконечная вычислимая последовательность, поддерживающая итерацию, индексирование и секционирование (в том числе конструкции с умолчаниями). Дополнительно должно поддерживаться секционирование вида прогрессия[начало, ..., конец], что соответствует конструкции прогрессия[начало:конец], причём параметр «начало ,» и/или «, конец» можно опускать (бесконечные прогрессия[начало, ....] и прогрессия[...]; и конечная прогрессия[..., конец]). Индексирование должно возвращать соответствующий член прогрессии, а секционирование — последовательность членов (возможно, бесконечную). Конструкция прогрессия[::отрицательный шаг] возвращает пустую последовательность. Известно, что база и знаменатель однотипны (проверять не надо), того же типа должны быть и члены последовательности.
g = Geom(3, 2) print(*zip("012345", g)) print(*g[:6]) print(*g[10::-2]) print(*zip(g[...], "0123")) print(*g[3, ..., 11])
В примере g и g[...] бесконечны, поэтому их пришлось ограничить zip().
На всякий случай: «...» — это Ellipsis
('0', 3) ('1', 6) ('2', 12) ('3', 24) ('4', 48) ('5', 96) 3 6 12 24 48 96 3072 768 192 48 12 3 (3, '0') (6, '1') (12, '2') (24, '3') 24 48 96 192 384 768 1536 3072