私はPythonの新機能です。繰り返しの簡素化の問題 - Pythonの関数で複数のifif文と複数のループがある場合
私はシンプルで簡潔で効率的なアルゴリズム設計とコーディングスタイルをしっかり信じています。私がPythonを学んでいるとき、私はPythonがその場で多くのことをするので、言語そのものがプログラマーにとって非常に親切であることに気付きました。これはうれしいことですが、私は自分ができる最適化について何かを深く学びたいと思っていました。そして今日、私は問題に遭遇して自分のコードを単純化しました。
以下の機能は、選択された難易度に基づいてスドーボード上に空のスポットを作成するために使用されます。
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
あなたはそれが非常に反復的である見ることができるように:
は、ここに私のコードです。それを簡素化するか、より効率的なコーディングスタイルを考えてください。
また、パフォーマンスとメモリ使用量に関して__init__()
を呼び出すのではなく、Pythonでクラスを初期化するより良い方法がありますか? C++のように、初期化リストがあり、より洗練されています。
私が作った間違いを指摘してください。アドバイスをいただければ幸いです。ありがとう
これは有効な点です。私はその答えを更新するつもりです! – MattWBP
'dict.get'を使ってパフォーマンスが違うの?それともちょっときれいですか? –
この場合はコードが少なくても、高速化は不明です。それが存在しない場合でも、そのdictキーの値を返すことが保証されているので、安全であると理解しています(デフォルトではNoneを取得します)。このようにして例外は発生しません。 – MattWBP