4日目のゴール
4日目のテーマは
「数値メニューと関数分岐を“きれいに整理して書けるようにすること” です。
ここまでであなたはすでに、
数字でメニューを表示できる
番号に応じて関数を呼び分けられる
終了を選ぶまでメニューを繰り返せる
というところまで来ています。
今日はここから一歩進んで、
メニュー入力部分を関数として切り出す
「入力を受け取る」と「分岐する」を分離する
分岐のコードを“読みやすく・直しやすく”する
という、「整理の一歩」を踏み込みます。
今のメニューコードを言葉で分解してみる
3日目までの main を日本語で説明する
典型的な形は、こんな感じでした。
def main():
while True:
show_menu()
choice = input("番号を選んでください: ")
if choice.strip() == "":
print("何も入力されていません。0, 1, 2, 3 のどれかを入力してください。")
continue
if choice == "1":
say_hello()
elif choice == "2":
show_goal()
elif choice == "3":
calc_sum()
elif choice == "0":
print("アプリを終了します。")
break
else:
print("不正な入力です。0, 1, 2, 3 のどれかを入力してください。")
Pythonこれを日本語にすると、こうです。
メニューを表示する
番号を入力してもらう
空なら注意して、もう一度メニューへ
“1” ならあいさつ機能
“2” なら目標表示機能
“3” なら足し算機能
“0” なら終了
それ以外は「不正な入力」と表示
ちゃんと動きますが、
main の中に「入力」「チェック」「分岐」が全部詰まっていて、
少し息苦しくなってきています。
「入力を受け取る関数」を作る
入力とチェックをひとまとめにする
まずは、「メニュー番号を入力してもらう」部分を
関数に切り出します。
def ask_menu_choice():
choice = input("番号を選んでください: ")
if choice.strip() == "":
print("何も入力されていません。0, 1, 2, 3 のどれかを入力してください。")
return None
return choice
Pythonこの関数のポイントは、
入力を受け取る
空ならメッセージを出して None を返す
それ以外なら、そのまま文字列を返す
という「入力+簡単なチェック」を
ひとまとめにしていることです。
main 側は、こう書き換えられます。
def main():
while True:
show_menu()
choice = ask_menu_choice()
if choice is None:
continue
if choice == "1":
say_hello()
elif choice == "2":
show_goal()
elif choice == "3":
calc_sum()
elif choice == "0":
print("アプリを終了します。")
break
else:
print("不正な入力です。0, 1, 2, 3 のどれかを入力してください。")
Pythonここでの重要ポイントは、
main の中から「空チェックの細かいロジック」が消えて、
流れが読みやすくなっていることです。
「分岐だけに集中した main」を目指す
main を“流れだけの関数”に近づける
今の main を、もう一度日本語にしてみます。
メニューを表示する
番号を入力してもらう(空ならやり直し)
“1” ならあいさつ
“2” なら目標表示
“3” なら足し算
“0” なら終了してループを抜ける
それ以外は「不正な入力」
かなりスッキリしてきました。
4日目でつかんでほしい感覚は、
「main は“アプリの流れ”だけを書く場所」
ということです。
細かいチェックや表示のルールは、
専用の関数に追い出していくと、
アプリが大きくなっても迷子になりにくくなります。
「メニュー番号と機能」を頭の中で整理する
番号・関数・機能の対応を意識する
今の構造を、頭の中でこう整理してみてください。
“1” → say_hello → あいさつ機能
“2” → show_goal → 目標表示機能
“3” → calc_sum → 足し算機能
“0” → 終了メッセージ → ループ終了
そして、
ask_menu_choice は「番号をもらう係」
show_menu は「メニューを見せる係」
main は「どの係を呼ぶか決める係」
という役割分担になっています。
この「誰が何を担当しているか」が
自分の言葉で説明できると、
コードの見通しが一気によくなります。
4日目のミニアプリ:入力関数つきメニューアプリ
今日の学びをまとめたコード
def print_line():
print("==========")
def say_hello():
print("こんにちは!Python 簡単メニューアプリです。")
def show_goal():
print("今日の目標:")
print("・メニュー入力部分を関数に切り出す")
print("・main を“流れだけ”に近づける")
def calc_sum():
print("足し算モードです。2つの数字を入力してください。")
a_text = input("1つ目の数字: ")
b_text = input("2つ目の数字: ")
try:
a = int(a_text)
b = int(b_text)
except ValueError:
print("数字ではありません。足し算を中止します。")
return
result = a + b
print("結果:", result)
def show_menu():
print_line()
print("メニュー")
print_line()
print("1: あいさつする")
print("2: 今日の目標を表示する")
print("3: 簡単な足し算をする")
print("0: 終了する")
print_line()
def ask_menu_choice():
choice = input("番号を選んでください: ")
if choice.strip() == "":
print("何も入力されていません。0, 1, 2, 3 のどれかを入力してください。")
return None
return choice
def main():
while True:
show_menu()
choice = ask_menu_choice()
if choice is None:
continue
if choice == "1":
say_hello()
elif choice == "2":
show_goal()
elif choice == "3":
calc_sum()
elif choice == "0":
print("アプリを終了します。")
break
else:
print("不正な入力です。0, 1, 2, 3 のどれかを入力してください。")
main()
Pythonこのアプリを、役割ごとに言葉で説明するとこうなります。
print_line は「メニューの区切り線を表示する」
show_menu は「メニュー全体を表示する」
ask_menu_choice は「番号を入力してもらい、空なら None を返す」
say_hello・show_goal・calc_sum は「それぞれの機能を担当する」
main は「メニューを回しながら、番号に応じて機能を呼び分ける」
ここまで整理できていれば、
数値メニューと関数分岐は、もう“自分の道具”になっています。
4日目のまとめ:今日つかんでほしい感覚
今日の本質は、これです。
数値メニューは「機能の入り口の一覧」。
関数分岐は「どの入り口から、どの機能に飛ぶか決める仕組み」。
入力を受け取る関数を作ると、main が“流れだけ”になって読みやすくなる。
「どの関数が何を担当しているか」を
自分の言葉で説明できる限り、
メニュー付きアプリはどんどん育てていけます。


