المسارات
/
Python
Python
/
التمارين
/
القمر الصناعي
القمر الصناعي

القمر الصناعي

متوسط

التعليمات

تخيّل أنك بحاجة إلى إرسال شجرة ثنائية إلى قمر صناعي يقترب من ألفا قنطورس، وأن النطاق الترددي المتاح لديك محدود. وبما أن الشجرة لا تحتوي على عناصر مكررة، فيمكن تمثيلها تمثيلًا فريدًا من خلال اجتيازها بالترتيب المسبق وبالترتيب الداخلي.

اكتب البرنامج الخاص بالقمر الصناعي لإعادة بناء الشجرة من عمليات الاجتياز هذه.

يقرأ الاجتياز بالترتيب المسبق قيمة العقدة الحالية قبل قراءة الشجرة الفرعية اليسرى بالترتيب المسبق (ومن هنا جاءت تسميته "المسبق"). بعد ذلك تُقرأ الشجرة الفرعية اليمنى بالترتيب المسبق.

أما الاجتياز بالترتيب الداخلي فيقرأ الشجرة الفرعية اليسرى بالترتيب الداخلي، ثم العقدة الحالية، وأخيرًا الشجرة الفرعية اليمنى بالترتيب الداخلي. أي بالترتيب من اليسار إلى اليمين.

على سبيل المثال، الاجتياز بالترتيب المسبق لهذه الشجرة هو [a, i, x, f, r]. والاجتياز بالترتيب الداخلي لهذه الشجرة هو [i, a, f, x, r]

  a
 / \
i   x
   / \
  f   r

ملاحظة: العنصر الأول في الاجتياز بالترتيب المسبق هو دائمًا الجذر.

رسائل الاستثناءات

أحيانًا تحتاج إلى رفع استثناء. وعندما تفعل ذلك، ينبغي أن تُضمّن دائمًا رسالة خطأ ذات معنى توضّح مصدر الخطأ. فهذا يجعل كودك أكثر قابلية للقراءة ويساعد كثيرًا في تصحيح الأخطاء. وفي الحالات التي تعرف فيها أن مصدر الخطأ سيكون من نوع معيّن، يمكنك اختيار رفع أحد أنواع الأخطاء المدمجة، لكن ينبغي أن تُضمّن معها رسالة ذات معنى.

يتطلب هذا التمرين تحديدًا أن تستخدم عبارة الرفع لـ«إطلاق» ValueError إذا كان الوسيطان preorder وinorder غير متطابقين من حيث الطول أو العناصر، أو إذا لم تكن العناصر فريدة. لن تنجح الاختبارات إلا إذا استخدمت raise مع exception وأدرجت معه رسالة.

لرفع ValueError مع رسالة، اكتب الرسالة كوسيط لنوع exception:

# if preorder and inorder are not the same length
raise ValueError("traversals must have the same length")

# if preorder and inorder do not share the same elements
raise ValueError("traversals must have the same elements")
    
# if element repeat (are not unique)    
raise ValueError("traversals must contain unique items")
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء القمر الصناعي؟

سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.