你会如何编码?我应该使用循环还是保持它的编码方式



我有这个方法来模拟NBA篮球比赛。该方法使用名为self.quarterMins的变量进行检查,以判断该季度的分钟数是否已完成。然后,它更改了我在代码中使用的两个不同变量的索引,以判断正在进行的季度。

def checkQuarter(self):
    # Method that checks and makes sure that the quarter and game aren't over.
    self.quarterIndex = 0
    if self.quarterMins[0] > 0:
        self.quarterIndex = 0
        self.playerMins = -4
    elif self.quarterMins[1] > 0:
        self.quarterIndex = 1
        self.playerMins = -3
    elif self.quarterMins[2] > 0:
        self.quarterIndex = 2
        self.playerMins = -2
    elif self.quarterMins[3] > 0:
        self.quarterIndex = 3
        self.playerMins = -1
    else:
        return False

以下方法也可以这样做:

def checkQuarter(self):
    self.quarterIndex = 0
    for i in xrange(4):
        if self.quarterMins[i] > 0:
            self.quarterIndex = i
            self.playerMins = -4 + i
            break
    else:
        return False

这使用一个循环让变量i从0变为3,并且只要if语句为true,它就会设置self.quarterIndexself.playMins变量。在这种情况下,它将使用break突破for循环,方法就完成了。如果根本没有发生这种情况,那么Python将运行作为for循环一部分的else:部分——只有在for循环中不使用break时才会运行。

我不一定说上面的代码更好,但它确实缩短了逻辑。你也可以这样写(但我也不确定这是否更好):

def checkQuarter(self):
    self.quarterIndex = 0
    index = None
    for i in xrange(4):
        if self.quarterMins[i] > 0:
            index = i
            break
    if index is None:
        return False
    self.quarterIndex = index
    self.playerMins = -4 + index

我可能有quarterIndex()playerMins()的getter,并且不为这些变量存储任何值。那么就不需要实现checkQuarter()来更新变量。我发现,如果不及时调用,这种方法可能会引入错误。

我也会反向检查quarterMins,因为这样您的代码就假设始终使用最高的四分之一,即使其他四分之一的值仍然大于0。

def quarterIndex():
    for i in range(4,-1,-1):
        if self.quarterMins[i] > 0:
            return i
    return None
def playerMins():
    quarterIndex = quarterIndex()
    if (quarterIndex != None):
         return -4 + quarterIndex
    return None
def gameIsRunning():
    if (quarterIndex() != None):
        return True
    return False

我这样做(你也可以使用范围)

def checkQuarter(self):
    self.quarterIndex = 0
    for i, item in enumerate(self.quarterMins):
        if item > 0:
            self.quarterIndex = i
            self.playerMins = i - 4
    if self.quarterIndex == 0:
        return False

最新更新