OCR 숫자

OCR 숫자

쉬움

소개

절친한 친구 Marta는 최근 지역 역사 박물관의 소장품을 다루는 꿈같은 일자리를 구했어요. 프로그래밍에 관심이 많다는 걸 아는 Marta는, 컴퓨터 역사 전시회를 준비하다 직장에서 생긴 문제를 털어놓아요. 지역 대학의 수학과에서 역사적인 출력물이 담긴 상자 여러 개를 기증했지만, 문서 상태가 좋지 않아 텍스트를 디지털화하기로 결정했대요. 그런데 대학의 오래된 프린터는 텍스트를 표현하는 방식에 몇 가지 특이한 점이 있어서, 데이터를 성공적으로 추출하려면 친구에게 도움이 필요해요.

지침

광학 문자 인식(OCR)은 텍스트 이미지를 기계가 읽을 수 있는 텍스트로 변환하는 소프트웨어예요. 숫자를 나타내는 문자 격자가 주어지면, 격자를 숫자 문자열로 변환해요. 격자에 셀 줄이 여러 개 있으면, 출력에서는 각 줄을 ","로 구분해요.

  • 격자는 한 줄 이상의 셀로 이루어져요.
  • 격자의 각 줄은 하나 이상의 셀로 이루어져요.
  • 각 셀은 너비가 세 칸, 높이가 네 칸(3x4)이며 숫자 하나를 나타내요.
  • 숫자는 파이프("|"), 밑줄("_"), 공백(" ")을 사용해 그려요.

엣지 케이스

  • 입력 크기가 올바르지 않으면, 프로그램은 오류가 있음을 알려줘야 해요.
  • 입력 크기는 올바르지만 알아볼 수 없는 셀이 있으면, 프로그램은 그 문자에 대해 "?"를 출력해야 해요.

예시

다음 입력(주석 제외)은 "1234567890"으로 변환돼요.

      _  _     _  _  _  _  _  _  #
    | _| _||_||_ |_   ||_||_|| | # Decimal numbers.
    ||_  _|  | _||_|  ||_| _||_| #
                                 # The fourth line is always blank,

다음 입력은 "123,456,789"로 변환돼요.

    _  _ 
  | _| _|
  ||_  _|
         
    _  _ 
|_||_ |_ 
  | _||_|
         
 _  _  _ 
  ||_||_|
  ||_| _|
         

예외 메시지

때로는 예외를 발생시키기 위해 필요한 경우가 있어요. 이렇게 할 때는 오류의 원인이 무엇인지 나타내는 의미 있는 오류 메시지를 항상 포함해야 해요. 이렇게 하면 코드가 더 읽기 쉬워지고 디버깅에 큰 도움이 돼요. 오류 원인이 특정 유형이라는 것을 알고 있는 상황에서는 내장 오류 유형 중 하나를 발생시키도록 선택할 수 있지만, 그래도 의미 있는 메시지를 포함해야 해요.

이 연습 문제에서는 convert() 함수가 유효한 OCR 숫자가 아닌 문자열을 받을 때 ValueError를 "던지기" 위해 raise 문을 사용해야 해요. 테스트는 exception을 raise하고 메시지를 함께 포함해야만 통과해요.

메시지와 함께 ValueError를 발생시키려면, 메시지를 exception 유형에 인자로 작성해요:

# when the rows aren't multiples of 4
raise ValueError("Number of input lines is not a multiple of four")

# when the columns aren't multiples of 3
raise ValueError("Number of input columns is not a multiple of three")
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

OCR 숫자 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.