質問: Pythonコード ``` print(-7 % 2) # 1 print(-7 % 3) # 2 print(7 % -2) # -1 print(-7 % 3) # 2 print(7 % -3) # -2 ``` となるのですが、理由が分かりません?
回答: まず演算子の結合順序について、Python では `%` より単項のマイナス `-` の方が優先度が高いので、たとえば `-7 % 2` は `(-7) % 2` と解釈されます。`-(7 % 2)` ではないです。 そして Python の余り演算子 `%` はふたつ目の引数と同じ符号の余りを返します。このため `(-7) % 2` は `1` を返しますが、`7 % (-2)` は `-1` を返します。 この「結合の優先順序」「負の数が絡んだ場合の余り」はプログラミング言語によって仕様が異なるため、まずはドキュメントを確認してみてください。 ※補足:`-7 % 3` が `2` になる理由 これは Python 以前に数学の話ですが、-7 = 3 * (-3) + 2 と書くと余りは 2 になります。 また -7 = 3 * (-2) - 1 と捉えて余りを -1 とすることもでき、ここに選択の余地があります。 同様に `7 % -3` や `-7 % -3` も統一的に扱えるようにするやり方がいくつかあり、言語によってやり方が異なっています。