더북(TheBook)

연습문제 8-5

카이사르 암호(Caesar cipher)는 약한 암호화 형식으로 각 문자를 고정된 숫자만큼 위치를 회전하는 암호화다. 문자를 회전한다는 것은 알파벳 순서로 이동한다는 뜻이고, 필요하다면 처음으로 돌아가는 것도 포함한다. 즉, A3만큼 회전한다면 D가 되고, Z1만큼 회전한다면 A가 된다.

단어를 회전하려면 각 문자를 같은 크기로 회전해야 한다. 예를 들어 cheer7만큼 회전하면 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을 사용한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.