اعداد OCR

اعداد OCR

آسان

مقدمه

بهترین دوستتان Marta به‌تازگی شغل رؤیایی‌اش را به دست آورده است: کار با مجموعه‌های یک موزه‌ی تاریخ محلی. او از علاقه‌ی شما به برنامه‌نویسی باخبر است و درباره‌ی مشکلی در محل کارش برای نمایشگاهی پیش‌رو در موضوع تاریخ رایانه با شما درد دل می‌کند. دانشکده‌ی ریاضی یکی از دانشگاه‌های محلی چند جعبه خروجی چاپی تاریخی اهدا کرده بود، اما با توجه به وضعیت نامناسب این اسناد، تصمیم گرفته شده است که متن آن‌ها دیجیتالی شود. با این حال، چاپگر قدیمی دانشگاه در نحوه‌ی نمایش متن رفتارهای عجیبی داشت و دوستتان می‌تواند از کمک شما برای استخراج موفقیت‌آمیز داده‌ها بهره ببرد.

دستورالعمل‌ها

تشخیص نویسه نوری یا OCR نرم‌افزاری است که تصاویر متن را به متنی قابل خواندن برای ماشین تبدیل می‌کند. با توجه به شبکه‌ای از نویسه‌ها که چند رقم را نمایش می‌دهد، آن شبکه را به رشته‌ای از ارقام تبدیل کنید. اگر شبکه چند سطر سلول داشته باشد، سطرها باید در خروجی با "," از هم جدا شوند.

  • شبکه از یک یا چند خط سلول تشکیل شده است.
  • هر خط از شبکه از یک یا چند سلول تشکیل شده است.
  • هر سلول سه ستون عرض و چهار سطر ارتفاع دارد (۳×۴) و یک رقم را نمایش می‌دهد.
  • ارقام با خط عمودی ("|")، زیرخط ("_") و فاصله (" ") رسم می‌شوند.

حالت‌های خاص

  • اگر اندازه‌ی ورودی معتبر نباشد، برنامه‌تان باید نشان دهد که خطایی رخ داده است.
  • اگر اندازه‌ی ورودی درست باشد اما سلولی قابل تشخیص نباشد، برنامه‌تان باید برای آن نویسه "?" را خروجی بدهد.

مثال‌ها

ورودی زیر (بدون توضیحات) به "1234567890" تبدیل می‌شود.

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

ورودی زیر به "123,456,789" تبدیل می‌شود.

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

پیام‌های استثنا

گاهی لازم است استثنایی ایجاد کنید. در این صورت همیشه باید یک پیام خطای معنادار بگنجانید تا مشخص کنید منبع خطا چیست. این کار کد شما را خواناتر می‌کند و به دیباگ کردن بسیار کمک می‌کند. در موقعیت‌هایی که می‌دانید منبع خطا از یک نوع مشخص است، می‌توانید یکی از انواع خطای داخلی را ایجاد کنید، اما باز هم باید پیامی معنادار بگنجانید.

در این تمرین به‌طور خاص باید از دستور raise استفاده کنید تا هر وقت تابع convert() رشته‌ای را دریافت می‌کند که عدد OCR معتبری نیست، یک ValueError را «پرتاب» کنید. تست‌ها تنها در صورتی قبول می‌شوند که هم 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.