【问题标题】:How do order of operations go on Python?Python上的操作顺序如何?
【发布时间】:2018-02-22 21:26:00
【问题描述】:

我的问题是这样的:

  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

我不明白。

【问题讨论】:

  • 您没有使用 PEDMAS。整数除法仍然是除法。
  • 你从左到右评估它,所以除法是第一位的。

标签: python python-3.x math


【解决方案1】:

PEMDASP, E, MD, AS;乘法和除法具有相同的优先级,加法和减法也是如此。当除法运算符出现在乘法之前时,除法先行。

Python 运算符的执行顺序由operator precedence 管理,并遵循相同的规则。优先级较高的运算符在优先级较低的运算符之前执行,但运算符在同一组中时具有匹配优先级。

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

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

所以//*首先被执行;乘法和除法属于同一个,这里不是一个固定的顺序(MD 并不意味着乘法在除法之前):

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

所以7 // 2首先被执行,然后是乘以3。然后你得到10的减法,最后加1。


我们忽略了一个不会影响您的特定情况,但对于编写真正的 Python 程序非常重要的问题。 PEMDAS 并不是真正关于操作的顺序;它不决定评估事物的顺序。它实际上是关于参数分组。 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()
  • *,现在它的参数已经准备好了
  • 第二个+,现在它的参数已经准备好了

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

【讨论】:

    【解决方案2】:

    PEMDAS 更好地表达为

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

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

    【讨论】:

      【解决方案3】:

      这已记录在 here(Python 文档/表达式/运算符优先级):

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

      【讨论】:

        【解决方案4】:

        Python 上的操作顺序是如何进行的?

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

        请记住,这些运算符优先级规则中有许多在 Python 中是相反的,它们是 in Cin C++,但 here are the "Operator precedence" rules in Python 3

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

        阅读我仍然需要做

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

        【讨论】:

          【解决方案5】:

          我认为 python 不遵循 PEMDAS 或 BODMAS,除非你在它周围加上括号/括号。所以基本上在写程序之前我得先做好心理准备

          【讨论】:

            【解决方案6】:

            运算顺序是您用来计算数学表达式的顺序:括号、指数、乘法、除法、加法、减法。 其他 *, @, /, //, %

            +, -

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-09-04
              • 2016-02-15
              • 2011-03-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多