Задача по основам ООП (Python)
Прошу помощи у самых отзывчивых. задачка с Яндекс Хэндбука
Рассмотрим объект «Программист», который задаётся именем, должностью и количеством отработанных часов. Каждая должность имеет собственный оклад (заработную плату за час работы). В нашей импровизированной компании существуют 3 должности:
Junior — с окладом 10 тугриков в час;
Middle — с окладом 15 тугриков в час;
Senior — с окладом 20 тугриков в час по умолчанию и +1 тугрик за каждое новое повышение.
Напишите класс Programmer, который инициализируется именем и должностью (отработка у нового работника равна нулю). Класс реализует следующие методы:
work(time) — отмечает новую отработку в количестве часов time;
rise() — повышает программиста;
info() — возвращает строку для бухгалтерии в формате: <имя> <количество отработанных часов>ч. <накопленная зарплата> тгр.
Примечание
Ваше решение должно содержать только классы и функции. В решении не должно быть вызовов инициализации требуемых классов.
Пример
Ввод:
programmer = Programmer('Васильев Иван', 'Junior')
programmer.work(750)
print(programmer.info())
programmer.rise()
programmer.work(500)
print(programmer.info())
programmer.rise()
programmer.work(250)
print(programmer.info())
programmer.rise()
programmer.work(250)
print(programmer.info())
Вывод:
Васильев Иван 750ч. 7500тгр.
Васильев Иван 1250ч. 15000тгр.
Васильев Иван 1500ч. 20000тгр.
Васильев Иван 1750ч. 25250тгр.
Прикрепляю свой код:
class Programmer:
def __init__(self, name, role, up=0, n=20, rr=0, sm=0, time=0):
self.up = up #переменная уровней должностей, начиная с 0 - Junior
self.role = role #Дожность
self.name = name #имя работника
self.n = n #зарплата сеньоров(тгр/ч), получивших повышение(назвал Milord)
self.rr = rr #суммарное кол-во отработанных часов
self.sm = sm #переменная для подсчёта всех заработанных денег работником
self.time = time # часы работы
def work(self, timee):
self.time = timee
self.rr = self.rr + self.time
def rise(self):
if self.role == 'Middle':
self.up = 1
if self.role == 'Senior':
self.up = 2
self.up += 1
if self.up == 1:
self.role = 'Middle'
if self.up == 2:
self.role = 'Senior'
if self.up >= 3:
self.role = 'Milord'
self.n += 1
def info(self):
if self.role == 'Junior':
self.sm = self.time * 10
return f'{self.name} {self.time}ч. {self.sm}тгр.'
if self.role == 'Middle':
self.sm = (self.time * 15) + self.sm
return f'{self.name} {self.rr}ч. {self.sm}тгр.'
if self.role == 'Senior':
self.sm = self.sm + (self.time * 20)
return f'{self.name} {self.rr}ч. {self.sm}тгр.'
if self.role == 'Milord':
self.sm = (self.time * self.n) + self.sm
return f'{self.name} {self.rr}ч. {self.sm}тгр.'
Итак, первые 4 проверки (включая указанную в примере) решение проходит, но дальше не принимает
Прошу помощи у знающих, что может быть не так?
Ответы (2 шт):
Попробуй так. Вроде проходит
class Programmer:
def __init__(self, name, rank):
self.name = name
self.rank = rank
self.worktime = 0
self.salary = 0
self.ranks = {
'Junior': 10,
'Middle': 15,
'Senior': 20
}
def work(self, worktime):
self.worktime += worktime
self.set_salary(self.rank, worktime)
def set_salary(self, rank, worktime):
self.salary += worktime * self.ranks[rank]
def rise(self):
if self.rank == 'Junior':
self.rank = 'Middle'
elif self.rank == 'Middle':
self.rank = 'Senior'
else:
rank = self.ranks['Senior']
rank += 1
self.ranks.update({'Senior': rank})
def info(self):
return f'{self.name} {self.worktime} {self.salary}'
class Programmer:
def work(self,time):
self.time=time
def rise(self,ad=0):
self.ad=ad
def fn(self,name=None,rang=None,rub=None):
self.name=name
if rang=='Junior':
self.rub=(self.time*60)/6
if self.ad>0:
self.rub=(self.time*60)/6 +1
if rang == 'Middle':
self.rub = (self.time * 60) / 4
if self.ad > 0:
self.rub = (self.time * 60) / 4 + 1
if rang=='Senior':
self.rub = (self.time * 60) / 4
if self.ad > 0:
self.rub = (self.time * 60) / 4 + 1
def info(self):
print(f"{self.name} {self.time} {self.rub}")