6日目のゴール
6日目のテーマは
「数値メニューと関数分岐を“自分で見直して、よりシンプルに書き直せるようになること” です。
ここまでであなたはすでに、
メニューを表示できる
番号に応じて関数を呼び分けられる
終了を選ぶまでループできる
メニュー定義や入力処理を関数に分けられる
というところまで来ています。
今日はここから一歩進んで、
分岐の書き方をもっとスッキリさせる
「番号 → 関数」の対応を、より自然な形にする
自分のコードを「これ、もっと短くできない?」という目で見直す
ここを狙っていきます。
5日目までの分岐を“批評の目”で見る
if / elif での分岐の限界を感じてみる
前回の分岐は、こんな形でした。
def get_action(choice):
if choice == "1":
return say_hello
elif choice == "2":
return show_goal
elif choice == "3":
return calc_sum
else:
return None
Pythonちゃんと動きます。
読みやすくもあります。
でも、メニューの項目が
4、5、6…と増えていったらどうでしょう。
if choice == “4”:
elif choice == “5”:
elif choice == “6”:
と、どんどん伸びていきます。
6日目でやりたいのは、
「同じパターンが増えそうなところを、もっと短く書けないか?」
と考えることです。
「番号 → 関数」を辞書で表現する
辞書という“対応表”を使う
Python には「辞書(dict)」という
「キーと値のペア」を持てる型があります。
これを使うと、
「番号 → 関数」の対応を
とても自然に書けます。
例えば、こうです。
actions = {
"1": say_hello,
"2": show_goal,
"3": calc_sum,
}
Pythonこの一行一行が、
“1” というキーに対して say_hello という関数
“2” というキーに対して show_goal という関数
“3” というキーに対して calc_sum という関数
という対応を表しています。
ここで重要なのは、
値として「関数そのもの」を入れていることです。
呼び出すときは、こう書けます。
action = actions.get(choice)
Pythonもし choice が “1” なら、action は say_hello になります。
もし “9” のような存在しないキーなら、action は None になります。
辞書を使った分岐に書き換える
get_action を辞書ベースにする
5日目の get_action を、
辞書を使って書き直してみます。
def get_action(choice):
actions = {
"1": say_hello,
"2": show_goal,
"3": calc_sum,
}
return actions.get(choice)
Pythonこれで、
if / elif の列は消えました。
番号が増えたら、
辞書の中に行を足すだけです。
“4”: some_function
“5”: another_function
というふうに増やしていけます。
ここでの深掘りポイントは、
「番号 → 関数」の対応を
コードの“形”としてそのまま表現できている
ということです。
main をさらに“流れだけ”に近づける
6日目版 main の形
辞書ベースの get_action を使って、
main をもう一度整理します。
def main():
while True:
show_menu()
choice = ask_menu_choice()
if choice is None:
continue
if choice == "0":
print("アプリを終了します。")
break
action = get_action(choice)
if action is None:
print("不正な入力です。0, 1, 2, 3 のどれかを入力してください。")
continue
action()
Pythonここまで来ると、
main はほとんど「日本語の流れ」と同じです。
メニューを表示する
番号を入力してもらう(空ならやり直し)
“0” なら終了
それ以外なら、対応する関数を辞書から取り出す
なければ「不正な入力」
あれば、その関数を実行する
このレベルまで“流れだけ”にできていれば、
アプリが大きくなっても main で迷子になりません。
メニュー定義とアクション対応を“揃える”感覚
get_menu_items と get_action を見比べる
5日目で作った get_menu_items は、こうでした。
def get_menu_items():
return [
("1", "あいさつする"),
("2", "今日の目標を表示する"),
("3", "簡単な足し算をする"),
("0", "終了する"),
]
Pythonそして、6日目の get_action はこうです。
def get_action(choice):
actions = {
"1": say_hello,
"2": show_goal,
"3": calc_sum,
}
return actions.get(choice)
Pythonここで意識してほしいのは、
“1” は「あいさつする」かつ say_hello
“2” は「今日の目標を表示する」かつ show_goal
“3” は「簡単な足し算をする」かつ calc_sum
という対応が、
メニュー表示側とアクション側で
きれいに揃っていることです。
この「揃っている感覚」があると、
メニューを増やしたり直したりするときに
迷いが減ります。
6日目のミニアプリ:辞書ベース分岐つきメニューアプリ
今日の学びを全部入れたコード
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 get_menu_items():
return [
("1", "あいさつする"),
("2", "今日の目標を表示する"),
("3", "簡単な足し算をする"),
("0", "終了する"),
]
def show_menu():
print_line()
print("メニュー")
print_line()
for key, label in get_menu_items():
print(f"{key}: {label}")
print_line()
def ask_menu_choice():
choice = input("番号を選んでください: ")
if choice.strip() == "":
print("何も入力されていません。0, 1, 2, 3 のどれかを入力してください。")
return None
return choice
def get_action(choice):
actions = {
"1": say_hello,
"2": show_goal,
"3": calc_sum,
}
return actions.get(choice)
def main():
while True:
show_menu()
choice = ask_menu_choice()
if choice is None:
continue
if choice == "0":
print("アプリを終了します。")
break
action = get_action(choice)
if action is None:
print("不正な入力です。0, 1, 2, 3 のどれかを入力してください。")
continue
action()
main()
Python関数ごとの役割をもう一度、日本語で言い切る
「一文で説明できるか」をチェックする
print_line
メニューの上下に区切り線を表示する。
say_hello
あいさつメッセージを表示する機能。
show_goal
今日の学習目標を表示する機能。
calc_sum
2つの数字を入力してもらい、その合計を表示する機能。
get_menu_items
メニューに並べる「番号と説明文」の一覧を返す。
show_menu
メニュー一覧を画面に表示する。
ask_menu_choice
番号を入力してもらい、空なら None を返す。
get_action
番号に応じて「呼ぶべき関数そのもの」を辞書から取り出して返す。
main
メニューを回しながら、
「番号を受け取る → 0 なら終了 → 対応する関数を取得 → あれば実行」
という流れを管理する。
ここまで日本語で説明できていれば、
数値メニューと関数分岐は、もう完全にあなたの道具です。
6日目のまとめ:今日つかんでほしい感覚
今日の本質は、これです。
同じパターンが増えそうなところは、
辞書などを使って「対応表」として表現できる。
数値メニューは
「番号と説明文の一覧」として定義し、
関数分岐は
「番号と関数の対応表」として書ける。
main は
「入力 → 終了判定 → 対応する関数を取得 → 実行」
という“流れだけ”を書く場所に近づけていく。
7日目では、
このメニューアプリを題材にしながら、
「自分のコードを自分で評価して、改善ポイントを言葉にする」
というところまで持っていきます。


