✍️ گاهی تساوی معیار اول باید با یک معیار واقعی دیگر شکسته شود. این بار امتیاز بیشتر بهتر است و بین امتیازهای برابر، زمان کمتر زودتر میآید. یک تاپل کلید مثل (-score,time) همین ترتیب را بیان میکند: اول جزء اول مقایسه میشود و فقط در تساوی، جزء دوم وارد تصمیم میشود.
مثلاً P با امتیاز نه و زمان سی، Q با امتیاز ده و زمان هفتاد، و R با امتیاز نه و زمان بیست داریم. نتیجه Q، R، P است. زمان بهتر R باعث عبور آن از Q نمیشود، چون امتیاز معیار اصلی است. اگر هر دو معیار برابر باشند، ترتیب ورود را نگه میداریم؛ اسم را معیار سوم نمیکنیم.
تابع مستقل خودت را با ورودی رکوردها بنویس. مرتبسازی نزولی کل تاپل با reverse=True راه مناسبی برای جهتهای متفاوت نیست، چون زمان را هم نزولی میکند. منفی کردن فقط امتیاز، جهت معیار اول را عوض میکند و زمان صعودی میماند. خطای رایج، جمع کردن امتیاز و زمان در یک عدد ساختگی است؛ وزنها ممکن است اولویت اصلی را بشکنند. این الگو پایه پروژه رتبهبندی مسابقه در بخش بعد است.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع order_attempts(records) فهرست دیکشنری با name رشته، score صحیح و time صحیح نامنفی میگیرد؛ فهرست نامها را با score نزولی، سپس time صعودی بده. تساوی هر دو معیار ترتیب ورودی را حفظ کند. خالی [] و تکعضوی همان نام؛ امتیاز منفی مجاز. برای A با (9,30)، B با (10,70)، C با (9,20)، خروجی ['B','C','A'] است. هیچ ورودی را تغییر نده. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.