I ont le code ci-dessous (python) pour vérifier s'il y a des rangées ou des colonnes qui contiennent la même valeur:de fonctionnement sur les lignes et sur les colonnes d'une matrice produit duplication de code
# Test rows ->
# Check each row for a win
for i in range(self.height): # For each row ...
firstValue = None # Initialize first value placeholder
for j in range(self.width): # For each value in the row
if (j == 0): # If it's the first value ...
firstValue = b[i][j] # Remember it
else: # Otherwise ...
if b[i][j] != firstValue: # If this is not the same as the first value ...
firstValue = None # Reset first value
break # Stop checking this row, there's no win here
if (firstValue != None): # If first value has been set
# First value placeholder now holds the winning player's code
return firstValue # Return it
# Test columns ->
# Check each column for a win
for i in range(self.width): # For each column ...
firstValue = None # Initialize first value placeholder
for j in range(self.height): # For each value in the column
if (j == 0): # If it's the first value ...
firstValue = b[j][i] # Remember it
else: # Otherwise ...
if b[j][i] != firstValue: # If this is not the same as the first value ...
firstValue = None # Reset first value
break # Stop checking this column, there's no win here
if (firstValue != None): # If first value has been set
# First value placeholder now holds the winning player's code
return firstValue # Return it
De toute évidence, il est beaucoup de duplication de code ici. Comment refactoriser ce code?
Merci!
Pourquoi faire 'x == y et x ou False' quand vous pouvez faire' x si x == y sinon False'. Ou mieux encore, écrivez-le en tant que «def» et évitez de l'emballer en une seule ligne :) – detly
C'est une fonction exceptionnellement courte qui fait quelque chose de très simple - ce genre de choses peut parfois être plus clair que lambda. Le code d'emballage sur une ligne n'est pas toujours une mauvaise chose. Et la syntaxe 'x if x == y else False' n'a été ajoutée que dans Python 2.5; 'x == y et x ou False' est beaucoup plus ancien (et plus compatible). Vous avez raison de dire que la nouvelle syntaxe est probablement meilleure si vous pouvez l'utiliser, cependant. –