Есть ли способ уменьшить количество операторов if?

Я пытаюсь удалить эти ситуации, если могу. Здесь у меня есть два оператора if, и я хотел бы написать один и тот же код с одним или без него.

def ai_player(self, state, team = 1): 
    new_shape_x = np.asarray(state[1]).shape
    player1 = Minimax(n = new_shape_x, default_team = team)
    if team == -1:
        state = player1.convert_board_state(state)
    best_move = player1.decision_maker(state)
    chosen_succ, utility = best_move
    if team == -1:
        chosen_succ = player1.convert_board_state(chosen_succ)
    return chosen_succ

Нет ошибки, он отлично работает с дополнительными кодами строк.

Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
0
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что не так с этими прекрасно читаемыми операторами if?

В качестве не совсем серьезного варианта вы можете заменить любой if поиском в словаре:

# ...
options = {
    False: lambda: None
    True: lambda: player1.convert_board_state(state)
}
options[team==-1]()
# ...

Чтобы сделать его еще более кратким (то есть неясным), вы также можете использовать list. Индексирование с False дает элемент 0, а с True дает элемент 1:

# ...
[
    lambda: None,
    lambda: player1.convert_board_state(state)
][team==-1]()
# ...
Ответ принят как подходящий

Вы можете отделить логику от team == -1 от логики, которая происходит, когда team != -1:

def ai_player(self, state, team = 1): 
    new_shape_x = np.asarray(state[1]).shape
    player1 = Minimax(n = new_shape_x, default_team = team)

    if team == -1:
        state = player1.convert_board_state(state)
        best_move = player1.decision_maker(state)
        chosen_succ, utility = best_move
        chosen_succ = player1.convert_board_state(chosen_succ)
    else:
        best_move = player1.decision_maker(state)
        chosen_succ, utility = best_move

    return chosen_succ

Однако будет повторение кода.

В этом случае вы также можете превратить две повторяющиеся строки в одну, дав понять, что эта часть кода повторяется:

def ai_player(self, state, team = 1): 
    new_shape_x = np.asarray(state[1]).shape
    player1 = Minimax(n = new_shape_x, default_team = team)

    if team == -1:
        state = player1.convert_board_state(state)
        chosen_succ, utility = player1.decision_maker(state)
        chosen_succ = player1.convert_board_state(chosen_succ)
    else:
        chosen_succ, utility = player1.decision_maker(state)

    return chosen_succ

Теперь переменная best_move исчезла. Если вы все еще хотите сказать, что выбираете лучший ход, вы можете переименовать метод decision_maker во что-то вроде choose_best_move:

def ai_player(self, state, team = 1): 
    new_shape_x = np.asarray(state[1]).shape
    player1 = Minimax(n = new_shape_x, default_team = team)

    if team == -1:
        state = player1.convert_board_state(state)
        chosen_succ, utility = player1.choose_best_move(state)
        chosen_succ = player1.convert_board_state(chosen_succ)
    else:
        chosen_succ, utility = player1.choose_best_move(state)

    return chosen_succ

И вот оно!

Другие вопросы по теме