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日目の流れを言葉でなぞる
今日のコードの動きを、
あえて日本語だけで説明してみます。
- 空のリスト
memosを用意する。 while True:で繰り返しを始める。- ユーザーから文字列を入力してもらう(
raw)。 strip()で前後の空白を削ったものをtextに入れる。textを小文字にしたものをnormalizedに入れる。normalizedが"終了"または"end"なら、breakでループを終わる。textが空文字なら、「保存しません」と表示してcontinue。- それ以外なら、
memos.append(text)でメモを保存する。 - while の先頭に戻って、また入力を聞く。
- どこかで終了条件を満たしたらループを抜ける。
- 最後に
memosの中身を一覧表示する。
この流れを自分の言葉で説明できるようになっていれば、
「while+終了条件+入力チェック」のセットはかなり身についています。
今日いちばん深く理解してほしいこと
2日目の本質は、これです。
「終了条件」と「入力チェック(スキップ条件)」は別物。
終了条件は break、スキップ条件は continue や“何もしない”で表現する。
そして必ず、
- まず日本語でルールを書く
- それを if 文に落とし込む
- 必要なら
strip()やlower()で“判定しやすい形”に整える
という順番で考えること。
この感覚がつかめていれば、
3日目以降で「回数制限」「最大メモ数」「ユーザー都合とアプリ都合の両方の終了条件」
といった、もう一段現実的なルールにも、落ち着いて対応できるようになります。


