初心者向け!Pythonのabs(), pow(), divmod()関数の違いと便利な使い方

Python

はじめに:似ているようで違う?Pythonの便利すぎる数値計算関数たち

Pythonでプログラミングを学び始めると、さまざまな「関数」に出会います。特に数値計算でよく使われるabs(), pow(), divmod()は、どれも便利ですが、特に初心者の方は「それぞれの違いがよくわからない」「いつどれを使えばいいの?」と混乱してしまうことがあるかもしれません。

ご安心ください!これらの関数は、それぞれ全く異なる役割を持っています。

この記事では、Pythonの基本的な数値計算で役立つ3つの組み込み関数について、それぞれの明確な違い便利な使い方を、具体的なサンプルコードを交えながら分かりやすく解説していきます。

この記事を読み終える頃には、3つの関数を自信を持って使い分けられるようになっているはずです。

abs(): とにかくプラスの数にする!絶対値の計算

abs()の役割は「符号を取ること」

abs()関数の役割は非常にシンプルです。それは、数値のマイナスの符号を取り除き、必ず0以上の値(絶対値)にすることです。

数値の大きさだけを知りたい、2つの値の距離を計算したい、といった場面で活躍します。

具体的なコード例(整数・小数)

使い方は簡単で、abs()のカッコの中に数値をいれるだけです。

# マイナスの整数
negative_int = -15
print(f'{-15} に abs() を使うと {abs(negative_int)} になります。')
# -> -15 に abs() を使うと 15 になります。

# マイナスの小数
negative_float = -99.9
print(f'{-99.9} に abs() を使うと {abs(negative_float)} になります。')
# -> -99.9 に abs() を使うと 99.9 になります。

# プラスの数はそのまま
positive_num = 200
print(f'{200} に abs() を使うと {abs(positive_num)} のままです。')
# -> 200 に abs() を使うと 200 のままです。

このように、abs()は数値の正負に関わらず、その「大きさ」だけを取り出したいときに使う、と覚えておきましょう。

pow(): べき乗(累乗)を計算!**との違いは?

pow(x, y)の基本的な使い方

pow(x, y)関数は、**1つ目の数値(x)を、2つ目の数値(y)の回数だけ掛け合わせる計算(べき乗、または累乗)**を行います。例えば、pow(3, 4)は、34(3の4乗)を意味し、「3 × 3 × 3 × 3」と同じです。

# 3の4乗を計算する
result = pow(3, 4)
print(f'3の4乗は {result} です。')
# -> 3の4乗は 81 です。

# 10の3乗を計算する
result2 = pow(10, 3)
print(f'10の3乗は {result2} です。')
# -> 10の3乗は 1000 です。

**演算子とどっちを使うべき?

Pythonでは、**(アスタリスク2つ)という演算子を使っても、同じべき乗の計算ができます。

# ** 演算子を使った場合
result = 3 ** 4
print(f'3の4乗は {result} です。')
# -> 3の4乗は 81 です。

**の方が短く書けて便利に見えますが、pow()は関数なので「今、べき乗の計算をしている」という意図がコード上で明確になるメリットがあります。どちらを使うかは好みやチームのコーディング規約にもよりますが、pow()には**にはない特別な機能があります。

pow()ならではの便利な使い方:第3引数

pow()の最大の特徴は、3つ目の引数を指定できる点です。pow(x, y, z)と書くと、xのy乗を計算し、その結果をzで割った余りを求めてくれます。

これは、別々に (x ** y) % z と計算するよりも、特に扱う数値が大きくなった場合に非常に高速に動作します。

# (4 ** 5) % 3 を計算したい

# pow()を使うと1行で効率的に書ける
# 4の5乗 (1024) を3で割った余りを求める
result = pow(4, 5, 3)
print(f'計算結果は {result} です。')
# -> 計算結果は 1 です。

# 別々に計算した場合 (結果は同じ)
result_normal = (4 ** 5) % 3
print(f'計算結果は {result_normal} です。')
# -> 計算結果は 1 です。

この機能は、専門的な分野で使われることが多いですが、pow()だけの強力な機能として覚えておくと良いでしょう。

divmod(): 割り算の「商」と「余り」をセットで取得!

divmod(a, b)の基本的な使い方

divmod(a, b)は、aをbで割ったときの「商(割り算の答え)」と「余り」を、一度の計算でセットで返してくれる、とても便利な関数です。結果は (商, 余り) という形の「タプル」で返ってきます。

# 13を4で割った商と余りを求める
# 13 ÷ 4 = 3 余り 1
result_tuple = divmod(13, 4)
print(f'13を4で割った商と余りは {result_tuple} です。')
# -> 13を4で割った商と余りは (3, 1) です。

# 結果を別々の変数に сразу代入すると便利
quotient, remainder = divmod(13, 4)
print(f'商は {quotient}、余りは {remainder} です。')
# -> 商は 3、余りは 1 です。

//と%を2回使うよりdivmod()がスマートな理由

商と余りは、それぞれ演算子//(商を求める)と%(余りを求める)を使っても計算できます。

quotient = 13 // 4   # 商は3
remainder = 13 % 4    # 余りは1

これでも同じ結果は得られますが、divmod()を使うと2つの大きなメリットがあります。

  1. コードが1行で済む: 2つの処理を1つの関数呼び出しで完結でき、コードがスッキリします。
  2. 計算が効率的: 内部的に1回の割り算処理で商と余りを同時に計算するため、処理が高速です。

両方が必要な場合は、積極的にdivmod()を使いましょう。

こんな時に便利!divmod()の活用例

divmod()は、時間の単位変換などで絶大な効果を発揮します。例えば、秒数を「分」と「秒」に変換する処理は、divmod()を使うと非常に直感的に書けます。

total_seconds = 200  # 200秒

# 1分は60秒なので、60で割る
minutes, seconds = divmod(total_seconds, 60)

print(f'{total_seconds}秒は、{minutes}分{seconds}秒です。')
# -> 200秒は、3分20秒です。

divmod()を知っているだけで、このような処理がとてもシンプルに書けるようになります。

まとめ:3つの関数を使い分けてPythonプログラミングをレベルアップ!

今回は、Python初心者が押さえておきたい3つの数値計算関数について、その違いと使い方を解説しました。最後にもう一度、それぞれの役割を整理しておきましょう。

  • abs(): 符号を取りたいときに使う(絶対値)。
  • pow(): **べき乗(累乗)**を計算したいときに使う。
  • divmod(): 商と余りをセットで求めたいときに使う。

これらの関数は、Pythonにもともと備わっている強力なツールです。それぞれの役割をしっかり理解し、適切な場面で使い分けることで、あなたの書くコードはもっとスマートで効率的になります。

ぜひ、これらの関数を使いこなして、Pythonプログラミングのレベルアップを目指してください!

コメント

タイトルとURLをコピーしました