基礎LESSON 10

この教材で学ぶこと 基本文法、collection、function、例外、moduleを順に学びます。

Python入門

対象読者: 初めてPythonを学ぶ人。プログラミング基礎を先に読むと理解しやすくなります。

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

  • Pythonの基本的な値、条件分岐、繰り返し、関数を書ける
  • listとdictを使ってデータを整理できる
  • moduleとvirtual environmentの目的を説明できる
  • 例外を握りつぶさず、呼び出し側へ伝えられる

1. 最初のprogram

name = input("名前: ").strip()
if not name:
    raise ValueError("名前は必須です")
print(f"こんにちは、{name}さん")

Pythonはindentationでblockを表します。tabとspaceを無秩序に混ぜず、通常はspace 4文字を使います。

2. listとdict

lessons = [
    {"title": "Python入門", "minutes": 45, "done": True},
    {"title": "テスト", "minutes": 60, "done": False},
]

remaining = [lesson for lesson in lessons if not lesson["done"]]
total_minutes = sum(lesson["minutes"] for lesson in lessons)

list comprehensionは短く書けますが、条件や変換が複雑なら通常のforへ戻して読みやすさを優先します。

3. 関数と型hint

def completion_rate(done: int, total: int) -> float:
    if total <= 0:
        raise ValueError("total must be positive")
    if not 0 <= done <= total:
        raise ValueError("done must be between 0 and total")
    return done / total

型hintは実行時に自動検証する仕組みではありませんが、意図の共有や静的解析に役立ちます。外部入力は別途検証します。

4. 例外を扱う

def parse_minutes(raw: str) -> int:
    try:
        minutes = int(raw)
    except ValueError as error:
        raise ValueError("minutes must be an integer") from error

    if minutes <= 0:
        raise ValueError("minutes must be positive")
    return minutes

except Exception: passのようにすべてを無視すると、原因が見えなくなります。回復できる例外だけを、適切な場所で処理します。

5. moduleへ分ける

study_tracker/
├── main.py
├── progress.py
└── tests/
# progress.py
def remaining_minutes(planned: int, spent: int) -> int:
    return max(0, planned - spent)

# main.py
from progress import remaining_minutes

print(remaining_minutes(90, 35))

6. virtual environment

projectごとにdependencyを分離します。

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip

Windows PowerShellのactivate commandは環境により異なります。.venvは通常Gitへcommitしません。

7. main guard

def main() -> int:
    print("study tracker")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

関数としてimportする場合と、scriptとして実行する場合を分けられます。

演習: 学習時間集計

[{"category": "Python", "minutes": 30}, ...]を受け取り、category別の合計をdictで返す関数を作ってください。

要件:

  • categoryは空文字不可
  • minutesは1以上の整数
  • 不正なentryではValueError
  • 入力listを変更しない

理解チェック

  • listとdictを用途から選べる
  • 一つの役割を持つ関数を書ける
  • 例外を原因付きで伝えられる
  • projectごとにvirtual environmentを作れる

公式資料

次に読む

PythonのテストとCLIで、小さなtoolとして完成させます。