我已经设置了一个任务,迭代计算给定公式的x的值:x3 - 3x + 4 = 0 **使用反复试验。代码将首先插入-1.5作为其第一个猜测,然后从那里开始或向下工作以尝试获得答案0.每次在公式中插入数字时代码应输出“Answer ##太大/小“
我已经启动了代码但是我有点卡住,因为它只执行了两次然后停止。我使用了一个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)
不清楚你到底在找什么,但这应该让你开始:
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)
你混淆了while
和if
的概念。你需要两个......好吧,对于我认为你想要做的事情,请尝试以下大纲。
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
以获得一点“摆动空间”。
我认为您需要将所有内容放在一个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
的公差值(与所用步骤相同)检查0
是否足够接近0.1
。在python 3.5或更高版本中,您可以使用数学模块中的math.isclose执行相同的检查。