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

پروژه نهایی الگوریتم پایتون؛ ساخت تابع rank_players

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

حالا قرارداد کامل جدول مسابقه را در یک تابع مستقل جمع می‌کنیم. داده از بیرون آماده است؛ مسئولیت تابع، خواندن رکوردها، تعیین ترتیب و تحویل نام‌هاست. قانون اول تعداد حل بیشتر، قانون دوم جریمه کمتر و قانون سوم حفظ ترتیب ورود در تساوی کامل است. نام افراد معیار رتبه‌بندی نیست و نباید برای شکستن تساوی استفاده شود.

مثلاً به‌ترتیب ورود داریم: رها با سه حل و جریمه چهل، علی با چهار حل و جریمه نود، و سارا با سه حل و جریمه بیست. جدول نهایی علی، سارا، رها است. اگر نفر چهارم با همان آمار سارا اضافه شود، بعد از سارا می‌آید چون دیرتر وارد شده است. اصل فهرست و دیکشنری‌ها باید برای نمایش ترتیب ثبت باقی بمانند.

در این گام تابع‌های قبلی حاضر نیستند؛ تمام کد لازم را همین‌جا بنویس. خروجی همه نام‌ها را می‌خواهیم، نه فقط چند نفر اول؛ برای نمایش سه نفر اول می‌توان بعداً از rank_players(players)[:3] استفاده کرد. خطای رایج، تغییر ورودی با sort، افزودن نام به کلید یا نزولی کردن جریمه است. پیش از ثبت پاسخ، خالی، تک‌عضوی، همه‌برابر و یک نمونه با هر دو معیار متفاوت را بررسی کن. ✍️ تابع کوچک است، ولی قرارداد دقیقش کیفیت راه‌حل را تعیین می‌کند.

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

فعالیت شما

تابع مستقل rank_players(players) بنویس. players فهرست دیکشنری‌های دارای name رشته و solved و penalty عدد صحیح نامنفی است؛ نام‌ها ممکن است فارسی یا تکراری باشند و همه رکوردها باید در خروجی بمانند. خروجی فقط فهرست نام‌هاست: solved نزولی، سپس penalty صعودی؛ اگر هر دو برابرند، ترتیب اولیه همان رکوردها حفظ شود و نام معیار سوم نباشد. خالی []، تک‌عضوی همان نام، همه‌برابر همان ترتیب ورود و solved/penalty صفر معتبرند. فهرست و خود دیکشنری‌های ورودی را تغییر نده. برای رها:(3,40)، علی:(4,90)، سارا:(3,20)، خروجی ['علی','سارا','رها'] است. همه نام‌ها را برگردان؛ نمایش برترین‌ها می‌تواند با برش نتیجه انجام شود. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

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

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

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

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

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

def rank_players(players):
    # TODO: return every name using the complete contest ranking contract
    pass

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