はじめてLESSON 03

この教材で学ぶこと 変数・分岐・繰り返し・関数・入力検証を初めてのcodeで学びます。

プログラミング基礎

対象読者: 初めてコードを書く人。例はPythonを使いますが、考え方は多くの言語に共通します。

この教材でできるようになること

  • 値、型、変数、式を説明できる
  • 条件分岐と繰り返しを使って処理を組み立てられる
  • 処理を関数へ分けられる
  • 不正な入力を境界で検証できる

1. 値・型・変数

値には種類があります。種類を型と呼び、値に名前を付けて参照する箱を変数と考えると理解しやすくなります。

name = "Kryik"       # 文字列
lesson_count = 3     # 整数
completed = False    # 真偽値

変数名は、中身ではなく意味を表す名前にします。xよりlesson_countのほうが、後から意図を読み取れます。

2. 入力を検証する

外部から来る値は、正しいとは限りません。

def normalize_score(raw: str) -> int:
    score = int(raw)
    if not 0 <= score <= 100:
        raise ValueError("score must be between 0 and 100")
    return score

入力境界で検証すると、その後の処理は「0〜100の整数」と仮定できます。

3. 条件分岐

score = normalize_score("82")

if score >= 80:
    grade = "A"
elif score >= 60:
    grade = "B"
else:
    grade = "C"

print(grade)

条件は上から評価されます。境界値の59、60、79、80を試すと、比較演算子の間違いを発見しやすくなります。

4. 繰り返し

scores = [82, 75, 91]
total = 0

for score in scores:
    total += score

average = total / len(scores)
print(average)

繰り返しは便利ですが、空のリストならlen(scores)が0になる点も考える必要があります。

5. 関数へ分ける

関数には一つの明確な役割を持たせます。

def average(scores: list[int]) -> float:
    if not scores:
        raise ValueError("scores must not be empty")
    return sum(scores) / len(scores)


def grade(score: float) -> str:
    if score >= 80:
        return "A"
    if score >= 60:
        return "B"
    return "C"

計算と表示を分けると、計算部分だけをテストできます。

6. コレクションを選ぶ

型 特徴 例
list 順序付き、重複可 点数一覧
tuple 変更しない組 座標
dict キーから値を探す ユーザーIDと名前
set 重複しない集合 権限一覧

データの意味に合う型を選ぶと、コードが短く安全になります。

7. 小さく動かして確かめる

一度に全部書かず、次を繰り返します。

  1. 最小の入力を用意する
  2. 一つの処理を書く
  3. 実行結果を確認する
  4. 正常系と境界値を試す
  5. 次の処理を追加する

演習: 買い物の合計

商品価格の一覧と割引率を受け取り、割引後の合計を返す関数を作ってください。

要件:

  • 価格は0以上の整数
  • 割引率は0以上1以下
  • 商品が空なら合計は0
  • 不正な値にはValueError

解答例

def discounted_total(prices: list[int], discount_rate: float) -> int:
    if any(price < 0 for price in prices):
        raise ValueError("prices must be non-negative")
    if not 0 <= discount_rate <= 1:
        raise ValueError("discount_rate must be between 0 and 1")
    return round(sum(prices) * (1 - discount_rate))

[]、[0]、[100, 200]、負の価格、割引率0と1を試しましょう。

理解チェック

  • 値と型と変数の違いを説明できる
  • 境界値を含む条件分岐を書ける
  • 繰り返しを関数へ切り出せる
  • 外部入力を処理前に検証できる

次に読む

GitとGitHub入門で、コードの変更を安全に記録します。