演習:変数とデータ型の総合問題
目次
このレッスンで学ぶこと
- モジュール2で学んだ内容の復習
- 変数とデータ型を組み合わせた実践問題
- よくあるエラーのデバッグ
- 実務で使えるコーディングパターン
なぜ演習が必要なのか?
これまで学んだ内容を、実際に手を動かして使ってみることで、知識が定着します。
このレッスンでは、以下のトピックを総合的に復習します:
- 変数の基本
- 数値型(int, float)
- 文字列型(str)
- ブール型(bool)
- リスト型(list)
- 辞書型(dict)
- タプルと集合
- データ型の変換
💡 豆知識: プログラミング学習では「写経(しゃきょう)」という言葉があります。他人のコードを手で打ち込みながら学ぶ方法です。コピペではなく、実際にタイプすることで理解が深まります。
基礎演習
演習1: 変数の基本操作 ⭐☆☆
以下の仕様を満たすプログラムを作成してください:
仕様:
- 名前(文字列)、年齢(整数)、身長(小数)を変数に保存
- 全ての変数を使って自己紹介文を表示
- 型を確認して表示
💡 ヒント
- f-stringで変数を埋め込む
type()で型を確認
✅ 解答例
Python# 変数の定義 name = "山田太郎" age = 25 height = 175.5 # 自己紹介 print(f"私の名前は{name}です。") print(f"{age}歳で、身長は{height}cmです。") # 型の確認 print(f"\n型の確認:") print(f"name: {type(name)}") print(f"age: {type(age)}") print(f"height: {type(height)}")
実行結果:
私の名前は山田太郎です。
25歳で、身長は175.5cmです。
型の確認:
name: <class 'str'>
age: <class 'int'>
height: <class 'float'>
演習2: 数値計算 ⭐☆☆
税込価格を計算するプログラムを作成してください。
仕様:
- 商品価格を変数に保存(例: 1000円)
- 消費税率を変数に保存(例: 0.1 = 10%)
- 税込価格を計算して表示(小数点以下を四捨五入)
💡 ヒント
round()で四捨五入- 税込価格 = 価格 × (1 + 税率)
✅ 解答例
Python# 価格と税率 price = 1000 tax_rate = 0.1 # 税額を計算 tax = price * tax_rate total = price + tax # 四捨五入 total_rounded = round(total) print(f"商品価格: {price}円") print(f"消費税率: {tax_rate * 100}%") print(f"消費税額: {tax}円") print(f"税込価格: {total_rounded}円")
実行結果:
商品価格: 1000円
消費税率: 10.0%
消費税額: 100.0円
税込価格: 1100円
演習3: 文字列操作 ⭐⭐☆
メールアドレスから情報を抽出するプログラムを作成してください。
仕様:
- メールアドレス "taro.yamada@example.co.jp" から:
- ユーザー名(@の前)を抽出
- ドメイン(@の後)を抽出
- ユーザー名の姓と名を分割(.で分割)
- 結果を表示
💡 ヒント
split("@")で@を基準に分割split(".")で.を基準に分割
✅ 解答例
Pythonemail = "taro.yamada@example.co.jp" # @で分割 parts = email.split("@") username = parts[0] domain = parts[1] # ユーザー名を.で分割 name_parts = username.split(".") first_name = name_parts[0] last_name = name_parts[1] print(f"メールアドレス: {email}") print(f"ユーザー名: {username}") print(f"ドメイン: {domain}") print(f"名: {first_name}") print(f"姓: {last_name}")
実行結果:
メールアドレス: taro.yamada@example.co.jp
ユーザー名: taro.yamada
ドメイン: example.co.jp
名: taro
姓: yamada
中級演習
演習4: リストの集計 ⭐⭐☆
テストの点数リストから統計情報を計算してください。
仕様:
- 点数リスト:
[85, 92, 78, 90, 88, 76, 95] - 以下を計算して表示:
- 平均点
- 最高点と最低点
- 80点以上の点数の数
💡 ヒント
sum(),len()で平均max(),min()で最高・最低- ループで条件に合う数をカウント
✅ 解答例
Pythonscores = [85, 92, 78, 90, 88, 76, 95] # 平均点 average = sum(scores) / len(scores) # 最高点・最低点 highest = max(scores) lowest = min(scores) # 80点以上の数 above_80 = 0 for score in scores: if score >= 80: above_80 += 1 print(f"点数リスト: {scores}") print(f"平均点: {average:.1f}点") print(f"最高点: {highest}点") print(f"最低点: {lowest}点") print(f"80点以上: {above_80}人")
実行結果:
点数リスト: [85, 92, 78, 90, 88, 76, 95]
平均点: 86.3点
最高点: 95点
最低点: 76点
80点以上: 5人
演習5: 辞書の操作 ⭐⭐☆
商品の在庫管理システムを作成してください。
仕様:
- 商品辞書を作成:{"りんご": 50, "みかん": 30, "バナナ": 20}
- 以下の操作を実行:
- りんごを10個販売(在庫を減らす)
- ぶどうを15個入荷(新規追加)
- 全商品の在庫数を表示
- 在庫の合計を計算
💡 ヒント
- 辞書の値を変更:
dict["key"] -= 10 - 新規追加:
dict["new_key"] = 15 values()で値の一覧を取得
✅ 解答例
Python# 初期在庫 inventory = { "りんご": 50, "みかん": 30, "バナナ": 20 } print("初期在庫:") for item, count in inventory.items(): print(f" {item}: {count}個") # りんごを10個販売 inventory["りんご"] -= 10 print("\nりんごを10個販売しました") # ぶどうを15個入荷 inventory["ぶどう"] = 15 print("ぶどうを15個入荷しました") # 現在の在庫 print("\n現在の在庫:") for item, count in inventory.items(): print(f" {item}: {count}個") # 在庫の合計 total = sum(inventory.values()) print(f"\n在庫合計: {total}個")
実行結果:
初期在庫:
りんご: 50個
みかん: 30個
バナナ: 20個
りんごを10個販売しました
ぶどうを15個入荷しました
現在の在庫:
りんご: 40個
みかん: 30個
バナナ: 20個
ぶどう: 15個
在庫合計: 105個
演習6: ブール型と条件判定 ⭐⭐☆
ログイン認証システムを作成してください。
仕様:
- 正しいユーザー名とパスワードを変数に保存
- 入力されたユーザー名とパスワードをチェック
- 以下の条件で判定:
- 両方正しい → "ログイン成功"
- どちらか間違い → "ユーザー名またはパスワードが違います"
💡 ヒント
==で文字列を比較andで両方の条件をチェック
✅ 解答例
Python# 正しい認証情報 correct_username = "admin" correct_password = "password123" # 入力された情報(実際はinput()で取得) input_username = "admin" input_password = "password123" # 認証チェック is_username_correct = input_username == correct_username is_password_correct = input_password == correct_password is_authenticated = is_username_correct and is_password_correct print(f"ユーザー名チェック: {is_username_correct}") print(f"パスワードチェック: {is_password_correct}") if is_authenticated: print("ログイン成功") else: print("ユーザー名またはパスワードが違います") # 間違った例 print("\n--- 間違った例 ---") input_username2 = "admin" input_password2 = "wrong_password" is_authenticated2 = (input_username2 == correct_username and input_password2 == correct_password) if is_authenticated2: print("ログイン成功") else: print("ユーザー名またはパスワードが違います")
実行結果:
ユーザー名チェック: True
パスワードチェック: True
ログイン成功
--- 間違った例 ---
ユーザー名またはパスワードが違います
応用演習
演習7: 型変換の実践 ⭐⭐⭐
CSV形式のデータを処理するプログラムを作成してください。
仕様:
- CSV文字列: "太郎,25,85.5,True"(名前,年齢,スコア,合格フラグ)
- データを適切な型に変換
- 以下を表示:
- 全データ
- 来年の年齢
- スコアの整数部分
- 合格判定(Trueなら"合格"、Falseなら"不合格")
💡 ヒント
split(",")で分割int(),float()で型変換"True" == "True"でブール判定
✅ 解答例
Python# CSVデータ csv_data = "太郎,25,85.5,True" # カンマで分割 parts = csv_data.split(",") # 型変換 name = parts[0] # 文字列のまま age = int(parts[1]) # 整数に変換 score = float(parts[2]) # 小数に変換 passed = parts[3] == "True" # ブール値に変換 # データ表示 print("=== データ表示 ===") print(f"名前: {name} (型: {type(name).__name__})") print(f"年齢: {age} (型: {type(age).__name__})") print(f"スコア: {score} (型: {type(score).__name__})") print(f"合格: {passed} (型: {type(passed).__name__})") # 計算 next_year_age = age + 1 score_int = int(score) result = "合格" if passed else "不合格" print("\n=== 計算結果 ===") print(f"{name}さんの来年の年齢: {next_year_age}歳") print(f"スコアの整数部分: {score_int}点") print(f"合格判定: {result}")
実行結果:
=== データ表示 ===
名前: 太郎 (型: str)
年齢: 25 (型: int)
スコア: 85.5 (型: float)
合格: True (型: bool)
=== 計算結果 ===
太郎さんの来年の年齢: 26歳
スコアの整数部分: 85点
合格判定: 合格
演習8: データの集約 ⭐⭐⭐
複数の生徒データを処理するプログラムを作成してください。
仕様:
- 生徒のリスト(各生徒は辞書)
- 以下を計算:
- 全生徒の平均点
- 最高点を取った生徒の名前
- 80点以上の生徒のリスト
💡 ヒント
- リストの各要素(辞書)をループで処理
max()にキー関数を指定:max(students, key=lambda s: s["score"])
✅ 解答例
Python# 生徒データ students = [ {"name": "太郎", "score": 85}, {"name": "花子", "score": 92}, {"name": "次郎", "score": 78}, {"name": "美咲", "score": 88}, {"name": "健太", "score": 95} ] # 平均点 total_score = 0 for student in students: total_score += student["score"] average = total_score / len(students) # 最高点の生徒 top_student = students[0] for student in students: if student["score"] > top_student["score"]: top_student = student # 80点以上の生徒 high_scorers = [] for student in students: if student["score"] >= 80: high_scorers.append(student["name"]) # 結果表示 print("=== 生徒一覧 ===") for student in students: print(f"{student['name']}: {student['score']}点") print(f"\n平均点: {average:.1f}点") print(f"最高点: {top_student['name']}さん ({top_student['score']}点)") print(f"80点以上の生徒: {', '.join(high_scorers)}")
実行結果:
=== 生徒一覧 ===
太郎: 85点
花子: 92点
次郎: 78点
美咲: 88点
健太: 95点
平均点: 87.6点
最高点: 健太さん (95点)
80点以上の生徒: 太郎, 花子, 美咲, 健太
演習9: エラー修正 ⭐⭐⭐
以下のコードにはエラーがあります。すべて修正してください。
Python# エラーがあるコード age = "25" next_year = age + 1 name = 太郎 message = f"こんにちは、{name}さん" scores = [85, 92, 78] print(scores[3]) user = {"name": "太郎", "age": 25} print(user["email"])
💡 ヒント
- 文字列と数値の計算
- 文字列のクォート忘れ
- リストのインデックス範囲外
- 辞書の存在しないキー
✅ 解答例
Python# 修正後のコード # エラー1: 文字列を数値に変換 age = "25" next_year = int(age) + 1 print(f"来年の年齢: {next_year}") # エラー2: 文字列をクォートで囲む name = "太郎" message = f"こんにちは、{name}さん" print(message) # エラー3: インデックスの範囲チェック scores = [85, 92, 78] # print(scores[3]) # IndexError if len(scores) > 3: print(scores[3]) else: print(f"インデックス3は範囲外です(最大: {len(scores) - 1})") # エラー4: get()で安全にアクセス user = {"name": "太郎", "age": 25} email = user.get("email", "メールアドレス未登録") print(f"メール: {email}")
実行結果:
来年の年齢: 26
こんにちは、太郎さん
インデックス3は範囲外です(最大: 2)
メール: メールアドレス未登録
エラーの説明:
- 文字列 "25" と数値 1 は計算できない →
int()で変換 - 変数
太郎は定義されていない →"太郎"とクォートで囲む - リストのインデックスは0-2まで(3は範囲外)→ 範囲チェック
- 辞書に "email" キーは存在しない →
get()で安全にアクセス
実践問題
演習10: ミニアプリケーション ⭐⭐⭐
簡単な買い物カート機能を作成してください。
仕様:
- 商品リスト(辞書のリスト):
Python
[ {"name": "りんご", "price": 150, "quantity": 3}, {"name": "みかん", "price": 100, "quantity": 5}, {"name": "バナナ", "price": 200, "quantity": 2} ] - 以下を計算・表示:
- 各商品の小計(価格 × 数量)
- 合計金額
- 消費税(10%)
- 税込合計
- 最も高い商品
💡 ヒント
- ループで各商品を処理
- 小計 = price × quantity
- 税込 = 合計 × 1.1
✅ 解答例
Python# 商品リスト cart = [ {"name": "りんご", "price": 150, "quantity": 3}, {"name": "みかん", "price": 100, "quantity": 5}, {"name": "バナナ", "price": 200, "quantity": 2} ] print("=== 買い物カート ===") # 合計金額 total = 0 # 各商品の小計 for item in cart: subtotal = item["price"] * item["quantity"] total += subtotal print(f"{item['name']}: {item['price']}円 × {item['quantity']}個 = {subtotal}円") # 消費税 tax_rate = 0.1 tax = total * tax_rate total_with_tax = total + tax print(f"\n小計: {total}円") print(f"消費税({tax_rate * 100}%): {int(tax)}円") print(f"合計: {int(total_with_tax)}円") # 最も高い商品 most_expensive = cart[0] for item in cart: if item["price"] > most_expensive["price"]: most_expensive = item print(f"\n最も高い商品: {most_expensive['name']} ({most_expensive['price']}円)")
実行結果:
=== 買い物カート ===
りんご: 150円 × 3個 = 450円
みかん: 100円 × 5個 = 500円
バナナ: 200円 × 2個 = 400円
小計: 1350円
消費税(10.0%): 135円
合計: 1485円
最も高い商品: バナナ (200円)
まとめ
このレッスンでは、モジュール2で学んだ内容を演習で統合して確認しました。
- 変数、数値、文字列、ブール、リスト、辞書を組み合わせて問題を解く力を確認しました。
- 文字列分割や集計関数、f-stringを使って実践的な出力を作成できるようになりました。
- 型変換を適切に使い、入力値を計算可能な形へ整える手順を身につけました。
TypeErrorやIndexErrorなど、初学者が遭遇しやすいエラーへの対応力を強化しました。- 小さな要件を分解して実装し、結果を検証する一連の流れを実践できる状態になりました。
演習:変数とデータ型の総合問題
目次
このレッスンで学ぶこと
- モジュール2で学んだ内容の復習
- 変数とデータ型を組み合わせた実践問題
- よくあるエラーのデバッグ
- 実務で使えるコーディングパターン
なぜ演習が必要なのか?
これまで学んだ内容を、実際に手を動かして使ってみることで、知識が定着します。
このレッスンでは、以下のトピックを総合的に復習します:
- 変数の基本
- 数値型(int, float)
- 文字列型(str)
- ブール型(bool)
- リスト型(list)
- 辞書型(dict)
- タプルと集合
- データ型の変換
💡 豆知識: プログラミング学習では「写経(しゃきょう)」という言葉があります。他人のコードを手で打ち込みながら学ぶ方法です。コピペではなく、実際にタイプすることで理解が深まります。
基礎演習
演習1: 変数の基本操作 ⭐☆☆
以下の仕様を満たすプログラムを作成してください:
仕様:
- 名前(文字列)、年齢(整数)、身長(小数)を変数に保存
- 全ての変数を使って自己紹介文を表示
- 型を確認して表示
💡 ヒント
- f-stringで変数を埋め込む
type()で型を確認
✅ 解答例
Python# 変数の定義 name = "山田太郎" age = 25 height = 175.5 # 自己紹介 print(f"私の名前は{name}です。") print(f"{age}歳で、身長は{height}cmです。") # 型の確認 print(f"\n型の確認:") print(f"name: {type(name)}") print(f"age: {type(age)}") print(f"height: {type(height)}")
実行結果:
私の名前は山田太郎です。
25歳で、身長は175.5cmです。
型の確認:
name: <class 'str'>
age: <class 'int'>
height: <class 'float'>
演習2: 数値計算 ⭐☆☆
税込価格を計算するプログラムを作成してください。
仕様:
- 商品価格を変数に保存(例: 1000円)
- 消費税率を変数に保存(例: 0.1 = 10%)
- 税込価格を計算して表示(小数点以下を四捨五入)
💡 ヒント
round()で四捨五入- 税込価格 = 価格 × (1 + 税率)
✅ 解答例
Python# 価格と税率 price = 1000 tax_rate = 0.1 # 税額を計算 tax = price * tax_rate total = price + tax # 四捨五入 total_rounded = round(total) print(f"商品価格: {price}円") print(f"消費税率: {tax_rate * 100}%") print(f"消費税額: {tax}円") print(f"税込価格: {total_rounded}円")
実行結果:
商品価格: 1000円
消費税率: 10.0%
消費税額: 100.0円
税込価格: 1100円
演習3: 文字列操作 ⭐⭐☆
メールアドレスから情報を抽出するプログラムを作成してください。
仕様:
- メールアドレス "taro.yamada@example.co.jp" から:
- ユーザー名(@の前)を抽出
- ドメイン(@の後)を抽出
- ユーザー名の姓と名を分割(.で分割)
- 結果を表示
💡 ヒント
split("@")で@を基準に分割split(".")で.を基準に分割
✅ 解答例
Pythonemail = "taro.yamada@example.co.jp" # @で分割 parts = email.split("@") username = parts[0] domain = parts[1] # ユーザー名を.で分割 name_parts = username.split(".") first_name = name_parts[0] last_name = name_parts[1] print(f"メールアドレス: {email}") print(f"ユーザー名: {username}") print(f"ドメイン: {domain}") print(f"名: {first_name}") print(f"姓: {last_name}")
実行結果:
メールアドレス: taro.yamada@example.co.jp
ユーザー名: taro.yamada
ドメイン: example.co.jp
名: taro
姓: yamada
中級演習
演習4: リストの集計 ⭐⭐☆
テストの点数リストから統計情報を計算してください。
仕様:
- 点数リスト:
[85, 92, 78, 90, 88, 76, 95] - 以下を計算して表示:
- 平均点
- 最高点と最低点
- 80点以上の点数の数
💡 ヒント
sum(),len()で平均max(),min()で最高・最低- ループで条件に合う数をカウント
✅ 解答例
Pythonscores = [85, 92, 78, 90, 88, 76, 95] # 平均点 average = sum(scores) / len(scores) # 最高点・最低点 highest = max(scores) lowest = min(scores) # 80点以上の数 above_80 = 0 for score in scores: if score >= 80: above_80 += 1 print(f"点数リスト: {scores}") print(f"平均点: {average:.1f}点") print(f"最高点: {highest}点") print(f"最低点: {lowest}点") print(f"80点以上: {above_80}人")
実行結果:
点数リスト: [85, 92, 78, 90, 88, 76, 95]
平均点: 86.3点
最高点: 95点
最低点: 76点
80点以上: 5人
演習5: 辞書の操作 ⭐⭐☆
商品の在庫管理システムを作成してください。
仕様:
- 商品辞書を作成:{"りんご": 50, "みかん": 30, "バナナ": 20}
- 以下の操作を実行:
- りんごを10個販売(在庫を減らす)
- ぶどうを15個入荷(新規追加)
- 全商品の在庫数を表示
- 在庫の合計を計算
💡 ヒント
- 辞書の値を変更:
dict["key"] -= 10 - 新規追加:
dict["new_key"] = 15 values()で値の一覧を取得
✅ 解答例
Python# 初期在庫 inventory = { "りんご": 50, "みかん": 30, "バナナ": 20 } print("初期在庫:") for item, count in inventory.items(): print(f" {item}: {count}個") # りんごを10個販売 inventory["りんご"] -= 10 print("\nりんごを10個販売しました") # ぶどうを15個入荷 inventory["ぶどう"] = 15 print("ぶどうを15個入荷しました") # 現在の在庫 print("\n現在の在庫:") for item, count in inventory.items(): print(f" {item}: {count}個") # 在庫の合計 total = sum(inventory.values()) print(f"\n在庫合計: {total}個")
実行結果:
初期在庫:
りんご: 50個
みかん: 30個
バナナ: 20個
りんごを10個販売しました
ぶどうを15個入荷しました
現在の在庫:
りんご: 40個
みかん: 30個
バナナ: 20個
ぶどう: 15個
在庫合計: 105個
演習6: ブール型と条件判定 ⭐⭐☆
ログイン認証システムを作成してください。
仕様:
- 正しいユーザー名とパスワードを変数に保存
- 入力されたユーザー名とパスワードをチェック
- 以下の条件で判定:
- 両方正しい → "ログイン成功"
- どちらか間違い → "ユーザー名またはパスワードが違います"
💡 ヒント
==で文字列を比較andで両方の条件をチェック
✅ 解答例
Python# 正しい認証情報 correct_username = "admin" correct_password = "password123" # 入力された情報(実際はinput()で取得) input_username = "admin" input_password = "password123" # 認証チェック is_username_correct = input_username == correct_username is_password_correct = input_password == correct_password is_authenticated = is_username_correct and is_password_correct print(f"ユーザー名チェック: {is_username_correct}") print(f"パスワードチェック: {is_password_correct}") if is_authenticated: print("ログイン成功") else: print("ユーザー名またはパスワードが違います") # 間違った例 print("\n--- 間違った例 ---") input_username2 = "admin" input_password2 = "wrong_password" is_authenticated2 = (input_username2 == correct_username and input_password2 == correct_password) if is_authenticated2: print("ログイン成功") else: print("ユーザー名またはパスワードが違います")
実行結果:
ユーザー名チェック: True
パスワードチェック: True
ログイン成功
--- 間違った例 ---
ユーザー名またはパスワードが違います
応用演習
演習7: 型変換の実践 ⭐⭐⭐
CSV形式のデータを処理するプログラムを作成してください。
仕様:
- CSV文字列: "太郎,25,85.5,True"(名前,年齢,スコア,合格フラグ)
- データを適切な型に変換
- 以下を表示:
- 全データ
- 来年の年齢
- スコアの整数部分
- 合格判定(Trueなら"合格"、Falseなら"不合格")
💡 ヒント
split(",")で分割int(),float()で型変換"True" == "True"でブール判定
✅ 解答例
Python# CSVデータ csv_data = "太郎,25,85.5,True" # カンマで分割 parts = csv_data.split(",") # 型変換 name = parts[0] # 文字列のまま age = int(parts[1]) # 整数に変換 score = float(parts[2]) # 小数に変換 passed = parts[3] == "True" # ブール値に変換 # データ表示 print("=== データ表示 ===") print(f"名前: {name} (型: {type(name).__name__})") print(f"年齢: {age} (型: {type(age).__name__})") print(f"スコア: {score} (型: {type(score).__name__})") print(f"合格: {passed} (型: {type(passed).__name__})") # 計算 next_year_age = age + 1 score_int = int(score) result = "合格" if passed else "不合格" print("\n=== 計算結果 ===") print(f"{name}さんの来年の年齢: {next_year_age}歳") print(f"スコアの整数部分: {score_int}点") print(f"合格判定: {result}")
実行結果:
=== データ表示 ===
名前: 太郎 (型: str)
年齢: 25 (型: int)
スコア: 85.5 (型: float)
合格: True (型: bool)
=== 計算結果 ===
太郎さんの来年の年齢: 26歳
スコアの整数部分: 85点
合格判定: 合格
演習8: データの集約 ⭐⭐⭐
複数の生徒データを処理するプログラムを作成してください。
仕様:
- 生徒のリスト(各生徒は辞書)
- 以下を計算:
- 全生徒の平均点
- 最高点を取った生徒の名前
- 80点以上の生徒のリスト
💡 ヒント
- リストの各要素(辞書)をループで処理
max()にキー関数を指定:max(students, key=lambda s: s["score"])
✅ 解答例
Python# 生徒データ students = [ {"name": "太郎", "score": 85}, {"name": "花子", "score": 92}, {"name": "次郎", "score": 78}, {"name": "美咲", "score": 88}, {"name": "健太", "score": 95} ] # 平均点 total_score = 0 for student in students: total_score += student["score"] average = total_score / len(students) # 最高点の生徒 top_student = students[0] for student in students: if student["score"] > top_student["score"]: top_student = student # 80点以上の生徒 high_scorers = [] for student in students: if student["score"] >= 80: high_scorers.append(student["name"]) # 結果表示 print("=== 生徒一覧 ===") for student in students: print(f"{student['name']}: {student['score']}点") print(f"\n平均点: {average:.1f}点") print(f"最高点: {top_student['name']}さん ({top_student['score']}点)") print(f"80点以上の生徒: {', '.join(high_scorers)}")
実行結果:
=== 生徒一覧 ===
太郎: 85点
花子: 92点
次郎: 78点
美咲: 88点
健太: 95点
平均点: 87.6点
最高点: 健太さん (95点)
80点以上の生徒: 太郎, 花子, 美咲, 健太
演習9: エラー修正 ⭐⭐⭐
以下のコードにはエラーがあります。すべて修正してください。
Python# エラーがあるコード age = "25" next_year = age + 1 name = 太郎 message = f"こんにちは、{name}さん" scores = [85, 92, 78] print(scores[3]) user = {"name": "太郎", "age": 25} print(user["email"])
💡 ヒント
- 文字列と数値の計算
- 文字列のクォート忘れ
- リストのインデックス範囲外
- 辞書の存在しないキー
✅ 解答例
Python# 修正後のコード # エラー1: 文字列を数値に変換 age = "25" next_year = int(age) + 1 print(f"来年の年齢: {next_year}") # エラー2: 文字列をクォートで囲む name = "太郎" message = f"こんにちは、{name}さん" print(message) # エラー3: インデックスの範囲チェック scores = [85, 92, 78] # print(scores[3]) # IndexError if len(scores) > 3: print(scores[3]) else: print(f"インデックス3は範囲外です(最大: {len(scores) - 1})") # エラー4: get()で安全にアクセス user = {"name": "太郎", "age": 25} email = user.get("email", "メールアドレス未登録") print(f"メール: {email}")
実行結果:
来年の年齢: 26
こんにちは、太郎さん
インデックス3は範囲外です(最大: 2)
メール: メールアドレス未登録
エラーの説明:
- 文字列 "25" と数値 1 は計算できない →
int()で変換 - 変数
太郎は定義されていない →"太郎"とクォートで囲む - リストのインデックスは0-2まで(3は範囲外)→ 範囲チェック
- 辞書に "email" キーは存在しない →
get()で安全にアクセス
実践問題
演習10: ミニアプリケーション ⭐⭐⭐
簡単な買い物カート機能を作成してください。
仕様:
- 商品リスト(辞書のリスト):
Python
[ {"name": "りんご", "price": 150, "quantity": 3}, {"name": "みかん", "price": 100, "quantity": 5}, {"name": "バナナ", "price": 200, "quantity": 2} ] - 以下を計算・表示:
- 各商品の小計(価格 × 数量)
- 合計金額
- 消費税(10%)
- 税込合計
- 最も高い商品
💡 ヒント
- ループで各商品を処理
- 小計 = price × quantity
- 税込 = 合計 × 1.1
✅ 解答例
Python# 商品リスト cart = [ {"name": "りんご", "price": 150, "quantity": 3}, {"name": "みかん", "price": 100, "quantity": 5}, {"name": "バナナ", "price": 200, "quantity": 2} ] print("=== 買い物カート ===") # 合計金額 total = 0 # 各商品の小計 for item in cart: subtotal = item["price"] * item["quantity"] total += subtotal print(f"{item['name']}: {item['price']}円 × {item['quantity']}個 = {subtotal}円") # 消費税 tax_rate = 0.1 tax = total * tax_rate total_with_tax = total + tax print(f"\n小計: {total}円") print(f"消費税({tax_rate * 100}%): {int(tax)}円") print(f"合計: {int(total_with_tax)}円") # 最も高い商品 most_expensive = cart[0] for item in cart: if item["price"] > most_expensive["price"]: most_expensive = item print(f"\n最も高い商品: {most_expensive['name']} ({most_expensive['price']}円)")
実行結果:
=== 買い物カート ===
りんご: 150円 × 3個 = 450円
みかん: 100円 × 5個 = 500円
バナナ: 200円 × 2個 = 400円
小計: 1350円
消費税(10.0%): 135円
合計: 1485円
最も高い商品: バナナ (200円)
まとめ
このレッスンでは、モジュール2で学んだ内容を演習で統合して確認しました。
- 変数、数値、文字列、ブール、リスト、辞書を組み合わせて問題を解く力を確認しました。
- 文字列分割や集計関数、f-stringを使って実践的な出力を作成できるようになりました。
- 型変換を適切に使い、入力値を計算可能な形へ整える手順を身につけました。
TypeErrorやIndexErrorなど、初学者が遭遇しやすいエラーへの対応力を強化しました。- 小さな要件を分解して実装し、結果を検証する一連の流れを実践できる状態になりました。