進め方の地図
| 週 | やること | 仕上がるもの |
|---|---|---|
| 1週目 | 授業1: 環境づくりと入出力 | 自己紹介プログラム |
| 2週目 | 授業2: 条件分岐 | 判定プログラム小問6本 |
| 3週目 | 授業3: 繰り返しと集計 | FizzBuzzほか小問6本 |
| 4週目 | 授業4: リスト | 名簿プログラム |
| 5週目 | 授業5: 辞書 | おみくじ1000回の統計 |
| 6週目 | 授業6: 関数 | 関数の小問6本 |
| 7週目 | 授業7: エラー (Traceback) を読む | 自分用エラー早見表 |
| 8週目 | 月末制作 | テキスト冒険ゲーム強化版 |
授業1: 環境づくりと入出力
最初の30分で道具をそろえ、残りの時間は手を動かします。
- インストールする
python.org→ Downloads から最新版を入れます。インストール画面の最初で「Add python.exe to PATH」に必ずチェックを入れます (ここが最大の落とし穴です)。 - 確認するVS Codeのターミナル (Ctrl + @) で
python --version。数字が出れば成功です。VS Codeの拡張機能「Python」(Microsoft製) も入れておきます。 - 最初のプログラム
aisatsu.pyを作って書きます。name = input("お名前は? ") suki = input("好きな食べものは? ") print(f"{name}さん、ようこそ!") print(f"{suki}、いいですね。私も好きです。") - 動かすターミナルで
python aisatsu.py。質問に答えると、返事が返ってきます。f"..."(f文字列) の{ }に変数を埋め込める、がPython表示の基本形です。 - 計算もさせる
age = int(input("年齢は? "))のようにint( )で数値に変換すれば、print(f"10年後は{age + 10}歳です")と計算できます。inputの答えはいつも文字列、計算したければ変換 ― 最初に覚える型の感覚です。
お題: ①名前と出身地を聞いて1文にまとめて表示する。②2つの数を聞いて、合計と平均を表示する。③時給と勤務時間を聞いて、給料を計算する。④「"180" + "20"はなぜ18020になるか」を試して、理由をメモする。
+ が「つなぐ」になります。数として足したいなら int("180") + int("20")。型 (文字列か数値か) は、この先ずっとついて回る相棒です。type(x) でいつでも確かめられます。授業2: 条件分岐 ― もしも、の組み立て
Pythonの分岐は if / elif / else の3兄弟です。Pythonでは字下げ (インデント) がブロックの印になります。見た目の段差が、そのまま文法です。
- 仕様を日本語で書く「12歳以下は1000円、65歳以上は1200円、それ以外は1800円」。コードの前に日本語、が設計の習慣です。
- 厳しい条件から書く
age = int(input("年齢は? ")) if age <= 12: price = 1000 elif age >= 65: price = 1200 else: price = 1800 print(f"料金は{price}円です") - 境界でテストする12・13・64・65歳で試します。「ちょうどの値」で試すのがテストのプロの癖です。
- 条件を組み合わせる「水曜はさらに200円引き」を
andや追加のifで足してみます。
お題: ①点数 (0〜100) を聞いて「合格 (80以上) / あと少し (60以上) / 再挑戦」を表示。②数を聞いて偶数か奇数か判定 (割った余りは %)。③パスワードを聞いて、8文字以上なら「OK」、未満なら「短すぎます」(長さは len( ))。④〜⑥は①〜③の条件の数字を変えて白紙から再現します。
授業3: 繰り返しと集計
繰り返しの主役は for i in range( ) です。そして実務で一番使う型が「ためる変数を外に作り、繰り返しの中で足しこむ」集計パターンです。
- まず数える
for i in range(1, 31):で1〜30を表示します (range(1, 31)の終わりは「31の手前まで」です)。 - 集計パターン1〜100の合計を作ります。
total = 0 for i in range(1, 101): total += i print(total) # 5050 - FizzBuzzに挑む世界一有名な練習問題です。3の倍数で「Fizz」、5の倍数で「Buzz」、両方なら「FizzBuzz」、他は数字。15の倍数の判定を一番上に書くのがコツです (授業2の教訓がここで効きます)。
- whileも1回だけ「合言葉を当てるまで終わらないプログラム」を
while True:とbreakで作ります。回数が決まっていない繰り返しはwhile、決まっているならfor、が使い分けです。
お題: ①九九の7の段を「7 × 1 = 7」の形で表示。②1〜50の偶数だけの合計。③「お疲れさまでした」を、聞いた人数ぶん表示。④1〜10の数で「3秒カウントダウン式」に逆順表示 (range の3つ目の引数を調べます)。⑤〜⑥は自分で数字を変えて白紙再現。
range(10, 0, -1) で10から1まで逆に進みます。3つ目の引数は「進み幅」です。授業4: リスト ― 並べて、回す
リストは値の行列です。リストを作る → forで回す → 条件で選ぶの3点が、データ処理の最小セットです。
- 作る・足す・数える
members = ["山田", "佐藤", "田中"] members.append("鈴木") print(len(members)) # 4 - 回す
for m in members:で「◯◯さん、出席ですか?」を全員ぶん表示します。 - 選ぶ「名前が2文字の人だけ表示」を
if len(m) == 2:で作ります。 - 並べ替える
sorted(members)を表示してみます。元のリストは変わらない、も確認しましょう。
お題: 売上のリスト [3200, 1800, 4500, 2100, 3900] から、①合計と平均 ②一番大きい値 (max( ) を使わず、forとifで) ③3000以上の日だけのリスト、を作ります。
if uriage > saikou: のたびに更新します。この「記録更新パターン」は集計パターンの兄弟です。授業5: 辞書 ― 名前で引けるデータ
辞書は「名前 (キー) → 値」の対応表です。そして実務のデータは、ほぼすべて辞書のリストの形でやってきます。ここに慣れると、ユニット3のデータベースも、ユニット4のAPIも、同じ景色に見えてきます。
- 辞書を1つ
item = {"name": "メロンパン", "price": 180, "stock": 5} print(item["name"]) # メロンパン - 辞書のリストへ
items = [ {"name": "メロンパン", "price": 180, "stock": 5}, {"name": "クロワッサン", "price": 220, "stock": 3}, {"name": "あんぱん", "price": 160, "stock": 0}, ] for item in items: print(f"{item['name']}: {item['price']}円") - 条件つき集計「在庫がある商品の合計金額 (価格 × 在庫)」を、集計パターン +
if item["stock"] > 0:で計算します。 - 数える辞書辞書は集計装置にもなります。おみくじを1000回引いて、結果を数えてみましょう。
Step 3のおみくじが、統計プログラムに化けました。import random counts = {"大吉": 0, "中吉": 0, "小吉": 0, "凶": 0} for _ in range(1000): omikuji = random.choice(list(counts)) counts[omikuji] += 1 print(counts)
お題: {"山田": "出席", "佐藤": "欠席", ...} の形の出席簿を作り、①全員分を「◯◯さん: 出席」の形で表示 ②出席の人数だけ数える ③名前を聞いて、その人の出欠を答える (いなければ「登録がありません」)、の3本を作ります。
if name in roster: で確かめられます。辞書に聞く前に在籍確認 ― エラーを未然に防ぐ習慣の第一歩です。授業6: 関数 ― 部品に名前をつける
同じコードを2回書いたら関数にする合図です。「材料 (引数) を受け取り、結果を返す (return)」― この感覚を、小問の反復で体に入れます。
- 定義する
def tax_included(price, rate=0.1): return round(price * (1 + rate))rate=0.1は「指定がなければ10%」という初期値つき引数です。 - 呼ぶ
tax_included(180)→ 198。tax_included(180, 0.08)→ 194。 - 3回呼んで検査する
print(tax_included(100), tax_included(0), tax_included(98))のように、普通の値・端の値・丸めが効く値の3点で検査します。 - printとreturnの違いを言葉にする「printは画面に出すだけ、returnは次の計算に渡せる」。関数の一番大事な区別です。
お題: ①名前を渡すと挨拶文を返す関数 ②点数を渡すと評価 (授業2の①) を返す関数 ③リストを渡すと平均を返す関数 ④2つの数の大きい方を返す関数 ⑤自分の過去のコードから重複を1か所関数化 ⑥3本選んで白紙再現。
授業7: Tracebackを読む ― エラーは下から
Pythonのエラーは長く見えますが、読むのは最後の行だけで十分です。最後の行に「エラーの種類: 説明」、その1つ上に「何行目か」が書いてあります。
| エラー名 | 意味 | まず疑う場所 |
|---|---|---|
| SyntaxError | 文法ミス | コロン (:) や括弧の閉じ忘れ。表示行の1行上も見る |
| IndentationError | 字下げの乱れ | スペースの数の不ぞろい (Python特有のエラーです) |
| NameError | その名前は知らない | 変数名・関数名の打ちまちがい |
| TypeError | 型が合わない | 文字列のまま計算した (int変換忘れ) |
| KeyError | 辞書にそのキーがない | キーの打ちまちがい、在籍確認 (in) の不足 |
お題: 授業6の関数を、表の5種類のエラーがそれぞれ出るように、わざと5通りに壊します。出たエラーの最後の行を読み、意味を自分の言葉で「エラー早見表」にまとめてから直します。
月末制作: テキスト冒険ゲーム強化版
Step 3の見本 bouken-mihon.py を出発点に、このユニットの全部品を組み込んだ「自分の冒険ゲーム」を作ります。
- 体力 (HP) をつける変数 + 分岐です。選択によってHPが増減し、0になったらゲームオーバーにします。
- 持ち物をつけるリストです。「かぎを拾った」で
append、扉の前でif "かぎ" in items:― リストの腕の見せどころです。 - 場面をループにする
while True:で「進む / 持ち物を見る / やめる」を選び続けられるメニューにします。 - 関数に整理する場面ごとの処理を関数に分けて、本体を読みやすくします。整理した前後で動きが変わらないことの確認まで含めて1セットです。
- 遊んでもらうスタッフか他の利用者さんに遊んでもらい、「詰んだ・壊れた」場所を1つ直します。変な入力 (数字のかわりに文字など) に耐えられるかも見どころです。
つまずきやすいポイント
: を打って改行すれば自動で下がります。ずれたときは、その行を選んで Tab / Shift + Tab で調整できます。発展チャレンジ (余力のある方へ)
- 冒険ゲームに「乱数の敵」(random) と「逃げる / 戦うの選択」を足してみましょう。
- リスト内包表記 (
[x * 2 for x in nums]) を調べて、演習4-Aの③を1行で書き直してみましょう。 - おみくじ1000回の統計を10000回・10万回に増やして、割合がどう安定していくかを観察しましょう (大数の法則という現象の実体験です)。