Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 7, 2010 17:43:43

Юля
От:
Зарегистрирован: 2010-11-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

class RashodType:  #тоже самое для класса вид расходов
"""
Вид расходов
"""
def __init__(self, name):
self.name = name

def __hash__(self):
return hash(self.name)

def __eq__(self, other):
return self.name == other.name

class RashodTypes(set):
"""
Виды расходов
"""
def add(self, rashodType): #операция добавления элемента к множеству
assert rashodType not in self #ограничение, если элемент уже есть в множестве
set.add(self, rashodType)



Офлайн

#2 Ноя. 7, 2010 17:48:38

Юля
От:
Зарегистрирован: 2010-11-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

class Rashod:
"""
Расход
"""
def __init__(self, rashod, rashodType):
self.sum = rashod
self.type = rashodType

def __hash__(self):
return hash(self.sum)

def __eq__(self, other):
return self.sum == other.sum

class Rashods(set):
"""
Расходы
"""
def __init__(self, rashodTypes):
set.__init__(self)
self.rashodTypes = rashodTypes

def add(self, rashod):
assert rashod not in self #вот эту строчку не знаю надо или нет
assert rashod.type in self.rashodTypes #запрещает добавлять расходы, типы которых нет в типах расходов
set.add(self, rashod)



Офлайн

#3 Ноя. 7, 2010 17:56:48

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

Ты хоть книжку прочла или сразу с примеров начала?
к тому же считаю что разделение на 2 csv файла не совсем удобно, у тебя с БД как ?

Офлайн

#4 Ноя. 7, 2010 17:57:45

Юля
От:
Зарегистрирован: 2010-11-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

class RashodRecord:
"""
Запись в учете внутриофисных расходов
"""
def __init__(self, rashod, collaborator):
self.rashod = rashod
self.collaborator = collaborator

def __hash__(self):
return hash((self.rashod, self.collaborator))

def __eq__(self, other):
return self.rashod == other.rashod and \
self.collaborator == other.collaborator

class RashodDir(set):
"""
Расходный справочник
"""
def __init__(self, rashods, otdel):
set.__init__(self)
self.rashods = rashods
self.otdel = otdel

def add(self, rashodRecord):
assert rashodRecord.rashod in self.rashods # запрещает добавлять к множеству расходов если его нет в справочнике расходов. Здесь тоже не понимаю ,надо или нет
assert rashodRecord.collaborator in self.otdel # запрещает добавлять сотрудника если его нет в отделах, не знаю надо или нет...
assert rashodRecord not in self #запрещает добавлять запись если она уже есть в справочнике. в моем случае это наверное не надо?
set.add(self, rashodRecord)



Офлайн

#5 Ноя. 7, 2010 18:01:23

Юля
От:
Зарегистрирован: 2010-11-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

sypper-pit, книжка у меня автор Сузи - Питон называется, методичка с примером, help питона и яндекс…

sypper-pit
2 csv файла не совсем удобно,
я запуталась про что ты?
sypper-pit
у тебя с БД как
в смысле? пока у меня со всем никак.



Офлайн

#6 Ноя. 7, 2010 18:03:43

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

Юля
Это всё хорошо что ты классы и прочее создаёшь , однако я спрасил про Базы_Данных , с ними у тебя как ?

Офлайн

#7 Ноя. 7, 2010 18:06:59

Юля
От:
Зарегистрирован: 2010-11-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

sypper-pit, у меня БД нет и не будет. Я выбрала путь, где данные для обработки импортируются через csv файлы, в которые я их вношу как в первом моем посте. 1 csv файл со справочником отделов и подотделов, а второй с расходами, сотрудниками и отделами



Отредактировано (Ноя. 7, 2010 22:41:59)

Офлайн

#8 Ноя. 7, 2010 18:15:54

Юля
От:
Зарегистрирован: 2010-11-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

if __name__ == '__main__':
import zzcsv

rashodDir = zzcsv.load() #вот здесь непонятно что происходит.

for s in rashodDir.otdel.iterOtdel(): #поиск сотрудника отдела "отдел кадров", в фамилии которого есть ан
if s.name == 'отдел кадров':
for r in rashodDir:
if r.collaborator in s and r.collaborator.name.find('ан') >= 0:
print r.rashod.sum, "%s %s. %s."% \
(r.collaborator.family, r.collaborator.name[:2], r.collaborator.patronym[:2])
break

for s in rashodDir.otdel.iterOtdel(): # поиск сотрудник отдела руководство, в фамилии которого есть "ск"
if s.name == 'руководство':
for r in rashodDir:
if r.collaborator in s and r.collaborator.family.find('ск') >= 0:
print r.rashod.sum, "%s %s. %s."% \
(r.collaborator.family, r.collaborator.name[:2], r.collaborator.patronym[:2])
break



Офлайн

#9 Ноя. 7, 2010 18:18:39

Юля
От:
Зарегистрирован: 2010-11-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

вот этот файл импортируется. в нем я не понимаю вооще как функция save определена. Правильно или нет и

# -*- coding: utf-8 -*-

import os, csv

import rashoddir

def save(rashodDir):
def write(otdel):
for s in otdel.otdels:
writer.writerow((s.name, otdel.name))
write(s)

writer = csv.writer(open(os.path.join(os.curdir, 'otdel.csv'), 'wb'), delimiter=';')
writer.writerow((rashodDir.otdel.name, None))
write(rashodDir.otdel)

def find(c, otdel):
if otdel.collaborators:
return otdel.name
else:
for s in otdel.otdels:
r = find(c, s)

if r:
return r

writer = csv.writer(open(os.path.join(os.curdir, 'mts.csv'), 'wb'), delimiter=';')
for r in rashodDir:
writer.writerow((r.rashod.sum, r.collaborator.code, r.collaborator.family, r.collaborator.name, r.collaborator.patronym, find(r.collaborator, rashodDir.otdel), r.rashod.type.name))

def load():
otdel = {}
for rec in csv.reader(open(os.path.join(os.curdir, 'otdel.csv'), 'rb'), delimiter=';'):
otdel[rec[0]] = rashoddir.Otdel(rec[0])
if rec[1]:
otdel[rec[1]].addOtdel(otdel[rec[0]])
else:
rashodDir = rashoddir.RashodDir(rashoddir.Rashods(rashoddir.RashodTypes()), otdel[rec[0]])

rashods, rashodTypes, collaborators = {}, {}, {}
for rec in csv.reader(open(os.path.join(os.curdir, 'mts.csv'), 'rb'), delimiter=';'):
if rec[6] not in rashodTypes:
rashodTypes[rec[6]] = rashoddir.RashodType(rec[6])
rashodDir.rashods.rashodTypes.add(rashodTypes[rec[6]])
if rec[0] not in rashods:
rashods[rec[0]] = rashoddir.Rashod(rec[0], rashodTypes[rec[6]])
rashodDir.rashods.add(rashods[rec[0]])
key = int(rec[1])
if key not in collaborators:
collaborators[key] = rashoddir.Collaborator(key, rec[2], rec[3], rec[4])
otdel[rec[5]].add(collaborators[key]) #вот здесь ошибка обычно
rashodDir.add(rashoddir.RashodRecord(rashods[rec[0]], collaborators[key]))


return rashodDir

if __name__ == '__main__':
rashodDir = load()

for s in rashodDir.otdel.iterOtdel():
if s.name == 'пресс-секретарь':
for r in rashodDir:
if r.collaborator in s and r.collaborator.family.find('ан') >= 0:
print r.rashod.sum, "%s %s. %s."% \
(r.collaborator.family, r.collaborator.name[:2], r.collaborator.patronym[:2])
break

for s in rashodDir.otdel.iterOtdel():
if s.name == 'руководство':
for r in rashodDir:
if r.collaborator in s and r.collaborator.family.find('ск') >= 0:
print r.rashod.sum, "%s %s. %s."% \
(r.collaborator.family, r.collaborator.name[:2], r.collaborator.patronym[:2])
break

save(rashodDir)



Офлайн

#10 Ноя. 7, 2010 19:01:30

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

помогите разобраться и найти ошибку

я же не только на этом форуме обитаю

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version