【问题标题】:Why a, b = b, a + b is not equal to a = b, b = a + b when I running a fib() in python?当我在 python 中运行 fib() 时,为什么 a, b = b, a + b 不等于 a = b, b = a + b?
【发布时间】:2018-02-28 00:12:37
【问题描述】:

我是 python 编程的新手,我正在尝试基于生成器编写 fib。我试过这个:

def fib(n):
  a = 0
  b = 1
  for _ in range(n):
     yield a
     print(a)
     a, b = b, a + b
     print((a,b))

还有这个:

def fib(n):
  a = 0
  b = 1
  for _ in range(n):
    yield a
    a = b 
    b = a + b
print(list(fib(a)))

结果不一样,为什么会这样?

【问题讨论】:

  • 把这两种情况的步骤写在纸上,你就会明白为什么了。您在使用之前覆盖了 a 的值。
  • 您的缩进没有意义。请修复。
  • Python a, b = b, a +b的可能重复

标签: python fibonacci


【解决方案1】:

Python 不会破坏这一点

a, b = b, a + b 

进入这个:

a = b
b = a + b

相反,Python 编译器首先通过转换这个来计算表达式的右手边:

a = 0
b = 1
a, b = b, a + b

进入这个:

a = 0
b = 1
a, b = 1, 1

然后以正确的顺序分配它。 所以ab 变成了1。

【讨论】:

    【解决方案2】:

    一步一步找出答案!

    a = 0
    b = 1
    
    # loop starts:                         # loop starts
    yield a    # yields 0,   a=0, b=1      yield a        # yields 0,   a=0, b=1
    a = b      #             a=1, b=1      a, b = b, b+a  #             a=1, b=1
    b = a + b  #             a=1, b=2
    # loop
    yield a    # yields 1,   a=1, b=2      yield a        # yields 1,   a=1, b=1
    a = b      #             a=2, b=2      a, b = b, b+a  #             a=1, b=2
    b = a + b  #             a=2, b=4
    # loop
    yield a    # yields 2    a=2, b=4      yield a        # yields 1,   a=1, b=2
    a = b      #             a=4, b=4      a, b = b, b+a  #             a=2, b=3
    b = a + b  #             a=4, b=8
    # etc...
    

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2010-12-08
      • 1970-01-01
      • 2021-10-06
      • 2021-09-10
      • 2019-10-27
      • 2021-11-28
      • 2017-04-06
      • 2011-05-30
      相关资源
      最近更新 更多