【问题标题】:python fibonacci - what is the difference? [duplicate]python fibonacci - 有什么区别? [复制]
【发布时间】:2017-01-23 12:02:44
【问题描述】:

我正在学习python,我有一个问题:

有什么区别

a,b = 0,1
for x in range(100):
    print(a)
    a=b
    b=a+b

a,b = 0,1
for x in range(100):
    print(a)
    a,b = b, a+b

第一个结果不好,但是为什么?

【问题讨论】:

  • 这很适合用笔和纸完成。记下变量的值,然后逐步更新它们。
  • 在第一个示例中,您先为 A 分配一个新值,然后再为 B 分配一个值。在第二种情况下,您同时进行。
  • 因为a 已更改,因此a + b 将有所不同。在将结果应用到左侧之前,赋值计算右侧的结果。

标签: python fibonacci


【解决方案1】:

因为您首先设置了a = b,所以您的新b 的值将是旧b 的两倍。您将a 覆盖到早期。正确的实现应该使用临时变量t

a,b = 0,1
for x in range(100):
print(a)
    t=a
    a=b
    b=t+b

这基本上就是您使用序列分配所做的事情。

在您的原始代码中:

a,b = 0,1
for x in range(100):
    print(a)
    a=b # a now is the old b
    b=a+b # b is now twice the old a so b'=2*b instead of b'=a+b

因此,这将导致每次乘以 2 进行跳跃(在第一步将 1 加载到 a 之后)。


一个等价的问题是变量的交换。如果你想让ab 的值,反之亦然,你不能这样写:

#wrong swap
a = b
b = a

因为您在第一次分配后丢失了a 的值。您可以使用临时的t

t = a
a = b
b = t

或者在 Python 中使用序列赋值:

a,b = b,a

首先创建元组t = (b,a),然后分配给a,b

【讨论】:

  • 您使用的是 Windows 还是 Linux?
  • @MYGz:当然是 Linux,为什么?
  • 为什么要写<code><pre> 有一个叫做文本区域格式化程序的chrome扩展,你可以选择代码部分并用tab缩进。
  • @MYGz:通常情况下,当使用优势 kinesis 时,它与编写代码本身(格式化部分)一样快:) 每次键盘和鼠标之间的交换都是浪费时间。
  • 你是在告诉我选择代码并按一个标签有时对你来说比写<pre><code></code></pre>要慢。我永远无法达到那种打字速度:D
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2010-12-10
  • 2016-08-24
  • 2016-02-16
  • 2021-08-11
相关资源
最近更新 更多