문제 URL : http://www.pythonchallenge.com/pc/def/map.html

위 문제로 접속하면 아래와 같은 이미지가 출력된다.




이미지에 있는 노트를 보면 어떠한 문자가 어떠한 문자로 치환되는지 알 수 있다. 메모장으로 치환문자들을 써놓고 보면 일정한 규칙이 보이는데 해당 규칙에 따라 치환된 문자들을 만들어보면 아래와 같다.


해당 규칙을 토대로 코딩을 할 수 있긴 하겠지만 코드가 길어져 파이썬에는 문자 치환 함수가 없을까 하고 검색해봤지만 나오지 않아 고민하던 중 문제에 qrpgle.kyicrpylq() 이런 문구가 보여 규칙을 토대로 치환해 보기로 하였다.

치환한 결과는 아래와 같다.




파이썬 shell에서도 있는걸로 보아 이 문제에 핵심인거 같아 구글링 하여 찾아보니 이 함수가 문자열 치환 함수였다.

이 함수를 이용하여 아래와 같은 코드를 작성하여 치환문자를 다시 복호화 했다.



복호화하고 보니 문제에서는 string.maketrans()(함수 Ref : http://maj3sty.tistory.com/749)를 이용하여 url을 바꿔보라고 하였다.

URL전체를 바꾸면 접속자체가 안될 것이니 문제서버에서 바꿔도 될만한 html 파일 이름을 바꾸기로 하여 map글자를 다시 한번 바꿔보기로 하였다.

아래는 최종 소스코드와 결과물이다.




map -> ocr로 변경되어 다음 문제 url이 된다.

'[+] Information > [-] Python' 카테고리의 다른 글

level 3  (0) 2011.10.23
level 2  (0) 2011.10.23
level 1  (0) 2011.10.23
level 0  (0) 2011.10.23
열혈강의 파이썬 잘못된 소스부분.  (2) 2009.08.23

위 주소로 접속하면 아래와 같은 문제가 나온다.


딱 봐도 수학시간에 많이 본 제곱연산이다.

아래와 같이 해주고 이미지 아래에 있는 힌트처럼 html 주소를 바꿔주면 클리어 된다.


'[+] Information > [-] Python' 카테고리의 다른 글

level 2  (0) 2011.10.23
level 1  (0) 2011.10.23
level 0  (0) 2011.10.23
열혈강의 파이썬 잘못된 소스부분.  (2) 2009.08.23
두번째 연습문제.  (2) 2009.07.17
예제를 한번씩 쳐보고 있던 중에 잘못된 부분이 있어 이렇게 포스팅 합니다.


def print_menu():
    print '1. Phone Number Print'
    print '2. Phone Number Add'
    print '3. Phone Number del'
    print '4. Phone Number Search'
    print '5. Exit'
    print

def print_dic(numbers):
    print "Phone number : "
    for name in numbers:
        print "name: ",name,"\tNumber: ",numbers[name]
    print

def add_member(numbers):
    print "Phone Number Add"
    name = raw_input("name : ")
    phone = raw_input("Number : ")
    numbers[name] = phone

def remove_member(numbers):
    print "Phone Number del"
    name = raw_input("name : ")
    if name in numbers:
        del numbers[name]
    else:
        print name," No"

def lookup_member(numbers):
    print "Phone Number Search"
    name = raw_input("name : ")
    if name in numbers:
        print "Number : ",numbers[name]
    else:
        print name,"No Search"
 

#---------------------------------------------------------main

numbers = {}
menu_num = 0
print_menu()
while menu_num !=5:
    menu_num = raw_input("Number Input Plz (1-5): ")
    if menu_num == 1:
        print_dic(numbers)
    elif menu_num == 2:
        add_member(numbers)
    elif menu_num == 3:
        remove_member(numbers)
    elif menu_num == 4:
        lookup_member(numbers)
    elif menu_num == 5:
        print_menu


위 소스가 원본이구요.(몇가지 변수명은 제가 바꿨으나 코드 형태는 책과 똑같습니다.)

실행형태는 다음 이미지와 같습니다.


 

프로그램이 제대로 작동을 하지 않습니다.

메뉴를 선택하는 숫자를 입력하였음에도 불구하고 계속 입력받는 루틴만 반복이 됩니다.

문제는 if문 조건에 있습니다.

입력받는건 문자열 취급을 받는 숫자인데 숫자와 비교를 하여 if문이 실행을 하지 않았던 것 입니다.

또 5번을 누르면 종료를 해야하는데 종료는 하지 않고 메뉴를 출력해주는 이상한 코딩이 되어있습니다.

그래서 저는 아래와 같이 바꾸었습니다.



def print_menu():
    print '1. Phone Number Print'
    print '2. Phone Number Add'
    print '3. Phone Number del'
    print '4. Phone Number Search'
    print '5. Exit'
    print

def print_dic(numbers):
    print "Phone number : "
    for name in numbers:
        print "name: ",name,"\tNumber: ",numbers[name]
    print

def add_member(numbers):
    print "Phone Number Add"
    name = raw_input("name : ")
    phone = raw_input("Number : ")
    numbers[name] = phone

def remove_member(numbers):
    print "Phone Number del"
    name = raw_input("name : ")
    if name in numbers:
        del numbers[name]
    else:
        print name," No"

def lookup_member(numbers):
    print "Phone Number Search"
    name = raw_input("name : ")
    if name in numbers:
        print "Number : ",numbers[name]
    else:
        print name,"No Search"

 


#---------------------------------------------------------main


numbers = {}
menu_num = 0
print_menu()
while menu_num !=5:
    menu_num = raw_input("Number Input Plz (1-5): ")
    if menu_num == '1':
        print_dic(numbers)
    elif menu_num == '2':
        add_member(numbers)
    elif menu_num == '3':
        remove_member(numbers)
    elif menu_num == '4':
        lookup_member(numbers)
    elif menu_num == '5':
        break;


아래 이미지는 실행 결과 입니다.


이제야 프로그램이 목적대로 돌아가네요.

제가 쓰는 버전은 2.5.2 버전 입니다. 다른 버전에서는 어떻게 될지 잘 모르겠으나 적어도 제가 쓰는 2.5.2 버전에서는 이러한 현상이 나타났습니다.

'[+] Information > [-] Python' 카테고리의 다른 글

level 1  (0) 2011.10.23
level 0  (0) 2011.10.23
열혈강의 파이썬 잘못된 소스부분.  (2) 2009.08.23
두번째 연습문제.  (2) 2009.07.17
파이썬 연습문제.(while)  (0) 2009.07.16
  1. He 2011.04.16 21:28

    2.7을 안쓰셔서 소스가 다른겁니다

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2011.07.16 17:22 신고

      헉 그렇군요 ㅠㅠ

      뭐 저렇게 공부해도 나쁘지 않지 않을까요 ㅋ

1. spam and egg 문자열을 슬라이싱을 이용하여 spam egg로 변경하여라.

s = 'spam and egg'
>>> s = s[:5] + s[9:]

출력 결과:
'spam egg'


2. 인덱싱과 슬라이싱을 이용하여 s = 'spam and ham'을 'ham spam'으로 바꾸시오.

s = 'spam and ham'
>>> s = s[9:] + ' ' + s[:4]

출력 결과:
'ham spam'


3. 파이썬 경로명 s = '/usr/local/bin/python'에서 각각의 디렉토리 경로명을 분리하여 출력하시오.

s = '/usr/local/bin/python'
for a in s.split('/'):
 if a == '':
  print a,

출력 결과 :
usr local bin python


4.파이썬 경로명 s = '/usr/local/bin/python'에서 디렉토리 경로명과 파일명을 분리하여 출력하시오.

s = '/usr/local/bin/python'
a = s.split('/')
print '/'.join(a[:4]), a[-1]

출력 결과 :
/usr/local/bin python



5. 주어진 문자열에서 모든 대문자를 소문자로 변환하고, 문자 ',' 와 '.'를 없앤 후에 각 단어를 순서대로 출력하시오.

We propose to start by making it possible to teach programming in Python, an existing scripting language, and to focus on creating a new development evnironment and teaching materials for it.

>>> s = '''We propose to start by making it possible to teach programming in Python, an existing scripting language, and to focus on creating a new development evnironment and teaching materials for it.'''
>>> a = s.replace('.', '').replace(',', '').split()
>>> for x in a:
 print x.lower(),

 출력 결과 :
python we a an and and by creating development evnironment existing focus for in it it language making materials new on possible programming propose scripting start teach teaching to to to
(정확한 출력 값은 아닙니다. 제가 뒤죽박죽 해버려서 ㅡㅡ;;)


6. 위 문제에서 각 단어가 몇 번씩 나타났는가도 함께 출력해 보아라.

>>> for x in a:
 print x, x.count(x)

 
Python 1
We 1
a 1
an 1
and 1
and 1
by 1
creating 1
development 1
evnironment 1
existing 1
focus 1
for 1
in 1
it 1
it 1
language 1
making 1
materials 1
new 1
on 1
possible 1
programming 1
propose 1
scripting 1
start 1
teach 1
teaching 1
to 1
to 1
to 1

'[+] Information > [-] Python' 카테고리의 다른 글

level 0  (0) 2011.10.23
열혈강의 파이썬 잘못된 소스부분.  (2) 2009.08.23
두번째 연습문제.  (2) 2009.07.17
파이썬 연습문제.(while)  (0) 2009.07.16
파이썬 실행 환경 설정.  (0) 2009.07.15
  1. Favicon of http://thisbookgary.tumblr.com BlogIcon 박건 2017.02.02 13:37

    5번문제에서 python 과 we 가 맨 위에 올라가는 이유가 궁금합니다.

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2017.02.24 20:05 신고

      글에는 소스코드가 한줄 빠졌는데, 결과 값은 a.sort() 구문에 의해서 정리된 결과입니다.

      sort할 당시에는 대문자와 소문자가 섞여 있어 아스키코드 순서로 하다 보니 대문자인 Python과 We가 앞으로 오게 된 것 같습니다.

      제대로된 코드를 작성하려면 먼저 모든 단어를 소문자로 만든 후 sort() 함수를 사용해야 겠네요.

1~20 까지 홀수를 출력하라.

a = 1
while a <= 20:
    print a
    a = a + 2

결과 출력:
1
3
5
7
9
11
13
15
17
19




20~0까지의 짝수를 출력하라.

a = 20
while a <= 20:
    print a
    a = a - 2
    if a==0:
        break

결과 출력:
20
18
16
14
12
10
8
6
4
2


1~100까지의 홀수 합을 계산하여라.

a = 1
sum_a = 0
while a <= 100:
    sum_a += a
    a+=2
else:
    print sum_a

결과 출력:
2500

'[+] Information > [-] Python' 카테고리의 다른 글

열혈강의 파이썬 잘못된 소스부분.  (2) 2009.08.23
두번째 연습문제.  (2) 2009.07.17
파이썬 연습문제.(while)  (0) 2009.07.16
파이썬 실행 환경 설정.  (0) 2009.07.15
파이썬 설치하기.  (0) 2009.07.15

+ Recent posts