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