(Python)为什么我必须在Bisection Search的while循环中重新定义变量?

时间:2018-02-23 13:45:17

标签: python

我目前正在进行edx MITx:6.00.1x课程,我遇到了Bisection Search讲座的问题。

所以我试图使用Bisection Search找到一个数字的立方根,并想问为什么Code 1有效,而Code 2没有。

代码1:

x = 27
low = 1
high = 27
epsilon = 0.01
guess = (high + low) / 2

while abs(guess**3 - x) >= epsilon:
    if guess**3 > x:
        high = guess
    else:
        low = guess

print(guess)

代码2

x = 27
low = 1
high = 27
epsilon = 0.01
guess = (high + low) / 2

while abs(guess**3 - x) >= epsilon:
    if guess**3 > x:
        high = guess
    else:
        low = guess
    guess = (high + low) / 2

print(guess)

代码2工作,因为我通过添加guess =(high + low)/ 2重新定义了while循环结束时的 guess变量

但是在代码1中, guess变量已经定义为循环外的guess =(high + low)/ 2。只要高变量低变量发生变化, guess变量的值是否应自动更改?

2 个答案:

答案 0 :(得分:1)

好的,让我用一个类比来试图解释一下。

让我们说有一个带有3个饼干的饼干罐,你被告知你现在可以从那个罐子里拿出任意数量的饼干。你把它们都带走了。你现在有3个饼干。

如果我现在去再加3个饼干。你突然拿着6个饼干吗?或者你必须去拿饼干。

这与此变量的概念相同。 您将变量设置为已定义的值,然后稍后更改这些值。

答案 1 :(得分:1)

声明

guess = (high + low) / 2

绑定名称" guess"指向底层对象的值,该值是=右侧表达式的计算结果,即(high + low) / 2,它是一个数字。在Python中,数字是immutable。除非你再次将名称guess绑定到另一个值,否则它会保持对同一个基础数字对象的引用。

在Python中,您不需要定义变量。绑定名称。