而Loop是真的和假的近似根

时间:2018-03-07 23:34:24

标签: python python-3.x while-loop

我对编程有点新意,我试图创建一个根近似代码。也就是说,我在微积分中做了类似于牛顿方法的事情。这个想法是,我要输入一个很大的值,减去直到我知道我已经通过根,然后添加一个较小的数量,直到我通过根,然后迭代直到我和#39; m在一些舒适的错误区域。

这里有一些伪代码:

def approx(a,b,i):
    while ((1/2)**i) >= (1/2)**10:
        while (another function is true):
            modify values, record root = r
        while (the same function above is false):
            modify values, record root = r
    return approx(a,b,i+1)
return(a,b,r)

这似乎不适用于Python,所以我想知道是否有人能指出我正确的方向。

编辑:包含我的实际代码:

from fractions import *
from math import sqrt
from math import fabs

def pweight(c,d):
  if d > c:
    return pweight(d,c)
  else:
    return [c+d,c,d]

def eweight(a,b):
  if a == b:
    return [a]
  elif b > a:
    return eweight(b,a)
  else:
    return [b] + eweight(a-b,b)
    def weight(a,b,c,d):
      if a*b/2 > c*d:
        print("No Embedding Exists")
        return (False)
      else:
        return (True, [c+d]+sorted((pweight(c,d) + eweight(a,b))[1:], reverse=True))
    def wgt(a,b,c,d):
      return ([c+d]+sorted((pweight(c,d) + eweight(a,b))[1:], reverse=True))



def red(a,i,k):
  d=a[0]-a[1]-a[2]-a[3]
  if any(item < 0 for item in a[1:]):
    # print ("No Embedding Exists")
    return (False, i)
  elif d >= 0:
    # print ("Embedding Exists! How many iterations?")
    # print(i)
    return (True, i)
  elif d<0:
    a=[a[0]+d,a[1]+d,a[2]+d,a[3]+d]+a[4:]
    a=[a[0]]+sorted(a[1:],reverse=True)
    k.append(a)
    i=i+1
    return red(a,i,k)
def works(a,b):
  L = sqrt(a/(2*b))
  w = weight(1,a,L,L*b)
  return w[0] and red(w[1],0,[])

def inf(a,b,i):
  while ((1/2)**(i+1)) >= (1/2)**(10)):
      while works(a,b):
        a = a - (1/2)**i
        L = sqrt(a/(2*b))
      while not works(a,b):
        a = a + (1/2)**(i+1)
        L = sqrt(a/(2*b))
      return inf(a,b,i+1)
  return (a,b,L)

我想输入&#34; inf(9,1,0)&#34;并让此代码返回接近(255 / 32,1,sqrt(255/64))的东西。主要问题是&#34;而工作(a,b):&#34;并且&#34;而不是工作(a,b):&#34;在函数&#34; inf(a,b,i)。&#34;我希望函数在&#34;之间交替运行&#34;并且&#34;虽然不起作用&#34;直到i = 9。

任何一般的想法都会受到赞赏(即,你如何在while循环中做某种交替功能)。

1 个答案:

答案 0 :(得分:0)

如果你想在它们之间交替,不要把它们各自放在它们自己的while循环中,放

while i < 9:
    if works(a, b):
        do something
    if not works(a, b):
        do something else

无论你在while条件下测试什么,都需要在循环中的某个地方发生变化。否则你会得到一个无限循环。