Ich bin sehr neu in Python.Problem zu vereinfachen sich wiederholende - mehrere wenn elif-Anweisungen und mehrere Schleifen in einer Funktion in Python
Ich bin ein überzeugter Anhänger des einfachen, prägnanten und effizienten algorithmischen Designs sowie des Kodierungsstils. Während ich Python lerne, merke ich, dass Python eine Menge Dinge hinter der Szene macht, so dass die Sprache selbst für Programmierer sehr freundlich ist. Das ist schön, aber ich wollte genau darüber lernen, welche Optimierungen ich beim Codieren machen oder beibehalten kann. Und heute geriet ich in Schwierigkeiten, meinen Code zu vereinfachen.
Die folgende Funktion wird verwendet, um leere Punkte auf einem Sudoku-Board basierend auf dem gewählten Schwierigkeitsgrad zu erstellen.
Hier ist mein 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
Wie Sie es ist sehr repetitiv sehen. Jede Idee zur Vereinfachung oder ein effizienterer Codierungsstil wird geschätzt.
Gibt es auch eine bessere Möglichkeit, eine Klasse in Python zu initialisieren, anstatt __init__()
in Bezug auf Leistung und Speichernutzung aufzurufen? Genau wie in C++ gibt es eine Initialisierungsliste, wo es sauberer und schneller ist.
Bitte zögern Sie nicht, auf die Fehler, die ich gemacht habe, hinzuweisen. Jeder Rat wird sehr geschätzt. Danke
Das ist ein gültiger Punkt, ich werde meine Antwort aktualisieren, um genau das zu tun! – MattWBP
Gibt es eine andere Leistung mit 'dict.get' oder es ist einfach sauberer? –
Nicht sicher über schneller, obwohl in diesem Fall weniger Code ist. Obwohl ich verstehe, dass es sicherer ist - da es garantiert, einen Wert für diesen Diktatschlüssel zurückzugeben, auch wenn er nicht existiert (Sie erhalten None als Standard). Auf diese Weise treffen Sie keine Ausnahme. – MattWBP