はじめに
数学において、等比数列とは、最初の項以降の各項が、前の項に一定の非ゼロの数(公比と呼ばれる)を掛けることで得られる数の列です。このチャレンジでは、start と end が含まれ、2 つの項の間の比が step である指定された範囲の数を含むリストを初期化する関数を作成します。
等比数列
geometric_progression という名前の関数を書きましょう。この関数は 3 つのパラメータを受け取ります。
end:範囲の終端を表す整数(含まれます)start:範囲の始端を表すオプショナルな整数(含まれます)。デフォルト値は1step:2 つの項の間の公比を表すオプショナルな整数。デフォルト値は2
関数は、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]
まとめ
このチャレンジでは、2 つの項の間の比が step である指定された範囲の数を含むリストを初期化する関数を作成する方法を学びました。適切な長さのリストを作成するために、range()、math.log()、math.floor() とリスト内包表記を使用し、各要素に対してステップを適用しました。