所以我试图编写一个简单的平方根函数。我做了,我想将它与Python的原始版本进行比较。这是我的代码:
from math import sqrt
import timeit
def sqrt2(number):
i=1
while i**2<number:
i+=1
left=float(i-1)
right=float(i)
temp = left+(right-left)/2
while str(temp**2)!=str(number):
if temp**2>number:
right=temp
temp = left+(right-left)/2
elif temp**2<number:
left=temp
temp = left+(right-left)/2
else:
return temp
return temp
print timeit.timeit("sqrt2(12)", number=10000, setup='from __main__ import sqrt2')
print timeit.timeit("sqrt(12)", number=10000, setup='from math import sqrt')
它只需要数字和通知何时和整数^ 2较低且当(整数+ 1)^ 2高于我们的数字时,则将2之间的间隔除以2,并尝试中间数字等。它对我来说没问题,但是当我尝试timeit.timeit它停止时,光标在控制台显示,它仍在工作,但没有任何反应
答案 0 :(得分:1)
正如评论中所提到的,问题是你在这里进入一个无限循环:while str(temp**2)!=str(number):
您的问题是temp**2
中的float
,而number
是int
。由于您比较了字符串表示形式,因此第一个字符串表示形式为12.0
,第二个字符串形式为12
。
您可以在while
循环中修复条件(使用str()
确实非常奇怪),或者将float
传递给您的函数。
顺便说一下,你的实施很慢。使用float的快速运行返回:
你的:0.461127996445
python&#39; s:0.000571012496948