حامد و حمید برادر هستند.
از آنجایی که حمید، مُزْدَوَجْ است؛ عاشق اعداد زوج و از آنجایی که حامد مُنْفَرِد است؛ عاشق اعداد فرد است.
حال به این دو برادر، لیستی از اعداد صحیح داده میشود و از آنجایی که هر کدام از آنها به یک نوع از اعداد زوج یا فرد علاقهمند است؛ تصمیم میگیرند که حمید، اعداد زوج و حامد نیز اعداد فرد را برای خود جدا کنند.
از آنجایی که این دو برادر درگیر کارهای بنیادین دیگری هستند، از شما میخواهند تا این کار را برای آنها انجام دهید.
حال تابع separator
را بهگونهای تکمیل کنید که با گرفتن لیستی از اعداد صحیح، تاپلی (tuple) از دو لیست به همان ترتیبی که در لیست ورودی آمدهاند را بازگرداند که لیست اول شامل اعداد زوج و لیست دوم شامل اعداد فرد باشد.
separator
موجود در فایل separator.py
را تکمیل و سپس این فایل را ارسال کنید.در این سؤال از شما میخواهیم که کد زیر را در یک خط پیادهسازی کنید.
طول کدی که شما ارسال میکنید باید دقیقا یک خط باشد و در آن نمیتوانید از ;
یا تابع exec
استفاده کنید. حال ما از شما که خودتان را پایتون کار قهاری میدانید میخواهیم تا این سوال را حل کنید.
ابتدا ورودی که یک رشته است را دریافت کرده و یک لیست ایجاد میکنیم.
سپس روی رشتهی دریافتی پیمایش میزنیم و در هر مرحله اگر نتیجه که حاصل تفریق ۹۷ از کد ascii حرف موردنظر است، بر ۲ بخشپذیر بود، حرف مورد نظر را به لیست اضافه میکنیم؛ در غیر اینصورت، آن حرف را به حرف بزرگ انگلیسی تبدیل کرده و سپس به لیست اضافه میکنیم.
پس از آن، اعضای لیست را به طور نزولی مرتب میکنیم و در نهایت اعضای لیست را در قالب یک رشته چاپ میکنیم.
در تنها خط ورودی، یک رشته آمده است.
در تنها خط خروجی، حروف مورد نظر از رشتهی ورودی را که دارای شرایط گفته شده بودند را به ترتیب نزولی چاپ کنید. توجه کنید که بین هر دو حرف، باید یک فاصله وجود داشته باشد.
source.py
را تکمیل و سپس این فایل را ارسال کنید.در این تمرین باید کلاسی به نام Chain
طراحی کنید به طوری که رفتارهای زیر را داشته باشد:
وقتی یک یا چند عدد (چه صحیح چه اعشاری) به صورت زنجیروار به عنوان پارامتر به کلاس ارسال میشوند، خروجی باید یک عدد حاصل جمع اعداد ورودی باشد. همچنین خود اشیا باید با مقدار خروجی برابر باشند.
وقتی یک یا چند رشته به صورت زنجیروار به عنوان پارامتر به کلاس ارسال میشوند، خروجی باید یک رشته حاصل الحاق رشتههای ورودی با یک کاراکتر فاصله (بهعنوان جدا کننده) باشد. همچنین خود اشیا باید با مقدار خروجی برابر باشند.
در دو حالت زیر باید یک Exception با پیغام invalid operation
پرتاب شود:
حال از شما خواسته شده تا کلاس Chain
را تکمیل کنید.
Chain
موجود در فایل chain.py
را تکمیل و سپس این فایل را ارسال کنید.Chain
، کلاسها و تابعهای کمکی دیگری نیز در فایل chain.py
پیادهسازی کنید.جَلال انسانی وطندوست و میهنپرست است.
او که از کار کردن با تقویم میلادی و تبدیل دائم آن به تقویم شمسی خسته شده بود، از شما برای رفع این مشکل درخواست کمک کرده است. از آنجایی که شما نیز انسانی وطندوست و میهنپرست هستید، با کمال میل به کمک او میشتابید و به جَلال کمک میکنید تا با تقویم جَلالی کار کند.
در این پروژه شما باید قابلیت اضافهکردن تاریخ فارسی به مدل جنگو را با استفاده از کتابخانهی django_jalali
پیادهسازی کنید.
پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
CustomUser
🔗اپلیکیشن Users
فقط شامل یک مدل به نام CustomUser
است که این مدل شامل فیلدهای زیر میباشد:
username
: این فیلد از نوع CharField
و حداکثر طول آن ۲۵۶ میباشد.full_name
: این فیلد از نوع CharField
و حداکثر طول آن ۲۵۶ میباشد.gender
: این فیلد از نوع CharField
میباشد. ویژگی gender
باید از بین جنسیتهای Male
و Female
انتخاب شود و در داخل پایگاه داده به جای Male
حرف M
ذخیره و به جای کلمهی Female
حرف F
ذخیره شود.national_code
: این فیلد از نوع CharField
و حداکثر طول آن ۱۰ میباشد.birthday_date
: این فیلد از نوع تاریخ (date
) شمسی میباشد.ceremony_datetime
: این فیلد از نوع تاریخ و ساعت (datetime
) شمسی میباشد.country
: این فیلد از نوع CharField
است و مقدار آن، برای همهی شئها برابر رشتهی Iran
است.تابع get_first_and_last_name
: این تابع، first_name
و last_name
کاربر را از روی فیلد full_name
بدست آورده و در قابل یک دیکشنری بازمیگرداند. تضمین میشود که فیلد full_name
فقط شامل یک فاصله (آن هم بین first_name
و last_name
) میباشد.
دیکشنری بازگرداندهشده از این تابع، باید بهصورت زیر باشد:
برای مثال، برای کاربری با full_name='Saeid Zamani'
، خروجی تابع بهصورت زیر خواهدبود:
تابع get_age
: این تابع، سن کاربر را از روی فیلد birthday_date
محاسبه کرده و بازمیگرداند. دقت کنید که این تابع باید جزء صحیح سن را بازگرداند. مثلا اگر شخصی ۵ سال و ۳ ماه سن داشت، باید عدد ۵ را بازگرداند یا اگر شخصی ۱۰ سال و ۱۱ ماه داشت باید عدد ۱۰ را بازگرداند.
is_birthday
: این تابع مشخص میکند که آیا امروز، روز تولد کاربر مورد نظر هست یا خیر. در صورتی که امروز، روز تولد کاربر بود، مقدار True
و در غیر اینصورت، مقدار False
را بازمیگرداند.CustomUserForm
🔗تمامی فیلدهای مدل CustomUser
باید داخل کلاس CustomUserForm
در فایل forms.py
وجود داشته باشند.
اعتبارسنجیها:
national_code
باید دقیقا شامل ۱۰ کاراکتر باشد.full_name
باید حتماً شامل first_name
و last_name
باشد و هر دوی این مقادیر باید عنوان باشند. عنوان بودن یعنی با یک حرف بزرگ انگلیسی شروع شده و بقیهی حروف هر کلمه کوچک باشند.مدل CustomUser
موجود در models.py
باید در پنل ادمین ثبت شده و قابل مشاهده باشد.
CustomUserAdmin
🔗CustomUser
ها، مقادیر زیر نمایش داده شود (ترتیب مهم نیست):username
first_name
last_name
gender
national_code
birthday_date
توجه: فیلدهای first_name
و last_name
از روی فیلد full_name
ایجاد میشوند.
قابلیت جستجو بر اساس username
و full_name
وجود داشته باشد.
لیست CustomUser
ها براساس ceremony_datetime
، به صورت صعودی مرتب شده باشد.
Users/models.py
، Users/forms.py
و Users/admin.py
را دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد.testsample.py
با روش تست کردن مدلها، فرمها و ادمینها آشنا شوید.یک فایل ZIP حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.
فرهاد که از این اوضاع نابسامان زندگی خسته شده است، تصمیم به مهاجرت میگیرد؛ ولی از آنجایی که به مقدار کافی، پول برای مهاجرت ندارد، تصمیم گرفت این مهاجرت را روی دادههای پروژهی خود پیادهسازی کند و آنها را از شر این زندگی نجات دهد.
ولی از آنجایی که به افسردگی ناشی از عدم مهاجرت مبتلا شده، به کمک شما برای انجام این کار نیاز دارد.
پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
اپلیکیشن blog
فقط شامل یک مدل به نام Article
است که این مدل شامل فیلدهای زیر میباشد:
author
: نام کاربری نویسندهی مقالهtitle
: عنوان مقالهcategory
: عنوان دستهبندی مقالهbody
: متن مقالهcreated
: زمان ایجاد مقاله (این فیلد به طور خودکار در زمان ایجاد مقاله جدید مقداردهی میشود.)فیلد author
باید به جای نام کاربری نویسنده به شئ User متناظر آن نویسنده اشاره کند (تضمین میشود مقدار فیلد برابر نام کاربری کاربر معتبر و موجود در پایگاه داده است.). همچنین در صورت حذف یک کاربر باید تمام مقالات نوشتهشده توسط آن کاربر حذف شود.
فیلد category
باید به شئ متناظر از مدل Category اشاره کند و در صورتی که آن شئ حذف شد باید برابر null قرار گیرد.
برای این کار باید مدل Category را پیادهسازی کنید. این مدل باید شامل فیلدهای زیر باشد:
title
: عنوان دستهبندی (از نوع CharField و حداکثر طول ۵۰) status
: فعال بودن دسته بندی (از نوع BooleanField و مقدار پیشفرض True) دقت کنید مقالات فعلی ممکن است دستهبندیهای یکسانی داشته باشند. در نتیجه باید به شئ یکسانی از مدل Category اشاره کنند. همچنین فیلد category
مقالات فعلی موجود در پایگاه داده بعد از اعمال مایگریشن باید برابر شئ از مدل Category شود که فیلد title
آن برابر مقدار فعلی فیلد category
باشد (برای درک بهتر این دو جمله به عکس زیر دقت کنید.).
updated
که از نوع DateTimeField است و بعد از هر بار تغییر شئ (فراخوانی تابع save) برابر زمان بروزرسانی میشود و برای مقالات فعلی برابر فیلد created
است.published
که از نوع DateTimeField است و به صورت پیشفرض برابر زمان حال (timezone.now
) است و برای مقالات فعلی برابر فیلد created
است.status
که از نوع CharField است و میتواند برابر دو مقدار p
و d
باشد و به صورت پیشفرض برابر d
است و حتما باید مقدار داشته باشد. (p
به معنای منتشر شده یا publish
و d
به معنای پیشنویس یا draft
) و برای مقالات فعلی برابر p
است.blog/models.py
و blog/migrations
را دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد.blog/migrations/0001_initial.py
تغییری ایجاد کنید.testsample.py
با روش تست کردن مدلها و مایگریشنها آشنا شوید.یک فایل ZIP حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.
سلیب که تلاشهای فراوانی برای رفتن به تیم فنی کوئرا کرده بود، در نهایت با مخالفت شدید مصطفی روبهرو شد.
او که از دار دنیا فقط دوستی با مازیار را داشت؛ به او متوسل شد تا به عضویت تیم مالی درآید ولی مازیار که در کار، آدم جدیای است؛ به او ۱۰ تسک و مهلت ۱ ساعته (مشخصه نمیخواد استخدامش کنه!) داد تا در صورتی که این تسکها را با موفقیت انجام داد، رزومه او را بررسی کند.
حال سلیب که هیچگونه استعدادی در این کار ندارد، دست به دامان شما شده است تا در این فرصت کم، با استفاده از ۱۰ کوئری، پاسخ تسکها را برای او بفرستید و او را در کسب شغل جدید همراهی کنید.
پروژه اولیه را از این لینک دانلود کنید. ساختار این پروژه به شرح زیر است:
در فایل models.py
هشت مدل به شرح زیر وجود دارد.
Department
(بخشهای مختلف شرکت) name
: نام بخشphone
: شماره تلفن بخشEmployee
(کارمند) account
: اکانت کارمند که اطلاعات کاربری او را نگه میدارد.department
: بخشی که کارمند در آن کار میکند.phone
: شماره تلفن کارمندProject
(پروژه) title
: عنوان پروژهdepartment
: بخش مربوطه پروژهemployees
: کارمندان حاضر در پروژهestimated_end_time
: زمان تخمینزده شده اتمام پروژهend_time
: زمان اتمام پروژهEmployeeProjectRelation
(ذخیره اطلاعات اضافی برای حضور کارمندان در پروژههای مختلف) employee
: کارمند مربوطهproject
: پروژه مربوطهhours
: ساعتهای کاری در پروژهrole
: نقش کارمند در پروژهAttendance
(حضور و غیاب) employee
: کارمند مربوطهdate
: تاریخin_time
: زمان ورود به شرکتout_time
: زمان خروج از شرکتlate_cause
: دلیل تأخیر (در صورت تاخیر)Salary
(حقوق) employee
: کارمند مربوطهbase
: حقوق پایهtax
: مالیات (درصد)insurance
: بیمه (درصد)overtime
: اضافه کار (ساعت)Payment
(پرداخت) amount
: مقدار پرداختشدهaccount_number
: شماره حساب مقصدpayment_type
: نوع پرداختdescription
: توضیحات پرداختdate
: تاریخ پرداختPayslip
(فیش حقوقی) base
: پایه حقوقtax
: مالیات (تومان)insurance
: بیمه (تومان)overtime
: اضافه کار (تومان)salary
: حقوق مربوطهpayment
: پرداخت مربوطهحال از شما میخواهیم پرس و جو (query) های زیر را روی مدلهای بالا بنویسید.
حتما قبل شروع نوشتن کد، تذکرات انتهای سوال را بخوانید!
dict
به صورت زیر برگردانید.hours=x
ساعت روی پروژههایشان اضافه کار کردهاند. x
ساعت اضافه کاری داشتهاند را در قالب یک dict
به صورت زیر برگردانید.dict
به صورت زیر برگردانید.id=x
روی پروژههایش کار کردهاست. id=x
روی پروژههایش کار کردهاست را در قالب یک dict
به صورت زیر برگردانید.total_hours
برابر None
باشد.x
باشد. total_hours
برگردانید.total
برگردانید.x
داده می شود.dict
به صورت زیر برگردانید.امتیاز | بخش |
---|---|
۲۰ | query_1 |
۲۰ | query_2 |
۳۵ | query_3 |
۳۵ | query_4 |
۳۵ | query_5 |
۴۵ | query_6 |
۴۵ | query_7 |
۴۵ | query_8 |
۶۰ | query_9 |
۶۰ | query_10 |
در صورتی که علاقمندید که خودتان به صورت دستی کوئریهای خود را امتحان کنید و از درستی آنها اطمینان حاصل کنید، یا اینکه به بررسی بیشتر از این تمرین بپردازید، برای راحتی بیشتر شما، فایلهای مایگریشنها ساخته شدهاند و شما کافیست جهت ایجاد پایگاهداده، یک بار دستور migrate
را اجرا کنید.
علاوهبر این، یک سری دادهی از پیش آماده شده، فراهم شده که بعد از اجرای دستور migrate
، میتوانید آنها را وارد پایگاهدادهی پروژهی خود کنید. به این منظور، دستور زیر را اجرا کنید. میتوانید از این دادهها به جهت تست کردن کوئریهای خود استفاده کنید.
۱. ایجاد پایگاهداده
۲. وارد کردن دادههای از پیش آماده شده (fixture)
در صورتی که علاقمند به تست نیستید، نیازی به ایجاد پایگاهداده و وارد کردن دادههای آزمایشی نیست، و تنها کافیست که در فایل queries.py
کوئریهای خود را بنویسید و از کوئرا جهت امتحان کردن درستی کوئریهایتان استفاده کنید.
queries.py
وجود دارد که برای هر سوال یک تابع در نظر گرفته شده است. شما کدهای خود را باید در این فایل بنویسید و QuerySet مربوطه را بازگردانید.query_0
در پاسخ به پرس و جویِ «لیست همه ی کارمندان» کامل شده است که شما نیز باید مشابه همین تابع، بقیه توابع را تکمیل کنید.در سوالاتی که در صورت سوال، مقداری به صورت متغیر ذکر شده است؛ متغیر مورد نظر در آرگومانهای ورودی تابع در نظر گرفته شده است. شما نباید آرگومانهای ورودی تابع را تغییر دهید.
در تمام سوالات به جز سوالاتی که خروجی نمونه برای آنها مشخص شده است، همانطور که ذکر شد، خروجی شما یک شئ از نوع QuerySet با اِلِمانهایی از جنس گفتهشده در اول سوال باید باشد. یعنی در واقع خود query را return کنید.
شما تنها مجوز ایجاد تغییرات در فایل Finance/queries.py
را دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد.
فراموش نکنید که میتوانید با مطالعهی testsample.py
با روش تست کردن کوئریها آشنا شوید.
یک فایل ZIP حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.