وجهة النظر

وجهة النظر

صعب

التعليمات

غيّر أصل شجرة عند عقدة مختارة.

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

يتمحور هذا التمرين حول إعادة توجيه شجرة لرؤية الأمور من وجهة نظر مختلفة. فعلى سبيل المثال، تُعرض شجرة العائلة عادةً من منظور السلف:

    +------0------+
    |      |      |
  +-1-+  +-2-+  +-3-+
  |   |  |   |  |   |
  4   5  6   7  8   9

لكن لا يوجد اتجاه متأصل في الشجرة. يمكن عرض المعلومات نفسها من منظور أي عقدة أخرى في الشجرة، بسحبها إلى الجذر وجرّ علاقاتها معها. لذا ستبدو الشجرة نفسها من منظور العقدة 6 هكذا:

        6
        |
  +-----2-----+
  |           |
  7     +-----0-----+
        |           |
      +-1-+       +-3-+
      |   |       |   |
      4   5       8   9

وهذا يتيح لنا وصف المسارات بين عقدتين ببساطة أكبر. فعلى سبيل المثال، يمكن ملاحظة أن المسار من 6 إلى 9 (الذي يصعد في الشجرة الأولى إلى الجذر ثم يهبط إلى عقدة ورقة مختلفة) يتبع المسار 6-2-0-3-9.

يتضمن هذا التمرين أخذ شجرة مُدخلة وإعادة توجيهها من وجهة نظر إحدى العُقد.

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

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

هنا تحديدًا، يُطلب منك استخدام عبارة raise لكي «ترمي» عدة ValueErrors إذا مُرِّر إلى صنف Tree() شجرة لا يمكن إعادة توجيهها، أو تعذّر العثور على مسار بين start node وend node. لن تنجح الاختبارات إلا إذا فعلت الأمرين معًا: raise لنوع exception المتوقع، وإدراج الرسالة المتوقعة معه.

يُرجى مراجعة الاختبارات ونتائجها المتوقعة بعناية.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء وجهة النظر؟

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