Python斐波那契序列

时间:2014-12-18 03:31:59

标签: python terminal fibonacci

我是python的初学者,我正在尝试制作一个脚本,将根据给定的数字将斐波那契序列打印为列表或序列中的指定数字。这可能听起来令人困惑,所以让我向你们展示代码,然后解释一下。

number = 1
last = 0
before_last = 0

def Fibonacci(number, last, before_last):
    Question = raw_input('Would you like a List or the Number: ')

    X = raw_input('Give a number: ')
    print number

    if Question == "List":
        for counter in range(0, int(X) - 1):
            before_last = last
            last = number
            number = before_last + last
            print number

    if Question == "Number":
        for counter in range (int(X) - 2, int(X) - 1):
            before_last = last
            last = number
            number = before_last + last
            print number

Fibonacci(number, last, before_last)

基本上,您选择列表或编号,然后为代码提供您的编号。采用该数字,并在该范围内使用。但是,使用单数,它只会打印第一。为什么这样,以及如何修复它,以便如果我将代码10作为输入,它将在Fibonacci序列中打印第10个数字?解释以及如何解决这个问题会非常有帮助,如果你们中的任何一个人能给出有用的建议,那就太棒了。

6 个答案:

答案 0 :(得分:2)

Question == "Number"时,您的for循环遍历序列range (int(X) - 2, int(X) - 1)。当您为10输入X时,评估为range(8, 9),长度为1。结果,循环仅执行一次。由于两个循环在其他方面都是相同的,并且count从未在循环体内使用,因此得到的结果与使用X = 1运行另一个循环时的结果相同。

在这两种情况下,您希望循环遍历range(0, x-1),在每次迭代时累积序列中下一个数字的值。唯一的区别是您是否打印最终结果或打印中间值。

保持代码的现有结构不变,这很简单:

if Question == "Number":
    for counter in range (0, int(X) - 1): # Loop over the same range
        before_last = last
        last = number
        number = before_last + last
    print number # But print the number outside the loop

您可能需要注意,您的代码可能与经验丰富的程序员编写代码的方式不同。没关系。你刚刚开始,还有很多东西需要学习。我不想用细节淹没你。但是,首先,我认为您应该考虑将numberlastbefore_last变量移动到Fibonacci函数中(即,将它们作为函数的局部变量) ,删除函数参数和全局变量)。您可以进行其他改进(其中一些可能会在其他答案中提及),但从那里开始。

答案 1 :(得分:1)

此解决方案可能会解决您的问题并帮助解决问题。

Question = raw_input("Enter Type: ")
num = raw_input("Terms: ")
def fibonacci(n):
    if n <= 1:
        return n
    else:
        print(fibonacci(n-1) + fibonacci(n-2))



# take input from the user
if Question == "List":
    for counter in range(0, int(num)):
        print fibonacci(counter)
#find specific number in list and print it out
if Question == "Number":
    if(num < 2):
        return num:
    else:
        for n in range(num):
            print(fibonacci(n)[num]) 

抱歉,我没有使用Python 2年,我发现这个问题很有意思

来源 - &gt; Link

答案 2 :(得分:0)

您可以尝试使用这样的递归函数:

def fib(x):
    if x<2:
            return x
    return fib(x-2) + fib(x-1)

然后,您可以将if语句更改为这些语句。

if Question == "List":
    for counter in range(0, int(X)):
        print fib(counter)
if Question == "Number":
    print fib(X)

然后,您可以根据需要的数字或列表计算斐波纳契系列的每个值。

答案 3 :(得分:0)

您的代码只打印一个数字,因为范围始终等于1.例如range(int(X) - 2,int(X) - 1)将始终等于1.

答案 4 :(得分:0)

关于你如何做纤维序列的答案,但你的实际错误是在这一行:

for counter in range (int(X) - 2, int(X) - 1):

它实际应该是什么来自

range(0, int(X) - 1):

因为您想要计算到该数字,然后显示它。目前,您只计算序列的第一个数字并显示该序列。您可能还希望将print语句移出for循环。

答案 5 :(得分:0)

您可以使用列表跟踪序列中的所有数字,然后打印您想要的任何数字。试试这个:

number = 1
last = 0
before_last = 0

def Fibonacci(number, last, before_last):
    Question = raw_input('Would you like a List or the Number: ')
    l=[1]
    X = raw_input('Give a number: ')

    if Question == "List":
        print number
        for counter in range(0, int(X) - 1):
            before_last = last
            last = number
            number = before_last + last
            print number

    if Question == "Number":
        for counter in range (0, int(X)):
            before_last = last
            last = number
            number = before_last + last
            l.append(number)
        print l[int(X)-1]

Fibonacci(number, last, before_last)

输出:

#Would you like a List or the Number: List
#Give a number: 6
#1
#1
#2
#3
#5
#8

#Would you like a List or the Number: Number
#Give a number: 6
#8