[英]Modulo and order of operation in Python
在Zed Shaw的“艱難學習Python” (第15-16頁)中,他有一個示例練習
100 - 25 * 3 % 4
結果是97(試試吧!)
我看不到可以做到這一點的操作順序..
100 - 25 = 75
3%4 = 0
或(100-25 * 3)= 225%4 = ??? 但無論如何不是97我不認為......
類似的例子是3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
,產生7
操作的順序是什么?
對於第一個示例: *
和%
優先於-
,因此我們首先評估25 * 3 % 4
。 *
和%
從左到右具有相同的優先級和相關性,因此我們從左到右進行評估,從25 * 3
。 這產生75
。 現在我們評估75 % 4
,產生3
。 最后, 100 - 3
是97
。
我找到了你的第二個問題的答案,因為它也讓我煩惱 - 扎克的反應很接近,但1/4結果的丟失是因為Python 2.X正在截斷整數除法結果。 所以它首先評估模運算,然后除(因為它不是浮點數,因此返回為0)。
3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
3 + 2 + 1 - 5 + (0) - (0) + 6
6 - 5 + 6
1 + 6
7
乘法>> mod >>減法
In [3]: 25 * 3
Out[3]: 75
In [4]: 75 % 4
Out[4]: 3
In [5]: 100 - 3
Out[5]: 97
乘法和模運算符具有相同的優先級,因此您可以從左到右為此示例進行求值。
原始問題: 100 - 25 * 3 % 4
實際上,評估25 * 3
並且占4%的75%是不正確的,並且恰好可以方便地解決這個問題。
python中的%實際上是一個模數運算符,其中x%y給出x / y
的余數。 在這種情況下,發生的是75 / 4
是18,余數為3,這就是100-3 100 - 3 = 97
。
不要試圖乘以百分比,這是一個常見的錯誤。
在第二個例子中,%與*具有相同的順序,因此我們得到3 + 2 + 1-5 + 4%2-1 / 4 + 6 = 3 + 2 + 1-5 +(4%2) - (1/4) )+ 6 = 1 +(4%2) - (1/4)+6 = 1 + 0-(1/4)+ 6 = 1-(1/4)+ 6 = 0.75 + 6 = 6.75這是當我在控制台上嘗試時它會說什么,所以無論你做了什么,你都必須做些什么來繞過它。
數學並不是我的強項,所以是的,這個問題也讓我了解了一下。 但希望你發現這很有用。
75除以4是18.75
18乘以4是72(剩下3來自75)
給出的計算是100-25 * 3%4,答案是97.現在,我在PEMDAS中使用PEMDAS得到它,如他在問題部分所說:
#!/bin/python
A = 100
B = 25
C = 3
D = 4
E = B*C # 75
F = E%D # 3
G = A-F # 97
print("B * C ="), E
print("E % D ="), F
print("A - F ="), G
我認為你必須將modulo(%)視為一個分區,
Python在*之后但在+或_之前評估%。
所以,
(100 - 25 * 3 % 4)
(100 - 75 % 4)
(100 - 3)
(97)
這是怎么回事:
'*'和'%'具有相同的優先級,因此從左到右評估它們。
QED
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.