Je suis très nouveau à Python. Je suis un fervent partisan de la conception algorithmique simple, concise et efficace ainsi que du style de codage. Au fur et à mesure que j'apprends Python, je réalise que Python fait beaucoup de choses derrière la scène pour que le langage lui-même soit super sympa pour les programmeurs. C'est sympa mais je voulais en savoir plus sur les optimisations que je peux faire ou garder une habitude lors du codage. Et aujourd'hui, j'ai eu des problèmes pour simplifier mon code.Problème simplifiant répétitif - multiple si les déclarations elif et plusieurs boucles dans une fonction en python
La fonction suivante est utilisée pour créer des points vides sur une carte de sudoku en fonction du niveau de difficulté choisi.
Voici mon code:
class normalSudoku(Board):
def __init__(self,difficulties):
super.__init__()
self.Create_Empty_Entries(difficulties)
def Create_Empty_Entries(self,difficulties):
numbers = list(range(0,9))
if difficulties == "Easy":
for x in range(25):
a,b = choice(numbers),choice(numbers)
if self.sudoku[a][b] != None:
self.sudoku[a][b] = None
self.holes += 1
self.holes += 1
return None
elif difficulties == "Medium":
for x in range(35):
a,b = choice(numbers),choice(numbers)
if self.sudoku[a][b] != None:
self.sudoku[a][b] = None
self.holes += 1
return None
elif difficulties == "Hard":
for x in range(45):
a,b = choice(numbers),choice(numbers)
if self.sudoku[a][b] != None:
self.sudoku[a][b] = None
self.holes += 1
return None
else:
for x in range(65):
a,b = choice(numbers),choice(numbers)
if self.sudoku[a][b] != None:
self.sudoku[a][b] = None
self.holes += 1
return None
Comme vous pouvez le voir, il est très répétitif. Toute idée de simplification ou un style de codage plus efficace sera apprécié.
De même, existe-t-il une meilleure façon d'initialiser une classe en python plutôt que d'appeler __init__()
en termes de performances et d'utilisation de la mémoire? Tout comme en C++, il y a une liste d'initialisation où elle est plus propre et plus rapide.
N'hésitez pas à signaler les erreurs que j'ai commises. Tout conseil sera grandement apprécié. Merci
C'est un point valide, je vais mettre à jour ma réponse pour faire exactement cela! – MattWBP
Existe-t-il une performance différente utilisant 'dict.get' ou est-ce juste plus propre? –
Pas sûr de plus rapide, bien que dans ce cas c'est moins de code. Bien que je comprenne que ce soit plus sûr - car il garantit de retourner une valeur pour cette clé dict même si elle n'existe pas (vous obtiendrez None par défaut). De cette façon, vous ne frappez pas une exception. – MattWBP