🎯 この章で学ぶこと

  • 変数の作り方と命名のルール
  • 基本のデータ型:int・float・str・bool
  • f文字列による文字列の組み立て
  • input() によるユーザー入力と型変換

2.1 変数 — データに名前をつける

変数とは、データに名前をつけて保管しておく仕組みです。= は「等しい」ではなく「右のものを左の名前に入れる(代入)」という意味です。

user_name = "tanaka"       # 文字列を代入
login_count = 3            # 整数を代入
login_count = login_count + 1  # 今の値に1を足して入れ直す
print(user_name, login_count)  # tanaka 4

変数名のルールと慣習を押さえましょう。

2.2 基本のデータ型

Pythonのデータには「型(type)」があります。まずは4つ覚えれば十分です。

意味
int整数42, -7, 0
float小数(浮動小数点数)3.14, -0.5
str文字列"admin", 'パスワード'
bool真偽値True, False

型は type() で確認できます。

>>> type(42)
<class 'int'>
>>> type("42")
<class 'str'>
>>> 42 == "42"      # 数値の42と文字列の"42"は別物!
False
⚠️ 「見た目が同じ」でも型が違えば別物

数値の 42 と文字列の "42" は、画面上は同じに見えても全くの別物です。型の取り違えはバグの定番であり、バグは脆弱性の入り口です。「今この変数は何型か?」を常に意識しましょう。

2.3 文字列の操作

セキュリティ実務(ログ解析など)で最も触るのが文字列です。基本操作を身につけましょう。

log = "2026-07-08 09:15:02 LOGIN FAILED user=admin"

print(len(log))            # 文字数を数える
print(log.upper())         # 大文字化
print(log.lower())         # 小文字化
print("FAILED" in log)     # 含まれるか? → True
print(log.split(" "))      # 空白で分割してリストに
print(log.replace("admin", "****"))  # 置換(マスキング)
44
2026-07-08 09:15:02 LOGIN FAILED USER=ADMIN
2026-07-08 09:15:02 login failed user=admin
True
['2026-07-08', '09:15:02', 'LOGIN', 'FAILED', 'user=admin']
2026-07-08 09:15:02 LOGIN FAILED user=****

in(含まれているか)、split()(分割)、replace()(置換)の3つは、第13章のログ解析ツールでもそのまま使う頻出メソッドです。

f文字列 — 変数を埋め込む

文字列の前に f を付けると、{ } の中に変数や式を埋め込めます。現在のPythonで最も推奨される書き方です。

user = "tanaka"
attempts = 5
message = f"ユーザー {user} のログイン失敗は {attempts} 回です"
print(message)
print(f"許容回数まであと {10 - attempts} 回")  # 式も書ける
ユーザー tanaka のログイン失敗は 5 回です
許容回数まであと 5 回

2.4 ユーザー入力と型変換

input() を使うと、キーボードからの入力を受け取れます。戻り値は必ず文字列(str)である点に注意してください。

# age_check.py
age_text = input("年齢を入力してください: ")
age = int(age_text)          # 文字列 → 整数に変換
print(f"10年後は {age + 10} 歳です")
$ python age_check.py
年齢を入力してください: 30
10年後は 40 歳です

型変換には int()float()str() を使います。変換できない文字列を渡すとエラー(ValueError)になります。

>>> int("abc")
Traceback (most recent call last):
  ...
ValueError: invalid literal for int() with base 10: 'abc'
🛡️ セキュリティの視点 — 「入力は信用しない」が鉄則

input() で受け取る値は、ユーザーが何を入力してくるかわからないデータです。数値のつもりが文字列かもしれないし、想定外に長い文字列や記号の羅列かもしれません。セキュリティの世界には「すべての外部入力は信頼しない(Never trust user input)」という大原則があります。入力を受け取ったら「検証(バリデーション)してから使う」──この意識を今日から持ってください。検証の具体的な方法は第6章(例外処理)と第10章(セキュアコーディング)で学びます。

2.5 bool型と比較演算子

条件判定(次章のif文)の基礎になるのが、True/False を返す比較演算子です。

>>> 5 > 3
True
>>> 5 == 5        # 等しい(=が2つ!)
True
>>> 5 != 4        # 等しくない
True
>>> "abc" == "ABC"  # 大文字小文字は区別される
False
💡 ===

= は代入、== は比較です。初学者が最も混同しやすいポイントなので、声に出して「イコール1つは代入、2つは比較」と覚えましょう。

まとめ

練習問題

問題 2-1

変数 hostname"web-server-01" を代入し、f文字列を使って「対象ホスト: web-server-01 を点検します」と表示するプログラムを書いてください。

解答を見る
hostname = "web-server-01"
print(f"対象ホスト: {hostname} を点検します")
問題 2-2

次のログの1行から、split(" ") を使って「日付」「時刻」「ユーザー名の部分」をそれぞれ取り出して表示してください。
log = "2026-07-08 22:03:11 LOGIN user=suzuki"

解答を見る
log = "2026-07-08 22:03:11 LOGIN user=suzuki"
parts = log.split(" ")
print(parts[0])   # 2026-07-08(日付)
print(parts[1])   # 22:03:11(時刻)
print(parts[3])   # user=suzuki

parts[0] のような書き方(インデックス)は第4章で詳しく学びます。「分割した結果の何番目か」を0から数えて指定しています。

問題 2-3

input() で好きな数字を受け取り、その2乗を表示するプログラムを書いてください。また、数字以外(例:abc)を入力すると何が起きるか確認してください。

解答を見る
text = input("数字を入力: ")
number = int(text)
print(f"{number} の2乗は {number ** 2} です")

abc を入力すると ValueError が発生してプログラムが停止します。「想定外の入力でプログラムが落ちる」──これがまさに入力検証が必要な理由です。安全な受け取り方は第6章で学びます。