検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
img_for_tre_tron

Tré Thộn を食べたことがありますか?
ベトナム・ビンズオン滞在中の方は是非注文して食べてみて!
絶対に美味しいです!
ホーチミン市内へも配達可能です。お問い合わせください。

Have you ever had "Tré Thộn" before?
If you're living at Bình Dương in Vietnam, you "must" try to order and eat it.
I'm sure you're very surprised how delicious it is!!
If you're in Hồ Chí Minh, you have a chance to get it too. Please call!!
>>

【Python 雑談・雑学】 ユーザー入力に応じて異なる処理関数を実行する際の少し面白い実装方法 - ユーザーの選択項目とそれに応じる関数名をディクショナリで保持する - 投稿一覧へ戻る

Published 2020年5月29日21:02 by mootaro23

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

例えば下記のようなメニューを提示してユーザーに入力を求め、入力された値に応じて実行する関数を振り分けるとします。


USER_CHOICE = """選択項目:

- 'a' いいことを表示します
- 'b' もっといいことを表示します
- 'c' それよりもいいことを表示します
- 'q' もういいです

どれがいいですか? """



このような場合、次のような if-else 文を利用して処理を分岐させるのが普通だと思います。


def menu():
user_input = input(USER_CHOICE)
while user_input != 'q':
if user_input == 'a':
print_normal()
elif user_input == 'b':
print_better()
elif user_input == 'c':
print_best()
else:
print('ちゃんと選んでください...\n')

user_input = input(USER_CHOICE)



ただ、こんな方法もあります。


user_choices = {
'a': print_normal,
'b': print_better,
'c': print_best,
}

def menu():
user_input = input(USER_CHOICE)
while user_input != 'q':
if user_input in ('a', 'b', 'c'):
user_choices[user_input]()
else:
print('ちゃんと選んでください...\n')

user_input = input(USER_CHOICE)



'key' として 'ユーザーからの入力項目'、'value' として '実行する関数名' からなるディクショナリ、user_choices を定義しています。


あとは、ユーザーからの入力に応じて、


if user_input in ('a', 'b', 'c'):
user_choices[user_input]()



で、目的の関数を実行します。ディクショナリから取得した value 値に () をつけて実行しているところがミソです。


この実装方法だと、もし選択項目が増えたとしても、if-else 文の分岐がそれに応じて増えてしまうことがありません。