Python

Напишите код в питоне

Объявите в программе класс 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', 'не работает генератор ошибки!'
Результат
Вот, во-первых, с отступами, во-вторых, без верениц условных операторов, с головой выдающих дилетанта:
 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()))
Алексей Баранов
Алексей Баранов
87 571
Лучший ответ
это уже платная разработка.
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 __getitem__(self, indx):
if indx not in range(5):
raise IndexError('неверный индекс')
if indx == 0:
return self.fio
elif indx == 1:
return self.job
elif indx == 2:
return self.old
elif indx == 3:
return self.salary
elif indx == 4:
return self.year_job

def __setitem__(self, indx, value):
if indx not in range(5):
raise IndexError('неверный индекс')
if indx == 0:
self.fio = value
elif indx == 1:
self.job = value
elif indx == 2:
self.old = value
elif indx == 3:
self.salary = value
elif indx == 4:
self.year_job = value

def __iter__(self):
return (attr for attr in [self.fio, self.job, self.old, self.salary, self.year_job])
Макс Серебряков А можно с пробелами?
Андрей Гушоватий Если код где то не будет работать то можете сами его под корректировать
Андрей Гушоватий Вот из компилятора тебе скинул сам расставь у меня не ставится тут
Людмила Чаузова
 bool need_glases=true;// :-)