Есть ли короткая рука для n-го корня x в Python

простой вопрос по синтаксису.

в математике, если у меня есть два числа 3 и 2, и я хочу вычислить 3 в степени 2, то никакой символ не требуется, но я пишу два маленьких. В Python эта операция, похоже, представлена ** синтаксис.

>>> 3**2
9

если я хочу пойти в другом направлении и вычислить 2-й корень из 9, то по математике мне нужно использовать символ:

nth root of x

есть ли символ короткой руки в Python, похожий на ** что достигает этого, т. е.2<symbol>9. Или мне нужно использовать math модуль ?

7 ответов


ну, N-й корень x на самом деле x^(1/n), Так что вы можете сделать 9**(1/2.0) найти 2-й корень из 9, например. В общем, чтобы найти n-й корень x, просто сделайте:

x**(1/float(n))

вы также можете сделать 1.0/n вместо 1/float(n). Требуется, чтобы результат был float, а не int.


также: x**(n**-1), что то же самое, но короче, чем x**(1/float(n))


если вы предпочитаете применять эту операцию функционально, а не с помощью оператора infix (** символ), вы можете передать базу и показатель в качестве аргументов в :

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

Я также люблю находить новые применения для этот инфикс взломать в Python хотя это больше удовольствия в сторону, чем сверхмощное решение. Но вы можете эффективно сделать свой собственный личный символ для этого, сделав следующее:

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

в основном sqrt (9) эквивалентен 9^.5

>>>9**.5
3.0

вы должны сделать

16**(0.5) #If you print it, you get 4, So you can use this formula.

есть. Это просто **=)

любой N-й корень является возведением в степень по 1/n, поэтому, чтобы получить квадратный корень из 9, вы используете 9**(1/2) (или 9**0.5), чтобы получить кубический корень, вы используете 9 ** (1/3) (который мы не можем написать с более простой дробью), и чтобы получить N-й корень,9 ** (1/n).

также обратите внимание, что с Python 3 Добавление периодов к целым числам, чтобы сделать их плавающими, больше не требуется. Говоря:1/3 работает так, как вы на самом деле ожидаете, давая 0.333... as результат, а не ноль. Для старых версий Python, вы должны помнить, чтобы использовать этот период (но также крайне интересно, почему вы используете устаревшую версию языка программирования)


def nthrootofm(a,n):
    return pow(a,(1/n))
a=81
n=4
q=nthrootofm(a,n)
print(q)

функция pow () принимает два параметра .