我有这个方法来模拟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.quarterIndex
和self.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