返回 False 三次而不是一次
Returned False three time instead of one
def jump_to(self, position_piece, target_position):
middle_position = Position((position_piece.line + target_position.line)/2,
(position_piece.column + target_position.column)/2)
if position_piece not in self.cases:
return False
elif (target_position not in position_piece.four_position_jumps() and
target_position in self.cases):
return False
elif middle_position in self.cases:
if self.cases[position_piece] == self.cases[middle_position]:
return False
return True
我创建了上述函数,但我发现我 return输入了 3 次错误。对我来说这看起来很糟糕。这是一个很好的实施吗?我如何修改该代码以使其更符合 Python 风格?我很想知道如何 return False 一次而不是三个。
这可能是另一种方式,尽管我不会说它更具可读性或直观性,而且我还为示例以更简约的形式编写了代码:
cases = ['a', 'b', 'c', 'e']
position_piece = 'w'
target_position = 'r'
def jump_to():
check1 = not any([True if each_case == position_piece else False for each_case in cases])
check2 = any([True if each_case == target_position else False for each_case in cases])
return False if check1 or check2 else True
print(checker())
注意:因为您正在检查 target_position in self.cases:
,所以 and
比较器意味着仅检查它就足以涵盖所有情况。
我同意@leopardxpreload 的评论,因为多个 False
return 不是您代码的主要问题,特别是因为它只有一个 True
return.我在代码的早期看到了你对 middle_position
的计算,只是在某些情况下忽略它,作为一个更大的问题:
def jump_to(self, position_piece, target_position):
if position_piece not in self.cases:
return False
if target_position in self.cases and \
target_position not in position_piece.four_position_jumps():
return False
line = (position_piece.line + target_position.line) / 2
column = (position_piece.column + target_position.column) / 2
middle_position = Position(line, column)
if middle_position in self.cases:
if self.cases[position_piece] == self.cases[middle_position]:
return False
return True
您的实现很不错,但可以在使用时进行改进
@cdlane 的回答。
此答案旨在使用单点退出。虽然它可能比 cdlane 的答案更具可读性。它比 cdlane 的答案更复杂并且可能更难维护,您应该改用 his/her 答案。但这是单个 return 的样子。
def jump_to(self, position_piece, target_position):
middle_position = Position((position_piece.line + target_position.line)/2,
(position_piece.column + target_position.column)/2)
return (position_piece in self.cases
and (not target_position in self.cases
or (target_position in position_piece.four_position_jumps()
and self.cases[position_piece] != self.cases[middle_position])))
def jump_to(self, position_piece, target_position):
middle_position = Position((position_piece.line + target_position.line)/2,
(position_piece.column + target_position.column)/2)
if position_piece not in self.cases:
return False
elif (target_position not in position_piece.four_position_jumps() and
target_position in self.cases):
return False
elif middle_position in self.cases:
if self.cases[position_piece] == self.cases[middle_position]:
return False
return True
我创建了上述函数,但我发现我 return输入了 3 次错误。对我来说这看起来很糟糕。这是一个很好的实施吗?我如何修改该代码以使其更符合 Python 风格?我很想知道如何 return False 一次而不是三个。
这可能是另一种方式,尽管我不会说它更具可读性或直观性,而且我还为示例以更简约的形式编写了代码:
cases = ['a', 'b', 'c', 'e']
position_piece = 'w'
target_position = 'r'
def jump_to():
check1 = not any([True if each_case == position_piece else False for each_case in cases])
check2 = any([True if each_case == target_position else False for each_case in cases])
return False if check1 or check2 else True
print(checker())
注意:因为您正在检查 target_position in self.cases:
,所以 and
比较器意味着仅检查它就足以涵盖所有情况。
我同意@leopardxpreload 的评论,因为多个 False
return 不是您代码的主要问题,特别是因为它只有一个 True
return.我在代码的早期看到了你对 middle_position
的计算,只是在某些情况下忽略它,作为一个更大的问题:
def jump_to(self, position_piece, target_position):
if position_piece not in self.cases:
return False
if target_position in self.cases and \
target_position not in position_piece.four_position_jumps():
return False
line = (position_piece.line + target_position.line) / 2
column = (position_piece.column + target_position.column) / 2
middle_position = Position(line, column)
if middle_position in self.cases:
if self.cases[position_piece] == self.cases[middle_position]:
return False
return True
您的实现很不错,但可以在使用时进行改进 @cdlane 的回答。
此答案旨在使用单点退出。虽然它可能比 cdlane 的答案更具可读性。它比 cdlane 的答案更复杂并且可能更难维护,您应该改用 his/her 答案。但这是单个 return 的样子。
def jump_to(self, position_piece, target_position):
middle_position = Position((position_piece.line + target_position.line)/2,
(position_piece.column + target_position.column)/2)
return (position_piece in self.cases
and (not target_position in self.cases
or (target_position in position_piece.four_position_jumps()
and self.cases[position_piece] != self.cases[middle_position])))