Можно ли написать запрос с IF короче?
if input_user_level == 1:
user_level = words_easy
elif input_user_level == 2:
user_level = words_medium
elif input_user_level == 3:
user_level = words_hard
Ответы (1 шт):
Автор решения: mrgervant
→ Ссылка
Вариант со словарем - преимущество в возможности получить значение по умолчанию, если введенное значение не соответствует ни одному из ключей:
level_dict = {1: words_easy, 2: words_medium, 3: words_hard}
user_level = level_dict.get(input_user_level, words_medium)
Однострочный формат:
user_level = {1: words_easy, 2: words_medium, 3: words_hard}.get(input_user_level, words_medium)
Вариант со списком от @CrazyElf - преимущество в более коротком описании коллекции (при условии предварительной валидации введенного значения, иначе может возникнуть ошибка IndexError: list index out of range
):
level_list = [words_easy, words_medium, words_hard]
user_level = level_list[input_user_level - 1]
Однострочный формат:
user_level = [words_easy, words_medium, words_hard][input_user_level - 1]
Способ, появившийся в версии Python 3.10, оператор match-case
- преимущество в возможности далее писать разный код в ветках алгоритма:
match input_user_level:
case 1:
user_level = words_easy
# код 1
case 2:
user_level = words_medium
# код 2
case 3:
user_level = words_hard
# код 3
case _: # Иное значение
user_level = words_easy
# код 4
Иные способы ранее описывались в данном обсуждении.