حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش الگوریتم و حل مسئله با پایتون؛ تمرین عملی

مرتب‌سازی دو معیاره پایتون؛ امتیاز نزولی و زمان صعودی

مرتب‌سازی سفارشی پایتون؛ key و ترتیب پایدار · 0٪

✍️ گاهی تساوی معیار اول باید با یک معیار واقعی دیگر شکسته شود. این بار امتیاز بیشتر بهتر است و بین امتیازهای برابر، زمان کمتر زودتر می‌آید. یک تاپل کلید مثل (-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 فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

def order_attempts(records):
    # TODO: build a tuple key with a separate direction for each criterion
    pass

# این تابع آماده فقط برای ارزیابی است؛ آن را تغییر نده.
def course_check(*args):
    from copy import deepcopy
    before = deepcopy(args)
    result = order_attempts(*args)
    if args != before:
        raise ValueError('ورودی نباید تغییر کند.')
    return result