Объявите в программе класс Person, объекты которого создаются командой:
p = Person(fio, job, old, salary, year_job)
где fio - ФИО сотрудника (строка); job - наименование должности (строка); old - возраст (целое число); salary - зарплата (число: целое или вещественное); year_job - непрерывный стаж на указанном месте работы (целое число).
В каждом объекте класса Person автоматически должны создаваться локальные атрибуты с такими же именами: fio, job, old, salary, year_job и соответствующими значениями.
Также с объектами класса Person должны поддерживаться следующие команды:
data = p[indx] # получение данных по порядковому номеру (indx) атрибута (порядок: fio, job, old, salary, year_job и начинается с нуля)
p[indx] = value # запись в поле с указанным индексом (indx) нового значения value
for v in p: # перебор всех атрибутов объекта в порядке: fio, job, old, salary, year_job
print(v)
При работе с индексами, проверить корректность значения indx. Оно должно быть целым числом в диапазоне [0; 4]. Иначе, генерировать исключение командой:
raise IndexError('неверный индекс')
Пример использования класса (эти строчки в программе не писать):
pers = Person('Гейтс Б.', 'бизнесмен', 61, 1000000, 46)
pers[0] = 'Балакирев С.М.'
for v in pers:
print(v)
pers[5] = 123 # IndexError
P.S. В программе нужно объявить только класс. Выводить на экран ничего не нужно.
Для примера:
Тест
pers = Person('Гейтс Б.', 'бизнесмен', 61, 1000000, 46)
pers[0] = 'Балакирев С.М.'
for v in pers:
print(v)
Результат:
Балакирев С.М.
бизнесмен
61
1000000
46
Тест
pers = Person('Гейтс Б.', 'бизнесмен', 61, 1000000, 46)
pers[0] = 'Балакирев С.М.'
res = 'Wrong!'
try:
pers[5] = 123
except IndexError:
res = 'Ok'
assert res == 'Ok', 'не работает генератор ошибки!'
Результат
Python
Напишите код к задаче
Коротко и ясно:
Хотя, если вам прямо таки жизни нет без атрибутов, то можно сделать так:
class Person:
def __init__(self, fio, job, old, salary, year_job):
self.data = [fio, job, old, salary, year_job]
def __getitem__(self, indx):
if indx < 0 or indx >= len(self.data):
raise IndexError('неверный индекс')
return self.data[indx]
def __setitem__(self, indx, value):
if indx < 0 or indx >= len(self.data):
raise IndexError('неверный индекс')
self.data[indx] = value
def __iter__(self):
return (v for v in self.data)
P.S. И 100 лет не нужны тут никакие атрибуты fio, job и т.д. Если класс должен предоставлять интерфейс списка, то и данные нужно хранить в аналогичной структуре, а не заниматься приседаниями на лыжах в гамаке.Хотя, если вам прямо таки жизни нет без атрибутов, то можно сделать так:
class Person:
def __init__(self, fio, job, old, salary, year_job):
self.fio = fio
self.job = job
self.old = old
self.salary = salary
self.year_job = year_job
def _attrs(self):
return ["fio", "job", "old", "salary", "year_job"]
def __getitem__(self, indx):
if indx < 0 or indx >= len(self._attrs()):
raise IndexError('неверный индекс')
return getattr(self, self._attrs()[indx])
def __setitem__(self, indx, value):
if indx < 0 or indx >= len(self._attrs()):
raise IndexError('неверный индекс')
setattr(self, self._attrs()[indx], value)
def __iter__(self):
return (v for v in map(lambda a: getattr(self, a), self._attrs()))
Здесь мы лазим в словарь атрибутов, чтобы избежать ада условных операторов (if index == 0: return self.fio elif index == 1... - такой код ужасен, и лучше с самого начала учиться писать по-нормальному).ты ебл!н
Похожие вопросы
- Напишите код к задаче python
- Добрый день, помогите, пожалуйста, написать код к задаче на питоне
- Не могу сделать задачу (напишите код пожалуйста) довольно трудная
- С++ написать код для техникума.
- Помогите написать код в питон
- Помогите пожалуйста написать код
- Помогите написать код в python
- Помогите написать код на питоне
- Помогите написать код на python(только без def)
- Написать код, прошу помогите пожалуйста на python