请有人向我解释为什么2 + 4/2 * 3的表达式评估为8.0而不是2.66?
我认为乘法是在除法之前执行的,但是在这种情况下,似乎在乘法之前执行除法运算。
答案 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)