リストを使った簡単なプログラムを作ろう

学習の目標

本章では、以下の内容を学習します。

  • これまで学んだリスト操作を組み合わせてプログラムを作成する
  • リストの要素を順番に表示する方法を理解する
  • リスト内の特定の要素を検索する方法を習得する
  • ユーザーの入力を受け取ってリストを操作する方法を学ぶ
  • リストを使った基本的なデータ管理の考え方を理解する

これまでの学習内容の確認

前の2つの章で、リストの基本的な操作を学んできました。 リストの作成、要素の取得、要素の変更、追加、削除など、様々な操作方法を身につけました。

今回は、これらの操作を組み合わせて、より実用的なプログラムを作成していきます。 個別の操作を理解することも大切ですが、それらを組み合わせて一つの機能を実現することで、プログラミングの本当の力を実感できるはずです。

まずは、シンプルな機能から始めて、段階的により複雑な処理を実装していきましょう。 各プログラムを通じて、リストがどのように活用されるかを学んでいきます。

リストの要素を順番に表示する

最初に、リストに含まれるすべての要素を順番に表示するプログラムを作成してみましょう。 これまではprint(list)でリスト全体を表示していましたが、今回は一つひとつの要素を個別に表示する方法を学びます。

要素を個別に表示することで、各要素に対して異なる処理を行ったり、見やすい形式で情報を提示したりすることができます。

VS Codeで新しいファイル list_programs.py を作成して、以下のコードを入力してみましょう。

# 学生の名前リストを作成
students = ["田中", "佐藤", "鈴木", "高橋", "山田"]
print("=== 学生名簿 ===")
print("登録されている学生:")
# 各学生の名前を番号付きで表示
print(f"1. {students[0]}")
print(f"2. {students[1]}")
print(f"3. {students[2]}")
print(f"4. {students[3]}")
print(f"5. {students[4]}")
print(f"\n合計学生数: {len(students)}人")

このプログラムでは、5人の学生名を含むリストを作成し、それぞれの名前を番号付きで表示しています。 各要素をインデックスで指定して個別に取得し、print()関数で表示しています。 f文字列を使用することで、番号と名前を組み合わせた見やすい形式で出力しています。

このプログラムをターミナルで実行してみてください。

python list_programs.py

実行結果は以下のようになります。

=== 学生名簿 ===
登録されている学生:
1. 田中
2. 佐藤
3. 鈴木
4. 高橋
5. 山田
合計学生数: 5人

この方法では、各要素が番号付きで整理された形で表示されるため、情報が見やすくなります。 ただし、リストの要素数が多い場合や、要素数が変動する場合には、この方法では対応が困難です。

より柔軟な表示方法

要素数が変動する場合でも対応できるように、インデックスを計算して表示する方法を見てみましょう。

# 教科のリストを作成
subjects = ["数学", "英語", "国語", "理科"]
print("=== 履修科目一覧 ===")
# インデックスを使って番号付きで表示
for i in range(len(subjects)):
print(f"{i + 1}. {subjects[i]}")
print(f"\n履修科目数: {len(subjects)}科目")

このコードでは、range(len(subjects))を使って、リストの長さに応じたインデックスの範囲を生成しています。 for文を使って各インデックスに対して処理を実行し、i + 1で表示用の番号(1から始まる)を計算しています。

実行結果は以下のようになります。

=== 履修科目一覧 ===
1. 数学
2. 英語
3. 国語
4. 理科
履修科目数: 4科目

この方法なら、リストの要素数が変わっても自動的に対応できます。

リスト内の要素を検索する

次に、リストの中に特定の要素が含まれているかどうかを確認する機能を作成してみましょう。 これは、データの存在確認や重複チェックなどに使用される重要な機能です。

要素の検索にはin演算子を使用します。 値 in リストという形式で記述すると、その値がリストに含まれている場合はTrue、含まれていない場合はFalseを返します。

# 好きな果物のリストを作成
favorite_fruits = ["りんご", "バナナ", "オレンジ", "いちご", "ぶどう"]
print("好きな果物リスト:", favorite_fruits)
print()
# 特定の果物が含まれているかチェック
check_fruit = "バナナ"
if check_fruit in favorite_fruits:
print(f"{check_fruit}は好きな果物に含まれています")
else:
print(f"{check_fruit}は好きな果物に含まれていません")
# 含まれていない果物をチェック
check_fruit = "メロン"
if check_fruit in favorite_fruits:
print(f"{check_fruit}は好きな果物に含まれています")
else:
print(f"{check_fruit}は好きな果物に含まれていません")

このプログラムでは、好きな果物のリストを作成し、特定の果物がそのリストに含まれているかどうかを確認しています。 check_fruit in favorite_fruitsという条件式により、指定した果物がリストに存在するかどうかを判定しています。

実行結果は以下のようになります。

好きな果物リスト: ['りんご', 'バナナ', 'オレンジ', 'いちご', 'ぶどう']
バナナは好きな果物に含まれています
メロンは好きな果物に含まれていません

この検索機能を使うことで、データの存在確認を簡単に行うことができます。

検索結果に応じた処理

検索結果に応じて異なる処理を実行する例を見てみましょう。

# 在庫商品のリスト
stock_items = ["ノート", "ペン", "消しゴム", "定規", "はさみ"]
print("=== 在庫確認システム ===")
print("在庫商品:", stock_items)
print()
# 商品の在庫確認
search_item = "ペン"
if search_item in stock_items:
print(f"✓ {search_item}は在庫があります")
# 在庫位置も表示
position = stock_items.index(search_item)
print(f" 位置: {position + 1}番目")
else:
print(f"✗ {search_item}は在庫がありません")
# 在庫がない商品を確認
search_item = "クリップ"
if search_item in stock_items:
print(f"✓ {search_item}は在庫があります")
position = stock_items.index(search_item)
print(f" 位置: {position + 1}番目")
else:
print(f"✗ {search_item}は在庫がありません")

このコードでは、index()メソッドを使って要素が見つかった場合の位置(インデックス)も表示しています。 index()メソッドは、指定した値が最初に見つかった位置のインデックスを返します。 表示用にposition + 1として、1から始まる番号で位置を示しています。

実行結果は以下のようになります。

=== 在庫確認システム ===
在庫商品: ['ノート', 'ペン', '消しゴム', '定規', 'はさみ']
✓ ペンは在庫があります
位置: 2番目
✗ クリップは在庫がありません

このように、検索結果に応じて詳細な情報を提供することができます。

ユーザーの入力でリストを操作する

これまでは固定されたデータを使用してきましたが、今度はユーザーの入力を受け取ってリストを操作するプログラムを作成してみましょう。 input()関数を使ってユーザーから値を受け取り、それをリストに追加したり削除したりします。

ユーザーが対話的に操作できるプログラムを作ることで、より実用的なツールとして活用できるようになります。

# 今日やることリストを管理
todo_list = []
print("=== やることリスト管理 ===")
print("現在のリスト:", todo_list)
print()
# ユーザーからタスクを入力してもらい追加
print("新しいタスクを追加してください")
task1 = input("1つ目のタスク: ")
todo_list.append(task1)
print("追加後のリスト:", todo_list)
task2 = input("2つ目のタスク: ")
todo_list.append(task2)
print("追加後のリスト:", todo_list)
task3 = input("3つ目のタスク: ")
todo_list.append(task3)
print("追加後のリスト:", todo_list)
print()
print("=== 最終的なやることリスト ===")
for i in range(len(todo_list)):
print(f"{i + 1}. {todo_list[i]}")

このプログラムでは、空のリストから始めて、ユーザーが入力したタスクを順番に追加していきます。 input()関数でユーザーからの入力を受け取り、append()メソッドでリストに追加しています。 各段階でリストの状態を表示することで、変化を確認できるようにしています。

実行例は以下のようになります(ユーザーが「宿題をする」「買い物に行く」「部屋を片付ける」と入力した場合)。

=== やることリスト管理 ===
現在のリスト: []
新しいタスクを追加してください
1つ目のタスク: 宿題をする
追加後のリスト: ['宿題をする']
2つ目のタスク: 買い物に行く
追加後のリスト: ['宿題をする', '買い物に行く']
3つ目のタスク: 部屋を片付ける
追加後のリスト: ['宿題をする', '買い物に行く', '部屋を片付ける']
=== 最終的なやることリスト ===
1. 宿題をする
2. 買い物に行く
3. 部屋を片付ける

このプログラムにより、ユーザーが対話的にリストを作成し、管理することができます。

タスクの削除機能

リストにタスクを追加するだけでなく、完了したタスクを削除する機能も追加してみましょう。

# 完了したタスクを削除する機能
print("\n=== タスク完了処理 ===")
print("完了したタスクを削除します")
# 現在のリストを表示
print("現在のタスク:")
for i in range(len(todo_list)):
print(f"{i + 1}. {todo_list[i]}")
# 完了したタスクを入力してもらい削除
completed_task = input("\n完了したタスクを入力してください: ")
if completed_task in todo_list:
todo_list.remove(completed_task)
print(f"'{completed_task}'を完了リストから削除しました")
else:
print(f"'{completed_task}'はリストに見つかりませんでした")
# 残りのタスクを表示
print("\n残りのタスク:")
if len(todo_list) > 0:
for i in range(len(todo_list)):
print(f"{i + 1}. {todo_list[i]}")
else:
print("すべてのタスクが完了しました!")

このコードでは、ユーザーが完了したタスクを入力し、そのタスクがリストに存在する場合は削除します。 削除前にin演算子で存在確認を行い、存在しない場合は適切なメッセージを表示します。 最後に残りのタスクを表示することで、削除結果を確認できます。

数値リストの基本的な計算

リストには文字列だけでなく数値も保存できます。 数値のリストを使って、基本的な計算処理を行うプログラムを作成してみましょう。

# テストの点数リストを作成
test_scores = []
print("=== テスト点数管理 ===")
print("5教科の点数を入力してください")
# 5教科の点数を入力
subjects = ["数学", "英語", "国語", "理科", "社会"]
for subject in subjects:
while True:
try:
score = int(input(f"{subject}の点数: "))
if 0 <= score <= 100:
test_scores.append(score)
break
else:
print("0から100の範囲で入力してください")
except ValueError:
print("数値を入力してください")
print(f"\n入力された点数: {test_scores}")
# 合計点を計算
total_score = 0
for score in test_scores:
total_score += score
print(f"合計点: {total_score}点")
# 平均点を計算
average_score = total_score / len(test_scores)
print(f"平均点: {average_score:.1f}点")
# 最高点と最低点を見つける
highest_score = test_scores[0]
lowest_score = test_scores[0]
for score in test_scores:
if score > highest_score:
highest_score = score
if score < lowest_score:
lowest_score = score
print(f"最高点: {highest_score}点")
print(f"最低点: {lowest_score}点")

このプログラムでは、5教科のテスト点数を入力してもらい、その数値を使って様々な計算を行っています。 入力時にはtry-except文を使って、数値以外が入力された場合のエラー処理も行っています。 また、0から100の範囲外の値が入力された場合は再入力を求めるようにしています。

合計点の計算では、for文を使ってリストの全要素を順番に足し合わせています。 平均点は合計点をリストの長さで割ることで求めています。 最高点と最低点は、最初の要素を基準として、すべての要素と比較することで見つけています。

実行例は以下のようになります(各教科に80, 75, 90, 85, 70と入力した場合)。

=== テスト点数管理 ===
5教科の点数を入力してください
数学の点数: 80
英語の点数: 75
国語の点数: 90
理科の点数: 85
社会の点数: 70
入力された点数: [80, 75, 90, 85, 70]
合計点: 400点
平均点: 80.0点
最高点: 90点
最低点: 70点

このプログラムにより、数値データの基本的な統計処理を行うことができます。

リストのデータ管理

最後に、これまで学んだ機能を組み合わせて、簡単なデータ管理を行うプログラムを作成してみましょう。 複数の操作を組み合わせることで、より実用的な機能を実現できます。

# 図書の管理システム
library_books = ["Python入門", "データ分析", "機械学習", "Web開発"]
print("=== 図書管理システム ===")
def show_books():
"""現在の蔵書を表示する"""
print("\n現在の蔵書:")
if len(library_books) == 0:
print("蔵書がありません")
else:
for i in range(len(library_books)):
print(f"{i + 1}. {library_books[i]}")
print(f"総蔵書数: {len(library_books)}冊")
def add_book():
"""新しい本を追加する"""
new_book = input("\n追加する本のタイトル: ")
if new_book in library_books:
print(f"'{new_book}'は既に登録されています")
else:
library_books.append(new_book)
print(f"'{new_book}'を追加しました")
def search_book():
"""本を検索する"""
search_title = input("\n検索するタイトル: ")
if search_title in library_books:
position = library_books.index(search_title)
print(f"'{search_title}'が見つかりました({position + 1}番目)")
else:
print(f"'{search_title}'は見つかりませんでした")
# システムの動作確認
show_books()
add_book()
show_books()
search_book()

このプログラムでは、図書の管理に必要な基本的な機能を関数として定義しています。 show_books()関数で現在の蔵書一覧を表示し、add_book()関数で新しい本を追加し、search_book()関数で本を検索できます。

各関数内では、これまで学んだリストの操作(要素の表示、追加、検索)を組み合わせて使用しています。 重複チェックやエラー処理も含めることで、より堅牢なプログラムになっています。

実行例は以下のようになります(「データベース」を追加し、「機械学習」を検索した場合)。

=== 図書管理システム ===
現在の蔵書:
1. Python入門
2. データ分析
3. 機械学習
4. Web開発
総蔵書数: 4冊
追加する本のタイトル: データベース
'データベース'を追加しました
現在の蔵書:
1. Python入門
2. データ分析
3. 機械学習
4. Web開発
5. データベース
総蔵書数: 5冊
検索するタイトル: 機械学習
'機械学習'が見つかりました(3番目)

まとめ

本章では、これまで学んだリスト操作を組み合わせて、実用的なプログラムを作成しました。 理解できた内容は以下の通りです。

リストの要素を個別に表示する方法を学び、番号付きで整理された見やすい出力を実現しました。 for文とrange()を組み合わせることで、リストの長さに関係なく対応できる柔軟な表示方法も習得しました。

in演算子を使ったリスト内の要素検索機能を実装し、検索結果に応じた処理の分岐も学びました。 index()メソッドを使って、見つかった要素の位置を特定する方法も理解しました。

また、input()関数を使ってユーザーからの入力を受け取り、それをリストに反映する対話型プログラムを作成しました。 エラー処理も含めることで、より堅牢なプログラムの作成方法を学びました。

数値リストを使った基本的な統計計算(合計、平均、最大値、最小値)の実装により、データ処理の基礎も身につけました。

さらに、複数の機能を関数として整理し、それらを組み合わせることで、より複雑なデータ管理システムを構築する方法を理解しました。

これで、リストを使った基本的なプログラミングの技術が身につきました。 次の章では、辞書という新しいデータ構造について学んでいきます。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Starterプランでより詳しく学習

この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
リストの要素を変更しよう