【发布时间】:2016-02-03 21:01:00
【问题描述】:
我目前正在参加 edx 上的 MITx 课程,但我对一项练习有疑问。你能告诉我为什么我在这段代码中陷入无限循环吗?我猜二分搜索循环不能正常工作,但我真的不知道为什么。代码如下:
balance = 5000
annualInterestRate = 0.18
low = balance/12
high = (balance * (1 + annualInterestRate / 12) ** 12) / 12
guess = (low + high)/2
def getBal(guess, balance, annualInterestRate):
mon = 0
while mon < 12:
mon += 1
ub = balance - guess
balance = ub + (annualInterestRate/12) * ub
return balance
z = getBal(guess, balance, annualInterestRate)
while abs(round(z, 2)) > 0:
if round(z, 2) > 0:
low = guess
else:
high= guess
guess = (high+low)/2
print "Lowest Payment: " + str(round(guess,2))
【问题讨论】:
-
while abs(round(z, 2)) > 0:你永远不会将 z 的值更改为非正数 -
好的,所以这个练习是关于找出在一年内偿还全部信用卡余额的最低月供。为此,我们应该使用二分搜索。最后一个while循环。而且我认为每次新值都会进入我分配给变量 z 的函数时通过更改猜测...所以我正在更改 z,不是吗?
-
你没有改变 z。 while 循环中没有一行写着
z =是吗? -
另外,getBal 中的 while 循环的目的是什么?您重新计算相同的余额 12 次span>
-
真的!我以为它会自动改变,只是我不断变化的猜测,但我不得不将它写在 while 循环的语句中。谢谢!