Python 基礎データ型
現実世界で、材質や形状の異なる容器を使ってさまざまな物品を保管するように、プログラミングでは「データ型 (Data Types)」を用いてデータを分類し、管理します。
本章では、Python における4つのコアデータ型である、整数 (Integers)、浮動小数点数 (Floats)、文字列 (Strings)、そして ブール値 (Booleans) について深く探究します。それぞれの特性、作成方法、そして効率的に使いこなすためのテクニックを一つずつ紐解いていきましょう。
1. 整数 (Integers):完全な数値
整数は、小数点を持たない完全な数値を表し、正の数と負の数の両方を含みます。これらは通常、カウント、インデックスによる位置指定、および離散的な数量を表現するために使用されます。
1.1 整数の定義
変数を定義するには、整数を直接代入するだけです。
# 整数を変数に代入
age = 30
quantity = -10
year = 2026
print(age) # 出力: 30
print(quantity) # 出力: -10
print(year) # 出力: 20261.2 整数演算
Python は、整数に対する標準的な数学演算をサポートしています。
- 加算 (
+) - 減算 (
-) - 乗算 (
*) - 除算 (
/) - 注意:Python では、除数と被除数がともに整数であっても、通常の除算の結果は常に浮動小数点数になります。 - 切り捨て除算 (
//) - 除算結果の整数部分のみを返します。 - 剰余演算 (
%) - 除算後の余りを返します。 - べき乗 (
**) - 数値の累乗を計算します。
a = 10
b = 3
print(a + b) # 出力: 13
print(a - b) # 出力: 7
print(a * b) # 出力: 30
print(a / b) # 出 line: 3.3333333333333335
print(a // b) # 出力: 3
print(a % b) # 出力: 1
print(a ** b) # 出力: 1000主な活用シーン:
- カウント: 在庫商品の数量を追跡する。
- インデックス: リストや文字列内の特定の要素に位置番号(インデックス)でアクセスする。
- 年齢計算: 個人の具体的な年齢を表現する。
1.3 アドバンス概念:整数のサイズと進数変換
- 無限のサイズ: Python 3 では、整数のサイズはメモリが許す限り制限がありません。つまり、C や Java のような言語で発生する「整数オーバーフロー (Integer Overflow)」を心配する必要はありません。
- 進数変換: Python には、10進数の整数を他の進数(2進数、8進数、16進数)に変換する組み込み関数が用意されています。
number = 255
print(bin(number)) # 出力: 0b11111111 (2進数)
print(oct(number)) # 出力: 0o377 (8進数)
print(hex(number)) # 出力: 0xff (16進数)2. 浮動小数点数 (Floats):小数点を持つ数値
浮動小数点数は、小数点を含む実数を表します。これらは、計測値、価格、割合など、整数ではない量を表現するために使用されます。
2.1 浮動小数点数の定義
数値の中に小数点を含めることで、浮動小数点数として定義されます。
# 浮動小数点数を変数に代入
price = 99.99
temperature = 25.5
pi = 3.14159
print(price) # 出力: 99.99
print(temperature) # 出力: 25.5
print(pi) # 出力: 3.141592.2 浮動小数点数の演算
浮動小数点数は整数と同じ算術演算をサポートしています。注意点として、演算に整数と浮動小数点数が混在している場合、最終的な結果は常に浮動小数点数になります。
a = 10.5
b = 2
print(a + b) # 出力: 12.5
print(a - b) # 出力: 8.5
print(a * b) # 出力: 21.0
print(a / b) # 出力: 5.25
print(a // b) # 出力: 5.0
print(a % b) # 出力: 0.5
print(a ** b) # 出力: 110.25主な活用シーン:
- 平均値の計算: 試験の平均点を算出する。
- 通貨の表現: 商品の価格を格納する。
- 科学計算: 光速などの物理定数を表現する。
2.3 アドバンス概念:精度問題と特殊な値
- 精度の制限: コンピュータのメモリへの格納方法(バイナリ形式)の制限により、浮動小数点数の精度には限界があります。これにより、計算結果に極めて微小な丸め誤差が生じることがあります(これは Python 特有ではなく、ほぼすべてのプログラミング言語に共通する仕様です)。
result = 0.1 + 0.2
print(result) # 出力: 0.30000000000000004
# 精度問題を避けるには、round() 関数で四捨五入するか、decimal モジュールを使用します。
print(round(result, 2)) # 出力: 0.3- 特殊な値: 浮動小数点数は、無限大 (inf) や「非数」 (nan - Not a Number) といった特殊な状態も表現できます。
import math
infinity = float('inf')
not_a_number = float('nan')
print(infinity) # 出力: inf
print(not_a_number) # 出力: nan
print(math.isinf(infinity)) # 出力: True (無限大か判断)
print(math.isnan(not_a_number)) # 出力: True (非数か判断)3. 文字列 (Strings):文字のシーケンス
文字列はテキストを表現するために使用されます。これらは、シングルクォート ('...') またはダブルクォート ("...") で囲まれた文字のシーケンス(並び)で構成されます。文字列は、テキストデータの保存と処理における核心です。
3.1 文字列の定義
# 文字列を変数に代入
name = "アリス"
message = 'こんにちは、世界!'
empty_string = "" # これは空文字列です
print(name) # 出力: アリス
print(message) # 出力: こんにちは、世界!
print(empty_string) # 出力: (何も表示されません)3.2 文字列操作
文字列は、非常に便利な多くの操作をサポートしています。
- 結合 (Concatenation):
+演算子を使用して、複数の文字列を連結します。 - 反復 (Repetition):
*演算子を使用して、文字列を複数回繰り返します。 - インデックス (Indexing): 文字の位置番号(0から開始)を指定して、単一の文字を取り出します。
- スライス (Slicing): 文字列の中から連続した一部分を切り出します。
first_name = "John"
last_name = "Doe"
full_name = first_name + " " + last_name # 文字列の結合
print(full_name) # 出力: John Doe
greeting = "こんにちは! "
repeated_greeting = greeting * 3 # 文字列の反復
print(repeated_greeting) # 出力: こんにちは! こんにちは! こんにちは!
message = "Python"
print(message[0]) # インデックス (出力: P、最初のインデックスは0)
print(message[1:4]) # スライス (出力: yth、インデックス1から3までを取得、4は含まない)主な活用シーン:
- 個人情報の保存: 氏名や住所など。
- 動的メッセージの生成: メールやアプリの通知用に、変数を含むテキストを生成する。
- データ解析: テキストドキュメントやログファイルから重要な情報を抽出する。
3.3 アドバンス概念:不変性とエスケープシーケンス
- 不変性 (Immutability): 文字列は一度作成されると、その内部の値を直接変更することはできません。結合などの「変更」に見える操作は、実際にはメモリ上に全く新しい文字列を作成しています。
- 文字列メソッド: Python には、大文字変換 (upper())、空白削除 (
strip())、置換 (replace())、分割 (split()) など、豊富な組み込みメソッドが用意されています(詳細は別章で解説します)。 - エスケープシーケンス (Escape Sequences): 改行やタブ、あるいは引用符自体など、直接入力しにくい特殊文字を文字列に含めるには、バックスラッシュ
\(環境によっては¥)を使用したエスケープシーケンスを用います。 \n:改行\t:タブ\'または\":文字列内で引用符を表示させ、構文エラーを回避します。
message = "これは一行目です。\nこれは新しい行です。"
print(message)
# 出力:
# これ一行目です。
# これは新しい行です。
quote = "彼は言いました、\"こんにちは!\""
print(quote) # 出力: 彼は言いました、"こんにちは!"4. ブール値 (Booleans):真と偽
ブール値は、真 (True) または 偽 (False) の2つの状態のみを表します。これらは、プログラム内での論理判断、意思決定、および実行フローの制御における絶対的な核心です。
※注意:Python では、True と False の先頭は大文字でなければなりません。
4.1 ブール値の定義
# ブール値を変数に代入
is_active = True
is_valid = False
print(is_active) # 出力: True
print(is_valid) # 出力: False4.2 論理演算 (Boolean Logic)
ブール値は3つの主要な論理演算子をサポートしています。
- and (論理積): 両方の値が
Trueの場合のみ、結果がTrueになります。 - or (論理和): 少なくとも一方の値が
Trueであれば、結果はTrueになります。 - not (論理否定): 真偽を反転させます。
TrueはFalseに、FalseはTrueになります。
a = True
b = False
print(a and b) # 出力: False
print(a or b) # 出力: True
print(not a) # 出力: False主な活用シーン:
- 条件分岐:
if / else文を使用して、特定の条件に応じて実行するコードを決定する。 - データバリデーション: ユーザーが入力したデータが特定の基準を満たしているかチェックする。
- フラグ (Flags): プログラム内の特定の機能がオンかオフか、あるいはオブジェクトの状態を管理する。
4.3 アドバンス概念:真偽値テストと比較演算子
- 真偽値テスト (Truthiness): Python では、ほぼすべてのデータが論理判断において暗黙的にブール値として評価されます。
- 以下の値は
Falseと見なされます:空文字列""、数値0、空のリスト[]、None。 - それ以外のほとんどの値は
Trueと見なされます(例:内容のある文字列、0以外の数値)。 - 比較演算子: 比較演算子(
==等しい、!=等しくない、<小さい、>大きい、<=以下、>=以上)による評価結果は常にブール値となります。
x = 5
y = 10
print(x == y) # 出力: False (x と y が等しいか)
print(x != y) # 出力: True (x と y が等しくないか)
print(x < y) # 出力: True (x が y より小さいか)
print(x > y) # 出力: False (x が y より大きいか)