Page 25 -
P. 25

crosshatching
                      """


                      tiles = "hijklmnop"

                      all_valid_words = ()   올바른 단어들을 저장하기 위한 빈 튜플
                      start = 0   검색 중인 단어의 시작 위치 인덱스를 초기화한다
                      end = 0   검색중인 단어의 끝 위치 인덱스를 초기화한다
                      found_words = ()   타일로 만들 수 있는 단어들을 저장하기 위한 빈 튜플


                    이 프로그램에서 두 번째 코드 덩어리는 올바른 단어들이 들어 있는 큰 문자열에서 각 단어를 포
                    함하는 튜플을 만들어내는 부분이다. 19.1.1절의 의사 코드에서 말로 적었던 설명을 코드로 옮기

                    기만 하면 된다. 여기서는 올바른 언어가 들어가는 튜플에 어떻게 새 단어를 추가할지 고민해봐야
                    한다. 단어를 한 번에 하나씩 찾아서 튜플에 추가해야 하므로 두 튜플을 연결하는 연결 연산(+)을
                                                                                                     19
                    사용하되, 방금 찾은 단어 하나만 들어 있는 튜플을 지금까지 찾은 단어가 모두 들어 있는 튜플 뒤

                    에 붙이면 된다.
                    코드 19-2의 코드를 보자. start와 end는 처음에 0으로 초기화되어 큰 문자열의 첫 번째 문자를
                    가리킨다. 단어를 큰 문자열에서 읽어야 하므로 문자열의 각 문자를 가져오면서 루프를 돈다. 가                              진급 프로젝트: 스크래블:아트 단어 게임

                    져온 문자가 새줄 문자라면 한 단어의 끝에 도달한 것이다. 따라서 start와 end를 사용한 슬라이
                    스를 통해 단어를 저장한다. 그 후 start와 end를 모두 새줄 문자 다음 위치로 다시 설정한다. 바
                    로 다음 단어가 시작되는 위치다. 큰 문자열에서 루프 변수에 가져온 단어가 새줄 문자가 아니라

                    면 아직 단어가 끝나지 않았으므로 end 인덱스를 증가시킨다.

                     코드 19-2 스크래블:아트. 큰 문자열에서 올바른 단어 목록을 만드는 부분
                      for char in words:   모든 문자를 가져오면서 루프를 돈다
                          if char = = "\n":   문자가 새줄 문자인지 검사한다
                              all_valid_words = all_valid_words + (words[start:end],)   올바른 단어가 들어 있는 튜플
                                                                             뒤에 단어가 하나 들어 있는
                              start = end + 1   다음 단어의 시작 부분으로               튜플을 덧붙인다
                              end = end +1   start와 end를 옮긴다
                          else:
                              end = end + 1   end가 다음 글자를 가리키게 만든다



                    세 번째이자 마지막 코드 덩어리는 타일로 올바른 단어들을 만들 수 있는지 검사하는 부분이다.
                    두 번째 덩어리와 마찬가지로 세 번째 덩어리도 이전에 작성했던 의사 코드를 코드로 옮기면서 부
                    족한 부분을 채워 넣으면 된다. 이때 의사 코드에서 답하지 않았던 흥미로운 문제가 두 가지 있다.



                                                                                                  237





     모던 파이썬 입문(본문)5차_최종.indd   237                                                           2019-09-26   오후 9:33:42
   20   21   22   23   24   25   26   27