Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Логика.
- # Выработка человека по 10 бальной системе.
- # Стоимость проекта. Допустим 100000 руб.
- # Количество дней на проект. 100 дней
- # Процент госорган. 60%
- #
- # Выработка человека 1. Час стоимости 360 рублей.
- # Выработка человека 2. Час стоимости 370 рублей.
- # Выработка человека 3. Час стоимости 380 рублей.
- # Выработка человека 4. Час стоимости 390 рублей.
- # Выработка человека 5. Час стоимости 400 рублей.
- # Выработка человека 6. Час стоимости 410 рублей.
- # Выработка человека 7. Час стоимости 420 рублей.
- # Выработка человека 8. Час стоимости 430 рублей.
- # Выработка человека 9. Час стоимости 440 рублей.
- # Выработка человека 10. Час стоимости 450 рублей.
- # Допустим проект стоит 100000.
- # Человеку платим 350 рублей за час.
- #
- # Что нам надо понять?
- # Нужно понять, сколько платить сотруднику, чтобы получить прибыль.
- # Это нужно для того, чтобы понять, может нам дешевле нанять квалифицированных специалистов
- # Итог. Прибыль, такая то.
- class Worker:
- """ Класс работника """
- SALARY_LEVEL = {
- "0": 350,
- "1": 360,
- "2": 370,
- "3": 390,
- "4": 390,
- "5": 400,
- "6": 410,
- "7": 420,
- "8": 430,
- "9": 440,
- "10": 450
- }
- def __init__(self, name, bal):
- """
- Принимает bal - как уровень работника
- self.SALARY_LEVEL[str(bal)] - обращение к словарю, по ключу bal.
- И в с-во self.salary - устанавливаем зарплату по уровню
- self.bal = Хранит уровень сотрудника
- self.days = 0 Хранит общее количество отработанных дней
- self.hours = 0 Хранит общее количество отработанных часов
- """
- self.salary = self.SALARY_LEVEL[str(bal)]
- self.bal = bal
- self.days = 0
- self.hours = 0
- self.name = name
- def button(self):
- """
- Ф-ия которая добавляет 1 рабочий день для сотрудника.
- Например, когда нажата кнопка на сайте "Засчитать день"
- """
- self.days += 1
- def add_hours(self, hours):
- """
- Ф-ия которая добавляет часы работы к общим часам работы (self.hours)
- """
- self.hours += hours
- def salary_days(self):
- """
- Функция, которая считает зарплату за все дни. Вызывается в день зарплаты.
- Например, на 30 день работы. После вызова ф-ии, количество дней обнуляется.
- """
- if self.days < 30:
- raise ValueError("День зарплаты не настал")
- salary = (self.salary * self.hours) * self.days
- self.days = 0
- return salary
- class Employer:
- """ Класс работодателя """
- def __init__(self):
- self.workers = []
- def add_worker(self, worker: Worker):
- """
- Прикрепляет работника к работодателю.
- worker - ссылка (экземпляр класс) на работника.
- worker - создан через класс Worker.
- """
- self.workers.append(worker)
- def list_workers(self):
- """ Выводит список сотрудников """
- for num, worker in enumerate(self.workers):
- print(f"№ Работника: {num}. Имя: {worker.name}, зарплата работника: {worker.salary}, уровень: {worker.bal}")
- def change_level(self, num, bal):
- """
- :param num: Номер нашего сотрудника. Номер можно посмотреть с помощью ф-ии list_workers()
- :param bal: Новый уровень нашего работника
- """
- self.workers[num].bal = bal
- self.workers[num].salary = Worker.SALARY_LEVEL[str(bal)]
- class Project:
- """ Класс проекта """
- def __init__(self, count_days, cost, performer):
- """
- :param count_days: дней на выполнение
- :param cost: стоимость разработки
- :param performer: кто будет исполнителем (Ссылка на Работодателя)
- """
- self.count_days = count_days
- self.coast = cost
- self.performer = performer
- def development_cost(self, days):
- """
- Будет считать стоимость разработки при текущем наличии сотрудников.
- """
- hours = 8 # Норма работы 1 сотрудника
- workers = self.performer.workers # Получаем список сотрудников из класса работодателя (performer)
- development_cost = 0 # Общая стоимость разработки
- for worker in workers: # Цикл перебора сотрудников
- development_cost += (worker.salary * hours) * days
- print(f"{worker.bal} - Зарплата: {(worker.salary * hours) * days}")
- # Берем зарплату работника, умножаем на 8 (hours) и умножаем на количество дней на выполнение.
- # Таким образом, посчитаем, сколько нужно выплатить З\П на сотрудника за всё время выполнения проекта.
- print(f"Общая З\П сотрудников: {development_cost}")
- return development_cost
- def profit(self, days):
- """ Ф-ия считает прибыль """
- return self.coast - self.development_cost(days)
- worker_1 = Worker("Вася", 0)
- worker_2 = Worker("Петя", 0)
- worker_3 = Worker("Дима", 0)
- worker_4 = Worker("Коля", 10)
- employer = Employer() # Работодатель
- employer.add_worker(worker_1)
- employer.add_worker(worker_2)
- employer.add_worker(worker_3)
- employer.add_worker(worker_4)
- employer.list_workers()
- employer.change_level(0, 1)
- print()
- employer.list_workers()
- project = Project(100, 1000000, employer)
- print(f'Получим прибыли: {project.profit(50)}')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement