三次返回假,而不是一次

问题描述 投票:-1回答:2
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 target_position in self.cases:
        if self.cases[position_piece] == self.cases[middle_position]:
            return False

    return True

我已经创建了上面的函数,但是我意识到我返回了3次False。对我来说,实现起来似乎很糟糕。这是一个很好的实现吗?如何修改该代码以使其更具pythonic功能?我想知道如何一次返回False而不是三个。

python implementation
2个回答
0
投票

一个简短的答案:

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 or ((target_position not in position_piece.four_position_jumps() or self.cases[position_piece] == self.cases[middle_position])and target_position in self.cases):
        return False
    return True

0
投票

这可能是另一种方式,尽管我不会说它更具可读性或直观性,并且我还以示例的更简化形式编写了代码:

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比较器意味着只检查它就足以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.