Python代码无法正常工作

时间:2012-08-21 14:36:55

标签: python

我是Python语言的新手,我遇到了这个问题,下面的代码没有返回预期值:

def rabbits(n):
    first = 1
    second = 1

    if n == 1 or n == 2:
        return 1
    while n > 2:
        first, second = second, first + second
        n -= 1

    if n > 5:
        die1 = 1
        die2 = 1
        if n == 6 or n == 7:
            return second - 1
        while n > 7:
            die1, die2 = die2, die1 + die2
            n -= 1
        return second - die2
    return second

我希望兔子(6)会返回7,但它会返回8。谁能帮我找到错误的东西?谢谢!

4 个答案:

答案 0 :(得分:8)

我认为如上所述解决您的问题并不重要。

但是这里有一些关于调试此类问题的建议,这更有用:

在计划的每个阶段打印您的值

然后,您可以在脑海中逐步完成您的价值观,并找出问题所在。

答案 1 :(得分:4)

首先将n缩减为2或更低(while n > 2: .. n -= 1),然后测试n > 5

后面的测试永远不会通过,因为n现在总是2或更低。

第一次减少计算斐波那契序列,该序列中的第6个值为8(在1,1,2,3和5之后)。

要避免您的问题,请改为使用简单的范围循环:

for i in range(n, 2, -1):
    first, second = second, first + second

现在i将从6变为3而不更改n

答案 2 :(得分:3)

据我所知,它永远不会返回7.你正在计算斐波纳契数列。它的前几个术语是1,1,2,3,5,8,13。没有7。

斐波纳契序列以1,1开始,然后每个下一个项计算为前两个项的总和。这正是您使用first, second = second, first + second语句所做的。因此rabbits(n) <=> fibonacci(n)

由于if n > 5分支内的代码,您可能期望7。但是,该分支永远不会被执行,因为由于它之前的while n > 2循环,n总是小于或等于2。

答案 3 :(得分:0)

您正在更改while n > 2语句中的n,使用变量副本,或以更好的方式实现它。

def rabbits(n):
    first = 1
    second = 1

    if n == 1 or n == 2:
        return 1
    m = n
    while m > 2:
        first, second = second, first + second
        m -= 1

    if n > 5:
        die1 = 1
        die2 = 1
        if n == 6 or n == 7:
            return second - 1
        while n > 7:
            die1, die2 = die2, die1 + die2
            n -= 1
        return second - die2
    return second