Python | 1 日 90 分 × 7 日アプリ学習:簡単メニュー選択アプリ(初級編)

Web APP Python
スポンサーリンク

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 管理メニュー
お気に入りサイト起動メニュー

どれも本質は同じです。

番号を決める
機能を関数として書く
「番号 → 関数」の対応を作る

このパターンを回せるあなたなら、
もう自分のアイデアを「小さなアプリ」という形に
何度でもしていけます。

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