연습문제 8-5
카이사르 암호(Caesar cipher)는 약한 암호화 형식으로 각 문자를 고정된 숫자만큼 위치를 “회전”하는 암호화다. 문자를 회전한다는 것은 알파벳 순서로 이동한다는 뜻이고, 필요하다면 처음으로 돌아가는 것도 포함한다. 즉, ‘A’를 3만큼 회전한다면 ‘D’가 되고, ‘Z’를 1만큼 회전한다면 ‘A’가 된다.
단어를 회전하려면 각 문자를 같은 크기로 회전해야 한다. 예를 들어 “cheer”를 7만큼 회전하면 “jolly”이고, “melon”을 -10만큼 회전하면 “cubed”가 된다. 영화 <2001 스페이스 오디세이>에서 디스커버리호의 주 컴퓨터로 이름은 HAL이고 1만큼 회전하면 IBM이 된다.
문자열과 정수를 인자로 받고, 원본 문자열에서 문자들을 정해진 크기만큼 회전한 새 문자열을 반환하는 rotate_word 함수를 작성하라.
문자를 숫자 코드로 변환해주는 ord 내장 함수와 숫자 코드를 문자로 변환해주는 chr 내장 함수를 사용할 수 있다. 알파벳 문자는 알파벳 순서로 정렬되어 있으므로 예를 들어서
>>> ord('c') - ord('a')
2
가 된다.
‘c’는 알파벳에서 두 칸 떨어진 문자이기 때문이다. 그러나 주의할 점이 있다. 대문자의 숫자 코드는 소문자의 숫자 코드와 다르다.
인터넷에서 자칫 불쾌할 수 있는 농담을 ROT13으로 인코딩하곤 했다.*** ROT13은 카이사르 암호로 알파벳 글자를 13자리 회전한 것이다. 쉽게 불쾌감을 느끼지 않는 편이라면 ROT13으로 인코딩된 농담을 찾아서 디코딩해보자.
해법: http://thinkpython2.com/code/rotate.py
*** 역주 온라인 게시판에서 퀴즈의 정답이나 스포일러를 가리기 위한 용도로 ROT13을 사용한다.