Python数学运作顺序

时间:2017-09-23 13:06:08

标签: python python-3.x math

请有人向我解释为什么2 + 4/2 * 3的表达式评估为8.0而不是2.66?

我认为乘法是在除法之前执行的,但是在这种情况下,似乎在乘法之前执行除法运算。

4 个答案:

答案 0 :(得分:6)

因为它被评估为:

*

因为/+higher precedence而不是+,并且当运算符具有相同的优先级时,它是从左到右。

引用文档:

  

下表总结了Python中的运算符优先级,从最低优先级(最小绑定)到最高优先级(大多数绑定)。同一个框中的运算符具有相同的优先级。除非明确给出语法,否则运算符是二进制的。同一个框组中的操作符从左到右(取幂,从右到左分组)。

     

运营商说明

     
      
  • [...]
  •   
  • -*加法和减法
  •   
  • @///%,{{1}}乘法,矩阵乘法,除法,舍入除法,余数
  •   
  • [...]
  •   

答案 1 :(得分:2)

是的,首先计算除法和乘法,但是在除法之前不执行乘法,反之亦然。所以: self.boni_new = {} for asdf in range(0,5): for i in xrange(0,5): vas = 5-i self.boni_new[asdf] = {} self.boni_new[asdf][5-i] = {} self.boni_new[asdf][5-i][0] = ui.TextLine() self.boni_new[asdf][5-i][0].SetParent(self) self.boni_new[asdf][5-i][0].SetText("Bonus "+str(5-asdf)) self.boni_new[asdf][5-i][0].SetPosition(15,10+25*(vas-1)) self.boni_new[asdf][5-i][0].Hide() self.boni_new[asdf][5-i][1] = DropDown(self,"- Keiner -") self.boni_new[asdf][5-i][1].SetPosition(70,10+25*(vas-1)) for x in AFFECT_DICT: if x in BONI_AVAIL: self.boni_new[asdf][5-i][1].AppendItem(str(AFFECT_DICT[x](0)),x) self.boni_new[asdf][5-i][1].SetSize(330,20) self.boni_new[asdf][5-i][1].Hide() self.boni_new[asdf][5-i][2] = ui.Bar("UI") self.boni_new[asdf][5-i][2].SetParent(self) self.boni_new[asdf][5-i][2].SetPosition(410,10+25*(vas-1)) self.boni_new[asdf][5-i][2].SetColor(0xC0000000) self.boni_new[asdf][5-i][2].SetSize(80,20) self.boni_new[asdf][5-i][2].Hide() self.boni_new[asdf][5-i][3] = Edit2("0",14) self.boni_new[asdf][5-i][3].SetParent(self.boni_new[asdf][5-i][2]) self.boni_new[asdf][5-i][3].SetNumberMode() self.boni_new[asdf][5-i][3].SetSize(80,20) self.boni_new[asdf][5-i][3].SetPosition(4,3) self.boni_new[asdf][5-i][3].Hide() dbg.TraceError(str(self.boni_new))
1。 ()
2。 %,/,*
3。 +, -

答案 2 :(得分:2)

Python赋予乘法和除法相同的优先级。

通常,从左到右依次执行相同的优先级操作。

答案 3 :(得分:0)

  • Python基本操作符遵循 BODMAS 规则,并且由于除法的优先级高于乘法。所以它是这样的: 2+(4/2)* 3
  • 现在,如果您想得到2.66作为答案,那么它必须像2 + 4 /(2 * 3)