如何启用定义输入为可选?
How to enable an input of definition as optional?
我有一个迭代某些函数的定义。但是,此函数的参数或换句话说输入应该是可选的。对于我的问题,我试图使 'depth' 参数可选。例如,这是一个 minimax 算法,但有时对于实验,您可能不想应用深度修剪。因此,它应该是可选的。
我试过 *args 方法。但是,它对我不起作用。另外,我做到了 'depth = None' 但由于动态编程中的 'depth - 1' 值而出现错误。
def minimax(self, board_state, a, b, *args):
for x in args:
depth = x
turn, board = board_state
if super().terminal_state(board_state, depth):
return super().heuristic_value(board_state)
else:
if turn == -1:
value = 250
for x in super().successor_generator(board_state):
value = min(value, self.minimax(x, a, b, depth-1))
b = min(b, value)
if b <= a:
break
elif turn == 1:
value = -250
for x in super().successor_generator(board_state):
value = max(value, self.minimax(x, a, b, depth-1))
a = max(a, value)
if b <= a:
break
result = board_state, value
return value
object.minimax(state, a, b, depth=None)
value = min(value, self.minimax(x, a, b, depth-1))
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
所需的功能应该适用于两种方式:
object.minimax(state, a, b)
object.minimax(state, a, b, depth=5)
你的来电
object.minimax(state, a, b)
object.minimax(state, a, b, depth=5)
是正确的,你应该将你的方法定义为
def minimax(self, board_state, a, b, depth=None)
但是你这样做之后,你不应该做的是
value = min(value, self.minimax(x, a, b, depth-1))
因为您知道在某些情况下 depth
将是 None
,因此 depth-1
在这种情况下没有任何意义。您必须自己明确处理异常的 None
值。一种方法是
value = min(value, self.minimax(x, a, b, depth-1 if depth is not None else None))
我有一个迭代某些函数的定义。但是,此函数的参数或换句话说输入应该是可选的。对于我的问题,我试图使 'depth' 参数可选。例如,这是一个 minimax 算法,但有时对于实验,您可能不想应用深度修剪。因此,它应该是可选的。
我试过 *args 方法。但是,它对我不起作用。另外,我做到了 'depth = None' 但由于动态编程中的 'depth - 1' 值而出现错误。
def minimax(self, board_state, a, b, *args):
for x in args:
depth = x
turn, board = board_state
if super().terminal_state(board_state, depth):
return super().heuristic_value(board_state)
else:
if turn == -1:
value = 250
for x in super().successor_generator(board_state):
value = min(value, self.minimax(x, a, b, depth-1))
b = min(b, value)
if b <= a:
break
elif turn == 1:
value = -250
for x in super().successor_generator(board_state):
value = max(value, self.minimax(x, a, b, depth-1))
a = max(a, value)
if b <= a:
break
result = board_state, value
return value
object.minimax(state, a, b, depth=None)
value = min(value, self.minimax(x, a, b, depth-1)) TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
所需的功能应该适用于两种方式:
object.minimax(state, a, b)
object.minimax(state, a, b, depth=5)
你的来电
object.minimax(state, a, b)
object.minimax(state, a, b, depth=5)
是正确的,你应该将你的方法定义为
def minimax(self, board_state, a, b, depth=None)
但是你这样做之后,你不应该做的是
value = min(value, self.minimax(x, a, b, depth-1))
因为您知道在某些情况下 depth
将是 None
,因此 depth-1
在这种情况下没有任何意义。您必须自己明确处理异常的 None
值。一种方法是
value = min(value, self.minimax(x, a, b, depth-1 if depth is not None else None))