如何在Python上执行操作顺序?

Ash*_*ton 3 python math python-3.x

我的问题看起来像这样:

  10-7//2*3+1 
Run Code Online (Sandbox Code Playgroud)

我应该解决方程式。

当我使用PEMDAS时,我的答案似乎是8

First its's 2*3 = 6; 10-7//6+1
second = 7//6= 1; 10-1+1
Third = 10-8 = 8;
Run Code Online (Sandbox Code Playgroud)

但是当将其放入python时,我得到了2。为什么?

看来程序顺序是这样的:

first: 7//2=3; 10-3*3+1
second: 3*3=9; 10-9+1
third:10-9+1= 2; 2
Run Code Online (Sandbox Code Playgroud)

我不明白

Ror*_*ton 14

PEMDAS 更好地表示为

P   Parentheses, then
E   Exponents, then
MD  Multiplication and division, left to right, then
AS  Addition and subtraction, left to right
Run Code Online (Sandbox Code Playgroud)

所以在你的表达式中,除法应该在乘法之前完成,因为它在乘法的左边。做完这些之后,先做减法,再做加法。


Mar*_*ers 10

PEMDASPEMDAS; 乘法和除法的优先级相同,加减法也一样。当除法运算符在乘法之前出现时,除法先行。

Python运算符的执行顺序由运算符Priority决定,并遵循相同的规则。具有较高优先级的运算符将在具有较低优先级的运算符之前执行,但是当它们在同一组中时,它们具有匹配的优先级。

对于10-7//2*3+1,您有2种运算符,从最低到最高:

  • +, - (与AS== 加减法相关
  • *, @, /, //, % (与关联MD,因此相乘和相除)。

所以//*首先执行;乘法和除法属于同一,此处不是固定顺序(MD并不意味着乘法先于除法):

10 - ((7 // 2) * 3) + 1
Run Code Online (Sandbox Code Playgroud)

7 // 2首先执行So ,然后乘以3。然后从10中减去,最后加1。


我们已经解决了一个问题,该问题不会影响您的特定情况,但是对于编写实际的Python程序非常重要。PEMDAS并不是真正意义上的操作顺序。它不会决定事物的评估顺序。这实际上是关于参数分组。PEMDAS表示a + b + c * d被评估为(a + b) + (c * d),但是没有说是否a + bc * d首先被评估。

在数学中,只要尊重参数分组,先评估什么都没有关系。在Python中,如果你evaluted b()c()首先在a() + (b() + c())仅仅因为他们是在括号中,你可以得到完全不同的结果,因为Python的功能可能有副作用。

Python表达式评估通常从左到右进行。例如,在中a() + b() + (c() * d()),评估顺序如下:

  • a()
  • b()
  • 第一个+,现在它的参数已经准备好了
  • c()
  • d()
  • *,现在它的参数已经准备好
  • 第二+,既然它的论证已经准备好了

尽管*乘法的优先级很高,并且在乘法运算符周围都有括号。


Gab*_*les 6

Python 中的运算顺序是如何进行的?

我不知道 aPE(MD)(AS)是什么,但 Python 的操作顺序(优先顺序)规则按照官方文档中的“运算符优先级”表所述进行。:)

请记住,许多运算符优先级规则在 Python 中与在 CC++ 中的情况相反,但以下是 Python 3 中的“运算符优先级”规则

要阅读表中的所有脚注,请单击上面的链接。

在此输入图像描述

我还需要读书

  1. PEMDAS: https: //en.wikipedia.org/wiki/Order_of_operations#Mnemonics


Joh*_*ann 4

此处记录了这一点(Python 文档/表达式/运算符优先级):

  • 乘法和除法(包括整数除法)发生在相同的优先级上,因此顺序由操作数分组的方向决定:
  • 所有乘法和除法的求值顺序都是从左到右(就像大多数二元运算一样,除幂运算除外)。