ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 38.7 심사문제: 회문이 아니면 예외 발생시키기
    코딩도장 심사문제모음 2020. 11. 15. 17:42
    728x90

    표준 입력으로 문자열이 입력됩니다. 다음 소스 코드를 완성하여 입력된 문자열이 회문이면 문자열을 그대로 출력하고, 회문이 아니면 '회문이 아닙니다.'를 출력하도록 만드세요. palindrome 함수와 NotPalindromeError 예외를 작성해야 합니다.

    사용한코드

    1. class

    2. def

    3. if

    4. raise

    첫 접근 방법

    문제에서 주어졌던

    NotPalindromeError 예외를 만들어주고

    회문인지 아닌지를 판별해주는 함수를 만들어주면 문제를 해결 할 수 있다.

    풀이.1 

    2가지로 나누어 풀어보려고한다.

    첫 번째로는 예외를 만들때 pass가 아닌 속성을 정의해주는방법

    먼저, 예외를 만들어주기 위해 Exception 을 기반으로 하는 NotPalindromeError 이름의 예외를 만들어주자

    (기반 클래스의 __init__ 메서드를 호출해주면서 기반 클래스를 초기화(?)해준다)

    여기서 super()를 이용해 기반 클래스의 __init__를 호출해주고 에러메시지를 넣어주자

    여기서 넣어주는 에러 메시지는 함수바깥에서 예외 처리될 경우 e에 해당되어 출력된다.

    class NotPalindromeError(Exception):
        def __init__(self):
            super().__init__('회문이 아닙니다.')

    예외를 만들어 주고나서 회문을 판별하는 함수를 새로 정의해주자.

    개인적으로 회문을 판별하기 위해선 시퀸스 뒤집기로 회문을 판별하는게 가장 간단하다고 생각한다.

    word == word[::-1] (원래 문자열과 반대로 뒤집은 후 서로 비교)

    if  조건문을 이용해 뒤집었을때 같지 않다면 예외를 발생시켜준다.

    (이 문제에서는 함수 바깥에서 예외를 처리해주는 except가 있기에 함수 안에서 처리해주던지 안해주던지 상관없다)

    회문일 경우 그대로 회문을 출력해준다.

    (아래 코드에서 word를 self 인스턴스 자기자신으로 바꿔도 결과는 동일하다)

    def palindrome(word):    # NotPalindromeError 예외를 만들어주고 나서 함수를 생성
        if word != word[::-1]:
            raise NotPalindromeError # 예외 발생시켜줌
        print(word)
    class NotPalindromeError(Exception):
        def __init__(self):
            super().__init__('회문이 아닙니다.')
    
    def palindrome(word):    # NotPalindromeError 예외를 만들어주고 나서 함수를 생성
        if word != word[::-1]: # 예외 발생
            raise NotPalindromeError
        print(word)
    
    try:
        word = input()
        palindrome(word)
    except NotPalindromeError as e: # 함수 바깥에서 예외 처리
        print(e)

     

    풀이.2

    두 번째로 예외를 만들때 pass를 사용하여 작성해보도록 하자

    class NotPalindromeError(Exception):
        pass

    이처럼 예외를 만들어줄때 pass를 입력하였다면 예외를 발생시킬때 에러메시지를 추가로 넣어주면 된다.

    raise NotPalindromeError('회문이 아닙니다.')
    class NotPalindromeError(Exception):
        pass
    
    def palindrome(word):    # NotPalindromeError 예외를 만들어주고 나서 함수를 생성
        if word != word[::-1]:
            raise NotPalindromeError('회문이 아닙니다.')
        print(word)
    
    try:
        word = input()
        palindrome(word)
    except NotPalindromeError as e:
        print(e)

    ## word = self로 바꿔도 문제없이 통과

     

    ※ 실제 코딩 도장의 해법과 다를  수 있으며, 답은 여러가지가 존재합니다.

    코드 지적 정말 감사히 받겠습니다.

    728x90
Designed by Tistory.