문제를 발견하지 못하고 루프를 끝까지 돈다면 해당 단어는 테스트를 통과한 것이다. 루프가 올바르게 끝났다는 것을 확인하고 싶다면 ‘flossy’ 같은 예를 사용해보자. 이 단어의 길이는 6이고, 마지막 루프가 실행되었을 때 i는 4, 즉 끝에서 두 번째 문자를 가리키는 인덱스가 된다. 마지막 반복에서는 끝에서 두 번째 문자와 마지막 문자를 비교하게 되고, 이것이 우리가 원하는 결과다.
다음은 두 인덱스를 사용하는 버전의 is_palindrome이다(연습문제 6-3 참조). 인덱스 하나는 처음부터 시작해서 하나씩 증가하고, 다른 하나는 끝에서 시작해서 하나씩 감소한다.
def is_palindrome(word):
i = 0
j = len(word)-1
while i<j:
if word[i] != word[j]:
return False
i = i+1
j = j-1
return True
또는 이전에 해결된 문제로 개선해서 작성할 수도 있다.
def is_palindrome(word):
return is_reverse(word, word)
is_reverse는 그림 8-2의 것을 사용했다.