在python上循环

时间:2016-11-03 01:34:28

标签: python

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

我已经改变了你为我指出的错误,但它仍然没有用。你能帮助我吗?

3 个答案:

答案 0 :(得分: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

a = [1,2,4,9]
b = [1,3,9,27]
powx(a)//应返回False
powx(b)//应该返回[1,3,9,27] True

答案 1 :(得分: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

答案 2 :(得分:0)

很明显,列表中的第二个元素(以及第一个元素)是x,因为它是x**1,您可以构建x的所有幂的列表{1}}并将其与您的列表进行比较。

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