From 45bf3d898279a2db5274100f818f9776793f7d0a Mon Sep 17 00:00:00 2001 From: Juan Boberg Aguirre Date: Tue, 14 Apr 2026 17:32:35 +0200 Subject: [PATCH 1/4] Update lab-python-functions.ipynb --- lab-python-functions.ipynb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lab-python-functions.ipynb b/lab-python-functions.ipynb index 44d337b..3e4d2ff 100644 --- a/lab-python-functions.ipynb +++ b/lab-python-functions.ipynb @@ -43,6 +43,14 @@ "\n", "\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "893f4306", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 776c3f722400b8e2fc52e8028f6ded7a699329ed Mon Sep 17 00:00:00 2001 From: Juan Boberg Aguirre Date: Wed, 15 Apr 2026 14:50:36 +0200 Subject: [PATCH 2/4] Update lab-python-functions.ipynb --- lab-python-functions.ipynb | 233 ++++++++++++++++++++++++++++++++++++- 1 file changed, 230 insertions(+), 3 deletions(-) diff --git a/lab-python-functions.ipynb b/lab-python-functions.ipynb index 3e4d2ff..f4e1814 100644 --- a/lab-python-functions.ipynb +++ b/lab-python-functions.ipynb @@ -50,12 +50,239 @@ "id": "893f4306", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# Lista de productos disponibles\n", + "products = ['mug', 'hat']\n", + "\n", + "# Diccionario vacío que guardará el inventario (producto: cantidad)\n", + "inventory = {}\n", + "\n", + "# Bucle que recorre cada producto en la lista 'products'\n", + "for p in products:\n", + " # Pide al usuario cuántas unidades tiene de ese producto\n", + " # input() devuelve texto, int() lo convierte a número entero\n", + " inventory[p] = int(input('cuántas unida\n", + "\n", + " \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2c9368ce", + "metadata": {}, + "outputs": [], + "source": [ + "def initialize_inventory(products):\n", + " # 1) Definición de la función:\n", + " # - Recibe como parámetro una lista llamada 'products'\n", + " # - Esa lista contiene los nombres de los productos (por ejemplo ['mug', 'hat'])\n", + "\n", + " inventory = {}\n", + " # 2) Crear un diccionario vacío:\n", + " # - 'inventory' se usa para guardar el inventario (producto: cantidad)\n", + " # - Inicialmente está vacío y se irá rellenando en el bucle\n", + "\n", + " for p in products:\n", + " # 3) Bucle sobre cada producto:\n", + " # - Recorre uno por uno los elementos de la lista 'products'\n", + " # - En cada iteración, 'p' vale el nombre del producto actual (por ejemplo 'mug' o 'hat')\n", + "\n", + " inventory[p] = int(input('¿Cuántas unidades? '))\n", + " # 4) Pedir y guardar el stock:\n", + " # - input muestra el mensaje y espera que el usuario introduzca una cantidad\n", + " # - int() convierte el texto introducido en número entero\n", + " # - inventory[p] guarda ese número usando el nombre del producto como clave\n", + " # - Ejemplo: si p = 'mug' y el usuario pone 10, queda inventory['mug'] = 10\n", + "\n", + " return inventory\n", + " # 5) Devolver el inventario:\n", + " # - La función termina devolviendo el diccionario 'inventory'\n", + " # - Ese diccionario contiene todos los productos y sus cantidades\n", + " # - Puede usarse en el resto del programa" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ef827348", + "metadata": {}, + "outputs": [], + "source": [ + "# Lista de productos que vamos a gestionar en el inventario\n", + "products = ['mug', 'hat']\n", + "# ↑ ↑\n", + "# | |\n", + "# | +-- Segundo producto: 'hat'\n", + "# +-- Primer producto: 'mug'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b152734e", + "metadata": {}, + "outputs": [], + "source": [ + "def customer_orders():\n", + " # Define una función llamada customer_orders.\n", + " # Esta función servirá para pedir pedidos al usuario y guardarlos.\n", + "\n", + " customer_orders = set()\n", + " # Crea un conjunto vacío llamado customer_orders.\n", + " # Un set guarda elementos únicos, así que no repite pedidos iguales.\n", + "\n", + " while True:\n", + " # Inicia un bucle infinito.\n", + " # Se repetirá hasta que se ejecute un break.\n", + "\n", + " customer_order = input(\"Enter a customer order: \")\n", + " # Pide al usuario que escriba un pedido.\n", + " # El valor introducido se guarda en la variable customer_order.\n", + "\n", + " customer_orders.add(customer_order)\n", + " # Añade el pedido escrito al conjunto customer_orders.\n", + " # Si el pedido ya existía, no se duplicará porque es un set.\n", + "\n", + " another = input(\"Add another order? yes/no: \")\n", + " # Pregunta al usuario si quiere añadir otro pedido.\n", + " # La respuesta se guarda en la variable another.\n", + "\n", + " if another == \"no\":\n", + " # Comprueba si el usuario ha escrito \"no\".\n", + "\n", + " break\n", + " # Si la respuesta es \"no\", rompe el bucle y deja de pedir pedidos.\n", + "\n", + " return customer_orders\n", + " # Devuelve el conjunto completo de pedidos recogidos." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "04c55a5e", + "metadata": {}, + "outputs": [], + "source": [ + "def customer_orders():\n", + " # Define una función llamada customer_orders.\n", + " # Esta función servirá para recoger y devolver los pedidos de los clientes.\n", + "\n", + " customer_orders = set()\n", + " # Crea un conjunto vacío llamado customer_orders.\n", + " # Un set almacena solo elementos únicos, sin duplicados.\n", + " # los pedidos y añadirlos al conjunto con customer_orders.add(...).\n", + "\n", + " for prod in customer_orders:\n", + " # Inicia un bucle for que recorre cada producto del conjunto customer_orders.\n", + " # En cada iteración, la variable 'prod' vale un producto distinto.\n", + "\n", + " print(prod)\n", + " # Muestra por pantalla ese producto (sirve para ver qué pedidos hay guardados).\n", + "\n", + " return customer_orders\n", + " # Devuelve el conjunto completo de pedidos recogidos.\n", + " # Puede usarlo otro código para, por ejemplo, analizar el stock o mostrar reportes." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "e6c15073", + "metadata": {}, + "outputs": [], + "source": [ + "inventory = {}\n", + "\n", + "def update_inventory(customer_orders, inventory):\n", + " for prod in customer_orders:\n", + " if prod in inventory:\n", + " # aquí actualizas la cantidad de ese producto en inventory[prod]\n", + " ...\n", + " else:\n", + " # aquí decides qué hacer si el producto no está en el inventario\n", + " ...\n", + " return inventory\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "0e7c013f", + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_order_statistics(customer_orders, products):\n", + " total_pedidos = len(customer_orders)\n", + " porcentaje = (len(customer_orders) / len(products)) * 100 # ✅ Pedidos vs TOTAL disponibles\n", + " return total_pedidos, porcentaje" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aba2615c", + "metadata": {}, + "outputs": [], + "source": [ + "def print_order_statistics(order_statistics):\n", + " total, porcentaje = order_statistics # DESEMPQUETA la tupla en 2 variables separadas\n", + " print(f\"Total pedidos: {total}\") # IMPRIME total de productos pedidos\n", + " print(f\"Porcentaje: {porcentaje:.1f}%\") # IMPRIME porcentaje con 1 decimal\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "a86c3f73", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "def print_updated_inventory(inventory):\n", + " print(\"Inventario actualizado:\")\n", + " for producto, cantidad in inventory.items():\n", + " print(f\"{producto}: {cantidad} unidades\")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "bd50c4d4", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'initialize_inventory' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[40]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m products = [\u001b[33m\"mug\"\u001b[39m, \u001b[33m\"hat\"\u001b[39m, \u001b[33m\"tshirt\"\u001b[39m]\n\u001b[32m 2\u001b[39m \n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m inventory = initialize_inventory(products)\n\u001b[32m 4\u001b[39m customer_orders = customer_orders()\n\u001b[32m 5\u001b[39m update_inventory(customer_orders, inventory)\n\u001b[32m 6\u001b[39m order_statistics = calculate_order_statistics(customer_orders, products)\n", + "\u001b[31mNameError\u001b[39m: name 'initialize_inventory' is not defined" + ] + } + ], + "source": [ + "products = [\"mug\", \"hat\", \"tshirt\"]\n", + "\n", + "inventory = initialize_inventory(products)\n", + "customer_orders = customer_orders()\n", + "update_inventory(customer_orders, inventory)\n", + "order_statistics = calculate_order_statistics(customer_orders, products)\n", + "print_order_statistics(order_statistics)\n", + "print_updated_inventory(inventory)" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -69,7 +296,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.14.4" } }, "nbformat": 4, From f95c987ec26fe1067438878c8bc84821ff741aad Mon Sep 17 00:00:00 2001 From: Juan Boberg Aguirre Date: Sun, 19 Apr 2026 19:44:35 +0200 Subject: [PATCH 3/4] Update lab-python-functions.ipynb --- lab-python-functions.ipynb | 260 +++++++++---------------------------- 1 file changed, 59 insertions(+), 201 deletions(-) diff --git a/lab-python-functions.ipynb b/lab-python-functions.ipynb index f4e1814..3d7e252 100644 --- a/lab-python-functions.ipynb +++ b/lab-python-functions.ipynb @@ -46,237 +46,95 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "893f4306", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Order Statistics:\n", + "Total Products Ordered: 3\n", + "Percentage of Products Ordered: 60.00%\n", + "\n", + "Updated Inventory:\n", + "t-shirt: 9\n", + "mug: 9\n", + "hat: 9\n", + "book: 10\n", + "keychain: 10\n" + ] + } + ], "source": [ "# Lista de productos disponibles\n", - "products = ['mug', 'hat']\n", - "\n", - "# Diccionario vacío que guardará el inventario (producto: cantidad)\n", - "inventory = {}\n", + "products = [\"t-shirt\", \"mug\", \"hat\", \"book\", \"keychain\"]\n", "\n", - "# Bucle que recorre cada producto en la lista 'products'\n", - "for p in products:\n", - " # Pide al usuario cuántas unidades tiene de ese producto\n", - " # input() devuelve texto, int() lo convierte a número entero\n", - " inventory[p] = int(input('cuántas unida\n", "\n", - " \n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2c9368ce", - "metadata": {}, - "outputs": [], - "source": [ + "# 1. Inicializar inventario\n", "def initialize_inventory(products):\n", - " # 1) Definición de la función:\n", - " # - Recibe como parámetro una lista llamada 'products'\n", - " # - Esa lista contiene los nombres de los productos (por ejemplo ['mug', 'hat'])\n", - "\n", " inventory = {}\n", - " # 2) Crear un diccionario vacío:\n", - " # - 'inventory' se usa para guardar el inventario (producto: cantidad)\n", - " # - Inicialmente está vacío y se irá rellenando en el bucle\n", - "\n", - " for p in products:\n", - " # 3) Bucle sobre cada producto:\n", - " # - Recorre uno por uno los elementos de la lista 'products'\n", - " # - En cada iteración, 'p' vale el nombre del producto actual (por ejemplo 'mug' o 'hat')\n", - "\n", - " inventory[p] = int(input('¿Cuántas unidades? '))\n", - " # 4) Pedir y guardar el stock:\n", - " # - input muestra el mensaje y espera que el usuario introduzca una cantidad\n", - " # - int() convierte el texto introducido en número entero\n", - " # - inventory[p] guarda ese número usando el nombre del producto como clave\n", - " # - Ejemplo: si p = 'mug' y el usuario pone 10, queda inventory['mug'] = 10\n", + "\n", + " for product in products:\n", + " quantity = int(input(f\"Enter the quantity of {product}s available: \"))\n", + " inventory[product] = quantity\n", "\n", " return inventory\n", - " # 5) Devolver el inventario:\n", - " # - La función termina devolviendo el diccionario 'inventory'\n", - " # - Ese diccionario contiene todos los productos y sus cantidades\n", - " # - Puede usarse en el resto del programa" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ef827348", - "metadata": {}, - "outputs": [], - "source": [ - "# Lista de productos que vamos a gestionar en el inventario\n", - "products = ['mug', 'hat']\n", - "# ↑ ↑\n", - "# | |\n", - "# | +-- Segundo producto: 'hat'\n", - "# +-- Primer producto: 'mug'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b152734e", - "metadata": {}, - "outputs": [], - "source": [ - "def customer_orders():\n", - " # Define una función llamada customer_orders.\n", - " # Esta función servirá para pedir pedidos al usuario y guardarlos.\n", "\n", + "\n", + "# 2. Obtener pedidos del cliente\n", + "def get_customer_orders():\n", " customer_orders = set()\n", - " # Crea un conjunto vacío llamado customer_orders.\n", - " # Un set guarda elementos únicos, así que no repite pedidos iguales.\n", "\n", - " while True:\n", - " # Inicia un bucle infinito.\n", - " # Se repetirá hasta que se ejecute un break.\n", + " num_orders = int(input(\"How many different products does the customer want to order? \"))\n", "\n", - " customer_order = input(\"Enter a customer order: \")\n", - " # Pide al usuario que escriba un pedido.\n", - " # El valor introducido se guarda en la variable customer_order.\n", + " for i in range(num_orders):\n", + " product = input(\"Enter a product name: \")\n", + " customer_orders.add(product)\n", "\n", - " customer_orders.add(customer_order)\n", - " # Añade el pedido escrito al conjunto customer_orders.\n", - " # Si el pedido ya existía, no se duplicará porque es un set.\n", + " return customer_orders\n", "\n", - " another = input(\"Add another order? yes/no: \")\n", - " # Pregunta al usuario si quiere añadir otro pedido.\n", - " # La respuesta se guarda en la variable another.\n", "\n", - " if another == \"no\":\n", - " # Comprueba si el usuario ha escrito \"no\".\n", + "# 3. Actualizar inventario\n", + "def update_inventory(customer_orders, inventory):\n", + " for product in customer_orders:\n", + " if product in inventory:\n", + " inventory[product] -= 1\n", "\n", - " break\n", - " # Si la respuesta es \"no\", rompe el bucle y deja de pedir pedidos.\n", "\n", - " return customer_orders\n", - " # Devuelve el conjunto completo de pedidos recogidos." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "04c55a5e", - "metadata": {}, - "outputs": [], - "source": [ - "def customer_orders():\n", - " # Define una función llamada customer_orders.\n", - " # Esta función servirá para recoger y devolver los pedidos de los clientes.\n", - "\n", - " customer_orders = set()\n", - " # Crea un conjunto vacío llamado customer_orders.\n", - " # Un set almacena solo elementos únicos, sin duplicados.\n", - " # los pedidos y añadirlos al conjunto con customer_orders.add(...).\n", + "# 4. Calcular estadísticas del pedido\n", + "def calculate_order_statistics(customer_orders, products):\n", + " total_products_ordered = len(customer_orders)\n", + " total_available_products = len(products)\n", + " percentage_ordered = (total_products_ordered / total_available_products) * 100\n", "\n", - " for prod in customer_orders:\n", - " # Inicia un bucle for que recorre cada producto del conjunto customer_orders.\n", - " # En cada iteración, la variable 'prod' vale un producto distinto.\n", + " return total_products_ordered, percentage_ordered\n", "\n", - " print(prod)\n", - " # Muestra por pantalla ese producto (sirve para ver qué pedidos hay guardados).\n", "\n", - " return customer_orders\n", - " # Devuelve el conjunto completo de pedidos recogidos.\n", - " # Puede usarlo otro código para, por ejemplo, analizar el stock o mostrar reportes." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "e6c15073", - "metadata": {}, - "outputs": [], - "source": [ - "inventory = {}\n", - "\n", - "def update_inventory(customer_orders, inventory):\n", - " for prod in customer_orders:\n", - " if prod in inventory:\n", - " # aquí actualizas la cantidad de ese producto en inventory[prod]\n", - " ...\n", - " else:\n", - " # aquí decides qué hacer si el producto no está en el inventario\n", - " ...\n", - " return inventory\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "0e7c013f", - "metadata": {}, - "outputs": [], - "source": [ - "def calculate_order_statistics(customer_orders, products):\n", - " total_pedidos = len(customer_orders)\n", - " porcentaje = (len(customer_orders) / len(products)) * 100 # ✅ Pedidos vs TOTAL disponibles\n", - " return total_pedidos, porcentaje" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aba2615c", - "metadata": {}, - "outputs": [], - "source": [ + "# 5. Imprimir estadísticas del pedido\n", "def print_order_statistics(order_statistics):\n", - " total, porcentaje = order_statistics # DESEMPQUETA la tupla en 2 variables separadas\n", - " print(f\"Total pedidos: {total}\") # IMPRIME total de productos pedidos\n", - " print(f\"Porcentaje: {porcentaje:.1f}%\") # IMPRIME porcentaje con 1 decimal\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "a86c3f73", - "metadata": {}, - "outputs": [], - "source": [ + " print(\"\\nOrder Statistics:\")\n", + " print(f\"Total Products Ordered: {order_statistics[0]}\")\n", + " print(f\"Percentage of Products Ordered: {order_statistics[1]:.2f}%\")\n", + "\n", "\n", + "# 6. Imprimir inventario actualizado\n", "def print_updated_inventory(inventory):\n", - " print(\"Inventario actualizado:\")\n", - " for producto, cantidad in inventory.items():\n", - " print(f\"{producto}: {cantidad} unidades\")" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "bd50c4d4", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'initialize_inventory' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[40]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m products = [\u001b[33m\"mug\"\u001b[39m, \u001b[33m\"hat\"\u001b[39m, \u001b[33m\"tshirt\"\u001b[39m]\n\u001b[32m 2\u001b[39m \n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m inventory = initialize_inventory(products)\n\u001b[32m 4\u001b[39m customer_orders = customer_orders()\n\u001b[32m 5\u001b[39m update_inventory(customer_orders, inventory)\n\u001b[32m 6\u001b[39m order_statistics = calculate_order_statistics(customer_orders, products)\n", - "\u001b[31mNameError\u001b[39m: name 'initialize_inventory' is not defined" - ] - } - ], - "source": [ - "products = [\"mug\", \"hat\", \"tshirt\"]\n", + " print(\"\\nUpdated Inventory:\")\n", + "\n", + " for product, quantity in inventory.items():\n", + " print(f\"{product}: {quantity}\")\n", + "\n", "\n", + "# 7. Ejecutar programa\n", "inventory = initialize_inventory(products)\n", - "customer_orders = customer_orders()\n", + "customer_orders = get_customer_orders()\n", "update_inventory(customer_orders, inventory)\n", "order_statistics = calculate_order_statistics(customer_orders, products)\n", "print_order_statistics(order_statistics)\n", - "print_updated_inventory(inventory)" + "print_updated_inventory(inventory)\n" ] } ], From e8c1e13072583c98011af86614a981ac14a7ac2c Mon Sep 17 00:00:00 2001 From: Juan Boberg Aguirre Date: Sun, 19 Apr 2026 20:05:26 +0200 Subject: [PATCH 4/4] Update lab-python-functions.ipynb --- lab-python-functions.ipynb | 81 +++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/lab-python-functions.ipynb b/lab-python-functions.ipynb index 3d7e252..dc573f6 100644 --- a/lab-python-functions.ipynb +++ b/lab-python-functions.ipynb @@ -46,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "893f4306", "metadata": {}, "outputs": [ @@ -55,16 +55,16 @@ "output_type": "stream", "text": [ "\n", - "Order Statistics:\n", - "Total Products Ordered: 3\n", - "Percentage of Products Ordered: 60.00%\n", + "Estadísticas del pedido:\n", + "Total de productos únicos pedidos: 4\n", + "Porcentaje de productos únicos pedidos: 80.00%\n", "\n", - "Updated Inventory:\n", - "t-shirt: 9\n", - "mug: 9\n", - "hat: 9\n", + "Inventario actualizado:\n", "book: 10\n", - "keychain: 10\n" + "hat: 9\n", + "keychain: 9\n", + "mug: 9\n", + "t-shirt: 9\n" ] } ], @@ -73,68 +73,93 @@ "products = [\"t-shirt\", \"mug\", \"hat\", \"book\", \"keychain\"]\n", "\n", "\n", + "# Función auxiliar para pedir un número entero válido\n", + "def get_valid_number(message):\n", + " while True:\n", + " try:\n", + " value = int(input(message))\n", + " return value\n", + " except ValueError:\n", + " print(\"Entrada no válida. Por favor, introduce un número entero.\")\n", + "\n", + "\n", "# 1. Inicializar inventario\n", "def initialize_inventory(products):\n", " inventory = {}\n", "\n", " for product in products:\n", - " quantity = int(input(f\"Enter the quantity of {product}s available: \"))\n", + " message = f\"Introduce la cantidad disponible de {product}: \"\n", + " quantity = get_valid_number(message)\n", " inventory[product] = quantity\n", "\n", " return inventory\n", "\n", "\n", "# 2. Obtener pedidos del cliente\n", - "def get_customer_orders():\n", + "def get_customer_orders(products):\n", " customer_orders = set()\n", "\n", - " num_orders = int(input(\"How many different products does the customer want to order? \"))\n", + " num_orders = get_valid_number(\"¿Cuántos productos distintos quiere pedir el cliente? \")\n", "\n", - " for i in range(num_orders):\n", - " product = input(\"Enter a product name: \")\n", - " customer_orders.add(product)\n", + " while len(customer_orders) < num_orders:\n", + " product = input(\"Introduce el nombre de un producto: \").strip()\n", + "\n", + " if product in products:\n", + " customer_orders.add(product)\n", + " else:\n", + " print(\"Ese producto no está disponible. Inténtalo de nuevo.\")\n", "\n", " return customer_orders\n", "\n", "\n", "# 3. Actualizar inventario\n", "def update_inventory(customer_orders, inventory):\n", + " updated_inventory = inventory.copy()\n", + "\n", " for product in customer_orders:\n", - " if product in inventory:\n", - " inventory[product] -= 1\n", + " if product in updated_inventory and updated_inventory[product] > 0:\n", + " updated_inventory[product] -= 1\n", + "\n", + " return updated_inventory\n", "\n", "\n", "# 4. Calcular estadísticas del pedido\n", "def calculate_order_statistics(customer_orders, products):\n", - " total_products_ordered = len(customer_orders)\n", + " total_unique_products_ordered = len(customer_orders)\n", " total_available_products = len(products)\n", - " percentage_ordered = (total_products_ordered / total_available_products) * 100\n", "\n", - " return total_products_ordered, percentage_ordered\n", + " if total_available_products == 0:\n", + " percentage_ordered = 0\n", + " else:\n", + " percentage_ordered = (total_unique_products_ordered / total_available_products) * 100\n", + "\n", + " return total_unique_products_ordered, percentage_ordered\n", "\n", "\n", "# 5. Imprimir estadísticas del pedido\n", "def print_order_statistics(order_statistics):\n", - " print(\"\\nOrder Statistics:\")\n", - " print(f\"Total Products Ordered: {order_statistics[0]}\")\n", - " print(f\"Percentage of Products Ordered: {order_statistics[1]:.2f}%\")\n", + " total_unique_products_ordered, percentage_ordered = order_statistics\n", + "\n", + " print(\"\\nEstadísticas del pedido:\")\n", + " print(f\"Total de productos únicos pedidos: {total_unique_products_ordered}\")\n", + " print(f\"Porcentaje de productos únicos pedidos: {percentage_ordered:.2f}%\")\n", "\n", "\n", "# 6. Imprimir inventario actualizado\n", "def print_updated_inventory(inventory):\n", - " print(\"\\nUpdated Inventory:\")\n", + " print(\"\\nInventario actualizado:\")\n", "\n", - " for product, quantity in inventory.items():\n", + " for product, quantity in sorted(inventory.items()):\n", " print(f\"{product}: {quantity}\")\n", "\n", "\n", "# 7. Ejecutar programa\n", "inventory = initialize_inventory(products)\n", - "customer_orders = get_customer_orders()\n", - "update_inventory(customer_orders, inventory)\n", + "customer_orders = get_customer_orders(products)\n", + "inventory = update_inventory(customer_orders, inventory)\n", "order_statistics = calculate_order_statistics(customer_orders, products)\n", "print_order_statistics(order_statistics)\n", - "print_updated_inventory(inventory)\n" + "print_updated_inventory(inventory)" ] } ],