MENU

4-04 リストと辞書

学習目標

  • リストの作成、要素の追加・削除・変更ができる
  • リストと繰り返し処理を組み合わせて使える
  • 辞書の基本操作を理解し使える
  • リストと辞書を使った実践的なプログラムを作成できる

前回の復習

前回学んだ内容を簡単に確認しましょう:

# For loop with range
for i in range(5):
    print("Number:", i)

# While loop
count = 1
while count <= 3:
    print("Count:", count)
    count = count + 1

復習問題:1から5までの数字の合計を求めるプログラムを作ってみよう


1. リストとは

リストは複数のデータをまとめて扱うためのデータ型です。一つの変数に複数の値を格納できます。

リストの作成

# Empty list
fruits = []

# List with initial values
fruits = ["apple", "banana", "orange"]
numbers = [1, 2, 3, 4, 5]
mixed = ["hello", 42, 3.14, True]

print(fruits)
print(numbers)
print(mixed)

実習1:好きな食べ物のリストを作って表示してみよう


2. リストの要素にアクセス

リストの各要素には、変数に「インデックス」という番号を付加して、表示することができます。重要なのは、番号が0から始まることです。

インデックスでアクセス

fruits = ["apple", "banana", "orange", "grape"]

print(fruits[0])   # First element: apple
print(fruits[1])   # Second element: banana
print(fruits[2])   # Third element: orange
print(fruits[3])   # Fourth element: grape

# Negative index (from the end)
print(fruits[-1])  # Last element: grape
print(fruits[-2])  # Second to last: orange

リストの長さ

リストの長さを求める関数は len() です。

fruits = ["apple", "banana", "orange"]
print("List length:", len(fruits))  # 3

実習2:上のコードを実行して、インデックスの仕組みを確認してみよう


3. リストの要素を変更

要素の変更

fruits = ["apple", "banana", "orange"]
print("Before:", fruits)

fruits[1] = "grape"  # Change second element
print("After:", fruits)

要素の追加

fruits = ["apple", "banana"]

# Add to the end
fruits.append("orange")
print("After append:", fruits)

# Insert at specific position
fruits.insert(1, "grape")  # Insert at index 1
print("After insert:", fruits)

メソッド(変数に付加する関数)について:

  • .append(), .insert(), .remove()などは「メソッド」と呼ばれる
  • 変数名.メソッド名()の形で使用する
  • リストに対して特定の操作を行う専用の関数

要素の削除

fruits = ["apple", "banana", "orange", "grape"]

# Remove by value
fruits.remove("banana")
print("After remove:", fruits)

# Remove by index
del fruits[0]  # Remove first element
print("After del:", fruits)

pop()メソッドについて:

リストから要素を取り出して削除するメソッドです。取り出した要素は戻り値として返されます。

  • 最後の要素を取り出して、その値を返す
  • 同時にリストからその要素を削除する
fruits = ["apple", "banana", "cherry", "date"]
last_fruit = fruits.pop()
print(last_fruit)  # "date"
print(fruits)      # ["apple", "banana", "cherry"]
  • pop(インデックス)で指定した位置の要素も取り出せる
fruits = ["apple", "banana", "cherry", "date"]
second_fruit = fruits.pop(1)
print(second_fruit)  # "banana"
print(fruits)        # ["apple", "cherry", "date"]

実習3:リストの要素を追加・変更・削除してみよう

for文でリストの全要素を処理します。

fruits = ["apple", "banana", "orange"]

# Method 1: Direct iteration
for fruit in fruits:
    print("I like", fruit)
fruits = ["apple", "banana", "orange"]

# Method 2: Using index
for i in range(len(fruits)):
    print(f"Index {i}: {fruits[i]}")

リストを使った計算

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

# Calculate sum
total = 0
for num in numbers:
    total = total + num
print("Sum:", total)

# Find maximum
maximum = numbers[0]
for num in numbers:
    if num > maximum:
        maximum = num
print("Maximum:", maximum)

実習4:数字のリストを作って、平均値を計算してみよう

リストを対象にした関数

numbers = [23, 45, 12, 67, 34] 

maximum = max(numbers) 
minimum = min(numbers)
sum = sum(numbers)

print("Max:",maximum,"Min: ",minimum, "Sum: ",sum)

5. 辞書とは

辞書は「キー」と「値」のペアでデータを管理するデータ型です。リストがインデックス(番号)で要素にアクセスするのに対し、辞書は「キー」でアクセスします。

辞書の作成

# Empty dictionary
student = {}

# Dictionary with initial values
student = {
    "name": "Tanaka Taro",
    "age": 17,
    "grade": 2,
    "subject": "Math"
}

print(student)

辞書のキーについて:

  • 文字列をキーにする場合は"(クォーテーション)が必要
  • 数値をキーにする場合は"は不要
  • 例:{1: "first", 2: "second", "name": "Taro"}

辞書の要素にアクセス

student = {
    "name": "Tanaka Taro",
    "age": 17,
    "grade": 2
}

print(student["name"])    # Tanaka Taro
print(student["age"])     # 17
print(student["grade"])   # 2

実習5:自分の情報を辞書にして表示してみよう


6. 辞書の操作

要素の追加・変更

student = {"name": "Tanaka Taro", "age": 17}

# Add new element
student["grade"] = 2
print("After adding grade:", student)   #  {'name': 'Tanaka Taro', 'age': 17, 'grade': 2}

# Change existing element
student["age"] = 18
print("After changing age:", student)   #  {'name': 'Tanaka Taro', 'age': 18, 'grade': 2}

要素の削除

student = {
    "name": "Tanaka Taro",
    "age": 17,
    "grade": 2,
    "subject": "Math"
}

# Remove specific key
del student["subject"]
print("After del:", student)   #  {'name': 'Tanaka Taro', 'age': 17, 'grade': 2}

実習6:辞書の要素を追加・変更・削除してみよう

辞書の全要素を表示

方法1

student = {
    "name": "Tanaka Taro",
    "age": 17,
    "grade": 2
}

# Method 1: Get key first, then access value
for key in student:
    print(f"{key}: {student[key]}")

方法2

student = {
    "name": "Tanaka Taro",
    "age": 17,
    "grade": 2
}

# Method 2: Get both key and value directly
for key, value in student.items():
    print(f"{key}: {value}")

2つの方法の違い:

  • 方法1:キーを取得してから、そのキーで値にアクセス
  • 方法2.items()を使ってキーと値を同時に取得(より効率的)

7. リストと辞書の組み合わせ

辞書のリスト(複数の学生情報)

students = [
    {"name": "Tanaka Taro", "age": 17, "score": 85},
    {"name": "Suzuki Hanako", "age": 16, "score": 92},
    {"name": "Sato Jiro", "age": 17, "score": 78}
]

# Display all students
for student in students:
    print(f"Name: {student['name']}, Age: {student['age']}, Score: {student['score']}")

print("---")

# Calculate average score
total_score = 0
for student in students:
    total_score = total_score + student["score"]

average = total_score / len(students)
print(f"Average score: {average}")

リストを値として持つ辞書

student_scores = {
    "Tanaka": [85, 90, 78, 92],
    "Suzuki": [88, 85, 90, 87],
    "Sato": [75, 80, 85, 82]
}

# Display each student's scores
for name, scores in student_scores.items():
    average = sum(scores) / len(scores)
    print(f"{name}: {scores}, Average: {average:.1f}")

最後の行 print(f"{name}: {scores}, Average: {average:.1f}") の説明
f文字列(f-string) を使った印字
{average:.1f} は平均を 小数第1位まで 表示する指定

実習7:複数の学生の情報を管理するプログラムを作ってみよう


8. 実践的なプログラム

例1:成績管理システム

機能説明:

  • 複数の学生の名前と成績を入力・保存
  • 全学生の成績を表示
  • 平均点の計算
  • 最高得点者の表示
print("=== Grade Management System ===")
# Student data
students = []
# Add students
while True:
    name = input("Enter student name (or 'quit' to finish): ")
    if name.lower() == "quit":
        break
    try:
        score = int(input(f"Enter {name}'s score: "))
        student = {"name": name, "score": score}
        students.append(student)
        print(f"Added {name} with score {score}")
    except ValueError:
        print("Please enter a valid number for score")

print("\n=== Results ===")
# Display all students
total_score = 0
for student in students:
    print(f"{student['name']}: {student['score']}")
    total_score = total_score + student["score"]

# Calculate and display average
if len(students) > 0:
    average = total_score / len(students)
    print(f"\nAverage score: {average:.1f}")
else:
    print("\nNo students data")

例2:英単語クイズアプリ

機能説明:

  • 英単語と日本語訳の辞書からランダムに出題するクイズ機能
  • 正答数のカウント
  • 正解・不正解の判定と正答表示
print("=== English Vocabulary ===")

# Word dictionary
vocabulary = {
    "apple": "りんご",
    "book": "本",
    "car": "車",
    "dog": "犬",
    "egg": "卵"
}

# Quiz mode
import random

words = list(vocabulary.keys())  # Get all English words
score = 0

print("Let's start the vocabulary quiz!")
print("Enter the Japanese meaning for each English word.")

for i in range(3):  # 3 questions
    word = random.choice(words)
    answer = input(f"What does '{word}' mean in Japanese? ")
    
    if answer == vocabulary[word]:
        print("Correct!")
        score = score + 1
    else:
        print(f"Wrong. The correct answer is '{vocabulary[word]}'")

print(f"\nYour score: {score}/3")

実習8:成績管理システムまたは単語帳プログラムを実行してみよう


9. 課題

課題1:買い物リスト管理

以下の機能を持つ買い物リスト管理プログラムを作ってください:

  1. 商品を追加する
  2. 商品を削除する
  3. 全商品を表示する
  4. 終了する
シンプルな解答例(これに何かを加えていないとダメよ)
# Shopping List Management Program

# Create an empty list
shopping_list = []

# 1. Add items
while True:
    item = input("Enter item name (or 'quit' to finish): ")
    if item == "quit":
        break
    shopping_list.append(item)

# 2. Display list
print("\n【Shopping List】")
for i in range(len(shopping_list)):
    print(f"{shopping_list[i]}")

# 3. Delete items
print("\n【Delete Items】")
while True:
    delete_item = input("Enter item name to delete (or 'quit' to finish): ")
    if delete_item == "quit":
        break

    if delete_item in shopping_list:
        shopping_list.remove(delete_item)
        print(f"Deleted '{delete_item}'")
    else:
        print(f"'{delete_item}' is not in the list")

# 4. Display final list
print("\n【Final Shopping List】")
for i in range(len(shopping_list)):
    print(f"{shopping_list[i]}")

課題2:電話帳プログラム

名前をキー、電話番号を値とする辞書を使って、以下の機能を持つプログラムを作ってください:

  • 連絡先を追加する
  • 連絡先を検索する
  • 全連絡先を表示する
シンプルな解答例(これに何かを加えていないとダメよ)
# Phone Book Program (Dictionary Practice)

# Create an empty dictionary
phone_book = {}

# 1. Add contacts
while True:
    name = input("Enter name (or 'quit' to finish): ")
    if name == "quit":
        break
    phone = input("Enter phone number: ")
    phone_book[name] = phone
    print(f"Added {name}: {phone}\n")

# 2. Display all contacts
print("\n【All Contacts】")
for name in phone_book:
    print(f"{name}: {phone_book[name]}")

# 3. Search for a contact
while True:
    search_name = input("Enter name to search (or 'quit' to finish): ")
    if search_name == "quit":
        break

    if search_name in phone_book:
        print(f"{search_name}: {phone_book[search_name]}")
    else:
        print(f"{search_name} not found")
    print()

課題3:成績統計プログラム

複数の教科の成績を管理し、以下を計算するプログラムを作ってください:

  • 各教科の平均点
  • 最高点と最低点
  • 各学生の平均点

まとめ

今日学んだこと:

  • リスト:複数のデータをまとめて管理
    • 作成、アクセス、追加、削除、変更
    • 繰り返し処理との組み合わせ
  • 辞書:キーと値のペアでデータを管理
    • 作成、アクセス、追加、削除、変更
    • 全要素の表示方法
  • 実践的な応用:リストと辞書を組み合わせた複雑なデータ構造

次回は、関数の作成について学習します。

宿題:課題1〜3、あるいは発展課題(オリジナル課題)にもチャレンジしてみましょう。

コメント

コメントする