我是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。谁能帮我找到错误的东西?谢谢!
答案 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