首页 > 解决方案 > 我的函数没有正确评估某些值

问题描述

背景

对于在线编码活动,我被要求创建一个函数,如果斐波那契数列中任意两个连续数字的乘积等于该数字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)。

标签: pythonpython-3.xfunctionfibonacci

解决方案


我所做的编辑修复了适用于 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。


推荐阅读