第22回|Python総合演習:メモを保存するプログラムを作ろう|関数とファイル操作をやさしく実践|はじめてのPython

当サイトでは、コンテンツの一部に広告を掲載しています。
第22回|Python総合演習:メモを保存するプログラムを作ろう|関数とファイル操作をやさしく実践|はじめてのPython

はじめてのPython | 第22回

目次

1. はじめに

この回では、これまで学んだ内容を組み合わせて、小さな実用プログラムを作ります。前回は、tryexcept を使ったエラー処理を確認しました。

今回は、入力、リスト、ファイル書き込み、関数を組み合わせて、メモを保存するプログラムを作ります。1つずつの文法ではなく、複数の基本をどう組み合わせるかを確認する回です。

2. この回で学ぶこと

  • input を使った入力
  • リストにデータをためる方法
  • ファイルへの書き込み
  • 関数で処理をまとめる方法
  • 小さな実用プログラムの組み立て方

3. 概念の説明

総合演習では、1つの文法だけでなく、複数の要素をつなげて考えることが重要です。今回のプログラムでは、次の流れで処理を進めます。

1. ユーザーにメモを入力してもらう

2. 入力されたメモをリストに追加する

3. リストの内容をファイルに保存する

この流れを関数に分けると、役割が分かりやすくなります。

たとえば、メモを集める関数と、メモを保存する関数を分けられます。

def collect_memos():
    memos = []
    return memos


def save_memos(memos):
    pass

実際には、それぞれの関数の中に必要な処理を書いていきます。

入力された内容は、1件ずつリストに追加します。

memos = []
memo = input("メモを入力してください: ")
memos.append(memo)

リストにまとめたあとで、for を使って1行ずつファイルに書き込みます。

with open("memos.txt", "w", encoding="utf-8") as file:
    for memo in memos:
        file.write(memo + "\n")

このようにすると、複数のメモをまとめて保存できます。

4. サンプルコード

次のコードを見てください。

def collect_memos():
    memos = []

    for i in range(3):
        memo = input(f"{i + 1}件目のメモを入力してください: ")
        memos.append(memo)

    return memos


def save_memos(memos):
    with open("memos.txt", "w", encoding="utf-8") as file:
        for memo in memos:
            file.write(memo + "\n")


memos = collect_memos()
save_memos(memos)
print("memos.txt に保存しました")

このコードでは、3件のメモを入力してリストに入れ、その内容を memos.txt に保存しています。

5. 実行手順

まず、memo_app.py というファイルを作ります。

touch memo_app.py

memo_app.py をエディターで開き、次のコードを書いて保存します。

def collect_memos():
    memos = []

    for i in range(3):
        memo = input(f"{i + 1}件目のメモを入力してください: ")
        memos.append(memo)

    return memos


def save_memos(memos):
    with open("memos.txt", "w", encoding="utf-8") as file:
        for memo in memos:
            file.write(memo + "\n")


memos = collect_memos()
save_memos(memos)
print("memos.txt に保存しました")

保存したら、ターミナルで次のコマンドを実行します。

python3 memo_app.py

たとえば、次のように入力します。

1件目のメモを入力してください: Python
2件目のメモを入力してください: リスト
3件目のメモを入力してください: ファイル保存
memos.txt に保存しました

実行後に memos.txt を開くと、内容は次のようになります。

Python
リスト
ファイル保存

6. コードの読み方

  • def collect_memos(): は、メモを集める関数です。この関数の中で、空のリスト memos = [] を作っています。
  • for i in range(3): は、入力を3回くり返すための処理です。
  • i012 と変わります。
  • memo = input(f"{i + 1}件目のメモを入力してください: ") は、1件ずつメモを入力させています。
  • f"...{i + 1}..." を使って、1件目、2件目、3件目と表示を変えています。
  • memos.append(memo) は、入力されたメモをリストの最後に追加しています。
  • return memos は、集めたメモの一覧を関数の外に返しています。
  • def save_memos(memos): は、受け取ったリストをファイルに保存する関数です。
  • with open("memos.txt", "w", encoding="utf-8") as file: は、memos.txt を上書きモードで開いています。
  • for memo in memos: は、リストの中のメモを1件ずつ取り出しています。
  • file.write(memo + "\n") によって、各メモを1行ずつファイルに書き込んでいます。
  • 最後の print("memos.txt に保存しました") は、保存が終わったことを画面に知らせています。

7. 初学者がつまずきやすい点

  • 入力されたメモはそのままでは1件ずつなので、複数件を扱うにはリストが必要
  • append() でリストに追加する
  • 関数を分けると、集める処理と保存する処理を整理しやすい
  • ファイルに複数行を書き込むときは for を使う
  • 行を分けるには "\n" が必要

特に、file.write(memo) だけだと、複数のメモがつながって保存されます。1行ずつ保存したいなら memo + "\n" と書く必要があります。

また、collect_memos() で作ったリストを return しないと、関数の外でその内容を使えません。

8. よくあるエラー

1つ目は、リストに追加していない場合です。

def collect_memos():
    memos = []

    for i in range(3):
        memo = input("メモを入力してください: ")

    return memos

この場合、入力はしていますが、memos.append(memo) がないため、リストは空のままです。

2つ目は、書き込みで改行を入れていない場合です。

with open("memos.txt", "w", encoding="utf-8") as file:
    for memo in memos:
        file.write(memo)

この場合、ファイルの内容は1行につながって見えます。1件ずつ改行したいなら file.write(memo + "\n") が必要です。

3つ目は、ファイル保存用の関数に引数を渡していない場合です。

def save_memos(memos):
    with open("memos.txt", "w", encoding="utf-8") as file:
        for memo in memos:
            file.write(memo + "\n")


save_memos()

このときは、次のようなエラーになります。

TypeError: save_memos() missing 1 required positional argument: 'memos'

save_memos は、保存するメモの一覧を受け取る必要があります。

9. 練習用コード

次のコードを practice_memo_app.py として保存して実行してください。

def collect_memos():
    memos = []

    for i in range(2):
        memo = input(f"{i + 1}件目のメモを入力してください: ")
        memos.append(memo)

    return memos


def save_memos(memos):
    with open("practice_memos.txt", "w", encoding="utf-8") as file:
        for memo in memos:
            file.write(memo + "\n")


memos = collect_memos()
save_memos(memos)
print("practice_memos.txt に保存しました")

実行したあとで、practice_memos.txt の内容を確認してください。

余裕があれば、入力件数を3件ではなく4件に変えて試してください。

10. この回で理解しておくこと

  • 入力は input() で受け取る
  • 複数のメモはリストで管理する
  • 関数を使うと処理の役割を分けられる
  • ファイル保存では with open(..., "w", encoding="utf-8") を使う
  • リストの内容は forwrite() で1行ずつ保存できる

11. まとめ

今回は、入力、リスト、ファイル書き込み、関数を組み合わせて、メモを保存するプログラムを作りました。これまで学んだ基本は、単独で使うだけでなく、組み合わせることで実用的な処理になります。

小さなプログラムでも、入力して、ためて、保存するという流れを作れることが重要です。まずは、処理を順番に整理しながら読めるようにしてください。

12. 次回予告

次回は、CSVファイルを読み込んで集計する総合演習を行います。ファイル読み込み、数値変換、合計や平均の計算を組み合わせる方法を確認します。

復習してみよう

復習したい方は、こちらもあわせてご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次