質問

何をしますか % 計算で?私はそれが何をするかを理解できないようです。

たとえば、計算の割合は次のとおりです。 4 % 2 どうやら0に等しいようです。どのように?

役に立ちましたか?

解決

%(Modulo)演算子は、2番目の引数の第1引数の分割から残りを生成します。数値引数は、最初に共通のタイプに変換されます。ゼロの正しい引数は、ZerodivisionErrorの例外を提起します。引数は、たとえば3.14%0.7が0.34に等しい(3.14は4*0.7 + 0.34に等しいため)、Modulo演算子は常に2番目のオペランド(またはゼロ)と同じ符号で結果をもたらすためです。結果の絶対値は、2番目のオペランドの絶対値よりも厳密に小さくなります[2]。

から取られた http://docs.python.org/reference/expressions.html

例1: 6%2 に評価します 0 6が2(3回)で割られている場合、残りがないためです。

例2: 7%2 に評価します 1 残りがあるからです 1 7が2(3回)で分割されている場合。

それを要約するために、それは部門操作の残りを返します、または 0 残りがない場合。それで 6%2 6の残りを2で割ったことを意味します。

他のヒント

トピックからややオフ、 % また、文字列のフォーマット操作でも使用されます %= 値を文字列に置き換えるには:

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

繰り返しますが、トピックから外れていますが、それは少し文書化された機能のようで、しばらくして追跡するのにかかりました、 これは、これがページが高くランク付けされているPythons Modulo計算に関連していると思いました。

のような表現 x % y 残りの部分に評価します x ÷ y - まあ、技術的には「リマインダー」の代わりに「モジュラス」であるため、他の言語と比較している場合、結果は異なる場合があります % 残りのオペレーターです。 いくつかの微妙な違いがあります (実際の結果に興味がある場合は、「なぜPythonの整数部門の床」を参照してください。

優先順位はオペレーターと同じです / (部門)と * (乗算)。

>>> 9 / 2
4
>>> 9 % 2
1
  • 9で割る9は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です。 Pythonに除算後に残っているものの数をPythonに伝えたい場合は、次のように整数部門を行う必要があります(4)。

正確には、整数部門はPython 2のデフォルトでした(この答えは、すでに学校にいて、2.xが主流だった私の少年よりも年上です):

$ 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で 9 / 2 結果 4.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

アップデート

ユーザーdahiya_boyはコメントセッションで尋ねました:

Q. 理由を説明していただけませんか -11 % 5 = 4 -dahiya_boy

これは奇妙ですよね? JavaScriptでこれを試してみると:

> -11 % 5
-1

これは、JavaScriptのためです % Pythonでは、「Modulus」(Clock Math)演算子です。

得られる GVRから直接説明:


編集-dahiya_boy

JavaとiOSで -11 % 5 = -1 一方、PythonとRubyでは -11 % 5 = 4.

理由の半分は、によって説明されています パウロ・スカルディン, 、そして説明の残りは以下の下にあります

JavaとiOSで、 % 残りを与えます。つまり、分割する場合を意味します 11 % 5 与えます Quotient = 2 and remainder = 1-11 % 5 与えます Quotient = -2 and remainder = -1.

Swift iOSのサンプルコード。

enter image description here

しかし、Pythonで話すとき、それは時計弾性率を与えます。以下のフォーミュラでの作業

mod(a,n) = a - {n * Floor(a/n)}

それは意味します、

mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}

それで、 mod(11,5) = 1

mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}

それで、 mod(-11,5) = 4

Python 3.0のサンプルコード。

enter image description here


なぜPythonの整数部門の床

今日(再び)Pythonの整数部門がCのようにゼロに向かって切り捨てられるのではなく、結果の床を返す理由を説明するように頼まれました。

正の数については、驚きはありません。

>>> 5//2
2

しかし、オペランドの1つが負の場合、結果は床にあります。つまり、ゼロ(負の無限に向かって)から離れています。

>>> -5//2
-3
>>> 5//-2
-3

これは一部の人々を妨害しますが、良い数学的理由があります。整数部門の操作(//)とその兄弟、モジュロ操作(%)は、一緒に行き、素晴らしい数学的関係を満たします(すべての変数は整数です):

a/b = q with remainder r

そのような

b*q + r = a and 0 <= r < b

(AとBが> = 0であると仮定)。

ネガティブA(B陽性に保つ)に対して関係を拡張したい場合、2つの選択肢があります:Qをゼロに切り捨てた場合、Rは負になります。 Qは負の無限に向かって床を床に向かって床に向けて、不変は0 <= r <bのままです。 [更新:このパラを修正

数学的数字理論では、数学者は常に後者の選択を好む(例を参照 ウィキペディア)。 Pythonの場合、Aのサインが面白くないモジュロ操作には興味深いアプリケーションがいくつかあるため、同じ選択をしました。 POSIXタイムスタンプ(1970年の開始から数秒)を取り、それを時刻に変えることを検討してください。 1日に24*3600 = 86400秒があるため、この計算は単にt%86400です。しかし、1970年以前に負の数を使用して時間を過ぎた場合、「ゼロに向かって切り捨て」ルールは意味のない結果をもたらします!フロアルールを使用すると、すべて正常に機能します。

私が思っていた他のアプリケーションは、コンピューターグラフィックスのピクセル位置の計算です。もっとあると確信しています。

ネガティブBの場合、ちなみに、すべてがひっくり返るだけで、不変は次のようになります。

0 >= r > b.

では、なぜCはこのようにしないのですか?おそらく、Cが設計された時点ではハードウェアがこれを行わなかったでしょう。そして、ハードウェアはおそらくこのようにはしなかったでしょう。なぜなら、最古のハードウェアでは、負の数値は最近使用されている2つの補数表現ではなく(少なくとも整数で)「記号 +マグニチュード」として表されていたからです。私の最初のコンピューターはコントロールデータのメインフレームであり、フロートと同様に整数の補完物を使用しました。 60個のパターンは、負のゼロを意味しました!

すべてのPythonのフローティングポイントスケルトンが埋葬されている場所を知っているTim Petersは、これらのルールを浮動小数点Misuloに拡張したいという私の欲求について心配を表明しました。彼はおそらく正しいです。 xが非常に小さな負の数である場合、x%1.0の精密損失を引き起こす可能性があります。しかし、それだけでは整数ムジュロを壊すだけでは不十分であり、//はそれにしっかりと結合されています。

詩//の代わりに//を使用していることに注意してください - これはPython 3の構文であり、Python 2では、整数部門を呼び出していることを強調することも許可されています。 Python 2の /演算子は、INTとフロートまたは2つのフロートよりも2つの整数オペランドの場合に異なる結果を返すため、あいまいです。しかし、それはまったく別の話です。 PEP 238を参照してください。

Guido Van Rossumが午前9時49分に投稿しました

モジュラスは数学的な操作であり、「時計算術」と呼ばれることもあります。それを単に残りとして説明することは、コンピューターサイエンスで非常に使用されている本当の理由を隠しているため、誤解を招くと混乱していると思います。それは本当にサイクルを包み込むために使用されます。

時計を考えてみてください:時代の範囲が0:00-23.59になる「軍事」時の時計を見てください。今、あなたが真夜中に毎日何かを起こしたいなら、あなたは現在の時間mod 24をゼロにする必要があるでしょう:

if(hour%24 == 0):

歴史の中ですべての時間を何度も何度も何度も包み込むことができ、その日の現在の時間は無限に長い数のmod 24です。それは残りよりもはるかに深い概念です、それは数学的な方法ですサイクルに対処することは、コンピューターサイエンスで非常に重要です。また、配列をラップするために使用され、インデックスを増やし、アレイの終了に到達した後、モジュラスを使用して最初に戻ることができます。

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

モジュラス - 左手オペランドを右手オペランドで分割し、残りを返します

a = 10およびb = 20

B%a = 0

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

%Moduloオペレーターは、Googleで定義されている文字列(Cのように)の印刷にも使用できます 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')

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

また、呼ばれる便利な組み込み関数があります divmod:

divmod(a、b)

2つの(非複雑な)数値を引数として取得し、長い分裂を使用するときに商と残りからなる数字のペアを返します。

x % y 部門の残りの部分を計算します x で割った y どこ 商は整数です. 。残りには兆候があります 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 2でPythonスタイル部門を入手できます

from __future__ import division

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

弾性演算子は、通常、整数の残りの分割に使用されますが、Pythonでは浮動小数点数に使用できます。

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

%(Modulo)演算子は、2番目の引数の第1引数の分割から残りを生成します。数値引数は、最初に共通のタイプに変換されます。ゼロの正しい引数は、ZerodivisionErrorの例外を提起します。引数は、たとえば3.14%0.7が0.34に等しい(3.14は4*0.7 + 0.34に等しいため)、Modulo演算子は常に2番目のオペランド(またはゼロ)と同じ符号で結果をもたらすためです。結果の絶対値は、2番目のオペランドの絶対値よりも厳密に小さくなります[2]。

昔ながらのCスタイルの文字列フォーマットオペレーターである場合を除いて、これはモジュロ操作です。モジュロ操作ではありません. 。見る ここ 詳細については。既存のコードにはこれが多く表示されます。

を注意

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

ブラケットがあっても、Python 3.4で計算された場合、ブラケットが7ではなく6.75になります。


そして、「/」オペレーターはそれほど理解しやすいものでもありません(Python2.7):試してください...

- 1/4

1 - 1/4

これはここでは少しトピックですが、上記の式を評価するときは考慮する必要があります:)

多くのC様言語と同様に、残りまたはModulo操作です。を参照してください 数値タイプのドキュメント - int、float、long、complex.

弾性 - 左手オペランドを右手オペランドで分割し、残りを返します。

それが役立つ場合:

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

... 等々。

オンラインで%を使用するための特定のユースケースを容易に見つけることは困難でした。これがこのような質問を明確にするのに役立つことを願っています:

一般的に弾性分割:

弾性師団は、数学的区分操作の残りを返します。次のとおりです。

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 * divisor 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

%(Modulo)演算子は、2番目の引数の第1引数の分割から残りを生成します。数値引数は、最初に共通のタイプに変換されます。

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

これは、オペレーターの優先順位に基づいています。

%モジュロ. 3 % 2 = 1, 4 % 2 = 0

/ (この場合は整数)部門です。

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

これは弾性操作です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です。

私は、モジュラス演算子(%)を把握する最も簡単な方法は、長い分裂を通してであることを発見しました。それは残りであり、偶数または奇妙であると判断するのに役立ちます:

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2

通常、2つの数値を分割すると、残りの数字が返されます。

この例を取ります:===> 10%3 =?.....はい1です。 なんで ?

10 / 3 = 3 ===> 3 * 3 = 9 ==> 10 - 9 = 1

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top