حلّل مسائل كلامية رياضية بسيطة وقيّمها، مع إرجاع الإجابة في صورة عدد صحيح.
المسائل التي لا تحتوي على أي عمليات يكون ناتجها ببساطة هو العدد المعطى.
What is 5?
ناتجها 5.
اجمع عددين معًا.
What is 5 plus 13?
ناتجها 18.
تعامل مع الأعداد الكبيرة والأعداد السالبة.
الآن نفّذ العمليات الثلاث الأخرى.
What is 7 minus 5?
2
What is 6 multiplied by 4?
24
What is 25 divided by 5?
5
تعامل مع مجموعة من العمليات بالترتيب.
بما أن هذه مسائل كلامية منطوقة، قيّم التعبير من اليسار إلى اليمين، متجاهلًا الترتيب المعتاد للعمليات.
What is 5 plus 13 plus 6?
24
What is 3 plus 2 multiplied by 3?
15 (أي ليس 9)
ينبغي أن يرفض المحلّل ما يلي:
أحيانًا يكون من الضروري رفع استثناء. وعندما تفعل ذلك، ينبغي أن تُضمّن دائمًا رسالة خطأ ذات معنى تشير إلى مصدر الخطأ. فذلك يجعل الكود أكثر وضوحًا ويساعد كثيرًا في تصحيح الأخطاء. وفي الحالات التي تعرف فيها أن مصدر الخطأ سيكون من نوع معيّن، يمكنك أن تختار رفع أحد أنواع الأخطاء المضمّنة، لكن ينبغي أن تُضمّن رسالة ذات معنى رغم ذلك.
يتطلب هذا التمرين تحديدًا أن تستخدم عبارة الرفع لـ«إطلاق» ValueError إذا كان السؤال المُمرَّر إلى answer() مشوّهًا أو غير صالح، أو يحتوي على عملية غير معروفة. لن تنجح الاختبارات إلا إذا استخدمت raise مع exception وأضفت معها رسالة.
لاحظ: الرسالة المطلوبة تختلف من حالة إلى أخرى، رغم أن نوع الخطأ نفسه هو الذي يُرفع.
افحص الاختبارات بعناية.
لرفع ValueError مع رسالة، اكتب الرسالة كوسيط لنوع exception:
# if the question contains an unknown operation.
raise ValueError("unknown operation")
# if the question is malformed or invalid.
raise ValueError("syntax error")
للتعامل مع خطأ مرفوع داخل كتلة كود معيّنة، يمكن استخدام try-except.
كتل try-except «تلتف» حول الكود الذي قد يسبب خطأً، وتوجّه كل الاستثناءات إلى خطأ واحد، أو عدة أخطاء، أو أجزاء أخرى من الكود للتعامل مع المشكلة:
while len(equation) > 1:
try:
# The questionable/error-prone code goes here,in an indented block
# It can contain statements, loops, if-else blocks, or other executable code.
x_value, operation, y_value, *rest = equation
...
...
except:
# Code for what to do when an error gets thrown in the code above.
# This could be one error, or more complicated logging, error checking and messaging.
raise ValueError("syntax error")
سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.