我已经设置了一个任务,以反复计算给定公式的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)
答案 0 :(得分:0)
您已经混淆了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
来增加“摆动空间”。
答案 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
(与所使用的步骤相同)来检查0
与0.1
是否足够接近。在python 3.5或更高版本中,您可以使用math模块中的math.isclose来执行相同的检查。