我正在尝试解决代码战(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]
我错过了什么吗?
答案 0 :(得分:1)
n < len(signature)
时,这两个函数的行为不同。
功能1:
>>> Xbonacci([1, 2, 3], 1)
[1, 2, 3]
功能2:
>>> Xbonacci([1, 2, 3], 1)
[1]
由于挑战说&#34;返回所播种序列的前n个元素&#34;,第一个函数不正确。