对于x的不同迭代,我尝试从当前值中减去前一个值,并在它们之间的差异足够小(可能为0.0001)之类的情况下停止循环。
尝试了几件事,例如将x表示为n的函数,但不确定如何做到这一点。
y=int(input('Enter number for cubed root:'))
x=1
N=0
D=0
while N < 50:
x=1/3*(2*(x) + y/(x**2))
N=N+1
print('Estimation:',x)
print()
if x(N))==x(N+1):
print('Difference negligible')
break
答案 0 :(得分:4)
我建议您使用其他变量来保存上一次循环迭代的值。
也许这对您有用:
previous_x = None
while N < 50:
...
if previous_x is not None:
if abs(x - previous_x) < 0.0001:
print('Difference negligible')
break
previous_x = x
答案 1 :(得分:4)
您可以构建自己的迭代器函数,该函数返回当前值和下一个值。像下面这样的东西应该起作用:
def take_current_and_next(it):
last = None
for current in it:
if last is not None:
yield last, current
last = current
values = list(range(6))
for current, next_ in take_current_and_next(values):
print(current, next_)
给出:
0 1
1 2
2 3
3 4
4 5
如果您的迭代器可以返回None值,则上面的代码将无法正常工作。以下代码也应处理“无”值:
def take_current_and_next(it):
it = iter(it)
current = next(it)
for next_ in it:
yield current, next_
current = next_