2016-11-03 6 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 loop on 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]
б = [1, 3, 9, 27]
powx (а) // должен возвращать ложных
powx (б) // должен возвращать [1, 3, 9, 27] True

+0

Исправить ваш отступ – Barmar

+0

СПАСИБО! Это действительно помогает! @Davi Rolim – Jason

+0

Спасибо! Это помогает! @Barmar – Jason

0

Вы не должны возвращать True внутри цикла, потому что это закончит работу без проверки остальной части списка. Ваша функция просто проверяет второй элемент списка, потому что он возвращается в обоих случаях.

Способ узнать, что все является величиной числа, чтобы подождать до конца цикла. Если он никогда не возвращал 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

Поскольку очевидно, второй элемент (и не первый) в вашем списке x, так как это x**1, вы можете построить список всех степеней x и сравнить его в свой список.

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