From 5ad6af9c83769574df204de328c2f22318fcb374 Mon Sep 17 00:00:00 2001 From: eliasch-bot Date: Thu, 9 Oct 2025 14:15:55 +0200 Subject: [PATCH 1/2] Update lab-python-functions.ipynb --- lab-python-functions.ipynb | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/lab-python-functions.ipynb b/lab-python-functions.ipynb index 44d337b..8341795 100644 --- a/lab-python-functions.ipynb +++ b/lab-python-functions.ipynb @@ -41,8 +41,48 @@ "- Utilize function parameters and return values to transfer data between functions.\n", "- Test your functions individually to ensure they work correctly.\n", "\n", + "\n", + "## Ejercicio: Gestión de pedidos de clientes con funciones\n", + "\n", + "En el ejercicio anterior, mejoraste el código para gestionar los pedidos de los clientes utilizando bucles y control de flujo. Ahora, vamos a dar un paso más y refactorizar el código introduciendo funciones.\n", + "\n", + "Sigue los pasos que se indican a continuación para completar el ejercicio:\n", + "\n", + "1. Define una función llamada `initialize_inventory` que tome `products` como parámetro. Dentro de la función, implementa el código para inicializar el diccionario de inventario utilizando un bucle y la entrada del usuario.\n", + "\n", + "2. Define una función llamada «get_customer_orders» que no tome ningún parámetro. Dentro de la función, implementa el código para solicitar al usuario que introduzca los nombres de los productos utilizando un bucle. La función debe devolver el conjunto «customer_orders».\n", + "\n", + "3. Define una función llamada «update_inventory» que tome «customer_orders» e «inventory» como parámetros. Dentro de la función, implemente el código para actualizar el diccionario de inventario en función de los pedidos de los clientes.\n", + "\n", + "4. Defina una función llamada «calculate_order_statistics» que tome «customer_orders» y «products» como parámetros. Dentro de la función, implemente el código para calcular las estadísticas de los pedidos (total de productos pedidos y porcentaje de productos únicos pedidos). La función debe devolver estos valores.\n", + "\n", + "5. Define una función llamada `print_order_statistics` que tome `order_statistics` como parámetro. Dentro de la función, implementa el código para imprimir las estadísticas de los pedidos.\n", + "\n", + "6. Define una función llamada `print_updated_inventory` que tome `inventory` como parámetro. Dentro de la función, implementa el código para imprimir el inventario actualizado.\n", + "\n", + "7. Llame a las funciones en la secuencia adecuada para ejecutar el programa y gestionar los pedidos de los clientes.\n", + "\n", + "Pistas para las funciones:\n", + "\n", + "- Tenga en cuenta los parámetros de entrada necesarios para cada función y sus valores de retorno.\n", + "- Utilice los parámetros de función y los valores de retorno para transferir datos entre funciones.\n", + "- Pruebe sus funciones individualmente para asegurarse de que funcionan correctamente.\n", + "\n", + "\n", "\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c70c487c", + "metadata": {}, + "outputs": [], + "source": [ + "def initialize_inventory(products)\n", + " \n", + " " + ] } ], "metadata": { From 8b06fea7dc29e514fd7104a0e422047e06af9c17 Mon Sep 17 00:00:00 2001 From: eliasch-bot Date: Mon, 20 Oct 2025 20:57:20 +0200 Subject: [PATCH 2/2] Lab funciones terminado --- lab-python-functions.ipynb | 209 ++++++++++++++++++++++++++++++------- 1 file changed, 171 insertions(+), 38 deletions(-) diff --git a/lab-python-functions.ipynb b/lab-python-functions.ipynb index 8341795..2b5ff14 100644 --- a/lab-python-functions.ipynb +++ b/lab-python-functions.ipynb @@ -39,55 +39,188 @@ "\n", "- Consider the input parameters required for each function and their return values.\n", "- Utilize function parameters and return values to transfer data between functions.\n", - "- Test your functions individually to ensure they work correctly.\n", - "\n", - "\n", - "## Ejercicio: Gestión de pedidos de clientes con funciones\n", - "\n", - "En el ejercicio anterior, mejoraste el código para gestionar los pedidos de los clientes utilizando bucles y control de flujo. Ahora, vamos a dar un paso más y refactorizar el código introduciendo funciones.\n", - "\n", - "Sigue los pasos que se indican a continuación para completar el ejercicio:\n", - "\n", - "1. Define una función llamada `initialize_inventory` que tome `products` como parámetro. Dentro de la función, implementa el código para inicializar el diccionario de inventario utilizando un bucle y la entrada del usuario.\n", - "\n", - "2. Define una función llamada «get_customer_orders» que no tome ningún parámetro. Dentro de la función, implementa el código para solicitar al usuario que introduzca los nombres de los productos utilizando un bucle. La función debe devolver el conjunto «customer_orders».\n", - "\n", - "3. Define una función llamada «update_inventory» que tome «customer_orders» e «inventory» como parámetros. Dentro de la función, implemente el código para actualizar el diccionario de inventario en función de los pedidos de los clientes.\n", - "\n", - "4. Defina una función llamada «calculate_order_statistics» que tome «customer_orders» y «products» como parámetros. Dentro de la función, implemente el código para calcular las estadísticas de los pedidos (total de productos pedidos y porcentaje de productos únicos pedidos). La función debe devolver estos valores.\n", - "\n", - "5. Define una función llamada `print_order_statistics` que tome `order_statistics` como parámetro. Dentro de la función, implementa el código para imprimir las estadísticas de los pedidos.\n", - "\n", - "6. Define una función llamada `print_updated_inventory` que tome `inventory` como parámetro. Dentro de la función, implementa el código para imprimir el inventario actualizado.\n", - "\n", - "7. Llame a las funciones en la secuencia adecuada para ejecutar el programa y gestionar los pedidos de los clientes.\n", - "\n", - "Pistas para las funciones:\n", - "\n", - "- Tenga en cuenta los parámetros de entrada necesarios para cada función y sus valores de retorno.\n", - "- Utilice los parámetros de función y los valores de retorno para transferir datos entre funciones.\n", - "- Pruebe sus funciones individualmente para asegurarse de que funcionan correctamente.\n", - "\n", - "\n", - "\n" + "- Test your functions individually to ensure they work correctly." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "771ec5e6", + "metadata": {}, + "outputs": [], + "source": [ + "def initialize_inventory(products):\n", + " \"\"\"\n", + " Inicializa el inventario pidiendo al usuario la cantidad disponible de cada producto.\n", + " Devuelve un diccionario con el formato {producto: cantidad}.\n", + " \"\"\"\n", + " inventory = {}\n", + "\n", + " for product in products:\n", + " cantidad = input(f\"Introduce la cantidad disponible de '{product}': \")\n", + " if not cantidad.isdigit():\n", + " print(\"Cantidad no válida. Se establece en 0.\")\n", + " cantidad = 0\n", + " inventory[product] = int(cantidad)\n", + "\n", + " return inventory\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "2071dab4", + "metadata": {}, + "outputs": [], + "source": [ + "def get_customer_orders():\n", + " \"\"\"\n", + " Solicita al usuario los productos que desea pedir.\n", + " Finaliza cuando el usuario escribe 'done'.\n", + " Devuelve un conjunto (set) con los productos pedidos.\n", + " \"\"\"\n", + " customer_orders = set()\n", + "\n", + " while True:\n", + " producto = input(\"Introduce el producto deseado (o 'done' para finalizar): \").lower()\n", + " if producto == \"done\":\n", + " break\n", + " customer_orders.add(producto)\n", + "\n", + " return customer_orders\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "064c7f31", + "metadata": {}, + "outputs": [], + "source": [ + "def update_inventory(customer_orders, inventory):\n", + " \"\"\"\n", + " Actualiza el inventario según los pedidos del cliente.\n", + " Si el producto existe y hay stock, resta una unidad por cada pedido.\n", + " Si no hay stock o el producto no existe, se ignora.\n", + " Devuelve el inventario actualizado.\n", + " \"\"\"\n", + " for producto in customer_orders:\n", + " if producto in inventory:\n", + " if inventory[producto] > 0:\n", + " inventory[producto] -= 1\n", + " else:\n", + " print(f\"No hay stock de '{producto}'.\")\n", + " else:\n", + " print(f\"'{producto}' no existe en el inventario.\")\n", + " return inventory\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "d28df7d6", + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_order_statistics(customer_orders, products):\n", + " \"\"\"\n", + " Calcula estadísticas básicas de los pedidos:\n", + " - Total de productos pedidos.\n", + " - Porcentaje de productos únicos pedidos respecto al total disponible.\n", + " \"\"\"\n", + " total_pedidos = len(customer_orders)\n", + " total_disponibles = len(products)\n", + " porcentaje_unicos = (total_pedidos / total_disponibles) * 100\n", + " return total_pedidos, porcentaje_unicos\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "29e5d669", + "metadata": {}, + "outputs": [], + "source": [ + "def print_order_statistics(order_statistics):\n", + " \"\"\"\n", + " Imprime las estadísticas del pedido de forma legible.\n", + " \"\"\"\n", + " total_pedidos, porcentaje_unicos = order_statistics\n", + "\n", + " print(\"\\nESTADÍSTICAS DEL PEDIDO\")\n", + " print(\"-\" * 35)\n", + " print(f\"Total de productos pedidos: {total_pedidos}\")\n", + " print(f\"Porcentaje de productos únicos pedidos: {porcentaje_unicos:.2f}%\")\n", + " print(\"-\" * 35)\n" ] }, { "cell_type": "code", - "execution_count": null, - "id": "c70c487c", + "execution_count": 45, + "id": "8455f78a", "metadata": {}, "outputs": [], "source": [ - "def initialize_inventory(products)\n", - " \n", - " " + "def print_updated_inventory(inventory):\n", + " \"\"\"\n", + " Imprime el inventario actualizado producto por producto.\n", + " \"\"\"\n", + " print(\"\\nINVENTARIO ACTUALIZADO\")\n", + " print(\"-\" * 30)\n", + "\n", + " for producto, cantidad in inventory.items():\n", + " print(f\"- {producto}: {cantidad} unidades\")\n", + "\n", + " print(\"-\" * 30)\n", + " print(\"Fin del inventario.\\n\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "cfb79550", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'hay' no existe en el inventario.\n", + "\n", + "ESTADÍSTICAS DEL PEDIDO\n", + "-----------------------------------\n", + "Total de productos pedidos: 3\n", + "Porcentaje de productos únicos pedidos: 60.00%\n", + "-----------------------------------\n", + "\n", + "INVENTARIO ACTUALIZADO\n", + "------------------------------\n", + "- t-shirt: 49 unidades\n", + "- mug: 29 unidades\n", + "- hat: 45 unidades\n", + "- book: 60 unidades\n", + "- keychain: 80 unidades\n", + "------------------------------\n", + "Fin del inventario.\n", + "\n" + ] + } + ], + "source": [ + "products = [\"t-shirt\", \"mug\", \"hat\", \"book\", \"keychain\"]\n", + "\n", + "inventory = initialize_inventory(products)\n", + "customer_orders = get_customer_orders()\n", + "updated_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(updated_inventory)\n" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -101,7 +234,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.13.7" } }, "nbformat": 4,