Я пытаюсь удалить эти ситуации, если могу. Здесь у меня есть два оператора 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
Нет ошибки, он отлично работает с дополнительными кодами строк.
Что не так с этими прекрасно читаемыми операторами 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
И вот оно!