حصل صديقك المقرّب مارتا مؤخرًا على وظيفة أحلامه للعمل مع مجموعات متحف محلي للتاريخ. ولمعرفته بشغفك بالبرمجة، يبوح لك بمشكلة تواجهه في العمل تتعلق بمعرض قادم عن تاريخ الحوسبة. كان قسم الرياضيات في إحدى الجامعات المحلية قد تبرّع بعدة صناديق من المطبوعات التاريخية، لكن نظرًا لسوء حالة المستندات، تقرر رقمنة النص. غير أن الطابعة القديمة للجامعة كانت لها بعض الغرائب في كيفية تمثيل النص، ويمكن لصديقك أن يستفيد من مساعدتك لاستخراج البيانات بنجاح.
التعرّف الضوئي على المحارف (OCR) هو برنامج يحوّل صور النصوص إلى نص يمكن قراءته آليًا.
إذا أُعطيت شبكة من المحارف تمثّل بعض الأرقام، فحوّل الشبكة إلى سلسلة نصية من الأرقام.
إذا كانت الشبكة تحتوي على عدة صفوف من الخلايا، فيجب فصل الصفوف في المخرجات بـ ",".
"|") والشرطات السفلية ("_") والمسافات (" ")."?" لذلك المحرف.المُدخل التالي (بدون التعليقات) يُحوَّل إلى "1234567890".
_ _ _ _ _ _ _ _ #
| _| _||_||_ |_ ||_||_|| | # Decimal numbers.
||_ _| | _||_| ||_| _||_| #
# The fourth line is always blank,
المُدخل التالي يُحوَّل إلى "123,456,789".
_ _
| _| _|
||_ _|
_ _
|_||_ |_
| _||_|
_ _ _
||_||_|
||_| _|
تحتاج أحيانًا إلى رفع استثناء. وعندما تفعل ذلك، عليك دائمًا أن تُضمّن رسالة خطأ ذات معنى تشير إلى مصدر الخطأ. فهذا يجعل الكود أوضح للقراءة ويساعد كثيرًا في تصحيح الأخطاء. وفي الحالات التي تعرف فيها أن مصدر الخطأ سيكون من نوع معيّن، يمكنك أن تختار رفع أحد أنواع الأخطاء المدمجة، لكن يجب أن تُضمّن معه رسالة ذات معنى رغم ذلك.
يطلب منك هذا التمرين تحديدًا أن تستخدم عبارة raise "لإطلاق" ValueError عندما تتلقى الدالة convert() سلسلة نصية ليست رقم OCR صالحًا. لن تنجح الاختبارات إلا إذا قمت بـraise الاستثناء exception وأدرجت معه رسالة.
لرفع 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")
سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.