【问题标题】:Python fibonacci unexpecred indentPython斐波那契意外缩进
【发布时间】:2019-03-25 04:02:23
【问题描述】:

我是编码和学习 python 的新手。我有作业要打印斐波那契 使用称为 Memoization 的方法获得 N = 11 和 N = 200 的数字。我找到了解决方案,但是当我运行代码时,我得到了两件事:1。

 Traceback (most recent call last):
      **File "python", line 7
        if n== 1:
        ^**
**IndentationError: unexpected indent**

第二个我在跑步时得到了空的结果。代码有什么问题:

def fibonacci (n) :
 # If we have cached the value, then return it 
 if n in fibonacci_cache:
   return fibonacci_cache[n]

   # Compute the Nth term 
      if n== 1:
       value = 1
       elif n == 2:
         value = 1 
         elif n > 2:
           value = fibonacci(n-1) + fibonacci(n-2)

           # Cache the value and return it 
           fibonacci_cache[n] = value
           return value

             print(n, ":", fibonacchi(11))

【问题讨论】:

  • ".. 第二个我在运行的时候得到了空结果.." 但是你刚才说你的代码没有在运行?
  • 缩进在python中非常重要,你的 if n==1 必须从行首开始。
  • 您似乎已经“找到”了代码here。我怀疑作业的重点是让您自己编写代码,而不是抄袭它。
  • 按照错误提示修复缩进。

标签: python arrays indentation fibonacci


【解决方案1】:

请参阅 @Alexis Drakopoulos 以直接修复您的代码。如果你想简化实现 memoization,你可以使用一个叫做 lru_cache 的装饰器。

from functools import lru_cache

@lru_cache(maxsize=None)
def fibonacci(n):
    if n<= 2:
        return 1
    return fibonacci(n-1)+fibonacci(n-2)

【讨论】:

    【解决方案2】:
    def fibonacci(n):
    
        # If we have cached the value, then return it
        if n in fibonacci_cache:
            return fibonacci_cache[n]
    
        # Compute the Nth term
        if n == 1:
            value = 1
        elif n == 2:
            value = 1
        elif n > 2:
            value = fibonacci(n-1) + fibonacci(n-2)
    
            # Cache the value and return it
            fibonacci_cache[n] = value
            return value
    
        print(n, ":", fibonacchi(11))
    

    在 Python 中缩进就是一切,我不确定缓存的最后几行是否正确。

    我建议使用 4 个空格(使用制表符)以保持一致。

    Python 会查看缩进以了解您要执行的操作。

    【讨论】:

    • 感谢您的回答。当他们询问 print 11 正在工作时我能做什么但是当我打印 200 时它卡住 def fibonacci(n): if n==1 or n==2: return 1 return fibonacci(n-1)+fibonacci(n-2 ) 打印斐波那契(200)
    • 你可以尝试在你的函数中打印来检查它卡在哪里。
    • 卡在一个高数上计算
    【解决方案3】:

    欢迎使用 Python 和 StackOverflow 进行编程 :-)

    您的代码存在三个问题:

    1.缩进: Python 需要你注意缩进,这样特定级别的代码会缩进相同的量。

    对于在 if 语句之后运行的代码,您需要将下一个代码块缩进。然后,当您拥有 elif(与 if 语句处于同一级别)时,您需要将缩进带回以匹配 if 的级别。

    您可以使用空格或制表符缩进,但您需要保持一致(即坚持一个)

    可能是您使用的编辑器在粘贴代码时弄乱了意图,也有可能在将代码放入 StackOverflow 时某些缩进弄乱了,但您需要查看像下面这样。在这种情况下,每个意图是两个空格(所以缩进首先是没有空格,然后是两个空格,然后是四个空格等等

    2。错字: 最后的语句有错字(所以你实际上并没有调用你定义的函数!)

    3. Fibbonacci_cache:它没有被定义,所以它被添加到顶部

    希望对您有所帮助 - 祝您在接下来的编程之旅中好运……这需要毅力,但我相信您会及时掌握!

    fibonacci_cache = {}
    
    def fibonacci (n) :
      # If we have cached the value, then return it 
      if n in fibonacci_cache:
        return fibonacci_cache[n]
    
      # Compute the Nth term 
      if n== 1:
        value = 1
      elif n == 2:
        value = 1 
      elif n > 2:
        value = fibonacci(n-1) + fibonacci(n-2)
    
      # Cache the value and return it 
      fibonacci_cache[n] = value
      return value
    
    print("n:", fibonacci(11))
    

    【讨论】:

    • 非常感谢您的回答:)
    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 2013-08-03
    • 2013-02-24
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2016-04-28
    • 2011-04-26
    相关资源
    最近更新 更多