Есть ли короткая рука для n-го корня x в Python
простой вопрос по синтаксису.
в математике, если у меня есть два числа 3 и 2, и я хочу вычислить 3 в степени 2, то никакой символ не требуется, но я пишу два маленьких. В Python
эта операция, похоже, представлена **
синтаксис.
>>> 3**2
9
если я хочу пойти в другом направлении и вычислить 2-й корень из 9, то по математике мне нужно использовать символ:
есть ли символ короткой руки в 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
.
если вы предпочитаете применять эту операцию функционально, а не с помощью оператора 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
есть. Это просто **
=)
любой 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 () принимает два параметра .