Генератор последовательности геометрической прогрессии

Beginner

This tutorial is from open-source community. Access the source code

Введение

В математике геометрическая прогрессия - это последовательность чисел, в которой каждое следующее число получается путём умножения предыдущего на фиксированное ненулевое число, называемое знаменателем прогрессии. В этом испытании вы создадите функцию, которая инициализирует список, содержащий числа в указанном диапазоне, где start и end включаются, а отношение между двумя последовательными числами равно step.

Геометрическая прогрессия

Напишите функцию под названием geometric_progression, которая принимает три параметра:

  • end: целое число, представляющее конец диапазона (включительно)
  • start: необязательное целое число, представляющее начало диапазона (включительно), со значением по умолчанию 1
  • step: необязательное целое число, представляющее знаменатель прогрессии между двумя последовательными числами, со значением по умолчанию 2

Функция должна возвращать список, содержащий числа в указанном диапазоне, где отношение между двумя последовательными числами равно step. Список должен начинаться с start и заканчиваться на end.

Если step равно 1, функция должна вернуть ошибку.

Вы должны использовать range(), math.log() и math.floor() и списочное выражение для создания списка соответствующей длины, применяя шаг для каждого элемента.

from math import floor, log

def geometric_progression(end, start=1, step=2):
  return [start * step ** i for i in range(floor(log(end / start)
          / log(step)) + 1)]
geometric_progression(256) ## [1, 2, 4, 8, 16, 32, 64, 128, 256]
geometric_progression(256, 3) ## [3, 6, 12, 24, 48, 96, 192]
geometric_progression(256, 1, 4) ## [1, 4, 16, 64, 256]

Резюме

В этом испытании вы узнали, как создать функцию, которая инициализирует список, содержащий числа в указанном диапазоне, где отношение между двумя последовательными числами равно step. Вы использовали range(), math.log() и math.floor() и списочное выражение для создания списка соответствующей длины, применяя шаг для каждого элемента.