2016-11-03 14 views
-3
def powers(L): 
    ''' 
    (list of ints) -> bool 
    Return True if the given list of ints is a list of powers of some 
    int x of the form [x^0, x^1, x^2, x^3, ...] and False otherwise. 
    >>>powers[1, 3, 9, 27, 81] 
    True 
    ''' 
    i = 1 
    x = L[0] 
    while i < len(L): 
     if L[i] == x**(i+1): 
      i += 1 
      return True 
     else: 
      return False 

あなたが私に指摘している間違いを変更しましたが、まだ動作しません。WhileループでPython

+0

なぜあなたは '+ ='を使用していますか? 'new_l [i]'の新しい値を代入するときに使用しています。それはちょうど '='でなければなりません。そして、あなたが比較しているときにそれを使用しています、それは '=='でなければなりません。また、値を比較する前に 'i'をインクリメントしています。 – Barmar

+0

もう一つの問題は、 'new_l [i]'に代入しますが、 'new_L [i]'を使うことです。 Pythonでは大文字と小文字が区別されます。 – Barmar

+0

'new_L'という配列は必要ありません。 'L [i] == x ** i'の場合だけテストしてください。 – Barmar

答えて

0
def powx(l): 
    i = 0 
    x = l[1] 
    newL = [] 
    while i < len(l): 
     if x**i == l[i]: 
      newL.append(x**i) 
     else: 
      return False 

     i+=1 
    if newL == l: 
     print(newL) 
     return True 

= [1、2、4、9]
B = [1、3、9、27]
POWX(A)//は偽
POWX(B)を返すべき//

+0

インデントを修正する – Barmar

+0

ありがとうございました!それは本当に多くの助けになります! @ダビ・ローライム – Jason

+0

ありがとう!それは多くの助けになります! @Barmar – Jason

0

ループ内でTrueを返さないでください。これは、リストの残りの部分をテストすることなく機能を終了させるためです。あなたの関数は、リストの2番目の要素をチェックします。

すべてが数字の威力であることを知る方法は、ループが終了するまで待つことです。ループ中にFalseを返さなかった場合は、すべてが基準に一致します。何らかの理由で、この一般的なコンセプトは、新しいプログラマーにとっては非常に難しいようですが、私はこのバグパターンを常にここに見ています。

def powers(L): 
    ''' 
    (list of ints) -> bool 
    Return True if the given list of ints is a list of powers of some 
    int x of the form [x^0, x^1, x^2, x^3, ...] and False otherwise. 
    >>>powers[1, 3, 9, 27, 81] 
    True 
    ''' 
    i = 0 
    x = L[1] 
    while i < len(L): 
     if L[i] != x**i: 
      return False 
     i += 1 
    return True 
0

明らかにあなたのリストの2番目の要素(およびない最初の1)は、それがx**1なので、あなたがxのすべての権限のリストを構築し、あなたのリストにそれを比較することができ、xですので。

def powers(L): 
    return [L[1]**i for i in range(len(L))] == L