Dandy Now!
  • [Python] 점프 투 파이썬_종합문제_Q16_모스 부호 해독
    2021년 12월 13일 09시 54분 06초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    문제

    https://wikidocs.net/17114

     

    08장 종합문제

    파이썬은 웹, GUI, 네트워크, 딥러닝 등 상당히 많은 일을 할 수 있는 언어이다. 여러분이 지금까지 배운 내용을 충분히 숙지했다면 이제 이들을 향해 첫발을 내디딜 준비를 ...

    wikidocs.net

     

    점프 투 파이썬 Q16 문제의 지문은 다음과 같다.

    Q16 모스 부호 해독
    문자열 형식으로 입력받은 모스 부호(dot:. dash:-)를 해독하여 영어 문장으로 출력하는 프로그램을 작성하시오.
    ○ 글자와 글자 사이는 공백 1개, 단어와 단어 사이는 공백 2개로 구분한다.
    ○ 예를 들어 다음 모스 부호(.... . ... .-.. . . .--. ... . .- .-. .-.. -.--)는 "HE SLEEPS EARLY"로 해석해야 한다.

    작성 코드

    아래는 Q16 문제를 해결하기 위해 작성한 코드이다.

    # 딕셔너리 자료형 이용 
    dic = {
        '.-':'A','-...':'B','-.-.':'C','-..':'D','.':'E','..-.':'F',
        '--.':'G','....':'H','..':'I','.---':'J','-.-':'K','.-..':'L',
        '--':'M','-.':'N','---':'O','.--.':'P','--.-':'Q','.-.':'R',
        '...':'S','-':'T','..-':'U','...-':'V','.--':'W','-..-':'X',
        '-.--':'Y','--..':'Z'
    }
    
    # mos 함수 생성
    def mos(s):
        rst = '' # 결과 변수
        lst =  s.split(' ') # 문자열을 이용해 리스트 자료형으로 생성
        print(lst)
        for i in lst:
            if i == '': # 공백을 처리하기 위한 if문이 이 코드의 핵심이다!
                rst += ' '
            else: # else가 누락되면 KeyError: '' 발생함
                rst += dic[i]
        return rst
    
    ipt = '.... .  ... .-.. . . .--. ...  . .- .-. .-.. -.--'
    print(mos(ipt)) # mos 함수 호출

    문제와 해결

    mos 함수를 선언하면서

    가장먼저 문자열 '.... . ... .-.. . . .--. ... . .- .-. .-.. -.--'을 공백 한개를 기준으로 나누어 담는

    리스트 자료형을 생성하였다.

    코드를 실행하면 다음과 같은 리스트가 생성된다.

    ['....', '.', '', '...', '.-..', '.', '.', '.--.', '...', '', '.', '.-', '.-.', '.-..', '-.--']

     

    특이한 점은 생성된 리스트에 ''가 들어 있다.

    공백 하나로 나누어 담았기 때문에

    공백이 두개였던 경우에

    ''

    로 처리되어 담긴 것이다.

    기대했던

    ' '

    와 같이 공백이 있는 모양이 아니었다.

    "HE SLEEPS EARLY"로 출력 할때

    E S, S E에서와 같이 공백을 표현해야 하는데

    곤란해 진것이다.

    이 부분을 if조건문으로 해결했다.

    if조건문이 없이 for문을 돌리면

    KeyError: ''

    가 발생한다.

    따라서 조건문에서 반드시

    ''

    부분에 대한 처리를 해줘야 한다.

    728x90
    반응형
    댓글