我正在尝试解决代码战(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]
我错过了什么吗?
当n < len(signature)
时,这两个函数有不同的行为。
功能1:
>>> Xbonacci([1, 2, 3], 1)
[1, 2, 3]
功能2:
>>> Xbonacci([1, 2, 3], 1)
[1]
由于挑战说“返回如此种子序列的前n个元素”,第一个函数是不正确的。