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

رکورد شرکت‌کننده مسابقه در پایتون؛ نام و تعداد حل

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

✍️ پروژه را از شکل داده شروع می‌کنیم. هر شرکت‌کننده یک رکورد دیکشنری دارد: name نام، solved تعداد مسئله‌های حل‌شده و penalty جریمه زمانی است. اسم کلیدها بخشی از قرارداد است؛ score از بخش قبلی اینجا استفاده نمی‌شود. در این گام هنوز رتبه‌بندی نداریم و فقط باید مطمئن شویم داده مورد نیاز را درست می‌خوانیم.

مثلاً رکورد {'name':'مینا','solved':3,'penalty':90} یعنی مینا سه مسئله را حل کرده و جریمه‌اش نود است. اگر کنار آن رکورد آراد با صفر حل باشد، خلاصه ما همچنان هر دو را به ترتیب ورودی نگه می‌دارد. صفر بودن تعداد حل به معنی حذف شرکت‌کننده نیست.

تابع ناقص، فهرست خلاصه‌های [name,solved] را می‌سازد؛ فقط فیلدهای لازم را استخراج کن و به خروجی اضافه کن. رکورد اصلی را با pop یا حذف کلید تغییر نده، چون در مرحله بعد جریمه هم لازم می‌شود. خطای رایج، برگرداندن فقط شرکت‌کننده‌های دارای حل یا استفاده از نام کلیدهای تمرین قبلی است. این قدم کوچک، مرز بین آماده‌سازی داده و تصمیم رتبه‌بندی را روشن می‌کند و آزمون مستقل خودش را دارد.

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

فعالیت شما

تابع player_summaries(players) فهرست دیکشنری‌های دارای name رشته، solved عدد صحیح نامنفی و penalty عدد صحیح نامنفی می‌گیرد؛ خروجی فهرست [name,solved] برای تک‌تک رکوردها با ترتیب اصلی است. فعلاً مرتب نکن و هیچ رکوردی، حتی solved=0، را حذف نکن. خالی [] و تک‌عضوی یک خلاصه می‌دهد؛ [{'name':'مینا','solved':3,'penalty':90}] به [['مینا',3]] تبدیل شود. ورودی و رکوردها تغییر نکنند. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

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

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

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

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

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

def player_summaries(players):
    result = []
    for player in players:
        # TODO: append this player's name and solved count
        pass
    return result

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