簡體   English   中英

Python中的模數和操作順序

[英]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 - 397

我找到了你的第二個問題的答案,因為它也讓我煩惱 - 扎克的反應很接近,但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)

這是怎么回事:

'*'和'%'具有相同的優先級,因此從左到右評估它們。

  1. 25 * 3 = 75
  2. 75%4 = 3(4 * 18 = 72;余數為3)
  3. 100 - 3 = 97

QED

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM