✍️ گاهی تساوی خودش معنی دارد: دو شرکتکننده امتیاز یکسان دارند و میخواهیم ترتیب ثبتشان حفظ شود. پایتون این رفتار را در مرتبسازی پایدار فراهم میکند؛ کافی است فقط همان کلید خواستهشده را بدهیم. افزودن نام به کلید، یک معیار تازه ایجاد میکند و دیگر تساوی امتیاز به معنی حفظ ترتیب ثبت نخواهد بود.
مثلاً رکوردهای Ziba با هشت، Amir با هشت و Nima با پنج را در نظر بگیر. ترتیب نزولی امتیاز باید Ziba، Amir، Nima باشد. اینکه Amir از نظر الفبا زودتر است، در این قرارداد نقشی ندارد. کد اولیه نام را هم وارد کلید کرده و دو عضو همامتیاز را جابهجا میکند.
تابع را اصلاح کن و فقط فهرست نامها را برگردون. sorted روی رکوردها نسخه تازه میسازد، بنابراین نیاز نیست فهرست ورودی را تغییر بدهیم. رکوردها کلیدهای name و score دارند؛ مقدار امتیاز صحیح است و نام رشته. خطای رایج دیگر، مرتب کردن صعودی و بعد برعکس کردن فهرست نتیجه است؛ این کار ترتیب تساویها را هم برعکس میکند. جهت نزولی را در خود مرتبسازی یا با کلید منفی اعمال کن.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع score_names(records) فهرست دیکشنریهای دارای name رشته و score عدد صحیح را میگیرد؛ نامها را بر اساس score نزولی برگرداند. امتیاز مساوی باید ترتیب ورودی را حفظ کند؛ نام معیار دوم نیست. خالی []، تکعضوی همان نام؛ امتیاز صفر و منفی هم مجاز است. برای Ziba:8 سپس Amir:8 خروجی همین ترتیب است. فهرست و رکوردهای ورودی تغییر نکنند. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.