number_A = 3
low = 0
high = 20
# number_list用于存放数字列表
number_list = list(range(high+1))
while low <= high:
mid = int((low+high)/2) # 检查中间的元素
number_B = number_list[mid] # 取出中间的数字
print(number_A,number_B)
if more_less(number_A,number_B)=="猜对了":
print("猜对了")
break
if more_less(number_A,number_B)=="猜大了":
high = mid -1
else:
low = mid + 1
3 10
3 4
3 1
3 2
3 3
猜对了
使用这种方法后,只用猜5次就猜对了。
一元三次方程求根
有这样一个一元三次方程:
X3−5X2−4X+20=0
我们先画出它左边的图形看看
import matplotlib.pyplot as plt
%matplotlib inline
x_list = range(-5,10)
y_list = [x**3 -5*x**2-4*x+20 for x in x_list]
plt.plot(x_list,y_list)
plt.hlines(0,-5,10)
可以看到这个方程有三个根,我们需要编写一个程序来找到这三个根。
def F(x):
return x**3 -5*x**2-4*x+20
for x in range(-500,1000):
x = x/100
x1 = x-0.0005
x2 = x+0.0005
if (F(x1)*F(x2)<0):
print("根等于{x}".format(x=x))
根等于-2.0
根等于2.0
根等于5.0
这种思路仍然是遍历搜索的思路,速度比较慢,更快思路是采用分治法。
for x in range(-5,10):
x1 = x-1
x2 = x+1
if F(x1)*F(x2)<0:
while x2-x1>=0.001:
mid = (x2+x1)/2
if F(x1)*F(mid)<=0:
x2 = mid
else:
x1 = mid
print("根等于{x}".format(x=mid))