7
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]を返します。コードを台無しにしているのは私の範囲だと思います。

4

5 に答える 5

11

使用するだけ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) ]
于 2012-11-13T02:13:18.287 に答える
6

累乗演算子を使用しない、さらに別のシンプルで効率的なソリューション (O(1) のすべてのステップ):

def problem(n):
    return [1 << i for i in range(n)]

1 << i 操作は、正の整数に対して 2 ^ i に変換されるビット単位の操作です。

https://en.wikipedia.org/wiki/Arithmetic_shift

于 2017-01-04T11:42:32.553 に答える
1

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)

于 2012-11-13T02:20:00.713 に答える
0

@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]

于 2012-11-13T03:20:40.320 に答える