Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 64 additions & 2 deletions lab-python-functions.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,73 @@
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5bcc4073",
"metadata": {},
"outputs": [],
"source": [
"products = [\"t-shirt\", \"mug\", \"hat\", \"book\", \"keychain\"] # Lista de productos disponibles\n",
"inventory = {} # Diccionario vacío para guardar cantidades de inventario\n",
"\n",
"# 1) Inicializar inventario\n",
"def initialize_inventory(products): # Define una función que recibe la lista de productos\n",
" inventory = {} # Crea un diccionario vacío para el inventario\n",
" for product in products: # Recorre cada producto de la lista\n",
" qty = int(input(f\"Enter {product} quantity: \")) # Pide al usuario la cantidad de ese producto\n",
" inventory[product] = qty # Guarda la cantidad en el diccionario con el producto como clave\n",
" return inventory # Devuelve el diccionario de inventario completo\n",
"\n",
"# 2) Obtener pedidos del cliente\n",
"def get_customer_orders(): # Define una función sin parámetros\n",
" customer_orders = set() # Crea un set vacío (evita duplicados)\n",
" while True: # Inicia un bucle infinito (se rompe con break)\n",
" product = input(\"Enter one of these: t-shirt, mug, hat, book, keychain: \") # Pide un producto al cliente\n",
" customer_orders.add(product) # Añade el producto al set de pedidos\n",
" another = input(\"Do you want to add another product? (yes/no): \").lower() # Pregunta si quiere añadir más\n",
" if another == \"no\": # Si la respuesta es \"no\"\n",
" break # Sale del bucle\n",
" return customer_orders # Devuelve el set de pedidos del cliente\n",
"\n",
"# 3) Actualizar inventario\n",
"def update_inventory(customer_orders, inventory): # Define una función que recibe pedidos y el inventario\n",
" for product in customer_orders: # Recorre cada producto pedido\n",
" inventory[product] -= 1 # Resta 1 en el inventario por cada producto pedido\n",
" return inventory # Devuelve el inventario actualizado\n",
"\n",
"# 4) Calcular estadísticas\n",
"def calculate_order_statistics(customer_orders, products): # Define función que recibe pedidos y lista de productos\n",
" total_ordered = len(customer_orders) # Cuenta cuántos productos distintos pidió el cliente\n",
" percentage_unique = (len(customer_orders) / len(products)) * 100 # Calcula porcentaje de productos únicos pedidos\n",
" return total_ordered, percentage_unique # Devuelve ambos valores en una tupla\n",
"\n",
"# 5) Imprimir estadísticas\n",
"def print_order_statistics(order_statistics): # Define función que recibe la tupla de estadísticas\n",
" total_ordered, percentage_unique = order_statistics # Desempaqueta la tupla en dos variables\n",
" print(\"Total products ordered:\", total_ordered) # Imprime el total de productos pedidos\n",
" print(\"Percentage of unique products ordered:\", percentage_unique, \"%\") # Imprime el porcentaje de productos únicos\n",
"\n",
"# 6) Imprimir inventario actualizado\n",
"def print_updated_inventory(inventory): # Define función que recibe el inventario\n",
" print(\"Updated Inventory:\") # Imprime encabezado\n",
" for product, qty in inventory.items(): # Recorre cada par producto-cantidad en el inventario\n",
" print(f\"{product}: {qty}\") # Imprime producto y su cantidad\n",
"\n",
"# --- Ejecución en orden ---\n",
"inventory = initialize_inventory(products) # Paso 1: inicializar inventario pidiendo cantidades\n",
"customer_orders = get_customer_orders() # Paso 2: obtener pedidos del cliente\n",
"inventory = update_inventory(customer_orders, inventory) # Paso 3: actualizar inventario según pedidos\n",
"stats = calculate_order_statistics(customer_orders, products) # Paso 4: calcular estadísticas del pedido\n",
"print_order_statistics(stats) # Paso 5: imprimir estadísticas\n",
"print_updated_inventory(inventory) # Paso 6: imprimir inventario actualizado\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
Expand All @@ -61,7 +123,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
"version": "3.13.7"
}
},
"nbformat": 4,
Expand Down