7日目のゴール
7日目のテーマは
「数値メニューと関数分岐を“自分の言葉で説明できるレベル”にすること」です。
新しいテクニックを増やす日ではなく、
ここまで作ってきた「簡単メニュー選択アプリ」を題材にして、
なぜこう分けているのか
どこで何をしているのか
どこを変えれば、どう動きが変わるのか
を、自分で説明できる状態を目指します。
数値メニューを言葉で定義し直す
数値メニューとは「機能への番号付き入り口」
あなたが作ってきたメニューは、
単なる print の並びではありません。
「このアプリには、こういう機能があります」
「それぞれの機能には、この番号でアクセスできます」
という“宣言”になっています。
例えば、こういうメニューがあったとします。
1: あいさつする
2: 今日の目標を表示する
3: 簡単な足し算をする
0: 終了する
これは日本語にすると、
1 → あいさつ機能の入り口
2 → 目標表示機能の入り口
3 → 足し算機能の入り口
0 → アプリ終了の入り口
という「機能の地図」です。
7日目で大事なのは、
「メニュー=機能の一覧」という感覚を
はっきり持てているかどうかです。
関数分岐を言葉で定義し直す
関数分岐とは「番号から機能を選んで実行する仕組み」
数値メニューが「入り口の一覧」だとしたら、
関数分岐はこう言えます。
「選ばれた番号に応じて、
どの機能(どの関数)を実行するか決める仕組み」
辞書を使った 6日目の形を思い出してみましょう。
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
という「番号 → 関数」の対応を
コードとして表現している、ということです。
そして main では、こう使っていました。
action = get_action(choice)
if action is None:
print("不正な入力です。0, 1, 2, 3 のどれかを入力してください。")
continue
action()
Pythonここでのポイントは、
「関数そのもの」を変数として扱っていることです。
「どの関数を呼ぶか」を先に決めてから、
最後に action() で実行しているわけです。
アプリ全体を“役割の集まり”として眺める
7日目版の完成コード
ここまでの学びをまとめた形を、もう一度通しで書きます。
def print_line():
print("==========")
def say_hello():
print("こんにちは!Python 簡単メニューアプリです。")
def show_goal():
print("今日の目標:")
print("・数値メニューを“機能の一覧”として説明できるようになる")
print("・関数分岐を“番号から機能を選ぶ仕組み”として説明できるようになる")
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 なら終了 → 対応する関数を取得 → あれば実行」
というアプリ全体の流れを管理する。
7日目で大事なのは、
これをあなた自身の口で説明できるかどうかです。
「どこを変えれば何が変わるか」を意識する
変更ポイントを頭の中でマッピングする
例えば、こう考えてみてください。
メニューの文言だけ変えたい
→ get_menu_items だけを直せばいい
機能を 1 つ追加したい
→ 新しい関数を作る
→ get_menu_items に番号と説明を足す
→ get_action の辞書に番号と関数を足す
メニューの見た目(線の長さなど)を変えたい
→ print_line だけを直せばいい
入力チェックのルールを変えたい
→ ask_menu_choice の中身を直せばいい
こうやって、
「どこを変えれば何が変わるか」が
自分の頭の中で地図として見えていれば、
もう立派に「設計できている」状態です。
7日目のまとめ:あなたがもう持っている力
この 7 日間で、あなたはすでに
数値メニューを「機能の一覧」として設計できる
関数分岐を「番号から機能を選んで実行する仕組み」として説明できる
メニュー表示・入力・分岐・機能本体を、役割ごとに関数に分けられる
main を「アプリ全体の流れだけを書く場所」に近づけて書ける
というところまで来ています。
ここから先は、
メニューの中身を「自分の欲しい機能」に変えていくだけです。
学習記録メニュー
TODO 管理メニュー
お気に入りサイト起動メニュー
どれも本質は同じです。
番号を決める
機能を関数として書く
「番号 → 関数」の対応を作る
このパターンを回せるあなたなら、
もう自分のアイデアを「小さなアプリ」という形に
何度でもしていけます。


