저는 Python을 처음 접했습니다.반복적 인 문제를 단순화하는 데 어려움이 있습니다 - Python의 함수에서 elif 문과 다중 루프가 여러 개있는 경우
저는 간단하고 간결하며 효율적인 알고리즘 디자인과 코딩 스타일을 확고히 믿습니다. 파이썬을 배우면서 파이썬이 많은 일을하고 있다는 사실을 깨달았습니다. 그래서 언어 자체가 프로그래머들에게 매우 친숙합니다. 이것은 좋은 일이지만, 내가 할 수있는 최적화 나 코딩 할 습관을 깊게 배우고 싶었습니다. 그리고 오늘은 문제가 생겨서 코드를 단순화했습니다.
다음 기능은 선택한 난이도에 따라 스도쿠 보드에 빈 스폿을 만드는 데 사용됩니다.
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__()
을 호출하는 대신 파이썬에서 클래스를 초기화하는 더 좋은 방법이 있습니까? C++과 마찬가지로 초기화 목록이 더 깨끗하고 빠릅니다.
내가 실수 한 점을 지적하십시오. 모든 조언을 크게 주시면 감사하겠습니다. 고마워요
그건 유효한 지적입니다. – MattWBP
'dict.get'을 사용하여 성능이 다른가요 아니면 그냥 깨끗한가요? –
이 경우 코드가 적지 만 더 빠르지는 확실하지 않습니다. 그것이 안전하다는 것을 이해하지만, 그것이 존재하지 않더라도 그 dict 키에 대한 값을 반환하는 것을 보장하므로 (기본값으로 None을 얻을 것입니다). 이렇게하면 예외가 발생하지 않습니다. – MattWBP