Python - Ejercicio POO diccionarios

 
Vista:

Ejercicio POO diccionarios

Publicado por Andreu (1 intervención) el 28/09/2018 12:02:03
Hola, alguien me podria explicar linea por linea que hace el metodo ingredient(selfl)?

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
class Pizzeria:
    def __init__(self):
        pizza_card_factory = dict
        self._pizza_card = pizza_card_factory()
 
    @property
    def pizza(self):
        return self._pizza_card
 
    @property
    def ingredient(self):
        ingredients = {}
        for pizza, value in self._pizza_card.items():
            print (pizza,"hola",value)
 
            for ingredient in value:
                if not ingredient in ingredients.keys():
                    ingredients[ingredient] = [pizza]
                else:
                    ingredients[ingredient].append(pizza)
        return ingredients
 
    def add_pizza(self, pizza, ingredients):
        self._pizza_card[pizza] = ingredients
 
 
 
pizz = Pizzeria()
pizz.add_pizza("Margarita", ["Tomate", "Jamon York", "Mozzarella"])
pizz.add_pizza("Pepperoni", ["Tomate", "Pepperoni", "Mozzarella"])
pizz.add_pizza("Ojo de Buey", ["Tomate", "Ternera", "Huevo Frito", "Mozzarella"])
 
print(pizz.ingredient["Tomate"])
print(pizz.ingredient["Ternera"])
print(pizz.pizza["Ojo de Buey"])
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de abZer0x
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ejercicio POO diccionarios

Publicado por abZer0x (109 intervenciones) el 29/09/2018 07:54:04
Hola Andreu, básicamente lo que hace el método ingredient, es crear un diccionario llamado ingredients el cual utiliza como claves los ingredientes y como valor una lista con el nombre de las pizzas que contienen dicho ingrediente, es decir, por ejemplo, cuando haces:
1
print(pizz.ingredient["Tomate"])
Retornara una lista con el nombre de todas las pizzas que contiene dicho ingrediente.
En cambio, si solo accedes a la propiedad ingredients (sin proporcionar ningún ingrediente como clave) veras que retorna un diccionario parecido al siguiente:
1
2
3
4
5
6
7
8
{
'Tomate': ['Margarita', 'Pepperoni', 'Ojo de Buey'],
'Jamon York': ['Margarita'],
'Mozzarella': ['Margarita', 'Pepperoni', 'Ojo de Buey'],
'Pepperoni': ['Pepperoni'],
'Ternera': ['Ojo de Buey'],
'Huevo Frito': ['Ojo de Buey']
}

Analizando linea a linea el método realiza lo siguiente:
Crea un diccionario llamado ingredients
1
ingredients = {}

Recorre el dict_view retornado por el método items del diccionario _pizza_card, el cual tiene la forma {'NombrePizza': ['ingrediente1', 'ingrediente2', 'ingrediente3'...]}
1
for pizza, value in self._pizza_card.items():

Luego recorre la lista de ingredientes de la pizza y comprueba si el ingrediente ya existe en el diccionario ingredients, es decir, si este es una clave de dicho diccionario. De no ser así crea un nuevo elemento en éste y asigna como valor una lista cuyo primer elemento es el nombre de la pizza. En caso de que ya exista, simplemente agrega la pizza a la lista.
1
2
3
4
5
for ingredient in value:
    if not ingredient in ingredients.keys():
        ingredients[ingredient] = [pizza]
    else:
        ingredients[ingredient].append(pizza)

Otra cosa importante a destacar en este método, es el uso del decorador @property, para el cual te comparto unos artículos acerca del mismo.
https://docs.python.org/3/library/functions.html?highlight=property#property
https://www.programiz.com/python-programming/property

Nos comentas si tienes alguna duda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar