Python | 1 日 90 分 × 7 日アプリ学習:繰り返し入力メモアプリ(初級編)

Web APP Python
スポンサーリンク

2日目のゴールと今日やること

2日目のテーマは
while と終了条件を“雑な繰り返し”から“ちゃんとした入力ループ”に育てること」です。

1日目は
「終了と入力されたら終わる」だけの、超シンプルなメモアプリでした。

2日目ではそこに、

  • 空文字はメモとして扱わない
  • 余計なスペースを取り除く
  • 終了条件を少し柔らかくする(例:終了 / end 両方OK)

といった「現実の入力っぽいルール」を足しながら、
while と終了条件の考え方を一段深くしていきます。


1日目の基本形をもう一度おさらいする

シンプル版メモアプリ

まずは、1日目の基本形です。

memos = []

while True:
    text = input("メモを入力してください(終了 と入力で終わり):")

    if text == "終了":
        break

    memos.append(text)

print("入力されたメモ一覧:")
for memo in memos:
    print("-", memo)
Python

ここでの終了条件は
「入力された文字が "終了" だったら終わり」。

今日は、この「入力された文字」を
もう少し丁寧に扱っていきます。


空文字を“メモとしては扱わない”というルール

まず日本語でルールを書く

いきなりコードにせず、先に日本語で整理します。

  • 何も入力せずに Enter だけ押された場合は、メモとして保存しない
  • でも、アプリ自体は続ける(終了にはしない)

これは「終了条件」ではなく、
「この入力は無視して次に進む条件」です。

コードに落とし込む

memos = []

while True:
    text = input("メモを入力してください(終了 と入力で終わり):")

    if text == "終了":
        break

    if text == "":
        print("空のメモは保存しません")
        continue

    memos.append(text)

print("入力されたメモ一覧:")
for memo in memos:
    print("-", memo)
Python

ここで新しく出てきたのが continue です。


深掘り:break と continue の役割の違い

break は「ループそのものを終わらせる」

break は、
「この while(または for)をここで終わりにする」という命令です。

今回のコードでは、

if text == "終了":
    break
Python

と書いていて、
これは「ユーザーがアプリを終わらせたい」という意思を
そのままコードにしているイメージです。

continue は「この1回分だけ飛ばす」

一方で continue は、
「この1回分の残りの処理をスキップして、次の周回に進む」という命令です。

if text == "":
    print("空のメモは保存しません")
    continue
Python

これは、

  • 空文字だったら、メモには保存しない
  • でも、アプリ自体は続ける(次の入力に進む)

という意味になります。

ここで大事なのは、

  • アプリを終わらせる条件 → break
  • この入力だけ無視する条件 → continue

と、頭の中で役割を分けておくことです。


入力の前後のスペースを“きれいにする”

日本語でルールを書く

現実の入力では、こんなことがよく起きます。

  • 間違えて前後にスペースを入れてしまう(" こんにちは " など)
  • "終了 " のように、後ろにスペースが付いてしまう

これをそのまま比較すると、
"終了 ""終了" と一致しないので、終了条件が効きません。

そこでルールをこうします。

  • 入力された文字列の前後の空白は、まず取り除いてから判定する

strip() を使う

Python には、文字列の前後の空白を取る strip() があります。

memos = []

while True:
    raw = input("メモを入力してください(終了 と入力で終わり):")
    text = raw.strip()  # 前後の空白を削除

    if text == "終了":
        break

    if text == "":
        print("空のメモは保存しません")
        continue

    memos.append(text)

print("入力されたメモ一覧:")
for memo in memos:
    print("-", memo)
Python

ここでのポイントは、

  • ユーザーの入力そのもの(raw)と
  • 判定に使う“整えた文字列”(text

を分けていることです。

終了条件や空文字チェックは text を使う。
必要なら raw をそのまま保存する、という設計もできます。


終了条件を少し柔らかくする(複数の終了ワード)

日本語で条件を増やす

例えば、こんなルールを足してみます。

  • 「終了」または「end」と入力されたら終わり
  • 大文字小文字は区別しない(END でも End でも OK)

まずは日本語で条件を書きます。

入力された文字を小文字に変換したものが "終了" または "end" なら終わり

これをコードに落とし込みます。

lower() と or を組み合わせる

memos = []

while True:
    raw = input("メモを入力してください(終了 / end で終わり):")
    text = raw.strip()

    normalized = text.lower()

    if normalized == "終了" or normalized == "end":
        print("終了コマンドが入力されたので終わります")
        break

    if text == "":
        print("空のメモは保存しません")
        continue

    memos.append(text)

print("入力されたメモ一覧:")
for memo in memos:
    print("-", memo)
Python

ここでやっていることはシンプルです。

  • strip() で前後の空白を削る
  • lower() で小文字にそろえる
  • その結果を "終了" / "end" と比較する

終了条件が少し複雑になっても、
「日本語でルールを書く → それを if に落とす」という流れは同じです。


「終了条件」と「入力チェック」を頭の中で分ける

すべてを“終了条件”にしない

2日目で一番大事なのは、
ここです。

  • アプリを終わらせる条件(終了条件)
  • この入力だけ無視する条件(入力チェック)

を、頭の中でちゃんと分けること。

今回の例でいうと、

  • 終了条件:normalized == "終了" or normalized == "end"
  • 入力チェック:text == ""(空文字)

終了条件は break
入力チェックは continue や「何もしない」で表現します。

この“役割の違い”を意識できると、
while の中身が一気に整理されて見えるようになります。


2日目の流れを言葉でなぞる

今日のコードの動きを、
あえて日本語だけで説明してみます。

  1. 空のリスト memos を用意する。
  2. while True: で繰り返しを始める。
  3. ユーザーから文字列を入力してもらう(raw)。
  4. strip() で前後の空白を削ったものを text に入れる。
  5. text を小文字にしたものを normalized に入れる。
  6. normalized"終了" または "end" なら、break でループを終わる。
  7. text が空文字なら、「保存しません」と表示して continue
  8. それ以外なら、memos.append(text) でメモを保存する。
  9. while の先頭に戻って、また入力を聞く。
  10. どこかで終了条件を満たしたらループを抜ける。
  11. 最後に memos の中身を一覧表示する。

この流れを自分の言葉で説明できるようになっていれば、
「while+終了条件+入力チェック」のセットはかなり身についています。


今日いちばん深く理解してほしいこと

2日目の本質は、これです。

「終了条件」と「入力チェック(スキップ条件)」は別物。
終了条件は break、スキップ条件は continue や“何もしない”で表現する。

そして必ず、

  • まず日本語でルールを書く
  • それを if 文に落とし込む
  • 必要なら strip()lower() で“判定しやすい形”に整える

という順番で考えること。

この感覚がつかめていれば、
3日目以降で「回数制限」「最大メモ数」「ユーザー都合とアプリ都合の両方の終了条件」
といった、もう一段現実的なルールにも、落ち着いて対応できるようになります。

タイトルとURLをコピーしました