python - 我的函数没有正确评估某些值
问题描述
背景
对于在线编码活动,我被要求创建一个函数,如果斐波那契数列中任意两个连续数字的乘积等于该数字1 ,则该函数取值并返回 true 。
例子
一个例子是 5895,在斐波那契数列中没有两个数字与此相乘,但最接近它但大于它的两个数字是 89 和 144,因此您将返回 [89,144, False]。
问题
但是我遇到了一个问题:我的函数不适用于数字 1 和 0。您可以看到斐波那契数列中的数字都乘以这两个值,但我的函数不返回任何值。
问题
有没有人有修复?
def productFib(prod):
num = [0]
n1 = 0
n2 = 1
while max(num) < prod:
nth = n1 + n2
n1 = n2
n2 = nth
num.append(n1)
q = 0
w = 1
while w+1 < len(num):
for nums in num:
if num[q] * num[w] == prod:
return [num[q], num[w], True]
if num[q] * num[w] > prod:
return [num[q], num[w], False]
q += 1
w += 1
1.更多:如果两个连续数字确实乘以目标数字,您将返回这两个数字和布尔值True
(num1, num2, True)。如果没有两个数字与目标数字相乘,则您将从斐波那契数列中返回两个连续数字,它们乘以与目标数字最接近的数字,该数字必须大于目标数字,并且必须返回布尔值False
(num1,num2,False)。
解决方案
我所做的编辑修复了适用于 prod=0 和 prod=1 的功能。
def productFib(prod):
num = [0]
n1 = 0
n2 = 1
while max(num) <= prod:
nth = n1 + n2
n1 = n2
n2 = nth
num.append(n1)
q = 0
w = 1
while w+1 <= len(num):
for nums in num:
if num[q] * num[w] == prod:
return [num[q], num[w], True]
if num[q] * num[w] > prod:
return [num[q], num[w], False]
q += 1
w += 1
我没有检查大量输入,但它似乎有效。
来自评论:while 循环没有运行。在零的情况下:w+1 不小于 len(num),因为两者都等于 2。在 1 的情况下:max(num) 不小于 prod,因为两者都是 1。
推荐阅读
- flutter - 如何实现与谷歌地图过滤器选项完全相同的可选框,如下图所示。还以编程方式添加任意数量的选项
- python - 使用特定数据框计算 cov_matrix
- r - 将矩阵从 csv(数据帧)加载到 R
- javascript - 检查mysql数据库中是否存在相同的流派
- ios - 我究竟如何导入 SearchKit?
- javascript - 如何在 Node Js 中运行用户的 Python 和 Java 代码
- c++ - 如何使 const 类与引用的数据一起正常工作?
- javascript - 通过道具传递数据然后设置为状态变得未定义?
- javascript - 有没有办法在同一页面中一次又一次地呈现相同的 ChartJS 组件?
- java - 比较数组项,索引超出范围