我目前正在进行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变量的值是否应自动更改?
答案 0 :(得分:1)
好的,让我用一个类比来试图解释一下。
让我们说有一个带有3个饼干的饼干罐,你被告知你现在可以从那个罐子里拿出任意数量的饼干。你把它们都带走了。你现在有3个饼干。
如果我现在去再加3个饼干。你突然拿着6个饼干吗?或者你必须去拿饼干。
这与此变量的概念相同。 您将变量设置为已定义的值,然后稍后更改这些值。
答案 1 :(得分:1)
声明
guess = (high + low) / 2
绑定名称" guess
"指向底层对象的值,该值是=
右侧表达式的计算结果,即(high + low) / 2
,它是一个数字。在Python中,数字是immutable。除非你再次将名称guess
绑定到另一个值,否则它会保持对同一个基础数字对象的引用。
在Python中,您不需要定义变量。绑定名称。