为什么Python会给出“错误”的答案?
x = 16 sqrt = x**(.5) returns 4 sqrt = x**(1/2) returns 1
是的,我知道 import math 并使用 sqrt . 但我正在寻找上述答案 .
import math
sqrt
sqrt=x**(1/2) 正在进行整数除法 . 1/2 == 0 .
sqrt=x**(1/2)
1/2 == 0
所以你在第一个实例中计算x(1/2),在第二个实例中计算x(0) .
所以这没有错,这是对不同问题的正确答案 .
你必须写: sqrt = x**(1/2.0) ,否则执行整数除法,表达式 1/2 返回 0 .
sqrt = x**(1/2.0)
1/2
0
这种行为在Python 2.x中是"normal",而在Python 3.x中 1/2 的计算结果为 0.5 . 如果您希望Python 2.x代码的行为类似于3.x w.r.t.除写 from __future__ import division - 然后 1/2 将评估为 0.5 并且为了向后兼容, 1//2 eill评估为 0 .
0.5
from __future__ import division
1//2
而对于记录,计算平方根的首选方法是:
import math math.sqrt(x)
import math math.sqrt( x )
这是答案链的一个微不足道的补充 . 然而,由于主题是非常常见的谷歌搜索,我相信这值得添加 .
/ 在Python 2中执行整数除法:
/
>>> 1/2 0
如果其中一个数字是浮点数,它按预期工作:
>>> 1.0/2 0.5 >>> 16**(1.0/2) 4.0
你所看到的是整数除法 . 要默认获得浮点除法,
或者,您可以将1或2的1/2转换为浮点值 .
sqrt = x**(1.0/2)
这可能有点迟,但计算平方根的最简单和准确的方法是牛顿方法 .
你有一个数字,你想要计算它的平方根 (num) ,你猜测它的平方根 (estimate) . 估计可以是大于0的任何数字,但有意义的数字会显着缩短递归调用深度 .
(num)
(estimate)
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)
number为30,估计值为5.每次递归调用的结果为:
5.5 5.477272727272727 5.4772255752546215 5.477225575051661
最后的结果是数字平方根的最精确计算 . 它与内置函数math.sqrt()的值相同 .
也许一个简单的记忆方法:在分子(或分母)之后加一个点16 **(1./2)#4 289 **(1./2)#17 27 **(1./3)#3
我希望下面提到的代码能回答你的问题 .
from __future__ import print_function 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)
您可以使用NumPy计算数组的平方根:
import numpy as np np.sqrt([1, 4, 9])
9 回答
sqrt=x**(1/2)
正在进行整数除法 .1/2 == 0
.所以你在第一个实例中计算x(1/2),在第二个实例中计算x(0) .
所以这没有错,这是对不同问题的正确答案 .
你必须写:
sqrt = x**(1/2.0)
,否则执行整数除法,表达式1/2
返回0
.这种行为在Python 2.x中是"normal",而在Python 3.x中
1/2
的计算结果为0.5
. 如果您希望Python 2.x代码的行为类似于3.x w.r.t.除写from __future__ import division
- 然后1/2
将评估为0.5
并且为了向后兼容,1//2
eill评估为0
.而对于记录,计算平方根的首选方法是:
这是答案链的一个微不足道的补充 . 然而,由于主题是非常常见的谷歌搜索,我相信这值得添加 .
/
在Python 2中执行整数除法:如果其中一个数字是浮点数,它按预期工作:
你所看到的是整数除法 . 要默认获得浮点除法,
或者,您可以将1或2的1/2转换为浮点值 .
这可能有点迟,但计算平方根的最简单和准确的方法是牛顿方法 .
你有一个数字,你想要计算它的平方根
(num)
,你猜测它的平方根(estimate)
. 估计可以是大于0的任何数字,但有意义的数字会显着缩短递归调用深度 .该线用这两个参数计算更准确的估计 . 您可以将new_estimate值传递给函数并计算另一个比前一个更准确的new_estimate,或者您可以像这样制作递归函数定义 .
例如,我们需要找到30的平方根 . 我们知道结果在5到6之间 .
number为30,估计值为5.每次递归调用的结果为:
最后的结果是数字平方根的最精确计算 . 它与内置函数math.sqrt()的值相同 .
也许一个简单的记忆方法:在分子(或分母)之后加一个点16 **(1./2)#4 289 **(1./2)#17 27 **(1./3)#3
我希望下面提到的代码能回答你的问题 .
您可以使用NumPy计算数组的平方根: