حامد و حمید برادر هستند.
از آنجایی که حمید، مُزْدَوَجْ است؛ عاشق اعداد زوج و از آنجایی که حامد مُنْفَرِد است؛ عاشق اعداد فرد است.
حال به این دو برادر، لیستی از اعداد صحیح داده میشود و از آنجایی که هر کدام از آنها به یک نوع از اعداد زوج یا فرد علاقهمند است؛ تصمیم میگیرند که حمید، اعداد زوج و حامد نیز اعداد فرد را برای خود جدا کنند.
از آنجایی که این دو برادر درگیر کارهای بنیادین دیگری هستند، از شما میخواهند تا این کار را برای آنها انجام دهید.
حال تابع `separator` را بهگونهای تکمیل کنید که با گرفتن لیستی از اعداد صحیح، تاپلی (*tuple*) از دو لیست به همان ترتیبی که در لیست ورودی آمدهاند را بازگرداند که لیست اول شامل اعداد زوج و لیست دوم شامل اعداد فرد باشد.
``` python separator.py
def separator(ls):
pass
```
## نمونه ۱
``` python terminal terminal
>>> separator([-3, -2, -1, 0, 1, 2, 3])
([-2, 0, 2], [-3, -1, 1, 3])
```
## نمونه ۲
``` python terminal terminal
>>> separator([1, 11, 5, 7, 3])
([], [1, 11, 5, 7, 3])
```
## نکات
+ میتوانید فایل اولیه این سوال را از [این لینک](/contest/assignments/37739/download_problem_initial_project/129621/) دریافت کنید.
+ شما باید تابع `separator` موجود در فایل `separator.py` را تکمیل و سپس این فایل را ارسال کنید.
+ تابع شما نباید مقداری را چاپ کند، بلکه باید مقادیر مورد نظر را بازگرداند.
+ لیست بازگرداندهشدهی اول، باید حاوی اعداد زوج و لیست دوم حاوی اعداد فرد باشد.
+ اعداد داخل لیستها، باید به همان ترتیبی که در لیست اولیه قرار داشتهاند، قرار بگیرند.
در این سؤال از شما میخواهیم که کد زیر را در یک خط پیادهسازی کنید.
طول کدی که شما ارسال میکنید باید **دقیقا** یک خط باشد و در آن نمیتوانید از `;` یا تابع `exec` استفاده کنید. حال ما از شما که خودتان را پایتون کار قهاری میدانید میخواهیم تا این سوال را حل کنید.
``` python code.py
input_string = str(input())
array = []
for i in range(len(input_string)):
if (ord(input_string[i]) - 97) % 2 == 0:
array.append(input_string[i])
else:
array.append(input_string[i].upper())
array.sort(reverse=True)
answer = ' '.join(array)
print(answer)
```
<details class="orange">
<summary> **توضیحات کد** </summary>
ابتدا ورودی که یک رشته است را دریافت کرده و یک لیست ایجاد میکنیم.
سپس روی رشتهی دریافتی پیمایش میزنیم و در هر مرحله اگر نتیجه که حاصل تفریق ۹۷ از کد [ascii](https://www.ascii-code.com/) حرف موردنظر است، بر ۲ بخشپذیر بود، حرف مورد نظر را به لیست اضافه میکنیم؛ در غیر اینصورت، آن حرف را به حرف بزرگ انگلیسی تبدیل کرده و سپس به لیست اضافه میکنیم.
پس از آن، اعضای لیست را به طور نزولی مرتب میکنیم و در نهایت اعضای لیست را در قالب یک رشته چاپ میکنیم.
</details>
+ پیشنهاد میکنیم ابتدا یکبار کد فوق را اجرا کرده و آن را با ورودیهای نمونه امتحان کنید و خروجیهای مورد نظر را مشاهده کنید. سپس طبق اطلاعات بدست آمده، شروع به حل سؤال کنید.
# ورودی
در تنها خط ورودی، یک رشته آمده است.
$$1 \le |input\_string| \le 100$$
# خروجی
در تنها خط خروجی، حروف مورد نظر از رشتهی ورودی را که دارای شرایط گفته شده بودند را به ترتیب **نزولی** چاپ کنید.
توجه کنید که بین هر دو حرف، باید یک فاصله وجود داشته باشد.
## ورودی نمونه ۱
```
saeid
```
## خروجی نمونه ۱
```
s i e a D
```
## ورودی نمونه ۲
```
alexander
```
## خروجی نمونه ۲
```
e e a a X R N L D
```
## نکات
+ میتوانید فایل اولیه این سوال را از [این لینک](/contest/assignments/37739/download_problem_initial_project/129623/) دریافت کنید.
+ شما باید فایل `source.py` را تکمیل و سپس این فایل را ارسال کنید.
+ تضمین میشود که رشتههای ورودی، تنها از حروف کوچک انگلیسی تشکیل شدهاند و شامل کاراکترهای _Whitespace_ نیستند.
+ **در صورتی از این سؤال نمرهای دریافت خواهید کرد که تمام شروط خواسته شده را به درستی پیادهسازی کنید و کدتان تمام تستها را پاس کند. در صورتی که حتی یک تست را پاس نشوید، نمرهای از این تمرین دریافت نخواهید کرد.**
در این تمرین باید کلاسی به نام `Chain` طراحی کنید به طوری که رفتارهای زیر را داشته باشد:
## جمع زنجیرهای اعداد
وقتی یک یا چند عدد (چه صحیح چه اعشاری) به صورت زنجیروار به عنوان پارامتر به کلاس ارسال میشوند، خروجی باید یک عدد حاصل جمع اعداد ورودی باشد. همچنین خود اشیا باید با مقدار خروجی برابر باشند.
```python terminal terminal
>>> Chain(2.5)(2)(2)(2.5) # sum
9
>>> Chain(3)(1.5)(2)(3) # sum
9.5
>>> Chain(64) == 64
True
```
## الحاق زنجیرهای رشتهها
وقتی یک یا چند رشته به صورت زنجیروار به عنوان پارامتر به کلاس ارسال میشوند، خروجی باید یک رشته حاصل الحاق رشتههای ورودی با یک کاراکتر فاصله (بهعنوان جدا کننده) باشد. همچنین خود اشیا باید با مقدار خروجی برابر باشند.
```python terminal terminal
>>> Chain('Ali')('Safinal')('is')('the')('best.') # concat with space
'Ali Safinal is the best.'
>>> Chain('abc')('defg') == 'abc defg'
True
```
## حالتهای دیگر
در دو حالت زیر باید یک Exception با پیغام `invalid operation` پرتاب شود:
1. یک یا چند رشته و عدد، همزمان به صورت زنجیروار به عنوان پارامتر به کلاس ارسال میشوند.
2. هر پارامتری که از جنس رشته یا عدد نباشد به کلاس ارسال شود.
```python terminal terminal
>>> Chain('Ali')(5) # raising exception with the following message
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: invalid operation
>>> Chain(9)([1, 2]) # raising exception with the following message
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: invalid operation
```
حال از شما خواسته شده تا کلاس `Chain` را تکمیل کنید.
```python chain.py
class Chain:
pass
```
## نکات
+ میتوانید فایل اولیه این سوال را از [این لینک](/contest/assignments/37739/download_problem_initial_project/129624/) دریافت کنید.
+ شما باید کلاس `Chain` موجود در فایل `chain.py` را تکمیل و سپس این فایل را ارسال کنید.
+ در صورت تمایل، میتوانید علاوهبر کلاس `Chain`، کلاسها و تابعهای کمکی دیگری نیز در فایل `chain.py` پیادهسازی کنید.
جَلال انسانی وطندوست و میهنپرست است.
او که از کار کردن با تقویم میلادی و تبدیل دائم آن به تقویم شمسی خسته شده بود، از شما برای رفع این مشکل درخواست کمک کرده است. از آنجایی که شما نیز انسانی وطندوست و میهنپرست هستید، با کمال میل به کمک او میشتابید و به جَلال کمک میکنید تا با تقویم جَلالی کار کند.
در این پروژه شما باید قابلیت اضافهکردن تاریخ فارسی به مدل جنگو را با استفاده از کتابخانهی `django_jalali` پیادهسازی کنید.
# پروژه اولیه
پروژه اولیه را از [این لینک](/contest/assignments/37739/download_problem_initial_project/129620/) دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
```
jalali
├── Users
│ ├── <mark class="yellow" title="این فایل را تغییر دهید"> > admin.py < </mark>
│ ├── apps.py
│ ├── <mark class="yellow" title="این فایل را تغییر دهید"> > forms.py < </mark>
│ ├── migrations
│ │ └── __init__.py
│ ├── <mark class="yellow" title="این فایل را تغییر دهید"> > models.py < </mark>
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── jalali
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── Pipfile
├── Pipfile.lock
└── requirements.txt
```
## مدل `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`) میباشد.
```python terminal terminal
>>> valid_name = 'Mohammadreza Zamani'
>>> wrong_name = 'Mohammad Reza Zamani'
>>> wrong_name = 'Mohammad reza Zamani'
```
دیکشنری بازگرداندهشده از این تابع، باید بهصورت زیر باشد:
``` python
{'first_name': first_name, 'last_name': last_name}
```
برای مثال، برای کاربری با `full_name='Saeid Zamani'`، خروجی تابع بهصورت زیر خواهدبود:
``` python
{'first_name': 'Saeid', 'last_name': 'Zamani'}
```
+ **تابع** `get_age` : این تابع، سن کاربر را از روی فیلد `birthday_date` محاسبه کرده و بازمیگرداند. دقت کنید که این تابع باید جزء صحیح سن را بازگرداند. مثلا اگر شخصی ۵ سال و ۳ ماه سن داشت، باید عدد ۵ را بازگرداند یا اگر شخصی ۱۰ سال و ۱۱ ماه داشت باید عدد ۱۰ را بازگرداند.
```python terminal terminal
>>> from Users.models import CustomUser
>>> b = CustomUser.objects.get(person_name='Sara')
>>> b.birthday_date
jdatetime.date(1377, 10, 8)
>>> b.get_age()
23
```
+ **تابع** `is_birthday` : این تابع مشخص میکند که آیا امروز، روز تولد کاربر مورد نظر هست یا خیر. در صورتی که امروز، روز تولد کاربر بود، مقدار `True` و در غیر اینصورت، مقدار `False` را بازمیگرداند.
## فرم `CustomUserForm`
تمامی فیلدهای مدل `CustomUser` باید داخل کلاس `CustomUserForm` در فایل `forms.py` وجود داشته باشند.
**اعتبارسنجیها:**
+ فیلد `national_code` باید **دقیقا** شامل **۱۰** کاراکتر باشد.
+ فیلد `full_name` باید حتماً شامل `first_name` و `last_name` باشد و هر دوی این مقادیر باید **عنوان** باشند. عنوان بودن یعنی با یک حرف بزرگ انگلیسی شروع شده و بقیهی حروف هر کلمه کوچک باشند.
```python
>>> valid_name = 'Arash Ghasemi'
>>> wrong_name = 'arash ghasemi'
```
## ادمین
مدل `CustomUser` موجود در `models.py` باید در پنل ادمین ثبت شده و قابل مشاهده باشد.
### شخصیسازی `CustomUserAdmin`
%align_right_start%
- در لیست `CustomUser`ها، مقادیر زیر نمایش داده شود (ترتیب مهم نیست):
- `username`
- `first_name`
- `last_name`
- `gender`
- `national_code`
- `birthday_date`
**توجه**: فیلدهای `first_name` و `last_name` از روی فیلد `full_name` ایجاد میشوند.
- قابلیت جستجو بر اساس `username` و `full_name` وجود داشته باشد.
- لیست `CustomUser`ها براساس `ceremony_datetime`، به صورت صعودی مرتب شده باشد.
%align_end%
## نکات
+ شما تنها مجوز ایجاد تغییرات در فایلهای `Users/models.py`، `Users/forms.py` و `Users/admin.py` را دارید و **تمامی تغییرات دیگر شما** در فایلهای پروژه **نادیده گرفته خواهند شد.**
+ فراموش نکنید که میتوانید با مطالعهی `testsample.py` با روش تست کردن مدلها، فرمها و ادمینها آشنا شوید.
## نحوه ارسال
یک فایل _ZIP_ حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل _ZIP_ اهمیتی ندارد.
فرهاد که از این اوضاع نابسامان زندگی خسته شده است، تصمیم به مهاجرت میگیرد؛ ولی از آنجایی که به مقدار کافی، پول برای مهاجرت ندارد، تصمیم گرفت این مهاجرت را روی دادههای پروژهی خود پیادهسازی کند و آنها را از شر این زندگی نجات دهد.
ولی از آنجایی که به افسردگی ناشی از عدم مهاجرت مبتلا شده، به کمک شما برای انجام این کار نیاز دارد.
## پروژه اولیه
پروژه اولیه را از [این لینک](/contest/assignments/37739/download_problem_initial_project/129622/) دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
```
migration
├── account
│ ├── admin.py
│ ├── apps.py
│ ├── fixtures
│ │ └── users.json
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── blog
│ ├── admin.py
│ ├── apps.py
│ ├── fixtures
│ │ └── articles.json
│ ├── __init__.py
│ ├── <mark class="yellow" title="این پوشه را تغییر دهید"> > migrations < </mark>
│ │ ├── <mark class="red" title="این فایل نباید تغییر کند"> > 0001_initial.py < </mark>
│ │ └── __init__.py
│ ├── <mark class="yellow" title="این فایل را تغییر دهید"> > models.py < </mark>
│ ├── tests.py
│ └── views.py
├── config
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── Pipfile
├── Pipfile.lock
├── requirements.txt
└── tests
├── __init__.py
└── testsample.py
```
## پایگاهداده
اپلیکیشن `blog` فقط شامل یک مدل به نام `Article` است که این مدل شامل فیلدهای زیر میباشد:
%align_right_start%
+ `author` : نام کاربری نویسندهی مقاله
+ `title` : عنوان مقاله
+ `category` : عنوان دستهبندی مقاله
+ `body` : متن مقاله
+ `created` : زمان ایجاد مقاله (این فیلد به طور خودکار در زمان ایجاد مقاله جدید مقداردهی میشود.)
%align_end%
## ترمیم ساختار داده
* فیلد `author` باید به جای نام کاربری نویسنده به شئ *User* متناظر آن نویسنده اشاره کند (تضمین میشود مقدار فیلد برابر نام کاربری کاربر معتبر و موجود در پایگاه داده است.). همچنین در صورت حذف یک کاربر باید تمام مقالات نوشتهشده توسط آن کاربر حذف شود.
* فیلد `category` باید به شئ متناظر از مدل *Category* اشاره کند و در صورتی که آن شئ حذف شد باید برابر **null** قرار گیرد.
* برای این کار باید مدل *Category* را پیادهسازی کنید. این مدل باید شامل فیلدهای زیر باشد:
+ `title`: عنوان دستهبندی (از نوع **CharField** و حداکثر طول ۵۰)
+ `status`: فعال بودن دسته بندی (از نوع **BooleanField** و مقدار پیشفرض True)
دقت کنید مقالات فعلی ممکن است دستهبندیهای یکسانی داشته باشند. در نتیجه باید به شئ یکسانی از مدل *Category* اشاره کنند. همچنین فیلد `category` مقالات فعلی موجود در پایگاه داده بعد از اعمال مایگریشن باید برابر شئ از مدل *Category* شود که فیلد `title` آن برابر مقدار فعلی فیلد `category` باشد (برای درک بهتر این دو جمله به عکس زیر دقت کنید.).
![Migration](https://quera.ir/qbox/view/IlFJMXlJ9o/migration.png)
* فیلد جدید `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_ اهمیتی ندارد.
*سلیب* که تلاشهای فراوانی برای رفتن به تیم فنی کوئرا کرده بود، در نهایت با مخالفت شدید *مصطفی* روبهرو شد.
او که از دار دنیا فقط دوستی با *مازیار* را داشت؛ به او متوسل شد تا به عضویت تیم مالی درآید ولی مازیار که در کار، آدم جدیای است؛ به او ۱۰ تسک و مهلت ۱ ساعته (مشخصه نمیخواد استخدامش کنه!) داد تا در صورتی که این تسکها را با موفقیت انجام داد، رزومه او را بررسی کند.
حال *سلیب* که هیچگونه استعدادی در این کار ندارد، دست به دامان شما شده است تا در این فرصت کم، با استفاده از ۱۰ کوئری، پاسخ تسکها را برای او بفرستید و او را در کسب شغل جدید همراهی کنید.
# پروژه اولیه
پروژه اولیه را از [این لینک](/contest/assignments/37739/download_problem_initial_project/129619/) دانلود کنید. ساختار این پروژه به شرح زیر است:
```
Quera_Finance
├── Finance
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── fixtures
│ │ ├── auth_sample.json
│ │ └── data_sample.json
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── <mark class="yellow" title="شما تنها مجاز به تغییر این فایل هستید."> > queries.py < </mark>
│ ├── tests.py
│ └── views.py
├── Quera
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── requirements.txt
└── tests
├── __init__.py
└── testsample.py
```
در فایل `models.py` هشت مدل به شرح زیر وجود دارد.
<details class="blue">
<summary> **مدل** `Department` (**بخشهای مختلف شرکت**) </summary>
+ `name`: نام بخش
+ `phone`: شماره تلفن بخش
</details>
<details class="blue">
<summary> **مدل** `Employee` (**کارمند**) </summary>
+ `account`: اکانت کارمند که اطلاعات کاربری او را نگه میدارد.
+ `department`: بخشی که کارمند در آن کار میکند.
+ `phone`: شماره تلفن کارمند
</details>
<details class="blue">
<summary> **مدل** `Project` (**پروژه**) </summary>
+ `title`: عنوان پروژه
+ `department`: بخش مربوطه پروژه
+ `employees`: کارمندان حاضر در پروژه
+ `estimated_end_time`: زمان تخمینزده شده اتمام پروژه
+ `end_time`: زمان اتمام پروژه
</details>
<details class="blue">
<summary> **مدل** `EmployeeProjectRelation` (**ذخیره اطلاعات اضافی برای حضور کارمندان در پروژههای مختلف**) </summary>
+ `employee`: کارمند مربوطه
+ `project`: پروژه مربوطه
+ `hours`: ساعتهای کاری در پروژه
+ `role`: نقش کارمند در پروژه
</details>
<details class="blue">
<summary> **مدل** `Attendance` (**حضور و غیاب**) </summary>
+ `employee`: کارمند مربوطه
+ `date`: تاریخ
+ `in_time`: زمان ورود به شرکت
+ `out_time`: زمان خروج از شرکت
+ `late_cause`: دلیل تأخیر (در صورت تاخیر)
</details>
<details class="blue">
<summary> **مدل** `Salary` (**حقوق**) </summary>
+ `employee`: کارمند مربوطه
+ `base`: حقوق پایه
+ `tax`: مالیات (درصد)
+ `insurance`: بیمه (درصد)
+ `overtime`: اضافه کار (ساعت)
</details>
<details class="blue">
<summary> **مدل** `Payment` (**پرداخت**) </summary>
+ `amount`: مقدار پرداختشده
+ `account_number`: شماره حساب مقصد
+ `payment_type`: نوع پرداخت
+ `description`: توضیحات پرداخت
+ `date`: تاریخ پرداخت
</details>
<details class="blue">
<summary> **مدل** `Payslip` (**فیش حقوقی**) </summary>
+ `base`: پایه حقوق
+ `tax`: مالیات (تومان)
+ `insurance`: بیمه (تومان)
+ `overtime`: اضافه کار (تومان)
+ `salary`: حقوق مربوطه
+ `payment`: پرداخت مربوطه
</details>
حال از شما میخواهیم پرس و جو (*query*) های زیر را روی مدلهای بالا بنویسید.
**حتما قبل شروع نوشتن کد، تذکرات انتهای سوال را بخوانید!**
<details class="green">
<summary> **۱. مجموع بدهیهای شرکت برای حقوق کارمندان** </summary>
+ حقوقهای بدون پرداخت (base + tax + insurance + overtime) را در قالب یک `dict` به صورت زیر برگردانید.
```
{"total_dept": value }
```
</details>
<details class="green">
<summary> **۲. مجموع حقوقِ اضافه کار کارمندانی که بیشتر مساوی** `hours=x` **ساعت روی پروژههایشان اضافه کار کردهاند.** </summary>
+ مجموع حقوق پرداختی اضافه کار (به تومان) به افرادی از شرکت که بیشتر مساوی `x` ساعت اضافه کاری داشتهاند را در قالب یک `dict` به صورت زیر برگردانید.
```
{"total_overtime": value }
```
</details>
<details class="green">
<summary> **۳. مجموع پرداختهای شرکت** </summary>
+ مجموع پرداختهای شرکت را در قالب یک `dict` به صورت زیر برگردانید.
```
{"total": value }
```
</details>
<details class="green">
<summary> **۴. مجموع ساعاتی که یک کارمند با** `id=x` **روی پروژههایش کار کردهاست.** </summary>
+ مجموع ساعاتی که یک کارمند با `id=x` روی پروژههایش کار کردهاست را در قالب یک `dict` به صورت زیر برگردانید.
+ در صورتی که کارمند در پروژهای شرکت نداشت، مقدار `total_hours` برابر `None` باشد.
```
{"total_hours": value }
```
</details>
<details class="green">
<summary> **۵. لیست کارمندانی که مجموع حقوق دریافتی آنها (پرداختشده) بیش از یک مقدار** `x` **باشد.** </summary>
+ ترتیب این لیست اهمیت ندارد.
</details>
<details class="green">
<summary> **۶. کارمندی که بیشترین ساعت پروژه انجام شده را دارد.** </summary>
+ شئ کارمند را به همراه یک ستون اضافه به نام `total_hours` برگردانید.
+ اگر چند کارمند با مجموع ساعات برابر موجود بود، کارمندی را که نام کاربری آن از لحاظ الفبایی کوچکتر است برگردانید.
</details>
<details class="green">
<summary> **۷. بخشی که بیشترین حقوق پرداختشده تا کنون را دارد.** </summary>
+ شئ بخش را همراه با یک ستون اضافه به نام `total` برگردانید.
+ اگر چند بخش با مجموع حقوقهای پرداختشده برابر موجود بود، بخشی را که نام آن از لحاظ الفبایی کوچکتر است برگردانید.
</details>
<details class="green">
<summary> **۸. بخشی که بیشترین تعداد پروژه را زودتر یا برابر موعد پیشبینی شده تحویل داده است.** </summary>
+ اگر چند بخش موجود بود، بخشی را که نام آن از لحاظ الفبایی کوچکتر است برگردانید.
</details>
<details class="green">
<summary> **۹. کارمندی که کمترین تعداد روزهای ورود با تاخیر را داشته باشد.** </summary>
+ زمان ورود مجاز به عنوان آرگومان `x` داده می شود.
+ اگر چند کارمند موجود بود، کارمندی را که نام کاربری آن از لحاظ الفبایی کوچکتر است برگردانید.
</details>
<details class="green">
<summary> **۱۰. تعداد کارمندانی که تا به حال در هیچ پروژهای شرکت نکردهاند.** </summary>
+ تعداد کارمندانی که تا به حال در هیچ پروژهای شرکت نکردهاند را در قالب یک `dict` به صورت زیر برگردانید.
```
{"total": value }
```
</details>
## زیرمسئلهها
| امتیاز | بخش |
|:------------------:|:------------------:|
| ۲۰ | query_1 |
| ۲۰ | query_2 |
| ۳۵ | query_3 |
| ۳۵ | query_4 |
| ۳۵ | query_5 |
| ۴۵ | query_6 |
| ۴۵ | query_7 |
| ۴۵ | query_8 |
| ۶۰ | query_9 |
| ۶۰ | query_10 |
## امکانات اضافه
در صورتی که علاقمندید که خودتان به صورت دستی کوئریهای خود را امتحان کنید و از درستی آنها اطمینان حاصل کنید، یا اینکه به بررسی بیشتر از این تمرین بپردازید، برای راحتی بیشتر شما، فایلهای مایگریشنها ساخته شدهاند و شما کافیست جهت ایجاد پایگاهداده، یک بار دستور `migrate` را اجرا کنید.
علاوهبر این، یک سری دادهی از پیش آماده شده، فراهم شده که بعد از اجرای دستور `migrate`، میتوانید آنها را وارد پایگاهدادهی پروژهی خود کنید. به این منظور، دستور زیر را اجرا کنید. میتوانید از این دادهها به جهت تست کردن کوئریهای خود استفاده کنید.
**۱. ایجاد پایگاهداده**
```shell terminal terminal
python manage.py migrate
```
**۲. وارد کردن دادههای از پیش آماده شده (fixture)**
```shell terminal terminal
python manage.py loaddata Finance/fixtures/auth_sample.json
python manage.py loaddata Finance/fixtures/data_sample.json
```
در صورتی که علاقمند به تست نیستید، نیازی به ایجاد پایگاهداده و وارد کردن دادههای آزمایشی نیست، و تنها کافیست که در فایل `queries.py` کوئریهای خود را بنویسید و از کوئرا جهت امتحان کردن درستی کوئریهایتان استفاده کنید.
## **نکات**
+ یک فایل به نام `queries.py` وجود دارد که برای هر سوال یک تابع در نظر گرفته شده است. شما کدهای خود را باید در این فایل بنویسید و *QuerySet* مربوطه را بازگردانید.
+ برای نمونه تابع `query_0` در پاسخ به پرس و جویِ «لیست همه ی کارمندان» کامل شده است که شما نیز باید مشابه همین تابع، بقیه توابع را تکمیل کنید.
```python queries.py django
def query_0():
q = Employee.objects.all()
return q
```
+ در سوالاتی که در صورت سوال، مقداری به صورت متغیر ذکر شده است؛ متغیر مورد نظر در آرگومانهای ورودی تابع در نظر گرفته شده است. شما نباید آرگومانهای ورودی تابع را تغییر دهید.
+ در تمام سوالات به جز سوالاتی که خروجی نمونه برای آنها مشخص شده است، همانطور که ذکر شد، خروجی شما یک شئ از نوع QuerySet با اِلِمانهایی از جنس گفتهشده در اول سوال باید باشد. یعنی در واقع خود query را return کنید.
+ شما تنها مجوز ایجاد تغییرات در فایل `Finance/queries.py` را دارید و **تمامی تغییرات دیگر شما** در فایلهای پروژه **نادیده گرفته خواهند شد.**
+ فراموش نکنید که میتوانید با مطالعهی `testsample.py` با روش تست کردن کوئریها آشنا شوید.
## نحوه ارسال
یک فایل _ZIP_ حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل _ZIP_ اهمیتی ندارد.