پاسخ تمرین فروشگاه شیگرا
فایل model.py:
from time import strftime
import statistics
class User:
"""
User model which includes username of the client
"""
def __init__(self, username: str):
self.username = username
def __str__(self):
return self.username
class Product:
"""
Product model which includes products' data
"""
num_of_products = 0
def __init__(self, name: str, price: int):
Product.num_of_products += 1
self.id = Product.num_of_products
self.name = name
self.price = price
self.quantities = {}
def __str__(self):
return str((self.id, self.name, self.price))
def add_quantity(self, store, number):
if store in self.quantities.keys():
new_quantity = self.quantities[store] + number
if new_quantity >= 0:
self.quantities[store] = new_quantity
else:
raise Exception('Quantity is not enough!')
else:
self.quantities[store] = number
@property
def quantity(self):
return sum(self.quantities.values())
def __str__(self):
return str((self.id, self.name, self.price))
class Purchase:
"""
Purchase model includes:
- Who purchased? user.
- Which product? product.
- From which store? store.
- How many? number.
- When? date.
And it has a container for all registered purchases.
"""
purchases = list()
def __init__(self, product: Product, store: str, number: int, user: User,
date: str = strftime('%Y-%m-%d %H:%M:%S')):
if product.quantities[store] - number < 0:
raise Exception('Quantity is not enough!')
self.product = product
self.store = store
self.number = number
self.user = user
self.date = date
product.add_quantity(store, -number)
Purchase.purchases.append(self)
def __str__(self):
return (str(self.product), self.store, self.number, str(self.user), self.date).__str__()
@classmethod
def store_revenue(cls, store):
return sum(
purchase.product.price * purchase.number
for purchase in cls.purchases
if purchase.store == store
)
@classmethod
def users_purchased_product(cls, product):
return [purchase.user for purchase in cls.purchases if purchase.product == product]
class Comment:
"""
Comments model includes:
- who wrote the comment? user.
- what rate the user is given? rating.
- comment is written for which product? product.
- text of the comment? text.
"""
comments = list()
def __init__(self, user: User, product: Product, rating: int, text: str = ''):
self.user = user
self.rating = rating
self.product = product
self.text = text
Comment.comments.append(self)
def __str__(self):
return "user: %s \n product: %s \n rating: %d \n text: %s" % (self.user, self.product, self.rating, self.text)
@classmethod
def user_comments(cls, user):
return [comment for comment in cls.comments if comment.user == user]
@classmethod
def average_rate_purchased_product(cls, product):
return statistics.mean([comment.rating for comment in cls.comments if comment.product == product])
فایل store.py:
from model import User, Product, Purchase, Comment
def main():
done = False
while not done:
action = input("""
1 add user
2 purchase
3 add product
4 add comment
5 calculate revenue
6 print users
7 end
""")
done = action == 7
user = User('Masoud')
product = Product('Gorbe', 1000)
Purchase(product, 'Sharif', 2, user)
Comment(user, 5, product, 'Gorbe is good.')
if __name__ == '__main__':
main()