یک الگوریتم ساخت درخت را بازآرایی کنید.
برخی انجمنهای وب چیدمان درختی دارند، بنابراین پستها به شکل یک درخت نمایش داده میشوند. اما پستها معمولاً در یک پایگاه داده بهصورت مجموعهای مرتبنشده از رکوردها ذخیره میشوند. بنابراین هنگام نمایش پستها به کاربر، ساختار درخت باید از نو ساخته شود.
کار شما این است که تکهکدی را بازآرایی کنید که کار میکند اما کند و زشت است و منطق ساخت درخت را برای رکوردهای بهشدت انتزاعی پیادهسازی میکند. رکوردها فقط شامل یک شناسه و یک شناسهی والد هستند. شناسه همیشه بین ۰ (شامل) و طول فهرست رکوردها (غیرشامل) است. شناسهی والد همهی رکوردها از شناسهی خودشان کمتر است، بهجز رکورد ریشه که شناسهی والدش با شناسهی خودش برابر است.
یک نمونه درخت:
root (ID: 0, parent ID: 0)
|-- child1 (ID: 1, parent ID: 0)
| |-- grandchild1 (ID: 2, parent ID: 1)
| +-- grandchild2 (ID: 4, parent ID: 1)
+-- child2 (ID: 3, parent ID: 0)
| +-- grandchild3 (ID: 6, parent ID: 3)
+-- child3 (ID: 5, parent ID: 0)
گاهی لازم است استثنا ایجاد کنید. وقتی این کار را میکنید، همیشه باید پیام خطای معناداری را هم بگنجانید تا نشان دهید منبع خطا چیست. این کار کد شما را خواناتر میکند و به دیباگ کردن کمک زیادی میکند. در موقعیتهایی که میدانید منبع خطا نوع مشخصی خواهد بود، میتوانید یکی از انواع خطای داخلی را ایجاد کنید، اما همچنان باید پیام معناداری را هم بگنجانید.
این تمرین خاص از شما میخواهد که نحوه و محل استفاده از دستور raise را بازآرایی کنید تا برای ورودی نامعتبر درخت، یک ValueError «پرتاب» شود. تستها فقط زمانی قبول میشوند که کد هم exception مناسب را raise کند و هم پیام مناسبی همراه آن داشته باشد.