Pythonでは、数値(整数、浮動小数点数、複素数)を操作するための組み込み関数やメソッドが豊富に用意されています。
これらを活用することで、数学的な計算やデータ処理を効率的に行うことができます。
この記事では、Pythonの数値操作で必須の関数とメソッドを、初心者にもわかりやすく解説します。
実際のコード例と一緒に、どんな場面で使うかも紹介するので、すぐに実践で活用できるようになります。
数値に関する組み込み関数
基本的な数値操作
abs(x)
– 絶対値を求める
数値の絶対値(マイナス記号を取り除いた値)を返します。
# 基本的な使い方
print(abs(-5)) # 出力: 5
print(abs(5)) # 出力: 5
print(abs(-3.14)) # 出力: 3.14
# 実用例:温度の差を計算
current_temp = 18.5
target_temp = 22.0
temp_diff = abs(current_temp - target_temp)
print(f"温度差: {temp_diff}度") # 出力: 温度差: 3.5度
使う場面:
- 距離や差の計算
- エラーの大きさを測る
- 負の値を正の値に変換したい時
round(x, n)
– 数値を丸める
数値を指定した桁数で四捨五入します。
# 基本的な使い方
print(round(3.14159, 2)) # 出力: 3.14
print(round(3.14159, 0)) # 出力: 3.0
print(round(3.14159)) # 出力: 3(小数点以下を省略)
# 実用例:金額の計算
price = 1234.567
print(f"税込価格: {round(price)}円") # 出力: 税込価格: 1235円
print(f"小数点2桁: {round(price, 2)}円") # 出力: 小数点2桁: 1234.57円
# 大きな数値を丸める
big_number = 123456.789
print(round(big_number, -2)) # 出力: 123500.0(百の位で丸める)
使う場面:
- 金額の計算
- 表示用に桁数を揃える
- 計算結果を見やすくする
pow(x, y)
– べき乗を計算
x
のy
乗を計算します。**
演算子と同じ機能です。
# 基本的な使い方
print(pow(2, 3)) # 出力: 8(2の3乗)
print(pow(4, 0.5)) # 出力: 2.0(4の平方根)
print(pow(10, -2)) # 出力: 0.01(10の-2乗)
# **演算子との比較
print(2 ** 3) # 出力: 8(同じ結果)
# 実用例:複利計算
principal = 100000 # 元本10万円
rate = 0.05 # 年利5%
years = 10 # 10年間
final_amount = principal * pow(1 + rate, years)
print(f"10年後の金額: {round(final_amount)}円") # 出力: 10年後の金額: 162889円
使う場面:
- 数学的計算
- 複利計算
- 面積・体積の計算
divmod(a, b)
– 商と余りを同時に取得
a
をb
で割った商と余りをタプルで返します。
# 基本的な使い方
quotient, remainder = divmod(10, 3)
print(f"商: {quotient}, 余り: {remainder}") # 出力: 商: 3, 余り: 1
# 実用例:時間の変換
total_minutes = 125
hours, minutes = divmod(total_minutes, 60)
print(f"{total_minutes}分 = {hours}時間{minutes}分") # 出力: 125分 = 2時間5分
# お金の両替
total_yen = 1234
thousands, remaining = divmod(total_yen, 1000)
hundreds, tens = divmod(remaining, 100)
print(f"{total_yen}円 = {thousands}千円札 + {hundreds}百円玉 + {tens}円")
使う場面:
- 時間の変換
- お金の両替計算
- ページネーション(ページ分け)
リストやデータの集計
sum(iterable)
– 合計を計算
リストや配列の要素の合計を計算します。
# 基本的な使い方
numbers = [1, 2, 3, 4, 5]
print(sum(numbers)) # 出力: 15
# 初期値を指定
print(sum(numbers, 10)) # 出力: 25(15 + 10)
# 実用例:テストの点数計算
test_scores = [85, 92, 78, 96, 88]
total_score = sum(test_scores)
average_score = total_score / len(test_scores)
print(f"合計点: {total_score}, 平均点: {round(average_score, 1)}")
# 浮動小数点数のリスト
prices = [12.5, 34.7, 89.2, 15.6]
total_price = sum(prices)
print(f"合計金額: {round(total_price, 2)}円")
max(iterable)
/ min(iterable)
– 最大値・最小値
リストや配列の最大値・最小値を取得します。
# 基本的な使い方
numbers = [10, 5, 8, 12, 3]
print(f"最大値: {max(numbers)}") # 出力: 最大値: 12
print(f"最小値: {min(numbers)}") # 出力: 最小値: 3
# 複数の引数でも使用可能
print(max(10, 5, 8, 12, 3)) # 出力: 12
# 実用例:成績管理
student_scores = {
'太郎': 85,
'花子': 92,
'次郎': 78
}
highest_score = max(student_scores.values())
lowest_score = min(student_scores.values())
print(f"最高点: {highest_score}, 最低点: {lowest_score}")
# 文字列の場合(辞書順)
names = ['Alice', 'Bob', 'Charlie']
print(f"辞書順最後: {max(names)}") # 出力: 辞書順最後: Charlie
データ型の変換
int(x)
/ float(x)
/ complex(x)
– 型変換
数値を異なる型に変換します。
# int() - 整数への変換
print(int(3.7)) # 出力: 3(小数部分は切り捨て)
print(int(-3.7)) # 出力: -3
print(int('123')) # 出力: 123(文字列から変換)
# float() - 浮動小数点数への変換
print(float(2)) # 出力: 2.0
print(float('3.14')) # 出力: 3.14
# complex() - 複素数への変換
print(complex(1, 2)) # 出力: (1+2j)
print(complex('3+4j')) # 出力: (3+4j)
# 実用例:ユーザー入力の処理
def calculate_area():
# input()は常に文字列を返すので、数値に変換が必要
length = float(input("長さを入力してください: "))
width = float(input("幅を入力してください: "))
area = length * width
return area
# エラーハンドリング付きの変換
def safe_int_conversion(value):
try:
return int(value)
except ValueError:
print(f"'{value}'は整数に変換できません")
return None
print(safe_int_conversion('123')) # 出力: 123
print(safe_int_conversion('abc')) # エラーメッセージを表示
数値型のメソッド
整数型(int)のメソッド
bit_length()
– ビット数を取得
整数を2進数で表現したときのビット数を返します。
# 基本的な使い方
print((10).bit_length()) # 出力: 4(1010は4ビット)
print((255).bit_length()) # 出力: 8(11111111は8ビット)
print((0).bit_length()) # 出力: 0
# 実用例:必要なビット数の計算
def required_bits(max_value):
"""指定した最大値を表現するのに必要なビット数を計算"""
return max_value.bit_length()
print(f"0-255を表現するには{required_bits(255)}ビット必要") # 出力: 8ビット必要
to_bytes()
/ from_bytes()
– バイト列との変換
整数をバイト列に変換、またはその逆を行います。
# to_bytes() - 整数をバイト列に変換
number = 1024
byte_data = number.to_bytes(2, byteorder='big')
print(byte_data) # 出力: b'\x04\x00'
# from_bytes() - バイト列を整数に変換
restored_number = int.from_bytes(byte_data, byteorder='big')
print(restored_number) # 出力: 1024
# 実用例:データの保存と復元
def save_number_as_bytes(number, filename):
"""数値をバイナリファイルに保存"""
byte_data = number.to_bytes(4, byteorder='big')
with open(filename, 'wb') as file:
file.write(byte_data)
def load_number_from_bytes(filename):
"""バイナリファイルから数値を復元"""
with open(filename, 'rb') as file:
byte_data = file.read()
return int.from_bytes(byte_data, byteorder='big')
浮動小数点数型(float)のメソッド
is_integer()
– 整数かどうかの判定
値が整数かどうかを判定します。
# 基本的な使い方
print((3.0).is_integer()) # 出力: True
print((3.5).is_integer()) # 出力: False
print((3.000001).is_integer()) # 出力: False
# 実用例:データの検証
def validate_score(score):
"""テストの点数が整数かチェック"""
if score.is_integer():
return int(score)
else:
print(f"警告: {score}は整数ではありません")
return score
print(validate_score(85.0)) # 出力: 85
print(validate_score(85.5)) # 警告メッセージと85.5を出力
as_integer_ratio()
– 分数表現
浮動小数点数を分数(分子、分母)のタプルで表現します。
# 基本的な使い方
print((0.5).as_integer_ratio()) # 出力: (1, 2) = 1/2
print((0.25).as_integer_ratio()) # 出力: (1, 4) = 1/4
print((0.1).as_integer_ratio()) # 出力: (3602879701896397, 36028797018963968)
# 実用例:分数での表示
def show_as_fraction(decimal_value):
"""小数を分数で表示"""
numerator, denominator = decimal_value.as_integer_ratio()
# 簡単な分数の場合のみ表示
if denominator <= 1000:
print(f"{decimal_value} = {numerator}/{denominator}")
else:
print(f"{decimal_value} は複雑な分数です")
show_as_fraction(0.5) # 0.5 = 1/2
show_as_fraction(0.1) # 0.1 は複雑な分数です
複素数型(complex)のメソッドと属性
real
/ imag
– 実部と虚部
複素数の実部と虚部を取得します。
# 基本的な使い方
z = complex(3, 4) # 3 + 4j
print(f"実部: {z.real}") # 出力: 実部: 3.0
print(f"虚部: {z.imag}") # 出力: 虚部: 4.0
# 実用例:複素数の絶対値(距離)を計算
import math
def complex_magnitude(z):
"""複素数の絶対値を計算"""
return math.sqrt(z.real**2 + z.imag**2)
z = complex(3, 4)
magnitude = complex_magnitude(z)
print(f"{z}の絶対値: {magnitude}") # 出力: (3+4j)の絶対値: 5.0
conjugate()
– 共役複素数
複素数の共役(虚部の符号を反転)を返します。
# 基本的な使い方
z = complex(3, 4)
z_conjugate = z.conjugate()
print(f"元の複素数: {z}") # 出力: 元の複素数: (3+4j)
print(f"共役複素数: {z_conjugate}") # 出力: 共役複素数: (3-4j)
# 実用例:複素数の絶対値の二乗を計算
def complex_abs_squared(z):
"""複素数の絶対値の二乗を計算(z * z.conjugate())"""
return (z * z.conjugate()).real
z = complex(3, 4)
abs_squared = complex_abs_squared(z)
print(f"|{z}|² = {abs_squared}") # 出力: |(3+4j)|² = 25.0
実践的な使用例
数学的計算の例
import math
def calculate_triangle_properties(a, b, c):
"""三角形の面積と周囲を計算"""
# 周囲の計算
perimeter = sum([a, b, c])
# ヘロンの公式で面積を計算
s = perimeter / 2 # 半周長
area_squared = s * (s - a) * (s - b) * (s - c)
if area_squared > 0:
area = pow(area_squared, 0.5) # 平方根
return round(area, 2), round(perimeter, 2)
else:
return None, None # 三角形が成立しない
# 使用例
area, perimeter = calculate_triangle_properties(3, 4, 5)
if area:
print(f"面積: {area}, 周囲: {perimeter}")
データ分析の例
def analyze_test_scores(scores):
"""テスト結果の統計を計算"""
if not scores:
return "データがありません"
total = sum(scores)
count = len(scores)
average = total / count
highest = max(scores)
lowest = min(scores)
# 標準点との差を計算
standard_score = 80
differences = [abs(score - standard_score) for score in scores]
avg_difference = sum(differences) / len(differences)
return {
'合計点': total,
'平均点': round(average, 1),
'最高点': highest,
'最低点': lowest,
'標準点からの平均差': round(avg_difference, 1)
}
# 使用例
test_scores = [85, 92, 78, 96, 88, 74, 91]
result = analyze_test_scores(test_scores)
for key, value in result.items():
print(f"{key}: {value}")
まとめ
重要ポイント
Pythonの数値型には、計算や変換、判定などに便利な関数やメソッドが多数用意されています。これらを適切に活用することで、数値データの処理を効率的に行うことができます。
よく使う関数一覧
関数 | 用途 | 例 |
---|---|---|
abs() | 絶対値 | abs(-5) # 5 |
round() | 四捨五入 | round(3.14, 1) # 3.1 |
sum() | 合計 | sum([1,2,3]) # 6 |
max() / min() | 最大値/最小値 | max([1,5,3]) # 5 |
divmod() | 商と余り | divmod(10,3) # (3,1) |
次のステップ
さらに高度な数学的計算が必要な場合は、以下の標準ライブラリを活用すると良いでしょう:
math
モジュール: 三角関数、対数、定数などdecimal
モジュール: 高精度な小数計算fractions
モジュール: 分数の正確な計算statistics
モジュール: 統計関数(平均、中央値など)
実践のコツ
- エラーハンドリング: 型変換時は
try-except
を使う - 適切な型選択: 用途に応じて
int
、float
、complex
を使い分ける - 精度の考慮: 金融計算などでは
decimal
モジュールを検討 - 可読性: 複雑な計算は関数に分けて、コメントを付ける
コメント