Python:Tribonacci序列 - 这些代码有什么区别?

时间:2017-12-21 11:51:37

标签: python python-3.x indexing slice

我正在尝试解决代码战(http://www.codewars.com)挑战:

6 kyu:Fibonacci,Tribonacci和朋友

挑战:

想想一个Quadribonacci,从4个元素的签名开始,每个后面的元素是前面4个的总和,一个Pentabonacci(很好的Cinquebonacci可能听起来有点意大利语,但听起来也很糟糕)带有签名5个元素和每个后面的元素是前面5个的总和,依此类推。

你必须建立一个Xbonacci函数,它接受X个元素的签名 - 并记住每个下一个元素是最后X个元素的总和 - 并返回如此种子序列的前n个元素。

但我似乎无法理解这两个功能之间的区别。 第一个被拒绝,而第二个被接受。

拒绝代码:

def Xbonacci(signature, num):    
    a_list = signature[:] 
    final_list = signature[:]

    for i in range(0, num-len(signature)):     

        a = sum( a_list[ :len(a_list)] )                 
        final_list.append(a)                  
        a_list.append(a)    
        a_list.remove(a_list[0])

    return final_list

接受代码:

def Xbonacci(signature,n):
    result = signature[:]

    for x in range(n-len(signature)):
        current_fib = 0
        start = len(result) - len(signature)
        for y in result[start:]:
            current_fib += y
        result.append(current_fib)

    return result[:n]

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

n < len(signature)时,这两个函数的行为不同。

功能1:

>>> Xbonacci([1, 2, 3], 1)
[1, 2, 3]

功能2:

>>> Xbonacci([1, 2, 3], 1)
[1]

由于挑战说&#34;返回所播种序列的前n个元素&#34;,第一个函数不正确。