{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "id": "5afdc3d6", "metadata": { "id": "5afdc3d6" }, "source": [ "# Ejercicio con @property" ] }, { "cell_type": "markdown", "id": "9295ee30", "metadata": { "id": "9295ee30" }, "source": [ "## Primera parte\n", "* Crear una clase Producto con tres atributos (\\__codigo, \\__nombre, \\__precio)\n", "* Crear para cada atributo un Setter y un Getter usando @property\n", "* Crear un método llamado calcular_total que recibe como parámetro las unidades compradas y nos devuelve el importe pagado multiplicando unidades por precio.\n", "* Crear un método especial \\__str\\__ que informe del valor de los atributos de las instancias creadas.\n", "* Después de crear la clase\n", " - Crear tres objetos\n", " - Imprimir los tres objetos para ver cómo funciona el método especial \\__str\\__\n", " - Imprimir el nombre de un objeto para comprobar que funciona el Getter\n", " - Cambiar el nombre de un objeto para comprobar que funciona el Setter\n", " - Comprobar que el nombre se ha cambiado correctamente\n", " - Comprobar que funciona el método calcular_total para cada una de las tres instancias creadas" ] }, { "cell_type": "code", "execution_count": 1, "id": "fb78abd1", "metadata": { "id": "fb78abd1" }, "outputs": [], "source": [ "class Producto:\n", " def __init__(self, codigo, nombre, precio):\n", " self.__codigo = codigo\n", " self.__nombre = nombre\n", " self.__precio = precio\n", "\n", " @property # estas tres líneas son un Getter\n", " def codigo(self):\n", " return self.__codigo\n", " @codigo.setter # estas tres líneas son un Setter\n", " def codigo(self, valor):\n", " self.__codigo = valor\n", "\n", " @property\n", " def nombre(self):\n", " return self.__nombre\n", " @nombre.setter\n", " def nombre(self, valor):\n", " self.__nombre = valor\n", "\n", " @property\n", " def precio(self):\n", " return self.__precio\n", " @precio.setter\n", " def precio(self, valor):\n", " self.__precio = valor\n", "\n", " def calcular_total(self, unidades):\n", " return self.__precio * unidades\n", "\n", " def __str__(self):\n", " return f\"Código: {self.__codigo}, Nombre: {self.__nombre}, Precio: {self.__precio}\"" ] }, { "cell_type": "code", "execution_count": 2, "id": "b8668491", "metadata": { "id": "b8668491", "outputId": "9c7a7aae-a94b-4e48-a11f-eb1ca6c34bd6", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Código: 1, Nombre: Producto 1, Precio: 10\n", "Código: 2, Nombre: Producto 2, Precio: 20\n", "Código: 3, Nombre: Producto 3, Precio: 30\n" ] } ], "source": [ "p1 = Producto(1, 'Producto 1', 10)\n", "p2 = Producto(2, 'Producto 2', 20)\n", "p3 = Producto(3, 'Producto 3', 30)\n", "print(p1)\n", "print(p2)\n", "print(p3)" ] }, { "cell_type": "code", "execution_count": 3, "id": "2a045b85", "metadata": { "id": "2a045b85", "outputId": "e6f80867-0f6d-4579-a686-9a5ec429606b", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Producto 1\n" ] } ], "source": [ "print(p1.nombre) # vemos que funciona el Get" ] }, { "cell_type": "code", "execution_count": 4, "id": "b55584b0", "metadata": { "id": "b55584b0", "outputId": "eda8c84c-ec1e-4c0d-e6bb-7643e0b2f24d", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Tiritas\n" ] } ], "source": [ "p1.nombre = \"Tiritas\" # vemos que funciona el Set\n", "print(p1.nombre)" ] }, { "cell_type": "code", "execution_count": 5, "id": "34b4711b", "metadata": { "id": "34b4711b" }, "outputs": [], "source": [ "p2.nombre=\"Vitaminas\" # cambiamos el nombre del Producto 2\n", "p3.nombre=\"Crema\" # cambiamos el nombre del Producto 3" ] }, { "cell_type": "code", "execution_count": 6, "id": "0aa64932", "metadata": { "id": "0aa64932", "outputId": "b4b9778c-80db-4911-ee72-aa0abaa7a22a", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "20\n", "40\n", "60\n" ] } ], "source": [ "print(p1.calcular_total(2)) # utilizamos el método calcular_total\n", "print(p2.calcular_total(2)) # que proporciona el producto de\n", "print(p3.calcular_total(2)) # precio por unidades" ] }, { "cell_type": "code", "execution_count": 7, "id": "aa20213d", "metadata": { "id": "aa20213d", "outputId": "fd24cf6b-7a0a-466f-fdba-0bc02ee42252", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Código: 1, Nombre: Tiritas, Precio: 10\n" ] } ], "source": [ "print(p1) # es necesario poner un print para que actúe el método __str__" ] }, { "cell_type": "code", "execution_count": 8, "id": "5e11a71f", "metadata": { "id": "5e11a71f", "outputId": "5f7b0958-afae-4c67-eafa-bb8cb684afc4", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "<__main__.Producto at 0x78a178d21fc0>" ] }, "metadata": {}, "execution_count": 8 } ], "source": [ "p1 # si no se pone el print no actúa el método __str__" ] }, { "cell_type": "markdown", "id": "e59775c5", "metadata": { "id": "e59775c5" }, "source": [ "## Segunda parte\n", "* Añadir una clase Pedido cuyos atributos son:\n", " - lista de productos\n", " - lista de cantidades\n", "* Añadir los siguientes métodos\n", " - total_pedido: muestra el importe total pagado por el pedido\n", " - mostrar_pedido: muestra los productos del pedido" ] }, { "cell_type": "code", "execution_count": 9, "id": "ff3071de", "metadata": { "id": "ff3071de" }, "outputs": [], "source": [ "class Pedido:\n", " def __init__(self, productos, cantidades):\n", " self.__productos = productos\n", " self.__cantidades = cantidades\n", "\n", " def total_pedido(self):\n", " total = 0\n", " for (p,c) in zip(self.__productos, self.__cantidades): # así podemos recorrer los dos arrays a la vez\n", " total += p.calcular_total(c) # zip une los arrays\n", " return total\n", "\n", " def mostrar_pedido(self):\n", " for (p,c) in zip(self.__productos, self.__cantidades):\n", " print(f\"Producto: ({p}) → {c} unidades\") # los paréntesis son un adorno para resaltar el producto\n", "\n", "\n", "prod = [p1, p2, p3] # creamos una lista con los productos que ya teníamos instanciados\n", "cant = [2, 3, 4] # las cantidades son números" ] }, { "cell_type": "code", "execution_count": 10, "id": "96d104e0", "metadata": { "id": "96d104e0", "outputId": "597277d9-2fea-4e7e-8ebb-03b6b1f3999b", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "200" ] }, "metadata": {}, "execution_count": 10 } ], "source": [ "pedido1 = Pedido(prod, cant) # creamos un pedido usando como argumentos la lista de pedidos y la lista de cantidades\n", "pedido1.total_pedido() # llama al método total_pedido que a su vez llama a calcular_total para cada producto y suma\n", " # 200 = 10*2 + 20*3 + 30*4" ] }, { "cell_type": "code", "execution_count": 11, "id": "8606829c", "metadata": { "id": "8606829c", "outputId": "73913a07-aa6f-47d5-afcc-881f17c0f13f", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Producto: (Código: 1, Nombre: Tiritas, Precio: 10) → 2 unidades\n", "Producto: (Código: 2, Nombre: Vitaminas, Precio: 20) → 3 unidades\n", "Producto: (Código: 3, Nombre: Crema, Precio: 30) → 4 unidades\n" ] } ], "source": [ "pedido1.mostrar_pedido()" ] }, { "cell_type": "markdown", "id": "5b216680", "metadata": { "id": "5b216680" }, "source": [ "## Tercera Parte\n", "Siguiendo con la clase Pedido, añade la siguiente funcionalidad.\n", "* Añadir producto: le pasamos un producto y una cantidad\n", "* Añadir ese producto y esa cantidad a su respectiva lista\n", "* Debemos validar que el dato que nos pasen es correcto, es decir\n", " - que sea un producto y\n", " - que la cantidad se válida\n", " - en caso contrario devolver una excepción\n", "* Eliminar producto:\n", " - le pasamos el producto a borrar, si existe, lo eliminamos\n", " - si no existe, devolver una excepción, indicándolo\n", "* Comprobar también que es un producto lo que nos pasan" ] }, { "cell_type": "code", "execution_count": 12, "id": "1658939d", "metadata": { "id": "1658939d" }, "outputs": [], "source": [ "class Pedido:\n", " def __init__(self): # hemos eliminado los atributos, ya no nos los han de pasar\n", " self.__productos = [] # ahora los productos son una lista vacía\n", " self.__cantidades = [] # iremos añadiendo productos y cantidades del pedido mediante métodos\n", "\n", " def agregar_producto(self, producto, cantidad): # método que añade un producto y una cantidad\n", " if not isinstance(producto, Producto): # si el producto no es instancia de la clase Producto\n", " raise Exception('agregar_producto: el producto debe ser de la clase Producto')\n", " if not isinstance(cantidad, int): # si la cantidad no es instancia de la clase int (número entero)\n", " raise Exception('agregar_producto: cantidad debe ser un número entero')\n", " if cantidad<=0:\n", " raise Exception('agregar_producto: cantidad debe ser mayor que cero')\n", " if producto in self.__productos: # si ya existe el producto\n", " indice = self.__productos.index(producto) # tomamos el índice que ocupa\n", " self.__cantidades[indice] += cantidad # aumentamos la cantidad previa\n", " else: # si no existe es pq el producto es nuevo\n", " self.__productos.append(producto)\n", " self.__cantidades.append(cantidad)\n", "\n", " def eliminar_producto(self, producto):\n", " if not isinstance(producto, Producto): # si el producto no es instancia de la clase Producto\n", " raise Exception('eliminar_producto: el producto debe ser de la clase Producto')\n", " if producto in self.__productos: # si ya existe el producto\n", " indice = self.__productos.index(producto) # tomamos el índice que ocupa\n", " del self.__productos[indice]\n", " del self.__cantidades[indice]\n", " else:\n", " raise Exception('eliminar_producto: el producto no existe')\n", "\n", " def total_pedido(self):\n", " total = 0\n", " for (p,c) in zip(self.__productos, self.__cantidades):\n", " total += p.calcular_total(c)\n", " return total\n", "\n", " def mostrar_pedido(self): # método con un print diferente al anteriro mostrar_pedido\n", " for (p,c) in zip(self.__productos, self.__cantidades):\n", " print(f\"{p.nombre} → {c} unidades → {p.precio} €\") # ahora usamos p.nombre y p.precio en lugar de todo el p" ] }, { "cell_type": "code", "execution_count": 13, "id": "4a4d5812", "metadata": { "id": "4a4d5812", "outputId": "a7391170-5c90-4b9c-de98-2bc6b97d3c33", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Código: 1, Nombre: Producto 1, Precio: 5\n", "Código: 2, Nombre: Producto 2, Precio: 10\n", "Código: 3, Nombre: Producto 3, Precio: 20\n" ] } ], "source": [ "p1 = Producto(1, 'Producto 1', 5)\n", "p2 = Producto(2, 'Producto 2', 10)\n", "p3 = Producto(3, 'Producto 3', 20)\n", "print(p1)\n", "print(p2)\n", "print(p3)" ] }, { "cell_type": "code", "execution_count": 14, "id": "2c999d00", "metadata": { "id": "2c999d00", "outputId": "026283cc-304c-40fb-8cb2-9f7c256f24b2", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Producto 1 → 5 unidades → 5 €\n", "Producto 2 → 5 unidades → 10 €\n", "Producto 3 → 5 unidades → 20 €\n", "\tTotal pedido: 175\n", "========================================\n", "Producto 2 → 5 unidades → 10 €\n", "Producto 3 → 5 unidades → 20 €\n", "\tTotal pedido: 150\n" ] } ], "source": [ "pedido = Pedido() # ahora el pedido se crea sin pasar parámentros\n", "\n", "try: # trabajamos dentro de un try para recoger excepciones\n", " pedido.agregar_producto(p1, 5) # agregamos productos al pedido p1\n", " pedido.agregar_producto(p2, 5) # agregamos productos al pedido p2\n", " pedido.agregar_producto(p3, 5) # agregamos productos al pedido p3\n", " pedido.mostrar_pedido() # lanzamos el método mostrar_pedido\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido())) # mostramos el total del pedido\n", " print(\"=\"*40)\n", " pedido.eliminar_producto(p1) # eliminamos el producto p1\n", " pedido.mostrar_pedido() # mostramos nuevamente el pedido ahora sin p1\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido())) # mostramos el total del pedido ahora sin p1\n", "except Exception as e: # recopgemos las excepciones\n", " print(e) # imprimimos las excepciones" ] }, { "cell_type": "markdown", "id": "2883ce82", "metadata": { "id": "2883ce82" }, "source": [ "### Comprobando excepciones\n", "Veamos como saltan las excepciones." ] }, { "cell_type": "code", "execution_count": 15, "id": "45862cb4", "metadata": { "id": "45862cb4", "outputId": "6d6c9aee-1c5f-468a-d0f3-0ee1ee0ac503", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "agregar_producto: cantidad debe ser mayor que cero\n" ] } ], "source": [ "pedido = Pedido()\n", "\n", "try:\n", " pedido.agregar_producto(p1, -5) # cantidad negativa, debe ser positiva\n", " pedido.agregar_producto(p2, 5)\n", " pedido.agregar_producto(p3, 5)\n", " pedido.mostrar_pedido()\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido()))\n", " print(\"=\"*40)\n", " pedido.eliminar_producto(p1)\n", " pedido.mostrar_pedido()\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido()))\n", "except Exception as e:\n", " print(e)" ] }, { "cell_type": "code", "execution_count": 16, "id": "998189ac", "metadata": { "id": "998189ac", "outputId": "8a6545ec-991b-4c43-cb07-3302f1285c10", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "agregar_producto: cantidad debe ser un número entero\n" ] } ], "source": [ "pedido = Pedido()\n", "\n", "try:\n", " pedido.agregar_producto(p1, \"cinco\") # una cadena en lugar de un número\n", " pedido.agregar_producto(p2, 5)\n", " pedido.agregar_producto(p3, 5)\n", " pedido.mostrar_pedido()\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido()))\n", " print(\"=\"*40)\n", " pedido.eliminar_producto(p1)\n", " pedido.mostrar_pedido()\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido()))\n", "except Exception as e:\n", " print(e)" ] }, { "cell_type": "code", "execution_count": 17, "id": "108962f3", "metadata": { "id": "108962f3", "outputId": "d17d8688-ae91-4df4-9d26-d213afb7ca2b", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "agregar_producto: el producto debe ser de la clase Producto\n" ] } ], "source": [ "pedido = Pedido()\n", "\n", "try:\n", " pedido.agregar_producto(\"tiritas\", 5) # debe ser una instancia válida de producto\n", " pedido.agregar_producto(p2, 5)\n", " pedido.agregar_producto(p3, 5)\n", " pedido.mostrar_pedido()\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido()))\n", " print(\"=\"*40)\n", " pedido.eliminar_producto(p1)\n", " pedido.mostrar_pedido()\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido()))\n", "except Exception as e:\n", " print(e)" ] }, { "cell_type": "markdown", "id": "affacc82", "metadata": { "id": "affacc82" }, "source": [ "## Cuarta parte\n", "* Crear la clase Descuento con estos atributos:\n", " - tipo: es un string y solo puede ser Fijo o Porcentaje\n", " - valor: es un número, si es fijo debe ser mayor que cero y si es porcentaje debe estar en el rango (0,100]\n", "* Funcionalidades de la clase:\n", " - aplicar_descuento(precio):\n", " - Si el tipo es Fijo, se le resta la cantidad al precio\n", " - Si el tipo el Porcentaje, se le resta el porcentaje al precio\n", "* Añadir este descuento al producto, este será opcional y solo se aplicará si tiene descuento\n", "* Validar que el descuento se crea correctamente" ] }, { "cell_type": "code", "execution_count": 18, "id": "07c3c3c6", "metadata": { "id": "07c3c3c6" }, "outputs": [], "source": [ "TIPO_DTO_FIJO = \"Fijo\" # constantes globales, el Dto. Fijo se refiere a dto. en euros\n", "TIPO_DTO_PORC = \"Porcentaje\"\n", "\n", "class Descuento: # creamos la clase Descuento\n", " def __init__(self, tipo, valor):\n", " if not isinstance(tipo, str): # en todos estos if tenemos que validar muchos aspectos\n", " raise ValueError('constructor descuento: tipo debe ser una cadena')\n", " if not isinstance(valor, int):\n", " raise ValueError('constructor descuento: valor debe ser un número')\n", " if tipo != TIPO_DTO_FIJO and tipo != TIPO_DTO_PORC:\n", " raise ValueError('constructor descuento: el tipo debe ser fijo o porcentaje')\n", " if tipo == TIPO_DTO_FIJO and valor <= 0:\n", " raise ValueError('constructor descuento: el valor en el tipo fijo debe ser > 0')\n", " if tipo == TIPO_DTO_PORC and (valor<=0 or valor>100):\n", " raise ValueError('constructor descuento: el valor del porcentaje debe estar en el rango (0,100]')\n", "\n", " self.__tipo = tipo\n", " self.__valor = valor\n", "\n", " @property # estas tres líneas son un Getter\n", " def tipo(self):\n", " return self.__tipo\n", " @tipo.setter # estas tres líneas son un Setter\n", " def tipo(self, v): # uso la v para recoger el parámetro y no confundir con valor\n", " self.__tipo = v\n", "\n", " @property # estas tres líneas son un Getter\n", " def valor(self):\n", " return self.__valor\n", " @valor.setter # estas tres líneas son un Setter\n", " def valor(self, v): # uso la v para recoger el parámetro y no confundir con valor\n", " self.__valor = v\n", "\n", " def aplicar_descuento(self, precio):\n", " if self.__tipo == TIPO_DTO_FIJO:\n", " if precio > self.__valor:\n", " return precio - self.__valor\n", " else:\n", " return 0 # el precio no puede quedar negativo\n", " else:\n", " return precio - (precio * (self.__valor / 100))\n", " #return precio * (1-self.__valor/100) # aplicamos el descuento en porcentaje\n", "\n", "class Producto:\n", " def __init__(self, codigo, nombre, precio, descuento = None): # agregamos el descuento como un parámetro opcional\n", " self.__codigo = codigo\n", " self.__nombre = nombre\n", " self.__precio = precio\n", " self.__descuento = descuento # añadimos el atributo __descuento\n", "\n", " # Los Setter y Getter son iguales que en la clase Producto de la Primera parte salvo el Getter del precio\n", " # No añadimos Setter y Getter para el atributo __descuento porque no se usará desde fuera\n", "\n", " @property # Getter para el código\n", " def codigo(self):\n", " return self.__codigo\n", " @codigo.setter # Setter para el codigo\n", " def codigo(self, valor):\n", " self.__codigo = valor\n", "\n", " @property # Getter para el nombre\n", " def nombre(self):\n", " return self.__nombre\n", " @nombre.setter # Setter para el nombre\n", " def nombre(self, valor):\n", " self.__nombre = valor\n", "\n", " @property # Getter para el precio\n", " def precio(self):\n", " if self.__descuento == None: # si no hay descuento\n", " return self.__precio # se envía el precio\n", " else: # en caso contrario, cuando hay descuento\n", " return self.__descuento.aplicar_descuento(self.__precio) # I M P O R T A N T E\n", " @precio.setter # Setter para el precio\n", " def precio(self, valor):\n", " self.__precio = valor\n", "\n", " def calcular_total(self, unidades):\n", " return self.precio * unidades # IMPORTANTE: tenemos que poner precio y no __precio\n", "\n", " def __str__(self):\n", " return f\"Código: {self.__codigo}, Nombre: {self.__nombre}, Precio: {self.__precio}\"\n", "\n", "class Pedido: # la clase Pedido no varía\n", " def __init__(self):\n", " self.__productos = []\n", " self.__cantidades = []\n", "\n", " def agregar_producto(self, producto, cantidad):\n", " if not isinstance(producto, Producto):\n", " raise Exception('agregar_producto: el producto debe ser de la clase Producto')\n", " if not isinstance(cantidad, int):\n", " raise Exception('agregar_producto: cantidad debe ser un número entero')\n", " if cantidad<=0:\n", " raise Exception('agregar_producto: cantidad debe ser mayor que cero')\n", " if producto in self.__productos:\n", " indice = self.__productos.index(producto)\n", " self.__cantidades[indice] += cantidad\n", " else:\n", " self.__productos.append(producto)\n", " self.__cantidades.append(cantidad)\n", "\n", " def eliminar_producto(self, producto):\n", " if not isinstance(producto, Producto):\n", " raise Exception('eliminar_producto: el producto debe ser de la clase Producto')\n", " if producto in self.__productos:\n", " indice = self.__productos.index(producto)\n", " del self.__productos[indice]\n", " del self.__cantidades[indice]\n", " else:\n", " raise Exception('eliminar_producto: el producto no existe')\n", "\n", " def total_pedido(self):\n", " total = 0\n", " for (p,c) in zip(self.__productos, self.__cantidades):\n", " total += p.calcular_total(c)\n", " return total\n", "\n", " def mostrar_pedido(self):\n", " for (p,c) in zip(self.__productos, self.__cantidades):\n", " #print(f\"{p.nombre} → {c} unidades → {p.precio} €\")\n", " print(\"Producto → (\",p,\"), Cantidad → \" + str(c))" ] }, { "cell_type": "code", "execution_count": 19, "id": "5e5d666c", "metadata": { "id": "5e5d666c", "outputId": "37e23e05-1301-46ed-ddb6-0b99ff5ad2df", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Código: 1, Nombre: Producto 1, Precio: 5\n", "Código: 2, Nombre: Producto 2, Precio: 10\n", "Código: 3, Nombre: Producto 3, Precio: 20\n" ] } ], "source": [ "dto1 = Descuento(TIPO_DTO_FIJO, 2)\n", "dto2 = Descuento(TIPO_DTO_PORC, 50)\n", "\n", "p1 = Producto(1, 'Producto 1', 5)\n", "p2 = Producto(2, 'Producto 2', 10, dto1)\n", "p3 = Producto(3, 'Producto 3', 20, dto2)\n", "\n", "print(p1)\n", "print(p2)\n", "print(p3)" ] }, { "cell_type": "code", "execution_count": 20, "id": "bf7a1861", "metadata": { "id": "bf7a1861", "outputId": "a34842e1-3abc-4afa-ea0e-175a3c6fc576", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Producto → ( Código: 1, Nombre: Producto 1, Precio: 5 ), Cantidad → 5\n", "Producto → ( Código: 2, Nombre: Producto 2, Precio: 10 ), Cantidad → 5\n", "Producto → ( Código: 3, Nombre: Producto 3, Precio: 20 ), Cantidad → 5\n", "\tTotal pedido: 115.0\n" ] } ], "source": [ "pedido = Pedido()\n", "\n", "try:\n", " pedido.agregar_producto(p1, 5)\n", " pedido.agregar_producto(p2, 5)\n", " pedido.agregar_producto(p3, 5)\n", " pedido.mostrar_pedido()\n", " print('\\tTotal pedido: ' + str(pedido.total_pedido()))\n", "except Exception as e:\n", " print(e)" ] }, { "cell_type": "code", "execution_count": 21, "id": "0ba05d8b", "metadata": { "id": "0ba05d8b", "outputId": "549f6933-d54d-4f2e-8aeb-561f27b671bd", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Importe del Pedido sin descuentos: 175\n", "Importe del Pedido con descuentos: 115\n" ] } ], "source": [ "# Comprobación: precio * cantidad + precio * cantidad + precio * cantidad\n", "print(\"Importe del Pedido sin descuentos:\", 5*5 + 10*5 + 20 * 5)\n", "print(\"Importe del Pedido con descuentos:\", 5*5 + 8*5 + 10 * 5)" ] }, { "cell_type": "code", "execution_count": 22, "id": "5a5e2b93", "metadata": { "id": "5a5e2b93", "outputId": "ee6e18d9-acb2-4a90-e33a-020746b76ea3", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Precio del producto p1 con descuento: 5\n", "Precio del producto p2 con descuento: 8\n", "Precio del producto p3 con descuento: 10.0\n" ] } ], "source": [ "print(\"Precio del producto p1 con descuento:\", p1.precio)\n", "print(\"Precio del producto p2 con descuento:\", p2.precio)\n", "print(\"Precio del producto p3 con descuento:\", p3.precio)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "colab": { "name": "calisto2_0150.ipynb", "provenance": [], "include_colab_link": true } }, "nbformat": 4, "nbformat_minor": 5 }