为什么Python会给出“错误”的答案?
x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
是的,我知道import math
并使用sqrt
。但我正在寻找以上答案。
import math
然后x = math.sqrt(25)
将其赋值5.0
给x。
为什么Python会给出“错误”的答案?
x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
是的,我知道import math
并使用sqrt
。但我正在寻找以上答案。
import math
然后x = math.sqrt(25)
将其赋值5.0
给x。
Answers:
sqrt=x**(1/2)
在做整数除法。1/2 == 0
。
因此,您在第一个实例中计算x (1/2),在第二个实例中计算x (0)。
没错,这是对其他问题的正确答案。
sqrt = x**(float(1)/2)
您必须编写:sqrt = x**(1/2.0)
,否则将执行整数除法并1/2
返回表达式0
。
此行为是在Python 2.x的“正常”,而在Python 3.x的1/2
计算结果为0.5
。如果您希望Python 2.x代码的行为类似于3.x wrt除法写入from __future__ import division
-那么1/2
将评估0.5
为并向后兼容,1//2
评估为0
。
作为记录,计算平方根的首选方法是:
import math
math.sqrt(x)
这可能有点迟了,但是计算平方根的最简单,最准确的方法是牛顿法。
您有一个要计算其平方根的数字,(num)
并且猜出了其平方根(estimate)
。估计可以是大于0的任何数字,但是有意义的数字会大大缩短递归调用的深度。
new_estimate = (estimate + num / estimate) / 2
该行使用这两个参数计算出更准确的估算值。您可以将new_estimate值传递给该函数,然后计算另一个比上一个更准确的new_estimate,也可以像这样进行递归函数定义。
def newtons_method(num, estimate):
# Computing a new_estimate
new_estimate = (estimate + num / estimate) / 2
print(new_estimate)
# Base Case: Comparing our estimate with built-in functions value
if new_estimate == math.sqrt(num):
return True
else:
return newtons_method(num, new_estimate)
例如,我们需要找到30的平方根。我们知道结果在5到6之间。
newtons_method(30,5)
数字是30,估计是5。每个递归调用的结果是:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
最后的结果是最精确的数字平方根计算。它与内置函数math.sqrt()的值相同。
我希望下面提到的代码能够回答您的问题。
def root(x,a):
y = 1 / a
y = float(y)
print y
z = x ** y
print z
base = input("Please input the base value:")
power = float(input("Please input the root value:"))
root(base,power)