.لینک‌های مفید برای شرکت در مسابقه:

می‌توانید سوال‌های خود را در رابطه با سوالات و دیگر بخش‌های پایتون از قسمت "سوال بپرسید" مطرح کنید.

توجه کنید که نسخه پایتون استفاده در سوالات ۳.۷ است.

بازی اسم‌فامیل


سلیب که از تنهایی و خانه‌نشینی حوصله‌اش سر رفته تصمیم گرفته که دوستانش را دعوت کند تا با آن‌ها اسم‌فامیل بازی کند.

بعد از رسیدن دوستان سلیب آن‌ها بازی را شروع کردند، اما بعد از تمام شدن دست اول در امتیاز‌دهی دچار مشکل شده‌اند. هیچ‌کس کلمات دیگری را قبول نداشت به همین خاطر نمره‌ی هر کلمه نامشخص بود.

سلیب و دوستانش برنامه‌نویس هستند و فقط به برنامه‌ها اعتماد دارند. به همین خاطر از شما می‌خواهند برایشان برنامه‌ای بنویسید تا با دریافت فایل تمامی کلمات قابل قبول طبق قوانین ذکر شده، بتواند به او و دوستانش نمره‌ای صحیح بدهد.

فایل کامل کلمات🔗

دوستان سلیب برای این که در امتیازدهی به مشکل نخورند یک فایل CSV آماده کردند که شامل همه کلمات درست است.

این فایل با نام esm_famil_data.csv به فرمت CSV در اختیار شما قرار دارد که می‌توانید از این لینک آن را دانلود کنید.

نمونه محتوای فایلCSV:

esm,famil,keshvar,rang,ashia,ghaza
اب گوشت,استکان,ابی,المان,اسدی,اوا
اش,ایینه,اجری,البانی,ارمانی,ارزو
برنج خورشت,اره,ارغوانی,انگولا,اکبری,اتنا
باقالی پلو,اره برقی,ارکیده,اتریش,اعظمی,ارش
به پلو,اب پاش,البالویی,امریکا,امینی,امنه
باقلوا,بیل,بژ,ایتالیا,ازادی,ارمین
پیتزا,بمب,بنفش,ارژانتین,بابایی,ایدا
...
Plain text

پیشنهاد می‌کنیم قبل از شروع به پیاده‌سازی یک بار این فایل را باز کنید و محتویات آن را ببینید (اگر با باز کردن این فایل مشکل داشتید می‌توانید از ابزار گوگل‌شیت استفاده کنید).

شما باید سه تابع با نام های ready_up و add_participant و calculate_all را برای سلیب پیاده‌سازی کنید.

شرح کار کلی شما به این صورت است که ابتدا محتویات فایل تمامی کلمات قابل قبول را می‌خوانید و ذخیره می‌کنید، سپس پاسخ‌های بازیکنان را به بازی اضافه می‌کنید. پس از آن شروع به امتیاز‌دهی می‌کنید.

تابع ready_up

این تابع باید محتویات درون فایل CSV را خوانده و به طور دل‌خواه شما ذخیره کند. فایل CSV با نام ‍esm_famil_data.csv در کنار فایل پایتون شما قرار دارد.

تابع add_participant

این تابع باید یک بازیکن را به بازی اضافه کند. ورودی این تابع به این صورت است:

add_participant(participant = 'salib', answers = {'esm': 'بردیا', 'famil': 'بابایی', 'keshvar': 'باربادوس', 'rang': 'بنفش', 'ashia': 'بمب', 'ghaza': 'باقالیپلو'})
Python
  • شما نیاز دارید جواب‌های تک‌ تک بازیکنان را نیز به نحوی که هر پاسخ مختص یک نفر باشد ذخیره کنید.
تابع calculate_all

این تابع در زمانی فراخوانی می‌شود که تمامی بازیکنان پاسخ‌هایشان را به برنامه شما داده‌اند.

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

نمره‌دهی در انتهای سوال به طور کامل توضیح داده شده است.

قوانین امتیاز دهی بازی:🔗

در هر فیلد ( برای مثال ghaza ) دو حالت امتیازدهی زیر را داریم:

۱- اگر برای این فیلد همه‌ی بازیکنان جوابی را ارائه کرده باشند:

  • اگر بازیکن پاسخی ارائه کرده باشد که در لیست کلمات قابل قبول نیست و یا پاسخی ارائه نکرده باشد، ۰ امتیاز می‌گیرد.
  • اگر بازیکن پاسخی تکراری داده باشد ( مثلا برای غذا سه نفر پیتزا نوشته باشند )، ۵ امتیاز می‌گیرد.
  • اگر بازیکن پاسخ متمایزی داده باشد ۱۰ امتیاز می‌گیرد.

۲- اگر بازیکنی وجود داشته باشد که برای این فیلد پاسخی ارائه نکرده باشد:

  • اگر بازیکن پاسخی ارائه کرده باشد که در لیست کلمات قابل قبول نیست و یا پاسخی ارائه نکرده باشد، ۰ امتیاز می‌گیرد.
  • اگر بازیکن پاسخی تکراری داده باشد ( مثلا برای غذا سه نفر پیتزا نوشته باشند )، ۱۰ امتیاز می‌گیرد.
  • اگر بازیکن پاسخ متمایزی داده باشد ۱۵ امتیاز می‌گیرد.
نمونه بازی
>> ready_up()
>> add_participant(participant = 'salib', answers = {'esm': 'بردیا', 'famil': 'بابایی', 'keshvar': 'باربادوس', 'rang': 'بنفش', 'ashia': 'بمب', 'ghaza': 'باقالیپلو'})
>> add_participant(participant = 'kianoush', answers = {'esm': 'بهرام', 'famil': 'بهرامی', 'keshvar': 'برزیل', 'rang': 'بلوطی', 'ashia': 'بیل', 'ghaza': 'به   پلو'})
>> add_participant(participant = 'sajjad', answers = {'esm': 'بابک', 'famil': 'بهشتی', 'keshvar': 'باهاما', 'rang': 'بژ', 'ashia': '        ', 'ghaza': 'برنج خورشت'})
>> add_participant(participant = 'farhad', answers = {'esm': 'بهرام', 'famil': 'براتی', 'keshvar': 'بببببب', 'rang': 'بژ', 'ashia': 'بیل', 'ghaza': 'باقلوا'})
>> calculate_all()
> {'salib': 65, 'kianoush': 55, 'sajjad': 45, 'farhad': 40}
Python

توضیحات بازی:🔗

  • ممکن است پاسخ های درست به شکل نگارشی دیگری در بازی وجود داشته باشند. برای مثال: در شرکت‌کننده salib برای فیلد ghaza پاسخ باقالیپلو معادل باقالی پلو ایست که در فایل esm_famil_data.csv وجود دارد و در شرکت‌کننده kianoush برای فیلد ghaza پاسخ به پلو معادل به پلو ایست که در فایل esm_famil_data.csv وجود دارد.
  • ممکن است پاسخ خالی به صورت تعدادی کاراکتر اسپیس به شما ارائه شود. برای مثال: در شرکت‌کننده sajjad برای فیلد ashia پاسخ ‌‌‌‌‌‌‌‌ ‌‌‌‌‌‌‌ ‌‌‌‌‌‌‌ ‌‌‌‌‌‌‌ ‌‌‌‌‌‌‌ معادل پاسخ خالیست.
نکات
  • تضمین میشود که ورودی تابع شما شامل آ نمی‌باشد و تمامی الف‌ها به صورت ا می‌باشند. یعنی اگر شرکت‌ کننده‌ای برای esmesm آیدا نوشته باشد، به تابع شما ایدا ورودی داده میشود.
  • تضمین میشود تمامی پاسخ‌ها با یک حرف شروع می‌شوند یعنی اگر بازی با حرف س شروع می‌شود پاسخ‌های تمامی شرکت‌کننده‌ها با س شروع می‌شود.
  • می‌توانید فایل اولیه‌ی خام را از این لینک دانلود کنید.

آن‌چه باید آپلود کنید🔗

فایل کامل شده source.py را ارسال کنید؛ همچنین برای استفاده از کتابخانه‌های مختلف می‌توانید همراه فایل ارسالی، فایلی به نام python_requirements.txt در ZIP خود بگذارید که در آن نام کتاب‌خانه‌های مورد نیاز و شماره نسخه‌ی آن‌ها به فرمت زیر در آن موجود باشد: (اگر شماره نسخه را ننویسید آخرین نسخه‌ی آن کتابخانه نصب می‌شود)

firstlib==1.2.3
secondlib==4.5.6
...
Plain text

در نهایت یک فایل ZIP حاوی دو فایل خواسته شده را آپلود کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.