inventario = { "camiseta": { "variantes": [ {"color": "rojo", "tamaño": "M", "cantidad": 10}, {"color": "azul", "tamaño": "L", "cantidad": 5} ], "precio": 30 }, "pantalones": { "variantes": [ {"color": "negro", "tamaño": "32", "cantidad": 15}, {"color": "azul", "tamaño": "34", "cantidad": 7} ], "precio": 60 } } # stock total de pantalones # llegar a pantalones. Dentro de pantalones, variantes # variantes es una lista, la recorro # dentro de esa lista me interesa la cantidad print(inventario["pantalones"]["variantes"]) suma = 0 for variante in inventario["pantalones"]["variantes"]: print(variante["cantidad"]) suma += variante["cantidad"] print(suma) print(suma*inventario["pantalones"]["precio"]) def vender_producto(inventario, producto, color, tamaño, cantidad_vendida): # comprobar que el producto esté if producto in inventario: # recorro todas las variantes for variante in inventario[producto]["variantes"]: # Si alguna variante coincide con el color y el tamaño if variante["color"] == color and variante["tamaño"] == tamaño: # compruebo que haya suficiente stock if variante["cantidad"] >= cantidad_vendida: # resto la cantidad variante["cantidad"] -= cantidad_vendida return True else: # si no hay suficiente stock devuelvo false return False # si el producto no está en el inventario # o no ha encontrado al recorrer las varianes es color y ese tamaño devuelvo false return False # Ejemplo de uso producto = "camiseta" color = "rojo" tamaño = "M" cantidad_vendida = 3 venta_exitosa = vender_producto(inventario, producto, color, tamaño, cantidad_vendida) print("Venta exitosa:", venta_exitosa) print("Inventario actualizado:", inventario) # Supongamos que quiero hacer una función que me de el stock valorado de un inventario # (cantidad * precio) ¿Como lo hago? def stockValorado(inventario): total=0 # hacer un for sobre inventario que nos devuelve for producto in inventario: valor=inventario[producto] precio=valor["precio"] suma=0 for variante in valor["variantes"]: print(variante["cantidad"]) suma+=variante["cantidad"] print(precio,suma) total+=precio*suma return total print(stockValorado(inventario))
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
Soluciones ejercicios números
def getSetFromFile(archivo): # leo el archivo archivo = open(archivo, "r") numeros = archivo.read() archivo.close() # lo convierto a lista lista = numeros[:-1].split(",") # convierto cada elemento en número lista = [int(x) for x in lista] return set(lista) num1 = getSetFromFile("numeros1.txt") num2 = getSetFromFile("numeros2.txt") num3 = getSetFromFile("numeros3.txt") print(num1) print(num2) print(num3) # Números en los tres conjuntos (100) print(num1 & num2 & num3) # Números en num1 que no estén en num2 ni en num3 (1..49) print(num1 - num2 - num3) # Números en num2 que no estén en num1 ni en num3 {} no hay ninguno print(num2 - num1 - num3)
Ejemplos funciones
package com.trifulcas.funciones; public class EjemploFuncion { public static void main(String[] args) { int a = doble(8); System.out.println(a); saludo("Ana"); /* Esto de aquí da error saludo(89); Saludo tiene un parámetro String, no le puedo pasar un int int a=iva(); iva devuelve un double no lo puedo asignar a un int */ int b=mayor(3,990); System.out.println(b); System.out.println(esPrimo(17)); System.out.println(esPrimo(170)); System.out.println(listaPrimos(50)); } // static que de momento lo ponemos siempre porque sí // int que es el tipo que devuelvo: en este caso devuelvo un entero // doble que es el nombre de la función // Los parámetros que en este caso es 1 y entero // return nos devuelve algo, en este caso el doble del número static int doble(int numero) { return numero * 2; } // Devuelvo un double (con decimales) // No le paso ningún parámetro static double iva() { return .21; } // No devuelvo ningún resultado, uso void static void saludo(String nombre) { System.out.println("hola "+nombre); } static int mayor(int a, int b) { if (a>b) { return a; }else { return b; } } static boolean esPrimo(int numero) { for (int i = 2; i < numero; i++) { if (numero % i == 0) { return false; } } return true; } static String listaPrimos(int numero) { String res=""; for(int i=2;i<numero;i++) { if (esPrimo(i)) { res+=i+" "; } } return res; } }
Más ejemplos for
// Calcula a suma de los 100 primeros números int suma = 0; for (int i = 0; i <= 100; i++) { suma += i; } System.out.println(suma); // Calcula el factorial de un número int numero = 8; int factorial = 1; for (int i = 1; i <= numero; i++) { factorial *= i; } System.out.println(factorial); // Bucle anidado se ejecuta 25 veces (5*5) for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { System.out.println(i + "-" + j); } } numero = 17; boolean esPrimo = true; for (int i = 2; i < numero; i++) { if (numero % i == 0) { esPrimo = false; } } if (esPrimo) { System.out.println(numero + " es primo"); } else { System.out.println(numero + " no es primo"); } for (int j = 2; j <= 100; j++) { esPrimo = true; for (int i = 2; i < j; i++) { if (j % i == 0) { esPrimo = false; } } if (esPrimo) { System.out.println(j + " es primo"); } else { System.out.println(j + " no es primo"); } }
Ejemplos for
// For es igual que en JS // for(inicializacion;condicion;modificacion) for (int i = 0; i < 10; i++) { System.out.println(i); } // Puedo ir de dos en dos for (int i = 0; i < 10; i += 2) { System.out.println(i); } // Puedo ir de atrás adelante for (int i = 10; i > 0; i--) { System.out.println(i); } // Puedo incluso multiplicar for (int i = 1; i < 100000; i *= 2) { System.out.println(i); } // Bucle for es un bucle while compactado int cont = 0; // inicialización while (cont < 10) { // condición // cont++; // modificación } int n = 0; for (/* me salto la inicialización */; n < 10; n++) { System.out.println(n); } n = 0; for (/* me salto la inicialización */; n < 10; /* me salto la modificación */) { System.out.println(n); n++; } n = 0; for (/* me salto la inicialización */; /* me salto la condición */; /* me salto la modificación */) { System.out.println(n); n++; if (n >= 10) { break; } } n = 0; for (;;) { System.out.println(n); n++; if (n >= 10) { break; } }
Solución ejercicios
Scanner scanner = new Scanner(System.in); System.out.print("Introduce un número entero: "); int a = scanner.nextInt(); System.out.print("Introduce otro número entero: "); int b = scanner.nextInt(); System.out.println("La suma es " + (a + b)); double c = a + 7.5; a += c; System.out.println(a); System.out.print("Introduce un número entero: "); a = scanner.nextInt(); if (a % 2 == 0) { System.out.println("Par"); } else { System.out.println("Impar"); } System.out.print("Introduce un número entero: "); a = scanner.nextInt(); System.out.print("Introduce otro número entero: "); b = scanner.nextInt(); // KISS keep it simple, stupid int suma = 0; while (a <= b) { suma += a; a++; } System.out.println(suma); suma = 0; do { System.out.print("Introduce un número entero (0 para salir): "); a = scanner.nextInt(); suma += a; } while (a != 0); System.out.format("la suma es %d",suma); scanner.close();
Ejercicio: Análisis de números
Un ejemplo de uso de conjuntos
# creo el primer set de datos archivo=open("pais.txt","r",encoding="utf-8"); pais=archivo.read() archivo.close() archivo=open("diario.txt","r",encoding="utf-8"); diario=archivo.read() archivo.close() # en pais tengo el artículo del pais y en diario el del diario print(pais) print(diario) # convierto las cadenas a palabras y creo un conjunto paisSet=set(pais.lower().split()) print(paisSet) diarioSet=set(diario.lower().split()) print(diarioSet) conjunciones={"el","un","tras","según","la","las","este","entre","esos"} # tengo dos conjuntos de palabras únicas. A partir de aquí podemos hacer # algún tipo de análisis. Por ejemplo ¿Qué palabras se repiten en los dos artículos? print((paisSet&diarioSet)-conjunciones)
Operaciones con conjuntos
conj1 = set(range(10)) conj2 = set(range(6, 15)) print(conj1) print(conj2) # Union: los elementos de los dos conjuntos union = conj1.union(conj2) # utilizando la función union print(union) unionOp = conj1 | conj2 # utilizando el operador union (|) print(unionOp) # intersección: Los elementos compartidos por los dos conjuntos interseccion = conj1.intersection(conj2) # utilizando la función print(interseccion) interseccion2 = conj1 & conj2 # utiilizando operador print(interseccion2) frutas = {"naranja", "pera", "manzana", "granada"} colores = {"naranja", "violeta", "rojo"} print(frutas & colores) # diferencia los elementos de un conjunto menos los que están en el otro diferencia=conj1.difference(conj2) # función print(diferencia) diferencia2=conj1-conj2 # operador print(diferencia2) # diferencia simétrica los que no son comunes diff_simetrica=conj1.symmetric_difference(conj2) print(diff_simetrica) diff_simetrica2=conj1^conj2 print(diff_simetrica2)
Ejemplos conjuntos
conjunto = {1, 2, 3, 4} # llaves y después valores for el in conjunto: print(el) # en un conjunto los valores son únicos, no podemos tener valores repetidos conjunto = {1, 2, 1, 2, 1, 2} for el in conjunto: print(el) conjunto = {1, 0, False, True, ""} # a todos los efectos False=0 y True es cualquier número print(conjunto) # {0, 1, ''} if 2 in conjunto: print("Está el 2") else: print("No está el 2") conjunto.add(8) conjunto.add(7) conjunto.add(8) print(conjunto) # {0, 1, '', 7, 8} conjunto.update([1, 2, 3, 4, 5, 6]) # Añado cualquier iterable (tuplas, listas, otros conjuntos,...) print(conjunto) # {0, 1, '', 2, 3, 4, 5, 7, 8, 6} lista = [1, 2, 2, 1, 4, 5, 2, 2, 2, 1, 2, 4] # Saber los elementos diferentes listaNoRepetida = set(lista) # Creando un conjunto a partir de una lista print(listaNoRepetida) listaNo = list(listaNoRepetida) # Convertir entre iterables usando set, list, tuple print(listaNo) alumno2 = {"nombre": "Eva", "nota": 8, "Apellido": "Pi", "email": "eva@eva.com" } alumnoSet = set(alumno2) print(alumnoSet) dicc = dict(a=4, b=5) dicc2 = dict([("q", 1), ("s", 1)]) print(dicc2) conjunto.remove(1) print(conjunto) conjunto.remove(10) # Error porque no existe print(conjunto) conjunto.discard(10) # No da error, no hace nada print(conjunto)