【问题标题】:Python Iterative Fibonacci [closed]Python迭代斐波那契[关闭]
【发布时间】:2018-09-02 01:08:05
【问题描述】:

听着,我知道有上千篇关于此的帖子,我花了三个小时查看所有帖子。我知道这段代码不起作用有一个简单的原因,但我想不通。当它运行时,我只希望它返回第 n 个术语。我是 python 新手,也许有一些我没有得到的逻辑。所以当我这样做时:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    i = 0
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        print nextterm

print(fib(n))

我明白了:

1
1
2
3
5
None

当我这样做时:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    i = 0
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        return nextterm

print(fib(n))

我只得到“1”

我花了很多时间在这上面,我很困惑。有人请修理我!

【问题讨论】:

  • 在第一个中,您永远不会返回值。在第二个中,您立即返回。

标签: python fibonacci


【解决方案1】:

你只是忘了返回值:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    i = 0
    nextterm = 1
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        #print nextterm

    return nextterm

print(fib(n))

【讨论】:

  • 注意 python 3.x 是 print(nextterm) 而不是 2.7 是 print nextterm
  • fyi i = i + 1 与 i+=1 相同,你会看到很酷的小东西
  • 这并不总是正确的:stackoverflow.com/questions/15376509/…
  • 哈哈公平,但整数确实如此
【解决方案2】:

因为return只返回一次,所以第一次返回就完成了,

更清晰的例子:

 def f():
     return 'good'
     return 'bad'

现在:

print(f())

返回:

'good'

另一方面,这也是一种解决方法:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    l=[]
    i = 0
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        l.append(nextterm)
    return '\n'.join(str(i) for i in l)
print(fib(n))

或者 print 不做另一个打印:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    i = 0
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        print(nextterm)
fib(n)

【讨论】:

  • 我不完全确定任何一个选项都是 OP 真正想要的,但你肯定会帮助理解如何获得他们想要的东西,干得好。
【解决方案3】:

在第一种情况下你没有返回任何东西,所以当你print(fib(n))时,由于python没有找到任何return语句,它返回None,这是你看到的最后一个打印,其他的是那些循环内。在第二种情况下,您在while 循环内有return 语句,因此当它执行第一次迭代时,它返回1,超出框架并且不执行其他迭代,所以它只打印'1' .

【讨论】:

  • @OzzyWalsh 答案不一定必须包含代码,很多时候只需要指出缺少什么,请阅读How to Answer :)
【解决方案4】:
def fibonacci():
    num = int(input("How many numbers that generates?:"))
    i = 1
    if num == 0:
        fib = []
    elif num == 1:
        fib = [1]
    elif num == 2:
        fib = [1,1]
    elif num > 2:
        fib = [1,1]
        while i < (num - 1):
            fib.append(fib[i] + fib[i-1])
            i += 1
    return fib
print(fibonacci())

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
猜你喜欢
  • 1970-01-01
  • 2016-02-19
  • 2018-08-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
相关资源
最近更新 更多