我正在尝试用Python编写一个程序,它将实数近似精确到10 ^ -3。这是我做的,我不知道什么是错的。有人能帮我吗 ? 我使用“发条添加”。有人能告诉我它有什么问题吗?提前谢谢。
from math import *
def restriction(x,a,b,c,d):
if x<(a+b)/(c+d):
return [x,a,b,a+c,b+d]
if x>(a+b)/(c+d):
return [x,a+c,b+d,c,d]
def cancres(x,a,b,c,d,prec):
if x==a/b or x==c/d:
return x
elif x<a/b or x>c/d:
return False
else:
w=restriction(x,a,b,c,d)
i=0
if (w[3]/w[4]-w[2]/w[1])>prec:
w=restriction(x,w[1],w[2],w[3],w[4])
print w
i+=1
return w
print cancres(sqrt(3),3,2,2,1,10^(-3))
答案 0 :(得分:0)
您的计划中有多处错误。首先,表达式10^(-3)
不会评估为0.001。 ^
用于两个整数之间的异或操作。 Python使用**
进行求幂。
其次,看起来你正在使用Python 2.x. Python 2.x默认使用整数除法。所以3/2
返回1而不是1.5。 Python 3.x更改行为以返回浮动。使用Python 2.x,您需要将每个分区的一个操作数转换为float或使用from __future__ import division
将Python 3.x样式分区与Python 2.x一起使用。
第if (w[3]/w[4]-w[2]/w[1])>prec:
行有三个错误。它应该是w[4]/w[3]
而不是w[3]/w[4]
。在与prec
比较之前,您需要取绝对值。并且您尝试执行重复循环,因此您应该使用while
而不是if
。
我还没有解决其他一些设计和风格问题,但代码似乎有效。
from __future__ import division
from math import *
def restriction(x,a,b,c,d):
if x<(a+b)/(c+d):
return [x,a,b,a+c,b+d]
if x>(a+b)/(c+d):
return [x,a+c,b+d,c,d]
def cancres(x,a,b,c,d,prec):
if x==a/b or x==c/d:
return x
elif x<a/b or x>c/d:
return False
else:
w=restriction(x,a,b,c,d)
i=0
while (abs(w[4]/w[3]-w[2]/w[1]))>prec:
w=restriction(x,w[1],w[2],w[3],w[4])
print w
i+=1
return w
print cancres(sqrt(3),3,2,2,1,10**(-3))