From a39c75505b0159417c28573bba7e6f2ffb1ae504 Mon Sep 17 00:00:00 2001 From: xavistem <117859727+xavistem@users.noreply.github.com> Date: Tue, 24 Jun 2025 12:22:05 +0200 Subject: [PATCH] Lab Done --- lab-python-error-handling.ipynb | 153 +++++++++++++++++++++++++++++++- 1 file changed, 151 insertions(+), 2 deletions(-) diff --git a/lab-python-error-handling.ipynb b/lab-python-error-handling.ipynb index f4c6ef6..89f1348 100644 --- a/lab-python-error-handling.ipynb +++ b/lab-python-error-handling.ipynb @@ -72,11 +72,160 @@ "\n", "4. Test your code by running the program and deliberately entering invalid quantities and product names. Make sure the error handling mechanism works as expected.\n" ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "17ff5f9d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creando Inventario Inicial\n", + "\n", + "Inventario inicial guardado:\n", + "{'t-shirt': 3, 'mug': 2, 'hat': 2, 'book': 5, 'keychain': 6}\n", + "\n", + "--- Gestionando Pedido del Cliente ---\n", + "Introduce los 3 productos uno por uno:\n", + "\n", + "Pedido del cliente recibido:\n", + "{'hat', 'book', 'mug'}\n", + "\n", + "--- Calculando Precio Total ---\n", + "\n", + "El precio total del pedido es: 60.0 €\n" + ] + } + ], + "source": [ + "#LAB: Error Handling\n", + "\n", + "# Lista de productos que manejamos\n", + "lista_productos = [\"t-shirt\", \"mug\", \"hat\", \"book\", \"keychain\"]\n", + "\n", + "# Función para crear el inventario inicial, ahora con control de errores.\n", + "def crear_stock_inicial(productos):\n", + " \"\"\"\n", + " Pide al usuario la cantidad inicial para cada producto.\n", + " No permite que se introduzcan valores que no sean números o que sean negativos.\n", + " \"\"\"\n", + " stock = {}\n", + " print(\"Creando Inventario Inicial\")\n", + " for producto in productos:\n", + " # Hago un bucle infinito que solo se romperá cuando el usuario ponga un número válido.\n", + " while True:\n", + " try:\n", + " cantidad = int(input(f\"Introduce la cantidad de '{producto}': \"))\n", + " # Si el número es negativo, le aviso y el bucle vuelve a empezar.\n", + " if cantidad < 0:\n", + " print(\"¡Ojo! La cantidad no puede ser negativa. Inténtalo de nuevo.\")\n", + " # Si el número es correcto (0 o más), lo guardo y rompo el bucle.\n", + " else:\n", + " stock[producto] = cantidad\n", + " break\n", + " # Si el usuario escribe texto en vez de un número, saltará este error.\n", + " except ValueError:\n", + " print(\"¡Error! Debes introducir un número entero.\")\n", + " return stock\n", + "\n", + "# Función para que el cliente haga su pedido, también con control de errores.\n", + "def conseguir_pedido(stock_actual):\n", + " \"\"\"\n", + " Pide al usuario los productos que quiere.\n", + " Comprueba que el número de productos sea válido.\n", + " Comprueba que el producto exista y que haya stock.\n", + " \"\"\"\n", + " print(\"\\n--- Gestionando Pedido del Cliente ---\")\n", + " \n", + " # Primero, pido el número de productos diferentes que va a querer.\n", + " while True:\n", + " try:\n", + " num_pedidos = int(input(\"Introduce el número de productos distintos que quieres pedir: \"))\n", + " if num_pedidos > 0:\n", + " break # Si es un número positivo, salimos del bucle.\n", + " else:\n", + " print(\"El número de productos debe ser mayor que cero.\")\n", + " except ValueError:\n", + " print(\"Por favor, introduce un número válido.\")\n", + "\n", + " # Ahora pido los nombres de los productos.\n", + " pedido_cliente = set()\n", + " print(f\"Introduce los {num_pedidos} productos uno por uno:\")\n", + " while len(pedido_cliente) < num_pedidos:\n", + " # Bucle para pedir un producto válido\n", + " while True:\n", + " try:\n", + " nombre_producto = input(f\"Producto #{len(pedido_cliente) + 1}: \")\n", + " \n", + " # Compruebo si el producto existe en nuestro stock\n", + " if nombre_producto not in stock_actual:\n", + " # Si no existe, lanzo un error yo mismo para que lo capture el 'except'.\n", + " raise ValueError(f\"El producto '{nombre_producto}' no existe en la tienda.\")\n", + " \n", + " # Compruebo si queda stock de ese producto\n", + " if stock_actual[nombre_producto] == 0:\n", + " raise ValueError(f\"Lo siento, no queda stock de '{nombre_producto}'.\")\n", + "\n", + " # Si todo está bien, lo añado al set y rompo el bucle para pedir el siguiente producto\n", + " pedido_cliente.add(nombre_producto)\n", + " break\n", + " \n", + " except ValueError as e:\n", + " # Capturo el error (ya sea porque no existe o no hay stock) y muestro el mensaje.\n", + " print(f\"Error: {e} Por favor, elige otro producto.\")\n", + "\n", + " return pedido_cliente\n", + "\n", + "\n", + "# Función para calcular el precio total, con control de errores.\n", + "def calcular_precio_final(pedido):\n", + " \"\"\"\n", + " Para cada producto en el pedido, pide un precio.\n", + " No permite precios negativos o que no sean números.\n", + " \"\"\"\n", + " print(\"\\n--- Calculando Precio Total ---\")\n", + " precio_total = 0.0 # Uso 0.0 para que el resultado sea un float\n", + " \n", + " for producto in pedido:\n", + " # Otro bucle infinito para asegurarme de que el precio es válido.\n", + " while True:\n", + " try:\n", + " precio = float(input(f\"Introduce el precio de '{producto}': \"))\n", + " if precio > 0:\n", + " precio_total += precio # Sumo el precio al total.\n", + " break # Salgo del bucle si el precio es correcto.\n", + " else:\n", + " print(\"El precio debe ser un número positivo.\")\n", + " except ValueError:\n", + " print(\"¡Error! Debes introducir un número (ej: 10.50).\")\n", + " \n", + " return precio_total\n", + "\n", + "\n", + "# EJECUCIÓN DEL PROGRAMA\n", + "\n", + "# 1. Creamos el inventario con la función que controla errores.\n", + "inventario = crear_stock_inicial(lista_productos)\n", + "print(\"\\nInventario inicial guardado:\")\n", + "print(inventario)\n", + "\n", + "# 2. Obtenemos el pedido del cliente con la función que controla errores.\n", + "orden_del_cliente = conseguir_pedido(inventario)\n", + "print(\"\\nPedido del cliente recibido:\")\n", + "print(orden_del_cliente)\n", + "\n", + "# 3. Calculamos el precio total con la función que controla errores.\n", + "total_a_pagar = calcular_precio_final(orden_del_cliente)\n", + "print(f\"\\nEl precio total del pedido es: {total_a_pagar} €\")" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "base", "language": "python", "name": "python3" }, @@ -90,7 +239,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.12.7" } }, "nbformat": 4,