python中的变量赋值查询

时间:2017-06-26 18:11:08

标签: python variable-assignment fibonacci

我在python中编写Fibonacci代码。以下解决方案是我的。

enter image description here

下面的另一个解决方案来自python.org。

enter image description here

有人能告诉我为什么它会产生不同的答案,即使分配变量的逻辑是相同的吗?

4 个答案:

答案 0 :(得分:7)

这两个程序并不相同。 equals(#Creating Workflow here , workflow Start-Something { Start-Transcript C:\temp\agent.log -IncludeInvocationHeader $computers = gc "C:\temp\list.txt" $source = "\\pathtodfsrootstore" $dest = "c$\windows\temp\test2533212" foreach -Parallel($computer in $computers) { if (Test-Connection -Cn $computer -count 1 -quiet) { Copy-Item -Force $source -Destination \\$computer\$dest -Recurse #psexec.exe \\$computer cmd /c "c:\windows\temp\testv2533212\test.bat" } else { #You should log it somewhere } } Stop-Transcript } #Calling Workflow Start-Something )的右侧一起进行评估。 这样做的:

=

与以下不同:

a=b
b=a+b

这实际上与:

相同
a,b = b,a+b

您的示例实际上涵盖在Python documentation

  

第一行包含多个赋值:变量a和b同时获取新值0和1.在最后一行再次使用它,证明右边的表达式在任何之前都是先评估的的任务发生了。右侧表达式从左到右进行评估。

答案 1 :(得分:7)

a = b # Assigns the value of 'b' to 'a'
b = a + b # Adds the new value of 'a' to 'b'

而,

a, b = b, a+bb的值分配给a。将a现有值添加到b

答案 2 :(得分:5)

它在第二个例子中起作用的原因是因为a=b在两者都完成之前不进行评估。因此,当它到达b=a+b部分时,a仍然是其之前的值。在您的第一个示例中,您在使用之前覆盖a。在python中,当您以这种方式声明变量时,您实际上将它们用作元组。这意味着在整行完成之前,它们会保留原始值。一旦元组被解压缩,它们就会被覆盖。

答案 3 :(得分:2)

我在您的解决方案中看到了额外的标签,而且您的程序逻辑也是错误的。据我所知,通过写fib(5),您希望系列中的第5个斐波那契(即5)不是小于5的数字(即3)。

a=b
b=a+b

a,b = b,a+b

不相等。

请看下面的代码。

def fibonacci(num):
    a,b=0,1;
    counter = 2;
    while(a<=):
        a,b = b,a+b
        counter += 1
    return b

print fibonacci(5)