ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 0x05.Python Challenge 5
    0x.Wargame/Python Challenge 2017. 6. 8. 14:49

    0x05.Python Challenge 5

     

     

     

    문제 주소 : http://www.pythonchallenge.com/pc/def/peak.html

     

     

     

    5번째 문제를 풀어보도록 하자.

     

     

    다짜고짜 발음해봐란다. peak hill -> pickle이 된다. (이건 책에서 본 함수라서 금방 알아차릴 수 있었다 ㅋ)

     

     

    먼저 pickle 함수에 대해 설명하자면 피클함수는 다음과 같이 사용할 수 있다.

     

    pickle.load(load_file)

    pickle.dump(save_file) 

     

    pickle 함수는 파이썬 객체를 파일로 쓸 수있고 다시 쉽게 읽을 수 있는 것으로 변환해주는데 사용되는데, 주로 게임 개발에서 플레이어의 진행 정보를 저장할 때 활용된다.

     

     

    소스코드에 명시되어 있는 banner.p라는 첨부파일의 내용물을 확인해보면 다음과 같이 pickle.dump를 통해 변환되어 저장되어 있다는 사실을 알 수 있다. 결과물을 다음과 같이 풀어보았다.

     

     

     

    dump로 변환되었기에 load를 이용해서 해독해보면 다음과 같이 나타난다. 위의 코드를 잘 살펴보면 pickle.loads과 pickle.load 메소드를 사용했다는 사실을 알 수 있는데, 두 메소드에는 차이점이 있다.

     

    pickle.loads : 바이너리 데이터를 읽을 경우에 사용

    pickle.load : 파일 데이터를 읽을 경우에 사용

     

    banner.p의 경우 바이너리 파일로 저장된 것이 아니기 때문에 pickle.loads 메소드를 사용하면 다음과 같이 에러가 발생하게 된다.

     

    여하튼, 해독한 부분을 보면 리스트안에 튜플형식으로 되어있는 것을 알 수 있다. 또한 튜플들이 대괄호( [ ] )를 통해 그룹화되어있다는 것도 확인할 수 있다. 이는 대괄호를 통해 한줄에 어떤 부호가 몇 번이 들어가는지를 나타내는 것 같다. 그래서 다음과 같이 소스코드를 작성하였고 결과값을 얻을 수 있었다.

     

     

    위에서 설명했듯이 바이너리 파일의 경우에는 pickle.loads를 사용해야 한다. urllib를 통해 바이너리 파일 형식으로 불러왔기에 loads를 사용하였다고 이해하면 된다. i는 대괄호를 x는 대괄호 안의 튜플의 값을 표현하는 역할을 한다. 결과값으로 다음과 같이 channel이 뜬 것을 확인할 수 있었다.

     

     

     

    '0x.Wargame > Python Challenge' 카테고리의 다른 글

    0x07.Python Challenge 7  (0) 2017.06.29
    0x06.Python Challenge 6  (0) 2017.06.26
    0x04.Python Challenge 4  (0) 2017.06.07
    0x03.Python Challenge 3  (0) 2017.06.01
    0x02.Python Challenge 2  (0) 2017.05.09

    댓글

Designed by Tistory.