如何编写一个程序,询问用户要生成多少个斐波纳契数,然后再生成它们

2024-10-03 23:30:50 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的东西,我不知道怎么了。它一直说FibonacciArray[1]=1行有一个错误,“list assignment index out of range”。有人帮忙吗!我正在尝试将结果放入数组中。例如,如果用户输入4作为要生成的fibonacci数的个数,我希望它在数组中输出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)

Tags: oroftoindex错误数组outamount
3条回答
FibonacciArray = [amount]

这不会生成长度为amount的数组。它只创建一个数组,其中一个条目的值为amount。你要找的是这样的东西:

^{pr2}$

第二,IIRC,else情况只在每个ifelif语句解析为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)

编辑:增加了对负数的处理,我意识到我没有正确处理这个案例。修好了。

创建阵列时,可以这样设置:

FibonacciArray = [None] * amount

这将修复您的错误,并将“amount”数组值的数量设置为“无”。 但是你的代码中还有更多的错误。除非输入的数字是0,否则不会调用while循环,因为else条件将首先捕获任何大于2的数字。

你不认为你在循环中的条件有缺陷吗。 只有当amount小于1时,循环才会达到第三个条件,即else部分。

if amount == 1:
    print (FibonacciArray[0])
elif amount == 2 or amount > 2:
    print (FibonacciArray[0])
    print (FibonacciArray[1])
else:
    while amount > 0:
        # Remaining code

我假设您对这门语言相当陌生,而且您的许多代码似乎都是多余的或对输出毫无用处。

^{pr2}$

上面的内容将提供IndexError,因为您可以为现有索引赋值。可以将这三行替换为:

FibonacciArray = [1, 1]

所以为了向列表添加一个新元素,可以使用append()方法。下面是您的代码的python替代方案。

FibonacciArray = []
FibonacciArray.append(1)
FibonacciArray.append(1)

为了访问列表中的最后两个元素,您可以简单地使用negative index。

>>> array = [1, 2, 3, 4, 5]
>>> array[-1]
5
>>> array[-2]
4

所以要找到Fibonacci级数的新元素,你可以

FibonacciArray.append(FibonacciArray[-1] + FibonacciArray[-2])
print (FibonacciArray)

Here是指向工作代码的链接。如果你需要帮助,请看一下。

相关问题 更多 >