我需要添加线程到这段代码,但它不工作。老师建议创建一个列表来存储要使用的参数,但我不知道该怎么做
a = 1
b = 3
E = 0.07
def f(x):
return x**4
def quad(left, right, fleft, fright, lr_area):
mid = (left + right)/2
fmid = f(mid)
l_area = ((fleft + fmid)*(mid - left)/2)
r_area = ((fmid + fright)*(right - mid)/2)
if abs((l_area + r_area) - lr_area) > E:
l_area = quad(left, mid, fleft, fmid, l_area)
r_area = quad(mid, right, fmid, fright, r_area)
return l_area + r_area
S = quad(a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2)
print (S)
在你的建议下,我尽量不碰递归,通过流解决问题,但我得到了错误的答案。
下面新增代码import threading
import time
a = 1
b = 3
E = 0.07
def f(x):
return x**4
def quad(left, right, fleft, fright, lr_area):
mid = (left + right)/2
fmid = f(mid)
l_area = ((fleft + fmid)*(mid - left)/2)
r_area = ((fmid + fright)*(right - mid)/2)
atribute_list = []
if abs((l_area + r_area) - lr_area) > E:
l_area1 = threading.Thread(target=quad, args=(left, mid, fleft, fmid, l_area,))
r_area1 = threading.Thread(target=quad, args=(mid, right, fmid, fright, r_area,))
l_area1.start()
r_area1.start()
l_area1.join()
r_area1.join()
time.sleep(1)
print(atribute_list)
return atribute_list
S = quad(a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2)
print(S)
这是我的代码,如果有人感兴趣的话
import threading
a = 1
b = 3
E = 0.07
st = int(input("Write number: "))
def f(x):
return x**st
lparametrs_list = [a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2]
rparametrs_list = [a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2]
def llist_updater(l_list):
lparametrs_list.clear()
for i in l_list:
lparametrs_list.append(i)
return lparametrs_list
def rlist_updater(r_list):
rparametrs_list.clear()
for i in r_list:
rparametrs_list.append(i)
return rparametrs_list
def quad(left, right, fleft, fright, lr_area):
mid = (left + right)/2
fmid = f(mid)
l_area = ((fleft + fmid)*(mid - left)/2)
r_area = ((fmid + fright)*(right - mid)/2)
if abs((l_area + r_area) - lr_area) > E:
l_list = [left, mid, fleft, fmid, l_area]
lthr = threading.Thread(target=llist_updater, args=(l_list,))
lthr.start()
lthr.join()
l_area = quad(*lparametrs_list)
r_list = [mid, right, fmid, fright, r_area]
rthr = threading.Thread(target=rlist_updater, args=(r_list,))
rthr.start()
rthr.join()
r_area = quad(*rparametrs_list)
return l_area + r_area
S = quad(a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2)
print(S)