第1部 Python基礎編
第2章 変数とデータ型
プログラムは「データを入れる箱(変数)」と「データの種類(型)」の理解から始まります。ここが全ての土台です。
🎯 この章で学ぶこと
- 変数の作り方と命名のルール
- 基本のデータ型: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
変数名のルールと慣習を押さえましょう。
- 英小文字・数字・アンダースコア
_を使う(例:failed_attempts)。これをスネークケースと呼びます - 数字から始めることはできない(
1st_userは不可) ifやforなどの予約語は使えない- 意味のわかる名前をつける —
aやdata1ではなくmax_retryのように
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つは比較」と覚えましょう。
まとめ
- 変数は「データに名前をつける箱」。意味のわかるスネークケースで命名する
- 基本型は
int・float・str・bool。型が違えば別物 - 文字列は
in・split()・replace()・f文字列を使いこなす input()の戻り値は常に文字列。外部入力は信用せず、検証してから使う
練習問題
変数 hostname に "web-server-01" を代入し、f文字列を使って「対象ホスト: web-server-01 を点検します」と表示するプログラムを書いてください。
解答を見る
hostname = "web-server-01"
print(f"対象ホスト: {hostname} を点検します")
次のログの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から数えて指定しています。
input() で好きな数字を受け取り、その2乗を表示するプログラムを書いてください。また、数字以外(例:abc)を入力すると何が起きるか確認してください。
解答を見る
text = input("数字を入力: ")
number = int(text)
print(f"{number} の2乗は {number ** 2} です")
abc を入力すると ValueError が発生してプログラムが停止します。「想定外の入力でプログラムが落ちる」──これがまさに入力検証が必要な理由です。安全な受け取り方は第6章で学びます。