✍️ حالا قانون دوم را اضافه میکنیم: بین کسانی که تعداد حل یکسان دارند، جریمه کمتر بهتر است. معنی این قانون «اول جریمه» نیست؛ فقط تساوی تعداد حل را میشکند. بنابراین کلید باید اول تعداد حل با جهت نزولی و سپس جریمه با جهت صعودی را داشته باشد.
مثلاً آوا با پنج حل و جریمه صد از بهرام با چهار حل و جریمه ده جلوتر است. بین بهرام و سحر که هر دو چهار حل دارند، اگر جریمه سحر پنج باشد، سحر زودتر قرار میگیرد. پس نتیجه آوا، سحر، بهرام خواهد بود. یک آزمون خوب باید هم تفاوت تعداد حل و هم تساوی آن را داشته باشد.
کد اولیه هر دو جزء تاپل را منفی کرده و عملاً جریمه بزرگتر را بهتر میداند. جهت معیار دوم را اصلاح کن. اگر هر دو فیلد برابر باشند، ترتیب ورودی حفظ میشود؛ نام را وارد کلید نکن. خطای رایج، استفاده از reverse=True برای تمام تاپل یا جابهجا کردن ترتیب دو فیلد است. این تمرین خروجی نامها را میخواهد و داده ورودی باید برای نمایش یا آزمون دوباره دستنخورده بماند.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع rank_by_penalty(players) رکوردهای name رشته و solved/penalty صحیح نامنفی میگیرد؛ نامها با solved نزولی و فقط در تساوی با penalty صعودی مرتب شوند. تساوی هر دو معیار ترتیب ورودی را حفظ کند. خالی []، تکعضوی همان نام، صفرها معتبر. برای A:(5,100)، B:(4,10)، C:(4,5) خروجی ['A','C','B'] است. ورودی و رکوردها تغییر نکنند. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.