Форум сайта python.su
macgeraКод не сносный, а банально нерабочий. Вы просто слили все функции под class sales и все.
И еще вопрос, по поводу моего кода по классу, ткните на ошибки, кроме “прибить гвоздями вывод”. или вполне сносный код?
Офлайн
Понял.. продолжу тему после очередного прочтение книги =) Раздела о классах
А вообще конечно это все попрактиковаться.. я же говорю осваиваю Пайтон… просто некоторые моменты оч сложные по книжным примерам…
Офлайн
Вообщем получилось так у меня вывод зарплаты как бы..
#!/usr/bin/env python
# coding: utf-8
class Sales: # Имя класса
def set_Data(self, name, baseName, percent): # присваиваю классу переменные, что бы потом с ними работать
self.name = name
self.baseName = baseName
self.percent = percent
def get_data(self):
return [dict(zip(("date", "product", "price"), line.split())) for line in open(self.baseName)]
def get_pay(self): #считаю процент от продаж.. к примеру зарплата
all_sales = sum([float(item["price"]) for item in data])
payment = all_sales / 100 * float(self.percent)
print self.name, 'get money =', payment
Dima = Sales()
Dima.set_Data('Dima', 'Dima.txt', '15')
data = Dima.get_data()
Anton = Sales()
Anton.set_Data('Anton', 'Anton.txt', '12')
data = Anton.get_data()
Anton.get_pay()
Dima.get_pay()
Anton = Sales() #привязка к классу
Anton.set_Data('Anton', 'Anton.txt', '12') #задание переменных
data = Anton.get_data() # вывод нужного
Anton = Sales('Anton', 'Anton.txt', '12') #привязка к классу и задание переменных
data = Anton.get_data() #
Anton.get_pay()
Отредактировано (Янв. 21, 2010 21:01:31)
Офлайн
Так покажите окончательный вариант, может чего присоветуем.
Офлайн
Вот и есть конечный вариант одной из части поставленной перед собой задачи. А основная задача такая:
Вводишь имя продавца, и создается файл базы на него, другая программа берет данные из базы продуктов и и записывает продажу в файл нужного продавца, третья программа считает зарплату. То есть это я так учусь.. сам придумываю задачи. Выполняю все в терминале, PyGTK не освоил, а Windows не пользуюсь.
Окончательный вариант такой:
#!/usr/bin/env python
# coding: utf-8
class Sales: # Имя класса
def __init__(self, name, baseName, percent): # присваиваю классу переменные, что бы потом с ними работать
self.name = name
self.baseName = baseName
self.percent = percent
def get_data(self):
return [dict(zip(("date", "product", "price"), line.split())) for line in open(self.baseName)]
def get_pay(self): #считаю процент от продаж.. к примеру зарплата
all_sales = sum([float(item["price"]) for item in data])
payment = all_sales / 100 * float(self.percent)
print self.name, 'get money ---->', payment, '$'
Dima = Sales('Dima Shvets', 'Dima.txt', '5')
data = Dima.get_data()
Dima.get_pay()
Anton = Sales('Anton Krots', 'Anton.txt', '5')
data = Anton.get_data()
Anton.get_pay()
class Sales: # Имя класса
def __init__(self, name, baseName, percent): # присваиваю классу переменные, что бы потом с ними работать
self.name = name
self.baseName = baseName
self.percent = percent
def get_pay(self):
data = [dict(zip(("date", "product", "price"), line.split())) for line in open(self.baseName)]
all_sales = sum([float(item["price"]) for item in data])
payment = all_sales / 100 * float(self.percent)
print self.name, 'Получит денег ---->', payment, '$'
Отредактировано (Янв. 21, 2010 22:48:15)
Офлайн
Попробуйте создать data в __init__, вернее это будет self.data.
А в функциях типа get_pay просто обрабатывайте self.data.
Офлайн
Думал что все переменные в __init__ обязательно должны быть в аргументах…
Теперь вот так вот замечательно все получилось! Спасибо! Хороший опыт и знания получил!
#!/usr/bin/env python
# coding: utf-8
class Sales: # Имя класса
def __init__(self, name, baseName, percent): # присваиваю классу переменные, что бы потом с ними работать
self.name = name
self.baseName = baseName
self.percent = percent
self.data = [dict(zip(('date', 'product', 'price'), line.split())) for line in open(self.baseName)]
def get_sale(self):
for item in self.data:
print item['product'], item['price'], '$'
def get_pay(self): #считаю процент от продаж.. к примеру зарплата
all_sales = sum([float(item["price"]) for item in self.data])
payment = all_sales / 100 * float(self.percent)
print self.name, 'Получит денег ---->', payment, '$'
Dima = Sales('Дмиртрий Лохушевцев', 'Dima.txt', '5')
Anton = Sales('Антон Якименко', 'Anton.txt', '5')
Dima.get_pay()
Dima.get_sale()
print '\n'
Anton.get_pay()
Anton.get_sale()
Офлайн
Я бы все-таки попробовал бы вынести вывод из класса.
Что-нибудь типа такого:
dima = Sales('Дмиртрий Лохушевцев', 'Dima.txt', '5')
print dima.name, 'Получит денег ---->', dima.get_pay(), '$'
Офлайн
Сегодня поиграю с выводами.. Просто в первую очередь думал о том что бы все работало =)
Кстати попробовал так
def get_sale(self): #показываю все продажи
for item in self.data:
return item['product']
Dima = Sales('Дмиртрий Лохушевцев', 'Dima.txt', '5')
Dima.get_sale()
def get_sale(self): #показываю все продажи
for item in self.data:
print item['product']
Отредактировано (Янв. 22, 2010 10:09:17)
Офлайн
Правильно. Потому что print не прерывает работу функции, а return заканчивает ее, выходит из нее. Поэтому так и назван.
У этой проблемы как минимум 2 решения: возвращать список, либо сделать этот метод генератором. Попробуйте оба, выберите чего больше понравится.
Офлайн