Python | レベル別練習問題:変数

Python
スポンサーリンク

実践で身につくタイプの練習問題を用意しました。

目的:読みやすく・保守しやすい変数名を付けられるようになること。
各レベルごとに問題・ヒント・解答(解説付き)を用意しています。まずは 基礎 → 応用 → 実務的リファクタ の順で解いてみてください。答えを見てもOK。手を動かして直すのが一番身につきます。

初級(ルールを身につける)

各問題は「このコードの変数名をもっと良くしてください」。変更後のコードと短い理由を書いてください。

問1

x = 10
y = 3.14
z = "Taro"
print(x, y, z)
Python

ヒント:何を表す値か分かる名前に。

解答例

age = 10
pi_value = 3.14
name = "Taro"
print(age, pi_value, name)
Python

解説x,y,z は意味がない。agename のように中身を表す名前にするとコード理解が早い。


問2

list = [1,2,3]
sum = 6
avg = sum / len(list)
Python

ヒント:組み込み名は上書きしない。

解答例

numbers = [1, 2, 3]
total = 6
average = total / len(numbers)
Python

解説listsum は組み込み関数名なので別名にする(numbers, total)。


問3

a1 = 100
a2 = 200
a3 = a1 + a2
Python

ヒント:何の合計?

解答例

apple_price = 100
orange_price = 200
total_price = apple_price + orange_price
Python

解説a1 等は何を表すか不明。*_price など意味を含める。


中級(命名の慣習・型が分かる名前)

型や用途が明確になる命名、真偽値の命名、複数形などを練習します。

問4(Boolean の命名)

value = True
if value:
    print("ok")
Python

ヒント:真偽値は is_ / has_ / should_ の接頭語が読みやすい。

解答例

is_valid = True
if is_valid:
    print("ok")
Python

解説value より is_valid の方が条件の意味が明確。


問5(複数形・コレクション)

user = ["alice", "bob", "carol"]
for u in user:
    print(u)
Python

ヒント:コレクションは複数形、ループ変数は単数形が自然。

解答例

users = ["alice", "bob", "carol"]
for user in users:
    print(user)
Python

解説users(複数形)と user(各要素)で読みやすくなる。


問6(短縮語と略語)

dt = "2025-11-04"
cfg = {"a": 1}
Python

ヒント:略語はチームで合意があればOKだが、初学者は避ける。

解答例

date_str = "2025-11-04"
config = {"a": 1}
Python

解説dt, cfg は慣れないと意味が分からない。date_str, config のほうが明快。


上級(スコープ・コンテキストを意識した命名、リファクタ)

実務で起きるちょっと複雑なケース。リファクタ前・後のコードと理由を書いてください。

問7(関数内の変数が外の意味と衝突)

items = ["apple", "orange"]

def process(items):
    items = items + ["banana"]
    return items
Python

ヒント:関数引数名と外側の変数名が同じ場合、呼び出し側が混乱することがある。

解答例

cart_items = ["apple", "orange"]

def add_banana(items):
    return items + ["banana"]

new_cart = add_banana(cart_items)
Python

解説:外側は cart_items、関数名を具体的にして副作用の有無が分かるようにすると安全(ここは非破壊的に新しいリストを返す)。


問8(定数・大文字)

pi = 3.14159
Python

ヒント:定数は大文字で書く慣習。

解答例

PI = 3.14159
Python

解説:変更されない値は UPPER_SNAKE_CASE にして、定数であることを表す。


問9(型情報を含めるか否か)

data = {"id": 1, "name": "Alice"}
Python

ヒントdata は曖昧。用途を考える。

解答例

user_record = {"id": 1, "name": "Alice"}
Python

解説user_record の方が何のデータかが一目で分かる。


実践的リファクタ問題(実際のコードを改善する)

以下のコードを読みやすく・バグを防げるようにリネームしてください。変更点は箇条書きで。

問10

def f(a, b):
    c = a * b
    return c

res = f(10, 20)
print(res)
Python

ヒント:関数名・引数名・戻り値の意味を明確に。

解答例

def multiply(x, y):
    product = x * y
    return product

result = multiply(10, 20)
print(result)
Python

改善点

  • fmultiply(何をする関数か明示)
  • 引数 a, bx, y(もう少し説明的なら width, height 等に)
  • cproductresresult(意味が明確)

問11(大きめの断片:ログ変数など)

log = []
for i in range(3):
    log.append(i * 2)
print(log)
Python

ヒントlog は「ログ」だがここでは単に結果のリスト。名前を正確に。

解答例

doubled_numbers = []
for i in range(3):
    doubled_numbers.append(i * 2)
print(doubled_numbers)
Python

解説doubled_numbers の方が中身が直感的に分かる。


✅ 命名チェックリスト(いつでも使える短縮版)

コードレビューや自分のコードを見直すときにこの順でチェック。

  1. その名前で「何をしているか」が一瞬で分かるか?
  2. 予約語・組み込み名を上書きしていないか?
  3. コレクションは複数形、要素は単数形か?
  4. 真偽値は is_ / has_ / should_ の接頭語を検討したか?
  5. 定数は UPPER_SNAKE_CASE にしているか?
  6. 略語を使うならチームで合意しているか・誰でも分かるか?
  7. スコープ(グローバル/ローカル)で名前の衝突はないか?
  8. 名前が長すぎないか(だが短すぎて意味がわからないのはNG)
  9. 型が重要なら _str / _list のようなサフィックスで明示するのは役立つか?(乱用は禁物)

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました