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

انتخاب برترین‌های مسابقه با پایتون؛ تساوی پایدار

پروژه رتبه‌بندی مسابقه با پایتون؛ جدول نتیجه بدون تغییر ورودی · 0٪

✍️ نمایش چند نفر اول باید از جدول رتبه‌بندی کامل مشتق شود، نه از چند انتخاب مستقل که تساوی‌ها را متفاوت حل می‌کنند. ابتدا همه رکوردها را با دو قانون مرتب می‌کنیم، بعد به تعداد خواسته‌شده از ابتدای نتیجه برمی‌داریم. اینجا limit تعداد نتیجه است؛ با رتبه صفرمبنا یا شاخص آخر اشتباه نشود.

مثلاً اگر جدول نهایی نام‌های ['مینا','آراد','سارا'] باشد، limit دو باید فقط دو نام اول را بدهد. اگر مینا و آراد در هر دو معیار برابرند، همان ترتیب ورودشان حفظ می‌شود؛ انتخاب برترین‌ها نباید اسمشان را الفبایی کند. limit بزرگ‌تر از تعداد افراد هم به معنی گرفتن همه است.

کد ناقص را طوری کامل کن که هر فراخوانی به تنهایی کار کند؛ تابع‌های قبلی به صورت خودکار در محیط حاضر نیستند. در limit صفر یا منفی خروجی خالی بده؛ برش منفی در پایتون معنی دیگری دارد و خودش این قرارداد را اجرا نمی‌کند. خطای رایج، برش زدن ورودی قبل از مرتب‌سازی است؛ ممکن است فرد برتر اصلاً بیرون آن تکه باشد. اول رتبه‌بندی کامل را بساز و سپس خروجی محدودشده را برگردون.

تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

فعالیت شما

تابع top_players(players,limit) رکوردهای name رشته و solved/penalty صحیح نامنفی و limit صحیح می‌گیرد. با solved نزولی، penalty صعودی و تساوی کامل با ترتیب ورودی، نام حداکثر limit نفر اول را بده. limit<=0 برابر [] و limit بیشتر از طول یعنی همه؛ خالی [] و تک‌عضوی متناسب با limit. برای جدول نام‌های ['مینا','آراد','سارا']، limit=2 دو نام اول است. هیچ ورودی را تغییر نده و مرتب‌سازی را در همین تابع انجام بده. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

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

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

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

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

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

def top_players(players, limit):
    if limit <= 0:
        return []
    ordered = sorted(players, key=lambda p: (-p['solved'], p['penalty']))
    # TODO: take at most limit records, then extract their names
    return []

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