SIGMA-SE Tech Blog

SIGMA-SE Tech Blog


当サイトは、過去に運営していた別ドメイン(unisia-se.com)から sigma-se.com へ移行した技術ブログです。
旧サイトの記事をもとに、内容の精査・加筆・最新化を行い再構成しています。
正確で実用的な情報提供を目的としています。

Python - 算術演算子:基本計算と除算・べき乗の使い方

概要

Pythonの算術演算子を使い、数値計算の基本を整理する。

加算、減算、乗算だけでなく、通常の除算、切り捨て除算、剰余、べき乗は、用途によって結果が大きく変わる。

ここでは、各演算子の意味と戻り値の違いを、対話モードの実行例で確認する。

この記事で扱うこと

  • 単項プラス、単項マイナスの意味。
  • +、-、*、/、//、%、**の違い。
  • 通常の除算と切り捨て除算の違い。
  • 剰余やべき乗を使う場面。

作業前に確認すること

確認項目 内容
Python環境対話モードで演算結果を確認できる状態にしておく。
前提知識整数、浮動小数点数、演算子の優先順位を確認しておく。
確認観点演算結果の値だけでなく、型にも注目する。

各算術演算子の使い方と実装サンプル

算術演算子の種類

算術演算子は、一般的な四則演算とプログラム特有の表現である単項プラス演算単項マイナス演算を合わせた演算子を指す。

  • 算術演算子一覧
    演算子 使用例 説明
    + +a 正の整数:実質 a と同義。(暗黙的変換で用いる)
    - -a 符号反転:a の符号を反転する。
    + a + b 加算:a に b を足す。
    - a - b 減算:a から b を引く。
    * a * b 乗算:a に b を掛ける。
    / a / b 除算:a を b で割る。
    // a // b 整数除算:a を b で割った結果から小数以下を切り捨てる。
    % a % b 剰余:a を b で割った余り。
    ** a ** b べき乗:a の b 乗。

以降、実装サンプルを対話モード(インタプリタ)で解説する。

※ 演算結果の 最大値最小値 についてはPCのスペックに依存する。詳しくは下記を参考。

単項プラス・マイナス演算子(+/-)

  • 単項プラス演算子(+)
    単項プラス演算子は、少し特殊で対象値に付加しても符号(もちろん値)の変化はない。

    $ python
        >>>
        >>> # 5 に単項プラス演算子を付加して出力
        >>> int_a = 5
        >>> print(+int_a)
        5
        >>>
    

    上記の通り、int型に単項プラス演算子を付加しても結果は同じだが、boolean型からint型の暗黙的な変換を利用してコーディングするケースがある。

    $ python
        >>>
        >>> # boolean を定義し、単項プラス演算子でintに変換
        >>> bool_a = False
        >>> print(bool_a)
        False
        >>> print(+bool_a)
        0
        >>> bool_b = True
        >>> print(bool_b)
        True
        >>> print(+bool_b)
        1
        >>>
    
  • 単項マイナス演算子(-)
    単項マイナス演算子は、対象値の符号を反転する。
    -1 を掛けた結果が欲しいような場合に使用する。

    $ python
        >>>
        >>> # int型の 5 に単項マイナス演算子を付加して出力
        >>> int_a = 5
        >>> print(-int_a)
        -5
        >>>
        >>> # 単項マイナス演算子を 2 回付加して出力
        >>> print(-(-int_a))
        5
        >>>
        >>> # complex型の 1 - 2j に単項マイナス演算子を付加して出力
        >>> complex_a = - (1 - 2j)
        >>> print(complex_a)
        (-1+2j)
        >>>
    

加算(+)・減算(-)

  • 加算(+)
    ※ 四則演算の加算と同じ結果。

    $ python
        >>>
        >>> # int型の 1 に 2 を加算
        >>> int_a = 1 + 2
        >>> print(int_a)
        3
        >>>
        >>> # float型の 1.5 に 2.5 を加算
        >>> float_a = 1.5 + 2.5
        >>> print(float_a)
        4.0
        >>>
        >>> # complex型の 5+5j に 5+5j を加算
        >>> complex_a = 5 + 5j + 5 + 5j
        >>> print(complex_a)
        (10+10j)
        >>>
    
  • 減算(-)
    ※ 四則演算の減算と同じ結果。

    $ python
        >>>
        >>> # int型の 3 から 2 を減算
        >>> int_a = 3 - 2
        >>> print(int_a)
        1
        >>>
        >>> # float型の 1.5 から 2.5 を減算
        >>> float_a = 1.5 - 2.5
        >>> print(float_a)
        -1.0
        >>>
        >>> # complex型の 5 + 5j から 7 + 3j を減算
        >>> complex_a = 5 + 5j - (7 + 3j)
        >>> print(complex_a)
        (-2+2j)
        >>>
    

乗算(*)・除算(/・//)・剰余(%)

  • 乗算(*)
    ※ 四則演算の乗算と同じ結果。

    $ python
        >>>
        >>> # int型の 2に 2 を乗算
        >>> int_a = 2 * 2
        >>> print(int_a)
        4
        >>> # float型の -2.0に 2.5 を乗算
        >>> float_a = -2.0 * 2.5
        >>> print(float_a)
        -5.0
        >>> # complex型の 2 + 2j に -2.0 を乗算
        >>> complex_a = -2.0 * (2 + 2j)
        >>> print(complex_a)
        (-4-4j)
        >>>
    
  • 除算(/)
    ※ 四則演算の除算と同じ結果。

    $ python
        >>>
        >>> # int型の 6 を 2 で除算
        >>> int_a = 6 / 2
        >>> print(int_a)
        3.0
        >>> # float型の -6.5 を 0.5 で除算
        >>> float_a = -6.5 / 0.5
        >>> print(float_a)
        -13.0
        >>> # complex型の 2 + 2j を 2 で除算
        >>> complex_a = (2 + 2j) / 2
        >>> print(complex_a)
        (1+1j)
        >>>
    
  • 除算(//) ※商のみ
    除算(//)は、演算結果の商(整数部のみ)を返す。

    $ python
        >>>
        >>> # int型の 6 を 2 で除算 (//)
        >>> int_a = 5 // 2
        >>> print(int_a)
        2.0
        >>> # float型の -6.5 を 0.5 で除算 (//)
        >>> float_a = -5.5 // 0.2
        >>> print(float_a)
        -28.0
        >>> # complex型の除算 (//)はできない
        >>> complex_a = 3j // 2
        Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        TypeError: "can't take floor of complex number."
        >>>
    
  • 剰余(%)
    除算の演算結果の余りを返す。

    $ python
        >>>
        >>> # int型の 5 に 2 の剰余
        >>> int_a = 5 % 2
        >>> print(int_a)
        1
        >>>
        >>> # float型の 5.5 に 2.5 の剰余
        >>> float_a = 5.5 % 2.5
        >>> print(float_a)
        0.5
        >>>
        >>> # complex型に剰余はできない
        >>> complex_a = 5j % 2
        Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        TypeError: "can't mod complex numbers."
        >>>
    

べき乗(**)

  • 指数の演算結果(底のべき乗)

    $ python
        >>>
        >>> # int型の 2 の 3 乗
        >>> int_a = 2 ** 3
        >>> print(int_a)
        8
        >>> # int型の 10 の -10 乗
        >>> int_b = 10 ** -10
        >>> print(int_b)
        1e-10
        >>>
        >>> # float型の 2.0 の 2.5 乗
        >>> float_a = 2.0 ** 2.5
        >>> print(float_a)
        5.656854249492381
        >>>
        >>> # complex型の 2 + 2j の 3 を乗算
        >>> complex_a = (2 + 2j) ** 3
        >>> print(complex_a)
        (-16+16j)
        >>>
    

違いを整理する

比較する項目 整理するポイント
`/`と`//`の違い`/`は通常の除算、`//`は切り捨て除算。
負数の剰余負の値を含む剰余は直感とずれることがあるため、実行結果を確認する。
べき乗の優先順位`**`は他の算術演算子より優先される。

実務とのつながり

  • 集計処理
    平均、割合、余り判定、ページ数計算などで算術演算子を日常的に使う。
  • 条件判定
    剰余を使うと偶数/奇数判定や周期処理を表現しやすい。

まとめ

  • 算術演算子はPythonの数値計算の基本。
  • `/`、`//`、`%`は似ているが用途が異なる。
  • 演算結果の型や優先順位を確認すると、計算ミスを防ぎやすい。

参考文献

  • 金城 俊哉(\(2018\))『現場ですぐに使える! Pythonプログラミング逆引き大全313の極意』株式会社昭和システム


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp