我正在做一个挑战,我想把我的代码(工作)转换成一个更有效的。给定一个数字prod(对于乘积),我们搜索两个Fibonacci数F(n)
和F(n+1)
,验证F(n) * F(n+1) = prod
与否。你知道吗
这是我的原始代码
def productFib(prod):
fibonacci_numbers = [0, 1]
for i in range(2,prod+1):
fibonacci_numbers.append(fibonacci_numbers[i-1]+fibonacci_numbers[i-2])
pairing = [[fibonacci_numbers[i], fibonacci_numbers[i+1]] for i in range((len(fibonacci_numbers)-1))]
for ind, pair in enumerate(pairing):
if pair[0]*pair[1] ==prod:
ans=[pair[0], pair[1], True]
return ans
elif all(pair[0]*pair[1] !=prod for pair in pairing)==True:
match=next(x for x in pairing if x[0]*x[1]>prod)
ans=[match[0], match[1], False]
return ans
break
def productFib(prod):
fibonacci_numbers = [0, 1]
for i in range(2, prod+1):
fibonacci_numbers.append(fibonacci_numbers[i-1]+fibonacci_numbers[i-2])
pairing = [[fibonacci_numbers[i], fibonacci_numbers[i+1], True] if [fibonacci_numbers[i]*fibonacci_numbers[i+1]]==prod \
else [next(fibonacci_numbers[n] for n in range(len(fibonacci_numbers)-1) if fibonacci_numbers[n]*fibonacci_numbers[n+1]>prod), next(fibonacci_numbers[n+1] for n in range(len(fibonacci_numbers)-1) if fibonacci_numbers[n]*fibonacci_numbers[n+1]>prod) , False] if all(fibonacci_numbers[i]*fibonacci_numbers[i+1] !=prod) ==True \
for i in range((len(fibonacci_numbers)-1))]
return pairing
我希望它会回来:
[F(n), F(n+1), true] or [F(n), F(n+1), false]
根据一个数字prod(for product),我们搜索两个Fibonacci数字F(n)和F(n+1)验证->;F(n)*F(n+1)=prod
我相信这个重做模仿了您的原始代码,但要简单得多:
输出
你暗示了两个目标:“更有效率”和“列表理解”,我用的是“更有效率”。你知道吗
通常,有一些方法可以简化问题:
F(n)*F(n+1)=prod,n的个数不超过一个。我认为你的想法是可以的,你可以产生你的fib列表,同时判断如果f(n)*f(n+1)=prob,也许你的代码可以更简单
输出为
你看,13*21=273>;>;50,你可以把变量
top_limit
设置得更小相关问题 更多 >
编程相关推荐