52

在数学中,如果我想计算 3 的 2 次方,则不需要符号,但我写了 2 small: 。在 Python 中,此操作似乎由**语法表示。

>>> 3**2
9

如果我想去另一个方向并计算 9 的第二个根,那么在数学中我需要使用一个符号:2√9 = 3

Python中是否有一个速记符号,类似于**实现这个 ie 2<symbol>9?还是我需要使用该math模块?

4

8 回答 8

96

xis的第 n 个根,例如x^(1/n),您可以9**(1/2)找到 9 的第 2 个根。通常,您可以将 x 的第 n 个根计算为:

x**(1/n)

注意1/float(n):在 Python 2 中,您必须这样做才能1.0/n使结果为 afloat而不是int. 有关更多详细信息,请参阅Python 为什么给出平方根的“错误”答案?

于 2013-10-08T18:11:46.987 回答
8

您还可以使用一些对数:

的第 N 个根x

exp(log(x)/n)

例如:

>>> from math import exp, log
>>> x = 8
>>> n = 3
>>> exp(log(x)/n)
2.0
于 2019-05-31T18:30:40.383 回答
5

另外:x**(n**-1), 相同但短于x**(1/float(n))

于 2013-10-08T18:13:56.087 回答
4

如果您更喜欢以函数方式应用此操作而不是使用中缀运算符(**符号),则可以将基数和指数作为参数传递给pow函数:

In [23]: (9**(0.5)) == pow(9, 0.5)
Out[23]: True

我也喜欢在 Python 中找到这个 Infix hack 的新用途,尽管它比重型解决方案更有趣。但是您可以通过执行以下操作有效地为此制作自己的个人符号:

class Infix:
    def __init__(self, function):
        self.function = function
    def __ror__(self, other):
        return Infix(lambda x, self=self, other=other: self.function(other, x))
    def __or__(self, other):
        return self.function(other)
    def __rlshift__(self, other):
        return Infix(lambda x, self=self, other=other: self.function(other, x))
    def __rshift__(self, other):
        return self.function(other)
    def __call__(self, value1, value2):
        return self.function(value1, value2)


root_of = Infix(lambda x,y: y**(1.0/x))

print 2 |root_of| 9
3.0
于 2013-10-08T18:23:49.727 回答
3

有。这只是**=)

任何第 n 根是 的幂1/n,所以要得到 9 的平方根,你使用9**(1/2)(或9**0.5) 得到立方根,你使用9 ** (1/3)(我们不能用更简单的分数来写),并得到第 n 根,9 ** (1/n).

另请注意,从 Python 3 开始,不再需要向整数添加句点以使其成为浮点数。说1/3是按照你实际期望的方式工作,给出0.333...结果,而不是零。对于 Python 的旧版本,您必须记住使用那个时期(但也非常想知道为什么要使用编程语言的旧版本)

于 2013-10-08T18:12:09.607 回答
2

基本上 sqrt(9) 相当于 9^.5

>>>9**.5
3.0
于 2013-10-08T18:12:03.620 回答
2

你应该做

16**(0.5) #If you print it, you get 4, So you can use this formula.
于 2013-10-08T18:15:58.500 回答
1
def nthrootofm(a,n):
    return pow(a,(1/n))
a=81
n=4
q=nthrootofm(a,n)
print(q)

pow() 函数有两个参数。

于 2018-08-01T09:29:08.077 回答