プロへの道 » バックエンドコース » ユニット1

バックエンドコース ユニット1 | 目安: 160時間 (約2ヶ月)

Python徹底基礎 ― 背骨を作る2ヶ月

Step 4のプログラミングコースでPythonに触れた人は、その続きとして。デザインやフロントエンドから来た人は、ここがPythonの入り口です。どちらでも大丈夫なように、ゼロから・速く・大量の演習で進みます。このユニットの主役は知識ではなく演習量です。

このユニットのゴール 変数・分岐・繰り返し・リスト・辞書・関数を組み合わせて、「やりたいことを聞いて、小さなプログラムを自力で書ける」状態になる。

進め方の地図

やること 仕上がるもの
1週目 授業1: 環境づくりと入出力 自己紹介プログラム
2週目 授業2: 条件分岐 判定プログラム小問6本
3週目 授業3: 繰り返しと集計 FizzBuzzほか小問6本
4週目 授業4: リスト 名簿プログラム
5週目 授業5: 辞書 おみくじ1000回の統計
6週目 授業6: 関数 関数の小問6本
7週目 授業7: エラー (Traceback) を読む 自分用エラー早見表
8週目 月末制作 テキスト冒険ゲーム強化版
進め方の3拍子: 小問は、自力で5〜15分 → 詰まったら答えを見て写す → 何も見ずにもう一度書く。最後の「白紙でもう一度」を飛ばさないことが、定着の分かれ目です。リードは後ろの演習ほど薄くなりますが、これはわざとです。

授業1: 環境づくりと入出力

最初の30分で道具をそろえ、残りの時間は手を動かします。

例題 (リードつき) | Pythonを入れて、会話するプログラムを作る
  1. インストールするpython.org → Downloads から最新版を入れます。インストール画面の最初で「Add python.exe to PATH」に必ずチェックを入れます (ここが最大の落とし穴です)。
  2. 確認するVS Codeのターミナル (Ctrl + @) で python --version。数字が出れば成功です。VS Codeの拡張機能「Python」(Microsoft製) も入れておきます。
  3. 最初のプログラムaisatsu.py を作って書きます。
    name = input("お名前は? ")
    suki = input("好きな食べものは? ")
    print(f"{name}さん、ようこそ!")
    print(f"{suki}、いいですね。私も好きです。")
  4. 動かすターミナルで python aisatsu.py。質問に答えると、返事が返ってきます。f"..." (f文字列) の { } に変数を埋め込める、がPython表示の基本形です。
  5. 計算もさせるage = int(input("年齢は? ")) のように int( ) で数値に変換すれば、print(f"10年後は{age + 10}歳です") と計算できます。inputの答えはいつも文字列、計算したければ変換 ― 最初に覚える型の感覚です。
演習 1-A (リードつき) | 小問4本

お題: ①名前と出身地を聞いて1文にまとめて表示する。②2つの数を聞いて、合計と平均を表示する。③時給と勤務時間を聞いて、給料を計算する。④「"180" + "20"はなぜ18020になるか」を試して、理由をメモする。

④の答え: 引用符つきは文字列なので、+ が「つなぐ」になります。数として足したいなら int("180") + int("20")。型 (文字列か数値か) は、この先ずっとついて回る相棒です。type(x) でいつでも確かめられます。

授業2: 条件分岐 ― もしも、の組み立て

Pythonの分岐は if / elif / else の3兄弟です。Pythonでは字下げ (インデント) がブロックの印になります。見た目の段差が、そのまま文法です。

例題 (リードつき) | 映画館の料金判定
  1. 仕様を日本語で書く「12歳以下は1000円、65歳以上は1200円、それ以外は1800円」。コードの前に日本語、が設計の習慣です。
  2. 厳しい条件から書く
    age = int(input("年齢は? "))
    
    if age <= 12:
        price = 1000
    elif age >= 65:
        price = 1200
    else:
        price = 1800
    
    print(f"料金は{price}円です")
  3. 境界でテストする12・13・64・65歳で試します。「ちょうどの値」で試すのがテストのプロの癖です。
  4. 条件を組み合わせる「水曜はさらに200円引き」を and や追加のifで足してみます。
演習 2-A (リードつき) | 小問6本

お題: ①点数 (0〜100) を聞いて「合格 (80以上) / あと少し (60以上) / 再挑戦」を表示。②数を聞いて偶数か奇数か判定 (割った余りは %)。③パスワードを聞いて、8文字以上なら「OK」、未満なら「短すぎます」(長さは len( ))。④〜⑥は①〜③の条件の数字を変えて白紙から再現します。

①の答えの骨格: 「80以上 → 60以上 → それ以外」の順に書きます。順番を逆 (60以上を先) にすると、90点でも「あと少し」に捕まります。条件は厳しいものから先に ― 分岐の一番大事な教訓です。

授業3: 繰り返しと集計

繰り返しの主役は for i in range( ) です。そして実務で一番使う型が「ためる変数を外に作り、繰り返しの中で足しこむ」集計パターンです。

例題 (リードつき) | 集計パターンとFizzBuzz
  1. まず数えるfor i in range(1, 31): で1〜30を表示します (range(1, 31) の終わりは「31の手前まで」です)。
  2. 集計パターン1〜100の合計を作ります。
    total = 0
    for i in range(1, 101):
        total += i
    print(total)  # 5050
  3. FizzBuzzに挑む世界一有名な練習問題です。3の倍数で「Fizz」、5の倍数で「Buzz」、両方なら「FizzBuzz」、他は数字。15の倍数の判定を一番上に書くのがコツです (授業2の教訓がここで効きます)。
  4. whileも1回だけ「合言葉を当てるまで終わらないプログラム」を while True:break で作ります。回数が決まっていない繰り返しはwhile、決まっているならfor、が使い分けです。
演習 3-A (リードつき) | 小問6本

お題: ①九九の7の段を「7 × 1 = 7」の形で表示。②1〜50の偶数だけの合計。③「お疲れさまでした」を、聞いた人数ぶん表示。④1〜10の数で「3秒カウントダウン式」に逆順表示 (range の3つ目の引数を調べます)。⑤〜⑥は自分で数字を変えて白紙再現。

④のヒント (答えつき): range(10, 0, -1) で10から1まで逆に進みます。3つ目の引数は「進み幅」です。

授業4: リスト ― 並べて、回す

リストは値の行列です。リストを作る → forで回す → 条件で選ぶの3点が、データ処理の最小セットです。

例題 (リードつき) | 名簿プログラム
  1. 作る・足す・数える
    members = ["山田", "佐藤", "田中"]
    members.append("鈴木")
    print(len(members))  # 4
  2. 回すfor m in members: で「◯◯さん、出席ですか?」を全員ぶん表示します。
  3. 選ぶ「名前が2文字の人だけ表示」を if len(m) == 2: で作ります。
  4. 並べ替えるsorted(members) を表示してみます。元のリストは変わらない、も確認しましょう。
演習 4-A (ヒントだけ) | 数のリストで3本

お題: 売上のリスト [3200, 1800, 4500, 2100, 3900] から、①合計と平均 ②一番大きい値 (max( ) を使わず、forとifで) ③3000以上の日だけのリスト、を作ります。

②のヒント: 「いまの最高記録」を覚える変数を最初の値で作り、forの中で if uriage > saikou: のたびに更新します。この「記録更新パターン」は集計パターンの兄弟です。

授業5: 辞書 ― 名前で引けるデータ

辞書は「名前 (キー) → 値」の対応表です。そして実務のデータは、ほぼすべて辞書のリストの形でやってきます。ここに慣れると、ユニット3のデータベースも、ユニット4のAPIも、同じ景色に見えてきます。

例題 (リードつき) | 商品リストの集計
  1. 辞書を1つ
    item = {"name": "メロンパン", "price": 180, "stock": 5}
    print(item["name"])  # メロンパン
  2. 辞書のリストへ
    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']}円")
  3. 条件つき集計「在庫がある商品の合計金額 (価格 × 在庫)」を、集計パターン + if item["stock"] > 0: で計算します。
  4. 数える辞書辞書は集計装置にもなります。おみくじを1000回引いて、結果を数えてみましょう。
    import random
    
    counts = {"大吉": 0, "中吉": 0, "小吉": 0, "凶": 0}
    for _ in range(1000):
        omikuji = random.choice(list(counts))
        counts[omikuji] += 1
    print(counts)
    Step 3のおみくじが、統計プログラムに化けました。
演習 5-A (ヒントだけ) | 出席簿

お題: {"山田": "出席", "佐藤": "欠席", ...} の形の出席簿を作り、①全員分を「◯◯さん: 出席」の形で表示 ②出席の人数だけ数える ③名前を聞いて、その人の出欠を答える (いなければ「登録がありません」)、の3本を作ります。

③のヒント: 居るかどうかは if name in roster: で確かめられます。辞書に聞く前に在籍確認 ― エラーを未然に防ぐ習慣の第一歩です。

授業6: 関数 ― 部品に名前をつける

同じコードを2回書いたら関数にする合図です。「材料 (引数) を受け取り、結果を返す (return)」― この感覚を、小問の反復で体に入れます。

例題 (リードつき) | 税込価格の関数
  1. 定義する
    def tax_included(price, rate=0.1):
        return round(price * (1 + rate))
    rate=0.1 は「指定がなければ10%」という初期値つき引数です。
  2. 呼ぶtax_included(180) → 198。tax_included(180, 0.08) → 194。
  3. 3回呼んで検査するprint(tax_included(100), tax_included(0), tax_included(98)) のように、普通の値・端の値・丸めが効く値の3点で検査します。
  4. printとreturnの違いを言葉にする「printは画面に出すだけ、returnは次の計算に渡せる」。関数の一番大事な区別です。
演習 6-A (ヒントだけ) | 小問6本

お題: ①名前を渡すと挨拶文を返す関数 ②点数を渡すと評価 (授業2の①) を返す関数 ③リストを渡すと平均を返す関数 ④2つの数の大きい方を返す関数 ⑤自分の過去のコードから重複を1か所関数化 ⑥3本選んで白紙再現。

合格基準 (共通の答え): どの関数も「3回呼んで3回正しい」こと。あわせて、関数名が動詞で始まって読める (calc_average など) と、なお良しです。

授業7: Tracebackを読む ― エラーは下から

Pythonのエラーは長く見えますが、読むのは最後の行だけで十分です。最後の行に「エラーの種類: 説明」、その1つ上に「何行目か」が書いてあります。

エラー名意味まず疑う場所
SyntaxError文法ミスコロン (:) や括弧の閉じ忘れ。表示行の1行上も見る
IndentationError字下げの乱れスペースの数の不ぞろい (Python特有のエラーです)
NameErrorその名前は知らない変数名・関数名の打ちまちがい
TypeError型が合わない文字列のまま計算した (int変換忘れ)
KeyError辞書にそのキーがないキーの打ちまちがい、在籍確認 (in) の不足
演習 7-A (リードつき) | わざと壊して5回直す

お題: 授業6の関数を、表の5種類のエラーがそれぞれ出るように、わざと5通りに壊します。出たエラーの最後の行を読み、意味を自分の言葉で「エラー早見表」にまとめてから直します。

最終手段 (実は正攻法): Tracebackを全部AIに貼って「原因と直し方は?」と聞くのは、プロも毎日やっていることです。返ってきた説明を早見表に自分の言葉で書き足すところまでやれば、立派な学習です。

月末制作: テキスト冒険ゲーム強化版

月末制作

Step 3の見本 bouken-mihon.py を出発点に、このユニットの全部品を組み込んだ「自分の冒険ゲーム」を作ります。

  1. 体力 (HP) をつける変数 + 分岐です。選択によってHPが増減し、0になったらゲームオーバーにします。
  2. 持ち物をつけるリストです。「かぎを拾った」で append、扉の前で if "かぎ" in items: ― リストの腕の見せどころです。
  3. 場面をループにするwhile True: で「進む / 持ち物を見る / やめる」を選び続けられるメニューにします。
  4. 関数に整理する場面ごとの処理を関数に分けて、本体を読みやすくします。整理した前後で動きが変わらないことの確認まで含めて1セットです。
  5. 遊んでもらうスタッフか他の利用者さんに遊んでもらい、「詰んだ・壊れた」場所を1つ直します。変な入力 (数字のかわりに文字など) に耐えられるかも見どころです。
大きさの目安: 場面5つ・持ち物3つ・結末2つ、で十分豪華です。物語を盛りたくなったら、それは才能ですが、まず小さく完成させてから増築しましょう。

つまずきやすいポイント

インデント (字下げ) が嫌になったら: VS Codeに任せましょう。: を打って改行すれば自動で下がります。ずれたときは、その行を選んで Tab / Shift + Tab で調整できます。
「読めるのに書けない」期がきたら: 全員が通る正常な段階です。処方せんは「写経 → 白紙再現」。3回白紙で書けたものは、もう自分の道具です。1日の進みは小問3本で十分 ― 160時間は、それで終わる設計です。

発展チャレンジ (余力のある方へ)

発展チャレンジ
  • 冒険ゲームに「乱数の敵」(random) と「逃げる / 戦うの選択」を足してみましょう。
  • リスト内包表記 ([x * 2 for x in nums]) を調べて、演習4-Aの③を1行で書き直してみましょう。
  • おみくじ1000回の統計を10000回・10万回に増やして、割合がどう安定していくかを観察しましょう (大数の法則という現象の実体験です)。

できたチェック