はじめに
「プログラミング=難しい」を“呼吸”レベルまで落とし込む入門記事だ。
本稿では Python の超基本である print
、if
、for
を、鬼滅の刃の世界観になぞらえて学ぶ。アニメ・原作の重大なネタバレは避ける。
目次
- 対象読者 / ゴール
- 準備(実行環境)
- 1.
print
:まずは声を出す(出力) - 2. 変数:技名や状態を入れて持ち運ぶ
- 3.
if
/elif
/else
:分岐で“状況判断” - 4.
for
:柱稽古(反復処理) - 5. 小さなまとめアプリ:任務ログ出力
- 練習問題(3問)
- よくあるエラーと詰まりどころ
- まとめ
対象読者 / ゴール
- 対象:はじめてPythonを書く人、あるいは一度触ったがまだ不安な人。
-
ゴール:
- 画面にメッセージを出せる(
print
) - 状態に応じて処理を分けられる(
if / elif / else
) - 繰り返し処理が書ける(
for
)
- 画面にメッセージを出せる(
準備(実行環境)
- 任意の方法でPythonを実行できればよい。例:
- 公式インタプリタ(
python
/python3
コマンド) - VS Code + Python 拡張
- ブラウザ上のPython実行環境
- 公式インタプリタ(
- 以下のサンプルは 1ファイル にコピペして実行してもよいし、対話モードで1行ずつ試してもよい。
1. print
:まずは声を出す(出力)
print("水の呼吸・壱ノ型!")
print("水面斬り!")
-
print(...)
はカッコ内の内容を画面に表示する関数である。 - 文字列は
""
で囲む。
出力例
水の呼吸・壱ノ型!
水面斬り!
2. 変数:技名や状態を入れて持ち運ぶ
breathing = "水の呼吸"
form = "参ノ型・流流舞い"
print(breathing + " / " + form)
-
変数 = 値
で“名前付きの入れ物”を作る。 -
+
は文字列の結合に使える。
出力例
水の呼吸 / 参ノ型・流流舞い
3. if
/ elif
/ else
:分岐で“状況判断”
鬼滅の擬似仕様:
-
is_demon == True
なら「首を斬る」 - ただし 日光 が出ていれば「待機」
- それ以外は見回り
is_demon = True # 鬼を発見したか
is_sunlight = True # 日光が出ているか
if is_demon and is_sunlight:
print("日光に任せて待機する")
elif is_demon and not is_sunlight:
print("首を斬る")
else:
print("見回りを続行する")
-
and
/or
/not
で条件を組み合わせる。 -
:
の後ろの行は インデント(字下げ) が必要(半角スペース4つ推奨)。
4. for
:柱稽古(反復処理)
4.1 リストを回す
hashira = ["水柱", "炎柱", "音柱", "恋柱", "岩柱", "霞柱", "蛇柱", "風柱"]
for h in hashira:
print("今日の稽古担当:", h)
出力例(抜粋)
今日の稽古担当: 水柱
今日の稽古担当: 炎柱
...
4.2 range
で回数を回す(何日も稽古)
for day in range(1, 4): # 1,2,3日目
print(f"{day}日目:素振り100回")
出力例
1日目:素振り100回
2日目:素振り100回
3日目:素振り100回
4.3 反復 × 条件分岐の合わせ技
missions = [
{"場所": "藤の花の山", "鬼": False},
{"場所": "那田蜘蛛山", "鬼": True},
{"場所": "蝶屋敷", "鬼": False},
]
for m in missions:
if m["鬼"]:
print(m["場所"], ":応援要請+出動")
else:
print(m["場所"], ":巡回のみ")
出力例
藤の花の山 :巡回のみ
那田蜘蛛山 :応援要請+出動
蝶屋敷 :巡回のみ
※ print(m["場所"], ":...")
と引数をカンマで渡しているので、場所名と「:」の間に半角スペースが1つ入る。スペースなしで整形したいなら f-string
を使って print(f"{m['場所']}:巡回のみ")
のように書けばOK。
5. 小さなまとめアプリ:任務ログ出力
要件
- 入力データ:隊員のリスト(名前・呼吸・累計討伐数)
- 仕様:
- 討伐数が 0:教育隊へ
- 1~9:一般任務
- 10 以上:難度高の任務
- 使う構文:
if-elif-else
/for
slayers = [
{"名前": "炭治郎", "呼吸": "水", "討伐": 12},
{"名前": "善逸", "呼吸": "雷", "討伐": 5},
{"名前": "伊之助", "呼吸": "獣", "討伐": 0},
]
for s in slayers:
name = s["名前"]
style = s["呼吸"]
count = s["討伐"]
if count == 0:
grade = "教育隊で基礎から"
elif count < 10:
grade = "一般任務へ"
else:
grade = "難度高の任務へ"
print(f"{name}({style}の呼吸)→ {grade}(累計{count}体)")
出力例
炭治郎(水の呼吸)→ 難度高の任務へ(累計12体)
善逸(雷の呼吸)→ 一般任務へ(累計5体)
伊之助(獣の呼吸)→ 教育隊で基礎から(累計0体)
練習問題(3問)
Q1:奇数日だけ稽古
1〜10 の日数を for
で回し、奇数 の日だけ「型の練習」と出力せよ。
ヒント:if day % 2 == 1
Q2:簡易ランク付け
討伐数 kills
に応じて出力を変える if-elif-else
を書け。
- 0:「訓練」
- 1〜3:「下級任務」
- 4 以上:「上級任務」
Q3:柱一覧フォーマット
hashira = [{"名前": "冨岡", "系統": "水"}, ...]
の形のリストを用意し、
"水柱:冨岡"
のような行を for
+ print
で全員分出力せよ。
よくあるエラーと詰まりどころ
-
IndentationError
:if
やfor
の下の行が 字下げ されていない。半角スペース4つを揃える習慣をつける。 -
NameError
:変数名のスペルが違う/定義前に使っている。先に宣言し、名前を統一する。 -
SyntaxError: invalid syntax
:-
else if
と書いた →elif
が正しい。 - カンマや
:
の付け忘れ。行末を確認する。
-
-
比較演算子の取り違え:
- 代入
=
と比較==
は別物。条件式では==
を使う。
- 代入
まとめ
-
print
で 状態を可視化、if
で 意思決定、for
で 反復。 - まずはこの3つを“呼吸”のように体に入れると、ほとんどの入門課題は解ける。
- 次の一歩は リスト/辞書の操作 と 関数定義。だが本稿の3点を確実に身につけることが最優先だ。
余力があれば:
- 練習問題の答えを自分で書き、出力例と一致するか確かめる。
- 状態(昼/夜、場所、人数)を増やして
if-elif-else
を設計してみる。
(おまけ)練習問題の一例解答
自分の解で動いたあとに参照することを推奨。
# Q1
for day in range(1, 11):
if day % 2 == 1:
print(f"{day}日目:型の練習")
# Q2
kills = 4
if kills == 0:
print("訓練")
elif 1 <= kills <= 3:
print("下級任務")
else:
print("上級任務")
# Q3
hashira = [
{"名前": "冨岡", "系統": "水"},
{"名前": "煉獄", "系統": "炎"},
{"名前": "宇随", "系統": "音"},
]
for h in hashira:
print(f"{h['系統']}柱:{h['名前']}")
執筆者メモ:print
/ if
/ for
は最小構成の“刀” だ。
この3本の型を磨けば、次の章(関数・コレクション操作・ファイル入出力)もすんなり入るはずである。
健闘を祈る。