Python的操作顺序是怎样的?

pxy2qtax  于 2022-12-25  发布在  Python
关注(0)|答案(5)|浏览(185)

我的问题是这样的:

10-7//2*3+1

我应该解这个方程。
使用PEMDAS时,我的答案似乎是8:

First its's 2*3 = 6; 10-7//6+1
second = 7//6= 1; 10-1+1
Third = 10-8 = 8;

但是当把它放进python的时候,我得到了一个2,为什么会这样呢?
程序顺序似乎是这样的:

first: 7//2=3; 10-3*3+1
second: 3*3=9; 10-9+1
third:10-9+1= 2; 2

我不明白。

zpgglvta

zpgglvta1#

其中,PEMDAS是指PEMDAS;乘法和除法有相同的优先级,加法和减法也一样。2当除法运算符出现在乘法之前时,除法运算符优先。
Python操作符的执行顺序由操作符优先级决定,并且遵循相同的规则。优先级较高的操作符在优先级较低的操作符之前执行,但是当操作符在同一组中时,它们具有 matching 优先级。
对于10-7//2*3+1,有2类运算符,从最低到最高:

  • +, -(与AS == * 加减运算 * 相关)
  • *, @, /, //, %(与MD相关,所以 * 乘法和除法 *)。

因此,首先执行//*;乘法和除法属于同一个 group,而不是固定的顺序(MD并不意味着乘法在除法之前):

10 - ((7 // 2) * 3) + 1

因此,首先执行7 // 2,然后执行与3的乘法,然后从10中减去,最后加上1。
我们已经忽略了一个问题,这个问题不会影响你的特定情况,但是对于编写真实的的Python程序来说非常重要。它并不决定计算的顺序,它实际上是关于 * 参数分组 *。PEMDAS说a + b + c * d作为(a + b) + (c * d)计算,但它没有说是先计算a + b还是先计算c * d
在数学中,你先计算什么并不重要,只要你尊重参数分组;在Python中,如果你先在a() + (b() + c())中计算b()c(),仅仅因为它们在括号中,你可能会得到完全不同的结果,因为Python函数可能会有副作用。
Python表达式的求值大多是从左到右进行的,例如,在a() + b() + (c() * d())中,求值顺序如下:

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

尽管*的优先级很高,并且乘法运算周围有括号,但这仍然存在。

t3irkdon

t3irkdon2#

PEMDAS更好地表示为

P   Parentheses, then
E   Exponents, then
MD  Multiplication and division, left to right, then
AS  Addition and subtraction, left to right

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

zxlwwiss

zxlwwiss3#

Python的操作顺序是怎样的?
我不知道PE(MD)(AS)是什么,但是Python的操作顺序(优先级顺序)规则是按照官方文档中的"运算符优先级"表来执行的。
请记住,这些运算符优先级规则中有许多在Python中与in Cin C++是 * 相反的 *,但是下面是Python 3中的"运算符优先级"规则:

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

我仍需阅读

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

yx2lnoni4#

这在这里进行了记录(Python文档/表达式/运算符-优先级):

  • 乘法和除法(包括整数除法)发生在相同的优先级上,因此顺序由操作数的分组方向确定:
  • 所有乘法和除法的计算顺序都是从左到右(与大多数二进制运算类似,但取幂除外)。
wswtfjt7

wswtfjt75#

我认为python不遵循PEMDAS或BODMAS,除非你在它周围加上圆括号,所以基本上我必须在写程序之前在心里做这件事

相关问题