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

问题描述 投票:-1回答:1

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

6 kyu:Fibonacci,Tribonacci和朋友们


挑战:

想想一个Quadribonacci,从4个元素的签名开始,每个后面的元素是前面4个的总和,一个Pentabonacci(很好的Cinquebonacci可能听起来更意大利,但它听起来也很糟糕)带有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]

我错过了什么吗?

python python-3.x indexing slice
1个回答
1
投票

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

功能1:

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

功能2:

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

由于挑战说“返回如此种子序列的前n个元素”,第一个函数是不正确的。

© www.soinside.com 2019 - 2024. All rights reserved.