Step 11:Python基礎の総復習

🎓 ステップ11: Python基礎の総復習

これまで学んだことを総まとめしよう!

ステップ10では、辞書を使ったデータ管理を学びました。ステップ11では、これまで学んだ全ての内容を復習し、総合的な理解を深めます。

📖 このステップで学ぶこと

・これまでの復習問題

・エラーの読み方と対処法

・ミニプロジェクト:成績管理システム

・総合復習問題

🎯 1. Part 1-2の振り返り

ステップ1〜10で学んだ内容を確認しましょう。

📝 学んだことのチェックリスト

✅ Part 1: 環境構築とPython基礎

□ Google Colabの使い方

□ 変数とデータ型(int, float, str, bool)

□ 計算と演算子(+, -, *, /, ==, !=, and, or)

□ リストの操作(追加、削除、スライス)

□ 条件分岐(if, elif, else)

✅ Part 2: 繰り返しと関数

□ for文とwhile文

□ break、continue

□ 関数の定義(def)と呼び出し

□ 引数と戻り値(return)

□ 文字列操作(split, replace, strip, upper, lower)

□ 辞書の操作(キー、値、items)

📘 基本構文の総まとめ

コード:これまでの基本構文

# 変数とデータ型
name = "太郎"              # 文字列
age = 25                   # 整数
height = 175.5             # 浮動小数点数
is_student = True          # 真偽値

# リスト
fruits = ["りんご", "みかん", "バナナ"]
fruits.append("ぶどう")

# 辞書
person = {
    "name": "太郎",
    "age": 25,
    "city": "東京"
}

# 条件分岐
if age >= 20:
    print("成人です")
else:
    print("未成年です")

# for文
for fruit in fruits:
    print(fruit)

# 関数
def greet(name):
    return f"こんにちは、{name}さん"

message = greet("花子")
print(message)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

成人です
りんご
みかん
バナナ
ぶどう
こんにちは、花子さん

🔧 2. エラーの読み方と対処法

プログラミングでは、エラーは当たり前です。大切なのは、エラーメッセージを読んで原因を特定することです。

🔰 エラーメッセージの見方

📌 エラーメッセージの構造

エラーメッセージには、以下の情報が含まれています:

1. 何行目でエラーが起きたか

2. エラーの種類(SyntaxError、NameErrorなど)

3. エラーの原因(何が問題か)

📘 SyntaxError – 文法エラー

❌ 文法エラーの例

# コロンを忘れた
def say_hello()
    print("こんにちは")

# エラーメッセージ:
# SyntaxError: invalid syntax

※ 画面が小さい場合は、コードブロックを横にスクロールできます

原因:

・def文の後にコロン(:)がありません

・Pythonの文法ルールに違反しています

✅ 正しいコード

# コロンを追加
def say_hello():
    print("こんにちは")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

💡 対処法

if、for、def、whileの後にはコロン(:)が必要です。

インデント(字下げ)も確認しましょう。

📘 NameError – 未定義の変数

❌ 未定義エラーの例

# 定義していない変数を使った
print(total)

# エラーメッセージ:
# NameError: name 'total' is not defined

※ 画面が小さい場合は、コードブロックを横にスクロールできます

原因:

・変数totalが定義されていません

・変数を使う前に、値を代入する必要があります

✅ 正しいコード

# 先に変数を定義する
total = 0
print(total)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

💡 対処法

変数を使う前に定義しましょう。

変数名のスペルミスもチェックしてください。

📘 TypeError – 型エラー

❌ 型エラーの例

# 文字列と数値を足そうとした
result = "年齢:" + 25

# エラーメッセージ:
# TypeError: can only concatenate str (not "int") to str

※ 画面が小さい場合は、コードブロックを横にスクロールできます

原因:

・文字列と整数を+でつなげようとしています

・異なるデータ型は直接連結できません

✅ 正しいコード

# 方法1: 数値を文字列に変換
result = "年齢:" + str(25)
print(result)

# 方法2: f-stringを使う(推奨)
result = f"年齢:{25}"
print(result)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

💡 対処法

データ型を確認しましょう。

必要に応じて型変換(int(), str(), float())を使います。

f-stringを使うと、自動的に型変換されるので便利です。

📘 IndexError – インデックスエラー

❌ インデックスエラーの例

# 範囲外のインデックス
fruits = ["りんご", "みかん"]
print(fruits[5])

# エラーメッセージ:
# IndexError: list index out of range

※ 画面が小さい場合は、コードブロックを横にスクロールできます

原因:

・リストには2つの要素しかありません(インデックス0と1)

・インデックス5は範囲外です

✅ 正しいコード

fruits = ["りんご", "みかん"]

# 方法1: 存在するインデックスを使う
print(fruits[0])
print(fruits[1])

# 方法2: 範囲チェックをする
if len(fruits) > 5:
    print(fruits[5])
else:
    print("インデックスが範囲外です")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

💡 対処法

インデックスは0から始まることを忘れずに。

len()でリストの長さを確認しましょう。

リストの長さがnの場合、使えるインデックスは0〜n-1です。

📘 KeyError – キーエラー

❌ キーエラーの例

# 存在しないキー
person = {"name": "太郎", "age": 25}
print(person["city"])

# エラーメッセージ:
# KeyError: 'city'

※ 画面が小さい場合は、コードブロックを横にスクロールできます

原因:

・辞書に”city”というキーが存在しません

・存在しないキーにアクセスしようとしています

✅ 正しいコード

person = {"name": "太郎", "age": 25}

# 方法1: get()を使う(推奨)
print(person.get("city", "不明"))

# 方法2: inで確認してから取得
if "city" in person:
    print(person["city"])
else:
    print("キーが存在しません")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

💡 対処法

辞書のキーを取得する前に、get()メソッドを使うか、inで存在確認しましょう。

get()を使うとエラーを防げます。

📘 IndentationError – インデントエラー

❌ インデントエラーの例

# インデントが揃っていない
def say_hello():
print("こんにちは")
  print("元気ですか")

# エラーメッセージ:
# IndentationError: expected an indented block

※ 画面が小さい場合は、コードブロックを横にスクロールできます

原因:

・関数の中身がインデントされていません

・インデントの深さが揃っていません

✅ 正しいコード

# インデントを揃える
def say_hello():
    print("こんにちは")
    print("元気ですか")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

💡 対処法

インデント(字下げ)はスペース4つで統一しましょう。

Google Colabなら、Tabキーで自動的にスペース4つが入ります。

同じブロック内のコードは、同じインデントにします。

📌 よくあるエラーまとめ

エラー 原因 対処法
SyntaxError 文法ミス(コロン忘れなど) コロンとインデントを確認
NameError 未定義の変数 変数を定義してから使う
TypeError データ型の不一致 型変換またはf-string使用
IndexError 範囲外のインデックス len()で範囲を確認
KeyError 存在しないキー get()またはinで確認
IndentationError インデントのミス スペース4つで統一

📝 3. 総合復習問題

これまで学んだことを組み合わせて問題を解きましょう。

問題1:リストの基本操作(初級)

📋 問題

リスト[10, 20, 30, 40, 50]から、30以上の値だけを抽出して新しいリストを作成してください。

解答例を見る

コード

numbers = [10, 20, 30, 40, 50]
filtered = []

for num in numbers:
    if num >= 30:
        filtered.append(num)

print(filtered)

# リスト内包表記を使う方法
filtered2 = [num for num in numbers if num >= 30]
print(filtered2)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

[30, 40, 50]
[30, 40, 50]

問題2:文字列の加工(中級)

📋 問題

文字列” hello world “を、先頭を大文字にして前後の空白を削除し、”Hello World”にしてください。

解答例を見る

コード

text = "  hello world  "

# 1. 空白を削除
text = text.strip()

# 2. 各単語の先頭を大文字に
text = text.title()

print(text)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

Hello World

問題3:関数の作成(中級)

📋 問題

リストを受け取って、その合計と平均を返す関数calc_statsを作成してください。

解答例を見る

コード

def calc_stats(numbers):
    total = sum(numbers)
    average = total / len(numbers)
    return total, average

# テスト
scores = [85, 92, 78, 95, 88]
total, avg = calc_stats(scores)

print(f"合計: {total}")
print(f"平均: {avg:.1f}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

合計: 438
平均: 87.6

問題4:辞書のデータ処理(上級)

📋 問題

生徒データのリスト[{"name": "太郎", "score": 85}, {"name": "花子", "score": 92}]から、80点以上の生徒の名前のリストを作成してください。

解答例を見る

コード

students = [
    {"name": "太郎", "score": 85},
    {"name": "花子", "score": 92},
    {"name": "次郎", "score": 78},
    {"name": "三郎", "score": 88}
]

high_scorers = []

for student in students:
    if student["score"] >= 80:
        high_scorers.append(student["name"])

print(f"80点以上: {high_scorers}")
print(f"人数: {len(high_scorers)}人")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

80点以上: ['太郎', '花子', '三郎']
人数: 3人

問題5:データの集計(上級)

📋 問題

文字列のリスト[“red”, “blue”, “red”, “green”, “blue”, “red”]から、各色の出現回数を辞書で集計してください。

解答例を見る

コード

colors = ["red", "blue", "red", "green", "blue", "red"]

color_count = {}

for color in colors:
    color_count[color] = color_count.get(color, 0) + 1

print("【色の出現回数】")
for color, count in color_count.items():
    print(f"{color}: {count}回")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【色の出現回数】
red: 3回
blue: 2回
green: 1回

🎮 4. ミニプロジェクト:成績管理システム

これまで学んだ全ての知識を使って、実用的なシステムを作ります。

📘 プロジェクトの概要

📌 実装する機能

・生徒の追加

・成績の記録

・平均点の計算

・成績一覧の表示

📝 完成コード(全体)

コード:成績管理システム

# 成績管理システム

# 生徒データを格納する辞書
students = {}

def add_student(name):
    """生徒を追加"""
    if name in students:
        print(f"{name}さんは既に登録されています")
    else:
        students[name] = []
        print(f"{name}さんを追加しました")

def add_score(name, score):
    """成績を追加"""
    if name not in students:
        print(f"エラー: {name}さんは登録されていません")
        return
    
    if 0 <= score <= 100:
        students[name].append(score)
        print(f"{name}さんの成績({score}点)を追加しました")
    else:
        print("エラー: 成績は0〜100の範囲で入力してください")

def calc_average(name):
    """平均点を計算"""
    if name not in students:
        print(f"エラー: {name}さんは登録されていません")
        return None
    
    if len(students[name]) == 0:
        print(f"{name}さんの成績が登録されていません")
        return None
    
    avg = sum(students[name]) / len(students[name])
    return avg

def show_all_students():
    """全生徒の成績を表示"""
    if len(students) == 0:
        print("生徒が登録されていません")
        return
    
    print("\n【成績一覧】")
    print("-" * 40)
    
    for name, scores in students.items():
        if len(scores) > 0:
            avg = sum(scores) / len(scores)
            print(f"{name}さん")
            print(f"  成績: {scores}")
            print(f"  平均: {avg:.1f}点")
        else:
            print(f"{name}さん")
            print(f"  成績: 未登録")
        print("-" * 40)

# システムを使ってみる
print("=== 成績管理システム ===\n")

# 生徒を追加
add_student("太郎")
add_student("花子")
add_student("次郎")

print()

# 成績を追加
add_score("太郎", 85)
add_score("太郎", 92)
add_score("太郎", 78)

add_score("花子", 95)
add_score("花子", 88)

add_score("次郎", 72)

print()

# 平均点を表示
taro_avg = calc_average("太郎")
if taro_avg:
    print(f"太郎さんの平均点: {taro_avg:.1f}点")

print()

# 全体の成績を表示
show_all_students()

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

=== 成績管理システム ===

太郎さんを追加しました
花子さんを追加しました
次郎さんを追加しました

太郎さんの成績(85点)を追加しました
太郎さんの成績(92点)を追加しました
太郎さんの成績(78点)を追加しました
花子さんの成績(95点)を追加しました
花子さんの成績(88点)を追加しました
次郎さんの成績(72点)を追加しました

太郎さんの平均点: 85.0点

【成績一覧】
----------------------------------------
太郎さん
  成績: [85, 92, 78]
  平均: 85.0点
----------------------------------------
花子さん
  成績: [95, 88]
  平均: 91.5点
----------------------------------------
次郎さん
  成績: [72]
  平均: 72.0点
----------------------------------------

🔍 コードの詳細解説

✅ このプロジェクトで使った技術

□ 辞書でデータを管理

□ リストで複数の成績を格納

□ 関数で機能を分割

□ 条件分岐でエラーチェック

□ ループで全データを表示

□ 計算(合計、平均)

💪 5. 発展課題

成績管理システムをさらに改良してみましょう。

📘 課題1:最高点・最低点の表示

📋 課題

各生徒の最高点と最低点も表示する機能を追加してください。

解答例を見る

コード

def show_all_students_detailed():
    """全生徒の詳細成績を表示"""
    if len(students) == 0:
        print("生徒が登録されていません")
        return
    
    print("\n【成績一覧(詳細)】")
    print("-" * 40)
    
    for name, scores in students.items():
        if len(scores) > 0:
            avg = sum(scores) / len(scores)
            max_score = max(scores)
            min_score = min(scores)
            
            print(f"{name}さん")
            print(f"  成績: {scores}")
            print(f"  平均: {avg:.1f}点")
            print(f"  最高: {max_score}点")
            print(f"  最低: {min_score}点")
        else:
            print(f"{name}さん")
            print(f"  成績: 未登録")
        print("-" * 40)

show_all_students_detailed()

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【成績一覧(詳細)】
----------------------------------------
太郎さん
  成績: [85, 92, 78]
  平均: 85.0点
  最高: 92点
  最低: 78点
----------------------------------------
花子さん
  成績: [95, 88]
  平均: 91.5点
  最高: 95点
  最低: 88点
----------------------------------------
次郎さん
  成績: [72]
  平均: 72.0点
  最高: 72点
  最低: 72点
----------------------------------------

📘 課題2:成績のランキング

📋 課題

平均点が高い順に生徒を並べて表示する機能を追加してください。

解答例を見る

コード

def show_ranking():
    """平均点のランキングを表示"""
    if len(students) == 0:
        print("生徒が登録されていません")
        return
    
    # 平均点を計算してリストに格納
    rankings = []
    for name, scores in students.items():
        if len(scores) > 0:
            avg = sum(scores) / len(scores)
            rankings.append((name, avg))
    
    # 平均点で降順ソート
    rankings.sort(key=lambda x: x[1], reverse=True)
    
    # ランキング表示
    print("\n【成績ランキング】")
    for i, (name, avg) in enumerate(rankings, 1):
        print(f"{i}位: {name}さん - {avg:.1f}点")

show_ranking()

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【成績ランキング】
1位: 花子さん - 91.5点
2位: 太郎さん - 85.0点
3位: 次郎さん - 72.0点

💡 解説

rankings = []

 ・名前と平均点のペアを格納するリストを作成

rankings.append((name, avg))

 ・タプル(name, avg)をリストに追加

rankings.sort(key=lambda x: x[1], reverse=True)

 ・sort()でリストを並び替えます

 ・key=lambda x: x[1]は「タプルの2番目の要素(平均点)で並び替える」という意味

 ・reverse=Trueで降順(高い順)にします

enumerate(rankings, 1)

 ・enumerate()は、ループの回数(順位)も同時に取得できます

 ・1から始まる順位番号をiに代入します

📘 課題3:成績の削除機能

📋 課題

生徒を削除する機能、または特定の成績を削除する機能を追加してください。

解答例を見る

コード

def remove_student(name):
    """生徒を削除"""
    if name in students:
        del students[name]
        print(f"{name}さんを削除しました")
    else:
        print(f"エラー: {name}さんは登録されていません")

def remove_score(name, index):
    """特定の成績を削除"""
    if name not in students:
        print(f"エラー: {name}さんは登録されていません")
        return
    
    if 0 <= index < len(students[name]):
        removed = students[name].pop(index)
        print(f"{name}さんの成績({removed}点)を削除しました")
    else:
        print("エラー: 無効なインデックスです")

# テスト
remove_score("太郎", 0)  # 太郎さんの1番目の成績を削除
remove_student("次郎")   # 次郎さんを削除

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

太郎さんの成績(85点)を削除しました
次郎さんを削除しました

💡 解説

del students[name]

 ・辞書から、そのキーと値のペアを削除します

 ・生徒のデータが完全に削除されます

students[name].pop(index)

 ・リストのpop()メソッドで、指定したインデックスの要素を削除します

 ・削除した値が返されるので、removed変数に代入できます

0 <= index < len(students[name])

 ・インデックスが有効な範囲かチェックします

 ・0以上、かつリストの長さ未満である必要があります

🎯 このステップのまとめ

✅ 総復習で確認したこと

✓ 変数、データ型、演算子の基本

✓ リストと辞書の使い方

✓ 条件分岐とループ処理

✓ 関数の定義と使い方

✓ 文字列操作のメソッド

✓ エラーの読み方と対処法

✓ 複数の技術を組み合わせた実践

💡 Part 3に進む前に確認

以下のことができるようになったか確認しましょう:

□ 基本的なPythonのコードが読める

□ 簡単なプログラムを自分で書ける

□ エラーメッセージを見て原因を特定できる

□ 関数を使ってコードを整理できる

□ 辞書とリストを組み合わせて使える

これらができたら、次のPart 3「データ分析に必要な数学」に進む準備ができています!

📌 ここまでの達成度チェック

もし理解が不十分な部分があれば、該当するステップに戻って復習しましょう。

基礎をしっかり固めることが、データ分析スキルの向上につながります!

❓ よくある質問

Q1: すべて完璧に理解しないと次に進めませんか?

A: 完璧でなくても大丈夫です。

基本的な使い方が分かれば次に進めます

実際にデータ分析をしながら、また戻ってくることもあります。

重要なのは「分からないところが分かっている」ことです。

Q2: エラーが出たらどうすればいいですか?

A: まずエラーメッセージを読みましょう

何行目でエラーが起きたか、何が原因かが書いてあります。

それでも分からない場合は、エラーメッセージをGoogleで検索すると解決策が見つかることが多いです。

Q3: 練習問題が難しくて解けません

A: まず解答例を見てOKです。

解答を見て、なぜそのコードで解けるのかを理解しましょう。

その後、自分で一から書いてみることが大切です。

Q4: どのくらい練習すればいいですか?

A: 手を動かすことが一番大切です。

このコースの例題を全て自分で打ち込んで実行してみましょう。

また、簡単なプログラムを自分で考えて作ってみることもおすすめです。

Q5: Part 3からは難しくなりますか?

A: Part 3ではデータ分析に必要な数学を学びます。

難しい数式は出てきませんが、平均や標準偏差などの統計の概念を学びます。

Pythonで計算しながら学ぶので、理解しやすいはずです!

📝

学習メモ

Pythonデータ分析入門 - Step 11

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE