这就是我所拥有的,我不知道它有什么问题。它一直说FibonacciArray [1] = 1行有一个错误,“列表赋值索引超出范围”。请帮忙!我正在尝试将结果放入数组中。例如,如果用户输入4作为要生成的斐波纳契数的数量,我希望它在数组中输出1 1 2 3。
amount = int(input("How many Fibonacci numbers would you like me to create?:"))
FibonacciArray = [amount]
FibonacciArray[0] = 1 #setting first two values of the array to 1
FibonacciArray[1] = 1
FibonacciCounter = 2
if amount == 1:
print (FibonacciArray[0])
elif amount == 2 or amount > 2:
print (FibonacciArray[0])
print (FibonacciArray[1])
else:
while amount > 0: #or while amount != 0
#print out one fibonacci number
FibonacciArray[2] = FibonacciArray[0] + FibonacciArray[1]
print (FibonacciArray[2])
amount = amount - 1 #decrementing amount
FibonacciArray[FibonacciCounter] = FibonacciArray[FibonacciCounter - 2] + FibonacciArray[FibonacciCounter - 1]
print (FibonacciArray[FibonacciCounter])
FibonacciCounter = FibonacciCounter + 1 #increment FibonacciCounter
amount = amount - 1 #decrement amount again
print (FibonacciArray)
答案 0 :(得分:1)
你认为你在循环中的条件存在缺陷吗?
只有 else
小于1 时,循环才会达到第三个条件,即amount
部分。
if amount == 1:
print (FibonacciArray[0])
elif amount == 2 or amount > 2:
print (FibonacciArray[0])
print (FibonacciArray[1])
else:
while amount > 0:
# Remaining code
我认为你对这门语言还是比较陌生的,你的代码很多似乎冗余或对输出没用。
FibonacciArray = [amount]
FibonacciArray[0] = 1 #setting first two values of the array to 1
FibonacciArray[1] = 1
上面将为您提供IndexError
,因为您可以为现有索引分配值。您可以用以下内容替换这三行:
FibonacciArray = [1, 1]
因此,为了向列表添加新元素,您可以使用append()
方法。以下是代码的pythonic替代方案。
FibonacciArray = []
FibonacciArray.append(1)
FibonacciArray.append(1)
要从列表中访问最后两个元素,您只需使用 negetive index 。
>>> array = [1, 2, 3, 4, 5]
>>> array[-1]
5
>>> array[-2]
4
所以要找到Fibonacci系列中的新元素,你可以这样做,
FibonacciArray.append(FibonacciArray[-1] + FibonacciArray[-2])
print (FibonacciArray)
Here是工作代码的链接。如果您需要帮助,请查看它。
答案 1 :(得分:1)
FibonacciArray = [amount]
这不会产生长度为amount
的数组。它只创建一个数组,其中一个条目的值为amount
。您正在寻找的是这样的:
FibonacciArray = [0]*amount
其次,IIRC,else
个案仅在每个if
和elif
声明解析为False
之前发生。在这里的陈述中:
elif amount == 2 or amount > 2:
您指定amount
必须大于或等于2.这可以保证您的else
阻止永远不会执行。
您的代码存在一些问题,但这些问题是最严重的问题。
您的代码应该看起来更像这样:
amount = int(input("How many Fibonacci numbers would you like me to create?:"))
if (amount <= 0):
print("Amount cannot be less than 1!")
else:
FibonacciArray = [0]*amount
FibonacciArray[0] = 1
FibonacciCounter = 2
if (amount > 1):
FibonacciArray[1] = 1
if (amount > 2):
while FibonacciCounter < amount:
FibonacciArray[FibonacciCounter] = FibonacciArray[FibonacciCounter - 2] + FibonacciArray[FibonacciCounter - 1]
FibonacciCounter = FibonacciCounter + 1 #increment FibonacciCounter
print(FibonacciArray)
编辑:添加了对负数的处理,我意识到我没有正确处理案例amount == 1
。修正了它。
答案 2 :(得分:0)
创建阵列时,您可以这样设置:
FibonacciArray = [None] * amount
这将修复您的错误并将'amount'数组值设置为None。 但是代码中还有其他错误。除非输入的数字为0,否则不会调用while循环,因为您的else条件将首先捕获任何大于2的数字。