web-dev-qa-db-ja.com

Pythonでの%の結果は何ですか?

計算の%は何ですか?私はそれが何をするのかわからないようです。

例えば、計算のパーセントを計算するのでしょうか:4 % 2は明らかに0に等しいです。どうやって?

194
orange

%(モジュロ)演算子は、最初の引数を2番目の引数で除算した余りを求めます。数値引数は、まず共通の型に変換されます。引数がゼロの場合、ZeroDivisionError例外が発生します。引数は浮動小数点数、例えば3.14%0.7は0.34に等しい(3.14は4 * 0.7 + 0.34に等しいので)。結果の絶対値は、2番目のオペランドの絶対値より厳密に小さくなります[2]。

http://docs.python.org/reference/expressions.html から取得したもの

例1: 6%2は、6を2で除算すると(3回)余りがないため、0と評価されます。

例2 :7を2で除算すると(3回)、7%2の余りがあるため、11と評価されます。

要約すると、除算演算の残りを返します。残りがない場合は0を返します。したがって、6%2は、6を2で割った余りを求めることを意味します。

252
meder omuraliev

ちょっと話題を異にして、%%=のような文字列フォーマット操作でも値を文字列に代入するために使われます:

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

繰り返しますが、話題にはなりませんが、追跡に時間がかかった、少し文書化された機能のようです。 および このSOページのPythonsモジュロ計算に関連していると思いました非常に.

125
mrmagooey

x % yのような式は、x ÷ yの残りの部分に評価されます。優先順位は、演算子/(除算)および*(乗算)と同じです。

>>> 9 / 2
4
>>> 9 % 2
1
  • 9を2で割った値は4です。
  • 4×2は8
  • 9マイナス8は1 - 残りです。

Python gotcha :使用しているPythonのバージョンに応じて、%は(廃止予定の)文字列補間演算子でもあるため、自動型キャストを使用する言語(PHPなど)から来た場合またはJS)'12' % 2 + 3のような式が正当である場合:PythonではTypeError: not all arguments converted during string formattingになりますが、これはおそらく混乱を招くでしょう。

[Python 3用に更新]

ユーザn00pのコメント:

9/2はpythonでは4.5です。整数の除算は、次のようにして行う必要があります。9 // 2除算後にオブジェクト全体がいくつ残っているかをPythonに教えてほしい場合(4)。

正確に言うと、Python 2では整数除算がデフォルトでした(この答えは、すでに学校に通っている私の男の子よりも古いです)。

$ python2.7
Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4
>>> 9 // 2
4
>>> 9 % 2
1

Python 3では、9 / 24.5になりましたが、元の答えは非常に古いものです。

$ python3.6
Python 3.6.1 (default, Apr 27 2017, 00:15:59)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4.5
>>> 9 // 2
4
>>> 9 % 2
1
44
Paulo Scardine

モジュラスは数学的演算で、「クロック演算」とも呼ばれます。それを単なる残余として記述することは、それがコンピュータサイエンスでそれほど多く使用されている本当の理由を覆い隠しているので、誤解を招きやすく、混乱を招くことがわかります。それは本当にサイクルをラップアラウンドするために使用されます。

時計のことを考えてみましょう:あなたが時計を見るのは「軍事的」な時間で、時間の範囲は0:00 - 23.59です。毎日午前0時に何かが起きるようにしたいのであれば、現在の時刻mod 24を0にします。

if(hour%24 == 0):

あなたは歴史の中ですべての時間が何度も何度も24時間の円の周りを包むと考えることができますそしてその日の現在の時間はその無限に長い数のmod 24です。それは単なる剰余よりはるかに深い概念ですサイクルに対処すること、そしてそれはコンピュータサイエンスにおいて非常に重要です。これは配列をラップアラウンドするためにも使用されます。これにより、インデックスを大きくしたり、モジュラスを使用して配列の末尾に達した後に先頭に折り返すことができます。

44
jarvis01123

Python - 基本演算子
http://www.tutorialspoint.com/python/python_basic_operators.htm

モジュラス - 左側のオペランドを右側のオペランドで除算し、剰余を返します

a = 10、b = 20

b%a = 0

9
Halil

ほとんどの言語では、%は 係数 に使用されます。 Pythonも例外ではありません。

8
Sorpigal

%modulo演算子は、グーグル https://developers.google.com/edu/python/strings で定義されているように(Cのように)文字列を印刷するためにも使用できます。

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

これは話題を少し外れているように見えますが、それは確かに誰かを助けるでしょう。

5

x % yは、xyで除算した除算の剰余を計算します。ここで、 商は整数 です。残りはyの符号を持ちます。


Python 3では、計算結果は6.75です。これは、Python 2では(デフォルトでは)/が整数除算ではなく、真の除算を実行するためです。Python2では、結果が切り捨てられるため、1 / 4は0になります。

整数の除算はPython 3でも//演算子を使って行うことができます。したがって、結果として7を得るには、次のように実行します。

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

また、Python 2では、次の行を追加するだけでPythonスタイルの区分を取得できます。

from __future__ import division

各ソースファイルの最初のソースコード行として。

4
Antti Haapala

また、 divmod という便利な組み込み関数もあります。

divmod(a、b)

2つの(複素数ではない)数を引数として取り、長除算を使用するときはそれらの商と剰余からなる一対の数を返します。

4
warvariuc

モジュラス演算子は、通常整数の剰余除算に使用されますが、Pythonでは浮動小数点数に使用できます。

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

%(モジュロ)演算子は、最初の引数を2番目の引数で除算した余りを求めます。数値引数は、まず共通の型に変換されます。引数がゼロの場合、ZeroDivisionError例外が発生します。引数は浮動小数点数、例えば3.14%0.7は0.34に等しい(3.14は4 * 0.7 + 0.34に等しいので)。結果の絶対値は、2番目のオペランドの絶対値より厳密に小さくなります[2]。

3
wkl

これはモジュロ演算ではなく、昔ながらのCスタイルの文字列フォーマット演算子である場合を除きます。詳細は ここ を参照してください。あなたは既存のコードでこれの多くを見るでしょう。

3
John Machin

を注意

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

大括弧を付けても、Python 3.4で計算すると7ではなく6.75になります。


そして '/'演算子もそれほど理解しやすいものではありません(python2.7):試してみてください...

- 1/4

1 - 1/4

これはちょっとした話題ではありませんが、上記の式を評価するときに考慮する必要があります:)

2
bernhard

多くのC言語のように、それは剰余またはモジュロ演算です。 数値型に関するドキュメント - int、float、long、complex を参照してください。

1
Andrew Jaffe

モジュラス - 左側のオペランドを右側のオペランドで除算し、剰余を返します。

それが助けになるならば:

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

... 等々。

1
gr8scott06

モジュラス演算子(%)を把握する最も簡単な方法は、長い除算を使用することです。それは残りであり、数を偶数または奇数に決定するのに役立ちます。

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2
0
Andrew McNeil

%(モジュロ)演算子は、最初の引数を2番目の引数で除算した余りを求めます。数値引数は、まず共通の型に変換されます。

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

これは演算子の優先順位に基づいています。

0
user225312

%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
0
N.Atanasov

%モジュロ です。 3 % 2 = 14 % 2 = 0

/は(この場合は整数)除算なので、

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

これはモジュロ演算です http://en.wikipedia.org/wiki/Modulo_operation

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

それで、操作の順序で、それはになります

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

7

ここで整数演算をしているので、1/4 = 0です。

0
Marc Hughes