2010-12-13 49 views
121

計算中的%是什麼?我似乎無法弄清楚它的功能。%在Python中如何工作?

它計算出的百分比例如:3 + 2 + 1 - 5 + 4 % 2 - 1/4 + 6顯然等於7.如何?

+2

這LPTHW ..... – orange 2011-04-17 13:31:53

+0

不應'3 + 2 + 1 - 5 + 4%2 - 1/4 + 6'評估爲'6.75' ? – taper 2018-01-03 10:41:11

+0

@taper這個問題可能沒有使用python 3.0或更高版本。 – 2018-01-05 00:46:18

回答

163

%(模)運算符產生第一個參數除以第二個參數的餘數。數字參數首先被轉換爲通用類型。零右參數引發ZeroDivisionError異常。參數可以是浮點數,例如,3.14%0.7等於0.34(因爲3.14等於4 * 0.7 + 0.34)。模運算符總是產生與第二操作數(或零)符號相同的結果;結果的絕對值嚴格小於第二個操作數[2]的絕對值。

http://docs.python.org/reference/expressions.html

實施例1摘自: 6%2評估爲0因爲沒有剩餘如果6由2(3次)劃分。

實施例27%2評估爲1因爲有一個的剩餘1時7由2(3次)劃分。

因此總而言之,它返回除法操作的剩餘部分,或者如果沒有餘數,則返回0。因此6%2表示找到6的餘數除以2。

+2

爲什麼所有的例子都有更大的數字在右邊?有人可以解釋2%6的結果產生2? – wookie 2015-03-27 06:23:48

+4

第一個數字是分子,第二個數字是分母在你的例子中,除以6是2 0剩餘2,因此結果是2. – David 2015-04-26 22:01:45

+3

請更新您的答案,下面有更準確的答案。[C/C++](http://stackoverflow.com/a/20638659/3370168)%是'rem'而Python中的%爲'mod',例如' - 21%4'在Python中爲3 – azam 2016-08-03 13:05:21

31

像'x%y'這樣的表達式計算爲'x/y'的其餘部分。優先規則如'/'和'*'。

>>> 9/2 
4 
>>> 9 % 2 
1 
  • 9除以2等於4。
  • 4次2是8
  • 9零下8是1 - 餘數。

Python的疑難雜症:這取決於你所使用的Python版本,%也是(不建議使用)字符串插值算,所以看出來,如果你是從自動類型轉換(如PHP或JS語言來)其中像'12' % 2 + 3這樣的表達式是合法的:在Python中它會導致TypeError: not all arguments converted during string formatting這可能會讓你感到困惑。

+0

你可以用一個例子來解釋一下嗎?抱歉。 :( – orange 2010-12-13 18:34:58

3

模運算符,它用於整數的餘數分割,通常情況下,但在Python中可用於浮點數。

http://docs.python.org/reference/expressions.html

%(模)運算符產生了由第二的第一個參數的除法的餘數。數字參數首先被轉換爲通用類型。零右參數引發ZeroDivisionError異常。參數可以是浮點數,例如,3.14%0.7等於0.34(因爲3.14等於4 * 0.7 + 0.34)。模運算符總是產生與第二操作數(或零)符號相同的結果;結果的絕對值嚴格小於第二個操作數[2]的絕對值。

8

在大多數語言中,%用於modulus。 Python也不例外。

+3

就我所見,Python不常見,因爲它使用%作爲模數; Fortran,C/C++和Java使用%來表示餘數。 (請參閱http://stackoverflow.com/questions/13683563/whats-the-difference-between-mod-and-remainder,差異在於如何處理負值和小數值)。區分的語言(如Ada ,Haskell和Scheme)使用「rem」和「mod」(或「餘數」和「模數」)而不是%。 – 2014-05-23 05:49:05

+2

更新:我通過語言http://en.wikipedia.org/wiki/Modulo_operation發現了這個偉大的模/餘數運算表。 Python是不尋常的,但不是唯一的(例如,TCL和Lua共享Python的慣例。) – 2014-05-23 06:00:42

0

%(模)運算符產生第一個參數除以第二個參數的餘數。數字參數首先被轉換爲通用類型。

3 + 2 + 1 - 5 + 4%2 - 1/4 + 6 = 7

這是基於操作者的優先級。

0

%modulo3 % 2 = 14 % 2 = 0

/是(在這種情況下一個整數)分裂,使:

3 + 2 + 1 - 5 + 4 % 2 - 1/4 + 6 
1 + 4%2 - 1/4 + 6 
1 + 0 - 0 + 6 
7 
3

這是一個模運算,除當它是一個老式的C風格的字符串格式化運算符時,不是模運算。詳情請參閱here。你會在現有的代碼中看到很多。

3

另外,有稱爲divmod一個有用的內置功能:

divmod(A,B)

取兩(非複數)號作爲參數,並返回一對由數字 的的商和 其餘時使用長劃分。

94

有點偏離主題,將%也用於字符串格式化操作,如%=將值代入一個字符串:

>>> x = 'abc_%(key)s_' 
>>> x %= {'key':'value'} 
>>> x 
'abc_value_' 

同樣,偏離主題,但它似乎是一個小記錄功能,花了我一段時間來追查,我認爲這與蟒蛇模數計算有關,因爲這個網頁排名很高。

+18

謝謝。這是一個記錄不完善和廣泛使用的功能,是我帶到這篇文章的原因。 – 2013-12-29 21:28:54

+3

我們喜歡這個無題的答案。 – 2014-07-28 11:50:40

+0

是否有%邏輯被用作字符串格式引用,或者它只是歷史事件中的那個符號被重載了嗎?這應該是它自己的問題嗎? – WAF 2014-08-19 14:17:16

25

模數是一種數學運算,有時稱爲「時鐘算術」。我發現將它簡單地描述爲餘數是誤導和混淆的,因爲它掩蓋了它在計算機科學中如此使用的真實原因。它確實被用來環繞週期。想象一下時鐘:假設你在「軍事」時間看時鐘,時間範圍從0:00到23.59。現在,如果你想要的東西,每天午夜發生,你會希望當前的時間國防部24是零:

如果(小時%24 == 0):

你能想到的一切歷史上小時一遍又一遍地圍繞着一個24小時的圓周,一天中的當前時間是無限長的數字24。這是一個更深刻的概念,而不僅僅是一個餘數,它是一個處理週期的數學方法,它是非常計算機科學中很重要。它也用於環繞數組,允許您在達到數組末尾後增加索引並使用模數回到開頭。

+1

這是正確的答案,它必須被標記爲如此。 – 2016-01-25 06:46:32

+0

這是如何在Python中實現的:'a%b = a - b * floor(a/b)' – 2016-01-27 12:17:36

2

注意,如果在Python 3.4計算

(3+2+1-5) + (4%2) - (1/4) + 6 

即使在6.75,而不是7括號結果。


而「/」經營者不是那麼容易理解,太(python2.7):嘗試...

- 1/4 

1 - 1/4 

這是一個有點題外話這裏,但應評估上述表達式:)

+0

這將如何成爲7?它簡化爲'(1)+(0) - (0.25)+(6)'。 – 2016-06-13 13:41:09

3

x % y當考慮計算由y其中的商是整數除以除法x的其餘部分。其餘的標記爲y


在Python 3上,計算收益率6.75;這是因爲/做了一個真正的劃分,而不是像Python 2那樣的整數除法(默認情況下)。在Python 2上,1/4給出0,因爲結果向下舍入。

整數除可以在Python 3的完成也與//操作,從而得到7結果,你可以執行:

3 + 2 + 1 - 5 + 4 % 2 - 1 // 4 + 6 

此外,您還可以得到關於Python Python的風格劃分2,只需加入行

from __future__ import division 

作爲每個源文件中的第一個源代碼行。

+6

記得小孩'#'是註釋,'//'是一個操作符。 – 2016-05-06 08:16:19

1

模數 - 用右手操作數分開左手操作數並返回餘數。

如果有幫助:

1:0> 2%6 
=> 2 
2:0> 8%6 
=> 2 
3:0> 2%6 == 8%6 
=> true 

...等等。

2

%Modulo操作符也可用於打印字符串(就像在C中),如Google https://developers.google.com/edu/python/strings上定義的那樣。

 # % operator 
    text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down') 

這似乎比較偏離主題,但它肯定會幫助別人。

0

我很難找到使用%online的特定用例,例如。爲什麼做分數模數除法或負模數除法會導致它的答案。希望這有助於澄清這樣的問題:

模司一般來說:

模師返回數學除法運算的餘數。它做它如下:

假設我們有5股息和2除數,下面的除法運算將(等同於X):

dividend = 5 
divisor = 2 

x = 5/2 
  1. 在第一步模數計算是進行整數除法:

    x_int = 5 // 2(整數在python除法採用雙斜線)

    x_int = 2

  2. 接着,x_int的輸出乘以除數:

    x_mult = x_int *除數 x_mult = 4

  3. 最後,被除數從x_mult減去

    股息 - x_mult = 1

  4. 的模運算,因此,返回1:

    5%2 = 1

應用模量應用到分數

Example: 2 % 5 

當施加到一小部分的模數的計算是與上述相同;然而,要注意,該整數除法將導致零值當除數大於被除數大是很重要的:

dividend = 2 
divisor = 5 

的整數除法結果在0,而;因此,當執行上述步驟3中,被除數的值通過(從零中減去)進行:

dividend - 0 = 2 —> 2 % 5 = 2 

應用模量應用到負

樓層分裂發生,其中整數除法的值被舍入到最小整數值:

import math 

x = -1.1 
math.floor(-1.1) = -2 

y = 1.1 
math.floor = 1 

因此,當你做整數除法,你可能會得到比你預期不同的結果!

應用上述步驟在以下被除數和除數示出了模數的概念:

dividend: -5 
divisor: 2 

步驟1:應用整數除法

x_int = -5 // 2 = -3 

步驟2:乘以整數除以結果除數

x_mult = x_int * 2 = -6 

第3步:從乘數中減去紅利變量,請注意雙重否定。

dividend - x_mult = -5 -(-6) = 1 

因此:

-5 % 2 = 1