検索ガイド -Search Guide-

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

【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 文の分岐がそれに応じて増えてしまうことがありません。