سلیب که از تنهایی و خانهنشینی حوصلهاش سر رفته تصمیم گرفته که دوستانش را دعوت کند تا با آنها اسمفامیل بازی کند.
بعد از رسیدن دوستان سلیب آنها بازی را شروع کردند، اما بعد از تمام شدن دست اول در امتیازدهی دچار مشکل شدهاند. هیچکس کلمات دیگری را قبول نداشت به همین خاطر نمرهی هر کلمه نامشخص بود.
سلیب و دوستانش برنامهنویس هستند و فقط به برنامهها اعتماد دارند. به همین خاطر از شما میخواهند برایشان برنامهای بنویسید تا با دریافت فایل تمامی کلمات قابل قبول طبق قوانین ذکر شده، بتواند به او و دوستانش نمرهای صحیح بدهد.
فایل کامل کلمات
دوستان سلیب برای این که در امتیازدهی به مشکل نخورند یک فایل CSV آماده کردند که شامل همه کلمات درست است.
این فایل با نام esm_famil_data.csv
به فرمت CSV در اختیار شما قرار دارد که میتوانید از این لینک آن را دانلود کنید.
نمونه محتوای فایلCSV:
esm,famil,keshvar,rang,ashia,ghaza
اب گوشت,استکان,ابی,المان,اسدی,اوا
اش,ایینه,اجری,البانی,ارمانی,ارزو
برنج خورشت,اره,ارغوانی,انگولا,اکبری,اتنا
باقالی پلو,اره برقی,ارکیده,اتریش,اعظمی,ارش
به پلو,اب پاش,البالویی,امریکا,امینی,امنه
باقلوا,بیل,بژ,ایتالیا,ازادی,ارمین
پیتزا,بمب,بنفش,ارژانتین,بابایی,ایدا
...
پیشنهاد میکنیم قبل از شروع به پیادهسازی یک بار این فایل را باز کنید و محتویات آن را ببینید (اگر با باز کردن این فایل مشکل داشتید میتوانید از ابزار گوگلشیت استفاده کنید).
شما باید سه تابع با نام های ready_up
و add_participant
و calculate_all
را برای سلیب پیادهسازی کنید.
شرح کار کلی شما به این صورت است که ابتدا محتویات فایل تمامی کلمات قابل قبول را میخوانید و ذخیره میکنید، سپس پاسخهای بازیکنان را به بازی اضافه میکنید. پس از آن شروع به امتیازدهی میکنید.
تابع ready_up
ready_up
این تابع باید محتویات درون فایل CSV را خوانده و به طور دلخواه شما ذخیره کند. فایل CSV با نام esm_famil_data.csv
در کنار فایل پایتون شما قرار دارد.
تابع add_participant
add_participant
این تابع باید یک بازیکن را به بازی اضافه کند. ورودی این تابع به این صورت است:
add_participant(participant = 'salib', answers = {'esm': 'بردیا', 'famil': 'بابایی', 'keshvar': 'باربادوس', 'rang': 'بنفش', 'ashia': 'بمب', 'ghaza': 'باقالیپلو'})
- شما نیاز دارید جوابهای تک تک بازیکنان را نیز به نحوی که هر پاسخ مختص یک نفر باشد ذخیره کنید.
تابع calculate_all
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}
توضیحات بازی:
- ممکن است پاسخ های درست به شکل نگارشی دیگری در بازی وجود داشته باشند. برای مثال: در شرکتکننده
salib
برای فیلدghaza
پاسخباقالیپلو
معادلباقالی پلو
ایست که در فایلesm_famil_data.csv
وجود دارد و در شرکتکنندهkianoush
برای فیلدghaza
پاسخبه پلو
معادلبه پلو
ایست که در فایلesm_famil_data.csv
وجود دارد. - ممکن است پاسخ خالی به صورت تعدادی کاراکتر اسپیس به شما ارائه شود. برای مثال: در شرکتکننده
sajjad
برای فیلدashia
پاسخ
معادل پاسخ خالیست.
نکات
- میتوانید فایل اولیه این سوال را از این لینک دریافت کنید.
- تضمین میشود که ورودی تابع شما شامل
آ
نمیباشد و تمامی الفها به صورتا
میباشند. یعنی اگر شرکت کنندهای برای $esm$آیدا
نوشته باشد، به تابع شماایدا
ورودی داده میشود. - تضمین میشود تمامی پاسخها با یک حرف شروع میشوند یعنی اگر بازی با حرف
س
شروع میشود پاسخهای تمامی شرکتکنندهها باس
شروع میشود.
نحوه ارسال
فایل کامل شده source.py
را ارسال کنید؛ همچنین برای استفاده از کتابخانههای مختلف میتوانید همراه فایل ارسالی، فایلی به نام python_requirements.txt
در ZIP
خود بگذارید که در آن نام کتابخانههای مورد نیاز و شماره نسخهی آنها
به فرمت زیر در آن موجود باشد: (اگر شماره نسخه را ننویسید آخرین نسخهی آن
کتابخانه نصب میشود)
firstlib==1.2.3
secondlib==4.5.6
...
در نهایت یک فایل ZIP حاوی دو فایل خواسته شده را آپلود کنید.
ارسال پاسخ برای این سؤال