def problem(n):
myList = []
for j in range(0, n):
number = 2 ** j
myList.append(number)
return myList
このコードで、最初のnの2の累乗に基づいて2の累乗を返すようにします。たとえば、4と入力すると、[2,4,6,8,16]を返すようにします。今のところ、4を入力すると、コードは[1,2,4,8]を返します。コードを台無しにしているのは私の範囲だと思います。
def problem(n):
myList = []
for j in range(0, n):
number = 2 ** j
myList.append(number)
return myList
このコードで、最初のnの2の累乗に基づいて2の累乗を返すようにします。たとえば、4と入力すると、[2,4,6,8,16]を返すようにします。今のところ、4を入力すると、コードは[1,2,4,8]を返します。コードを台無しにしているのは私の範囲だと思います。
使用するだけrange(1,n+1)
で、すべてうまくいくはずです。 range
エンドポイントが含まれていないため、少し混乱する人もいます。したがって、range(3)
リスト[0,1,2]
をrange(1,3)
返し、 を返します[1,2]
。
補足として、次の形式の単純なループ:
out = []
for x in ...:
out.append(...)
通常、リスト内包表記に置き換える必要があります。
out = [ 2**j for j in range(1,n+1) ]
累乗演算子を使用しない、さらに別のシンプルで効率的なソリューション (O(1) のすべてのステップ):
def problem(n):
return [1 << i for i in range(n)]
1 << i 操作は、正の整数に対して 2 ^ i に変換されるビット単位の操作です。
O(1) ですべてのステップを実行する場合:
def gen(x):
i = 2
for n in range(x + 1):
yield i
i <<= 1
>>> list(gen(4))
[2, 4, 8, 16, 32]
PS: 質問にタイプミスがあります。 に 4 つの数字が必要な場合は、代わりgen(4)
に を使用してくださいrange(x)
@JBernardo が指摘したように、質問にタイプミスがあると思います。
def squares(n):
power = n
square_list = []
for i in range(1,n+1):
square_list.append(2 ** i)
return square_list
print squares(4)
戻ります
[2,4,8,16]