1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #!/usr/bin/env python3
# coding: utf-8
#from operator import itemgetter # Si ça te fait plaisir...
class Product:
def __init__(self, name, price, tpe=None):
self.name = name
self.price = price
self.state = "CRU"
self.type = tpe
# __init__()
def __str__(self):
return "{0}|{1} ({2}$) - {3}".format(self.type, self.name, self.price, self.state)
@staticmethod
def sort_by_name(lst, *args, **kwargs):
return sorted(lst, key=lambda x:x.name, *args, **kwargs)
@staticmethod
def sort_by_price(lst, *args, **kwargs):
return sorted(lst, key=lambda x:x.price, *args, **kwargs)
@staticmethod
def sort_by_any(lst, item, *args, **kwargs):
return sorted(lst, key=lambda x:x.__dict__[item], *args, **kwargs)
# class Product
inventory = []
for (name, price, tpe) in (
("cote de porc", 5, "Buchery"),
("saucisse", 2, "Buchery"),
("pain", 1.5, "Bakery"),
("pistolet", 0.5, "Bakery"),
("tomate", 0.3, "Vege"),
("oignon", 0.4, "Vege"),
): inventory.append(Product(name, price, tpe))
# Autre écriture bien plus cool qui montre que vraiment create_new_item() sert à que dalle...
inventory=list(
Product(name, price, tpe) for (name, price, tpe) in (
("cote de porc", 5, "Buchery"),
("saucisse", 2, "Buchery"),
("pain", 1.5, "Bakery"),
("pistolet", 0.5, "Bakery"),
("tomate", 0.3, "Vege"),
("oignon", 0.4, "Vege"),
)
)
print(inventory)
# Bon, après la phase "wonderful", passons à la phase "topissitude"
print(Product.sort_by_name(inventory, reverse=True))
print(Product.sort_by_price(inventory))
print(Product.sort_by_any(inventory, "type", reverse=False))
# Et si on veut avoir une liste définitivement triée (phase topest)
sorted_inventory=Product.sort_by_any(inventory, "price", reverse=True)
print(sorted_inventory) |
Partager