Python Challenge level 5
2016.12.22.
처음에 접속했을 때 산 사진과 ‘pronounce it’만 있어서 일단 소스 코드를 보았다. 주석 처리된 부분이 있길 레 주석 처리부터 없애보았다.
banner.p부분에 마우스를 올리니 주소가 뜬다. 이동해보자
이동을 하면 이런 식으로 계속 이상한 문자들이 써져있다.
나는 처음에 banner.p니까 p 언어라는 언어로 쓴 페이지니까 p 언어로 뭐 어떻게 하면 나오지 않을까 싶어서 p 언어를 검색해보았다. p 언어는 예전 명칭은 ‘data p’로 한국어로 프로그래밍을 할 수 있는 언어라고 한다. 신기해하며 이걸로 푸는 건 아니겠다 싶어 창을 닫고 계속 생각해보았다. 글자가 너무 많아서 딱 봐도 무슨 형태로 변환시켜서 그 크기를 줄이고 줄이다보면 답이 나올 거 같은데 어떻게 변환시켜야 할지 도통 감이 안 잡힌다. 그래서 그냥 구글에 검색해보았다.
peak hell의 발음이 pickle이랑 유사하니 pickle 모듈을 써야한단다.
우선 황당함 이전에 pickle을 모르므로 위키피디아에 검색해보았다.
In the computer programming language Python, pickle is the standard mechanism for object serialization.
pickle이 객체 직렬화를 하는 표준 체제라는 거 같은데 나는 또 직렬화가 뭔지 모르니 검색해보자.
객체의 직렬화는 객체의 내용을 바이트 단위로 변화하여 파일 또는 네트워크를 통해서 스트림( 송수신 )이 가능하게 하는 것이라고 한다. (자세한 내용은 http://lueseypid.tistory.com/42 참고)
아 생각해보니 문제 처음에 pronounce it이라고 적혀있던 게 생각난다. 그래서 왜 주석에 peak hell sounds familiar?라고 있었는지 이제야 알겠다.
pickle 모듈을 통해 banner.p에 있는 객체를 load하여 보자
이런 식으로 나오는데 전체 큰 대괄호[] 속에 소괄호() 쌍들이 있는데 이는 또 대괄호[]에 묶인다. 대괄호[]로 정의해 나열하는 것을 리스트라고 한다. 리스트는 같은 type이 나열되어있다. 소괄호()로 정의해 나열하는 것을 튜플이라고 하는데 튜플엔 다른 type이 나열되어 있다.
사실 내가 파이썬을 파이썬 챌린지하면서 공부하는 입장이라 리스트와 튜플에 대한 이해를 하고 넘어가기 위해 간단한 예시를 들어보았다.
만약 이렇게 되어있으면 전체 큰 리스트 하나에 리스트 3개가 있는데 각 리스트 안의 튜플의 개수는 다르다. 여기서 리스트 이름을 arr라고 하면 3의 정의는 arr[0][0][0]가 되는 것이다. 5의 정의는 arr[1][1][0]이 되는 것이고.
그리고 다시 실행 결과를 보았을 때 빈칸과 #이 있는 것으로 보아 빈칸과 #을 각 옆의 숫자만큼 출력하면 될 것 같은 생각이 들었다.
튜플을 보면 [0]에는 빈칸 또는 #이 있고 [1]에는 숫자가 있다. 따라서 숫자만큼 출력해주기 위해 *를 이용해 data라는 변수에 차곡 차곡 쌓고 한 리스트가 끝나면 한 줄 띄우고 다시 차곡 차곡 쌓고 출력해주도록 한다.
실행 결과 channel 모양으로 뜬다.
'PYTHON > python_challenge' 카테고리의 다른 글
Python Challenge level 7 (0) | 2016.12.23 |
---|---|
Python Challenge level 6 (0) | 2016.12.23 |
Python Challenge level 4 (0) | 2016.12.22 |
Python Challenge level 3 (0) | 2016.11.23 |
Python Challenge level 2 (0) | 2016.11.14 |