Возможно ли в цикле менять обрабатываемые переменные?
У меня есть несколько списков со списками оборудования оргтехники. Эти списки набираются произвольным пользовательским образом, но изначально все они имеют список-заголовок, идущий первым для формирования таблицы. Одному списку соответствует один отдел компании.
department_list = ['Бухгалтерия', 'Производство', 'Колл-центр', 'HR', 'Склад', 'Списано']
header = ['Название', 'Тип оборудования', 'Количество', 'Цена за штуку']
accountance = [header]
production = [header]
callcentre = [header]
HR = [header]
warehouse = [header]
writeoff = [header]
Изначально все оборудование попадает на склад, а затем распределяется по отделам. У меня получилось написать код для перемещения в один конкретный отдел:
def distribute(self, name, department, amount):
distribution = [name, amount]
if department == 'Бухгалтерия':
for el in Warehouse.accountance:
if distribution in el[:-1]:
p = el[-1]
a = el[-2]
Warehouse.accountance.append([name, a + amount, p])
Warehouse.accountance.remove(el)
Warehouse.warehouse.append([name, el[-2] - amount, el[-1]])
Warehouse.warehouse.remove(el)
else:
for el in Warehouse.warehouse:
if distribution in el[:-1]:
Warehouse.accountance.append([name, amount, el[-1]])
Warehouse.warehouse.append([name, el[-2] - amount, el[-1]])
Warehouse.warehouse.remove(el)
else: print('Ошибка: такого оборудования нет на складе!')
Я не хочу повторять этот код для всех отделов, но как - не понимаю. Есть ли у python возможность сделать какой-то псевдоним для переменной? Например, при вызове функции записать: 'Колл-центр' и она поймет, что надо обрабатывать переменную callcentre?
Ответы (1 шт):
Загнать все ваши отделы в словарь. И работать с ним по именам отделов.
department_list = ['Бухгалтерия', 'Производство', 'Колл-центр', 'HR', 'Склад', 'Списано']
header = ['Название', 'Тип оборудования', 'Количество', 'Цена за штуку']
departments = {k:[header] for k in department_list}
def distribute(self, name, department, amount):
distribution = [name, amount]
for el in Warehouse.departments[department]:
if distribution in el[:-1]:
p = el[-1]
a = el[-2]
Warehouse.departments[department].append([name, a + amount, p])
Warehouse.departments[department].remove(el)
Warehouse.departments['Склад'].append([name, el[-2] - amount, el[-1]])
Warehouse.departments['Склад'].remove(el)
else:
for el in Warehouse.departments['Склад']:
if distribution in el[:-1]:
Warehouse.departments[department].append([name, amount, el[-1]])
Warehouse.departments['Склад'].append([name, el[-2] - amount, el[-1]])
Warehouse.departments['Склад'].remove(el)
else: print('Ошибка: такого оборудования нет на складе!')
Можно передать и переменную через аргумент функции. В вашем случае будет работать, т.к. у вас там списки, а они mutable.