[ Problem ] - http://huge:file@www.pythonchallenge.com/pc/return/disproportional.html
♧ 타이틀은 'call him', 'phone that evil' 이란 힌트와 함께 전화기 그림이 보인다. 즉, 악마에게 전화를 걸어야 하는데 그 악마가 누구인지 어떻게 호출해야 될지 모른다.
▷ 그림의 숫자'5'에는 링크가 걸려 있는데 클릭해 들어가 보면 XML형식의 코드가 보인다.
▷ 이는 XML-RPC Fault 형식과 유사한데 XML-RPC란, 인코딩 형식은 XML을 채택하고, HTTP를 통한 간단하고 이식성 높은 원격 프로시저 호출 방법을 제공하는 RPC 프로토콜의 일종이다.
▷ 파이썬 2.2부터 XML-RPC가 표준 모듈(xmlrpclib)로 포함되어 있으므로 따로 설치할 필요는 없다. ▷ 주요 함수는 다음과 같다.
▷ 위의 주요 함수를 통하여 해당 서버(phonebook)의 프로시저에 대한 정보를 출력해보자. #encoding=utf8 from pprint import pprint import xmlrpclib # ① 해당 XML-RPC를 지원하는 phonebook 서버에 접속. url = 'http://www.pythonchallenge.com/pc/phonebook.php' phonebook = xmlrpclib.Server(url) # ② 서버가 어떠한 API 제공하는지 리스트 형태로 출력. pprint (phonebook.system.listMethods()) # ③ 'phone'에 대한 도움말 정보 얻기. print phonebook.system.methodHelp("phone") # ④ 'phone'에 대한 인수 목록 알아내기. print phonebook.system.methodSignature('phone')
▷ 위의 마지막 methodSignature('phone')의 결과로 얻어진 [['string', 'string']] 에서 처음 'string'은 프로시저의 리턴형이고 나머지는 입력 인수의 형이다. ▷ 즉, phone은 특정 이름을 string형으로 받아 string형으로 리턴 해주는 프로시저다.
▷ 악마는 누구인가! 이제 악마에게 전화를 거는 방법을 알았으니 그 악마가 누구 인지만 알면 된다. Level12에서의 기억을 상기 시켜보면 evil4.jpg 에는 빈 화면이 보이는데 이것을 편집기로 보면 'Bert is evil! go back!' 라는 메시지가 출력 되었다. 즉, Bert가 evil이다.
▷ Bert에게 전화를 걸어 보자. (※ 위 소스코드 마지막 줄에 추가) # ⑤ Bert에게 전화 걸기. print phonebook.phone('Bert')
|
[ Solution ] - http://huge:file@www.pythonchallenge.com/pcc/return/italy.html
(※ 문제에 대한 다양한 해결법은 링크 참조.)
'워게임(WarGame) > PythonChallenge' 카테고리의 다른 글
[Python challenge Level15] - uzi(whom?) (2) | 2011.11.21 |
---|---|
[Python challenge Level14] - italy(walk around) (0) | 2011.11.21 |
[Python challenge Level12] – evil (dealing evil) (0) | 2011.06.29 |
[Python challenge Level11] - 5808 (odd-even) (0) | 2011.06.28 |
[Python challenge Level10] - bull (개미수열) (0) | 2011.06.27 |