Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改数学顺序中的优先级(星号)_Python_Python 2.7_Numpy_Math - Fatal编程技术网

Python 如何更改数学顺序中的优先级(星号)

Python 如何更改数学顺序中的优先级(星号),python,python-2.7,numpy,math,Python,Python 2.7,Numpy,Math,我希望用户在我的系统中输入数学公式。如何使用Python将case1公式转换为case2公式?换言之,我想专门更改双星号的数学顺序 #case1 3*2**3**2*5 >>>7680 #case2 3*(2**3)**2*5 >>>960 下面是使用reas实现此目的的示例: expression = '3*2**3**2*5' asterisk_exprs = re.findall(r"\d+\*\*\d+", expression) # List o

我希望用户在我的系统中输入数学公式。如何使用Python将case1公式转换为case2公式?换言之,我想专门更改双星号的数学顺序

#case1
3*2**3**2*5
>>>7680

#case2
3*(2**3)**2*5
>>>960

下面是使用
re
as实现此目的的示例:

expression = '3*2**3**2*5'
asterisk_exprs = re.findall(r"\d+\*\*\d+", expression) # List of all expressions matching the criterion 
for expr in asterisk_exprs:
    expression = expression.replace(expr, "({})".format(expr)) # Replace the expression with required expression

# Value of variable 'expression': '3*(2**3)**2*5'
>>> eval(expression) 
960
要计算
str
表达式的数学值,请使用
eval
作为:

expression = '3*2**3**2*5'
asterisk_exprs = re.findall(r"\d+\*\*\d+", expression) # List of all expressions matching the criterion 
for expr in asterisk_exprs:
    expression = expression.replace(expr, "({})".format(expr)) # Replace the expression with required expression

# Value of variable 'expression': '3*(2**3)**2*5'
>>> eval(expression) 
960

下面是使用
re
as实现此目的的示例:

expression = '3*2**3**2*5'
asterisk_exprs = re.findall(r"\d+\*\*\d+", expression) # List of all expressions matching the criterion 
for expr in asterisk_exprs:
    expression = expression.replace(expr, "({})".format(expr)) # Replace the expression with required expression

# Value of variable 'expression': '3*(2**3)**2*5'
>>> eval(expression) 
960
要计算
str
表达式的数学值,请使用
eval
作为:

expression = '3*2**3**2*5'
asterisk_exprs = re.findall(r"\d+\*\*\d+", expression) # List of all expressions matching the criterion 
for expr in asterisk_exprs:
    expression = expression.replace(expr, "({})".format(expr)) # Replace the expression with required expression

# Value of variable 'expression': '3*(2**3)**2*5'
>>> eval(expression) 
960

这不仅不是Python所支持的,而且实际上,您为什么要这样做呢?修改BIDMAS或PEMDAS(取决于您所在的位置),不仅会给您错误的答案,还会让所有查看代码的开发人员感到困惑


只需使用括号,如案例2中所示,这就是它们的用途。

这不仅不是Python所支持的,而且实际上,您为什么要这样做?修改BIDMAS或PEMDAS(取决于您所在的位置),不仅会给您错误的答案,还会让所有查看代码的开发人员感到困惑


只需像案例2中那样使用括号,这就是它们的用途。

如果用户应该在您的程序中输入公式,我建议保持原样。原因是数学中的幂运算是,这意味着执行从顶层向下。例如:
a**b**c=a**(b**c)
,按惯例

有一些程序使用自底向上的叠加求幂解析法——MS Excel和LibreOffice是其中的一些,但是,这违反了常规惯例,总是让我感到非常困惑

如果您希望覆盖此行为,并且在数学上仍然正确,则必须使用括号

您可以随时声明自己的power方法,以您想要的方式进行解析,比如
numpy.pow()
。你可能会让内置软件过载,但那太仓促了


如果用户应该在您的程序中输入公式,我建议保持原样。原因是数学中的幂运算是,这意味着执行从顶层向下。例如:
a**b**c=a**(b**c)
,按惯例

有一些程序使用自底向上的叠加求幂解析法——MS Excel和LibreOffice是其中的一些,但是,这违反了常规惯例,总是让我感到非常困惑

如果您希望覆盖此行为,并且在数学上仍然正确,则必须使用括号

您可以随时声明自己的power方法,以您想要的方式进行解析,比如
numpy.pow()
。你可能会让内置软件过载,但那太仓促了


你到底想做什么?你确实改变了数学顺序…你想让幂运算比乘法结合得更紧密?在将代码传递给求值函数之前,您必须编写经过并插入括号的代码。您到底想做什么?你确实改变了数学顺序…你想让幂运算比乘法结合得更紧密?在将其传递给求值函数之前,您必须编写经过并插入括号的代码。您的输出在语法上无效。编辑:已更新答案。您的输出在语法上无效。编辑:已更新答案。更正,OP不是更改不同的运算符优先级,而是更改堆叠的求幂顺序。如果示例是
2**3**2
(2**3)**2
——在这两种情况下都是同一个运算符——请看,即使关联性几乎被设置为标准,
x**y**z
应该始终是右关联的,因此它是
x**(y**z)
。这对于正态分布是必需的,在正态分布中有一个类似于
e**(-t**2)
的公式。更正,OP不是改变不同的运算符优先级,而是改变叠加的求幂顺序。如果示例是
2**3**2
(2**3)**2
——在这两种情况下都是同一个运算符——请看,即使关联性几乎被设置为标准,
x**y**z
应该始终是右关联的,因此它是
x**(y**z)
。这对于正态分布是必需的,在正态分布中有一个类似于
e**(-t**2)
的公式。