方程中x值的迭代

时间:2019-02-25 17:21:24

标签: python iteration python-3.4 equation equation-solving

我已经设置了一个任务,以反复计算给定公式的x值: x 3-3x + 4 = 0 **(使用反复试验)。 该代码将首先插入-1.5作为其第一个猜测值,然后从那里向上或向下尝试以获取答案0。每次在方程式中插入数字时,代码应输出“答案##太大/太小” “

我已经启动了代码,但是我有点卡住了,因为它只会执行两次,然后停止。我使用了while循环,但我认为我没有正确使用它,或者它可能是解决此问题的错误方法。任何建议/代码片段将不胜感激。

import cmath
end = ''

num = 0
guess = -1.5
calculation = (guess**3 - guess * 3 + 4)
print(calculation)
while calculation < 0:
    print("Guess is too small")
else:
    print("Guess is too large")

while calculation != 0 and calculation < 0:
    guess = guess + 0.1 
    calculation = (guess**3 - guess * 3 + 4)
else:
    guess = guess-0.1
    calculation = ((guess**3)-3*guess+4)
    print(calculation)

3 个答案:

答案 0 :(得分:0)

您已经混淆了whileif的概念。两者都需要...好吧,出于我要尝试做的事情,请尝试以下概述。

while calculation != 0:
    if calculation < 0:
        # Guess is too small; print message and adjust guess
    else:
        # Guess is too large; print message and adjust guess

我认为您可以为“ if”的每个分支填写逻辑。 特别要注意的是,这只有在您得到确切答案时才会终止。如果您想以较小的容忍度工作,则必须调整退出条件calculation != 0来增加“摆动空间”。

答案 1 :(得分:0)

不清楚您要寻找的是什么,但这应该可以帮助您入门:

import cmath

guess = -1.5

#put calculations that you use more than once in a function
def calc(a): 
    return round((a**3-a*3+4),1) #round your result

calculation=calc(guess)

while calculation !=0:
    if calculation<0:
        print('Number is too small')
        guess+=0.1
        calculation=calc(guess)
    elif calculation>0:
        print('Number is too large')
        guess-=0.1
        calculation=calc(guess)

答案 2 :(得分:0)

我认为您需要将所有内容放入单个while循环中,在其中检查您的计算是否与预期结果匹配,如果不正确则调整猜测,如果是则中断循环。

guess = -1.5

while True:
    calculation = ((guess**3)-3*guess+4)
    print(calculation)

    if abs(calculation - 0) < 0.1:
        print("Correct guess: ", guess)
        break

    elif calculation < 0:
        print("Guess is too small")
        guess = guess + 0.1 

    elif calculation > 0:
        print("Guess is too large")
        guess = guess - 0.1

请注意,我不会比较calculation == 0,因为当您为0.1选择guess的步长时,您的计算不太可能就是0。换句话说,calculation == 0将始终为false,循环将永远不会停止。因此,我使用公差值calculation(与所使用的步骤相同)来检查00.1是否足够接近。在python 3.5或更高版本中,您可以使用math模块中的math.isclose来执行相同的检查。