# Crear una función areaCuadrado(lado) a la que le pasamos un lado y nos devuelve el área # areaCuadrado(2)-> 4 # Crear una función a la que le pasamos un número y nos devuelve true si es divisible por # 3 y false en caso contrario # multiploTres(8)->False multiploTres(9)->True # Crear una función a la que le pasamos una lista de números y nos dice # el número de pares que hay # numeroPares([1,2,3,4])->2 # Crear una función a la que le pasamos una cadena y un carácter y nos devuelve una lista # con las palabras que tienen ese caracter # buscaCaracter("Hola que tal","a")->["hola","tal"] # buscaCaracter("Hola que tal","u")->["que"] # Crear una función a la que le pasamos una cadena y nos devuelve la lista de palabras # ordenada por longitud
Mes: mayo 2024
Repaso funciones
# funciones # pilar básico de la programación # Nos sirve para encapsular un trozo de código # Y procuramos que las funciones sean 'puras' # los mismos parámetros de entrada devuelven los mismos resultados import math # No es una función pura porque depende del entorno (consola) def saludo(): print("hola que tal") saludo() # Función pura que devuelve un resultado def saludo(): return "hola que tal" # Puedo imprimir en la consola print(saludo()) archivo = open("saludo.txt", "w") # O en un archivo archivo.write(saludo()) archivo.close() # o crear una variable holi = saludo() def saludar(nombre): return "Hola " + nombre + " ¿que tal estás?" print(saludar("Ana")) alumnos = ["Ana", "Eva", "Pep", "Rosa"] for alumno in alumnos: print(saludar(alumno)) saludos = [saludar(alumno) for alumno in alumnos] print(saludos) def esPrimo(numero): for i in range(2, int(math.sqrt(numero))): if numero % i == 0: return False return True # divide y vencerás def listaPrimos(limite): res=[] for i in range(2,limite+1): if esPrimo(i): res.append(i) return res print(esPrimo(17)) print(esPrimo(18)) primos=listaPrimos(50) print(primos)
Repaso for y listas
# estructuras de control """ if condidicion: lo que hacemos si se cumple else: lo que hacemos si no se cumple if condicion: si se cumple elif otra condicion: si se cumple la otra else: en cualquier otro caso if a<1000: 0-1000 elif a<2000: 1000-2000 elif a<3000 2000-3000 las condiciones: tenemos operadores: not, and y or and : Se tienen que cumplir las dos or : Basta que se cumpla una de ellas if edad>=18 and dinero>20: print("Entra en la discoteca") else: Si entra por aquí puede ser porque es menor de 18, porque tiene menos de 20 o por las dos if edad>12 or altura>135: print("Sube a la atracción") Aquí entra porque es mayor de 12, su altura es> 135 o las dos else: Es <12 años y altura<135 """ lista = [1, 2, 3, 4, 5] alumnos = ["aa", "bb", "cc", "dd"] mixta = [1, "cadenas", True] # bucle for. El bucle for nos recorre una lista for numero in lista: # recorro la lista print(numero) # imprime 1,2,3,4,5 for alumno in alumnos: print(alumno) for i in range(10): print(i) numeros = range(20) print(list(numeros)) lista.append(8) # Yo tengo una lista, o cualquier otro objeto complejo (tuplas, diccionarios, conjuntos) # SI quiero procesar los elementos de la lista tendré que hacer EL ESQUEMA # una variable donde calcularé algo # recorreré la lista # modificaré el cálculo a veces dependiendo de una condición # sumar todos los números del 1 al 100 # suma=0 # recorro los numeros del 1 al 100 y los sumo suma = 0 for i in range(1, 101): suma += i print(suma) suma = 0 for i in range(1, 101): if i % 2 == 0: suma += i print(suma) pares = [] for i in range(11): if i % 2 == 0: pares.append(i) print(pares) # Comprension de listas sintaxis: #[ transformación de elemento for elemento in lista condicion de filtro ] codigos=["123","4560","7890","1234","5678"] c1=[elemento for elemento in codigos] print(codigos) print(c1) c2=[len(elemento) for elemento in codigos] print(c2) c3=[elemento[-1] for elemento in codigos] print(c3) c4=["hola" for elemento in codigos] print(c4) c5=[elemento for elemento in codigos if len(elemento)>3] print(c5) c6=[elemento for elemento in codigos if elemento[-1]=="0"] print(c6) c7=[elemento[0:2] for elemento in codigos if elemento[-1]=="0"] print(c7) res=[] for elemento in codigos: if elemento[-1] == "0": res.append(elemento[0:2]) print(res)
Ejercicios soluciones y test unitario
# Crear una función precio que nos calcule el precio de un viaje de la siguiente manera # precioViaje(tipoCliente,destino) # si el cliente es 'vip' y el destino es 'Atenas' 1000 # si el cliente es 'normal' y el destino es 'Atenas' 1300 # si el cliente es 'vip' y el destino es 'Roma' 600 # si el cliente es 'normal' y el destino es 'Roma' 900 def precioViaje(tipoCliente, destino): tabla = [{"tipo": "vip", "destinos": [{"destino": "Atenas", "precio": 1000}, {"destino": "Roma", "precio": 600}]}, {"tipo": "normal", "destinos": [{"destino": "Atenas", "precio": 1300}, {"destino": "Roma", "precio": 900}]} ] for cliente in tabla: for destinos in cliente["destinos"]: if cliente["tipo"] == tipoCliente and destinos["destino"] == destino: return destinos["precio"] return 0 def precioViaje2(tipoCliente, destino): if tipoCliente == 'vip': if destino == 'Atenas': return 1000 if destino == 'Roma': return 600 if tipoCliente == 'normal': if destino == 'Atenas': return 1300 if destino == 'Roma': return 900 return 0 # Crear una función iniciales a la que le pasamos una cadena y nos devuelve una lista # con las primeras letras de cada palabra # iniciales("hola que tal")->['h','q','t'] def iniciales01(cadena): # cogería cada palabra # apuntaría la primera letra palabras = cadena.split() # me convierte una cadena en una lista de palabras res = [] # recorrer las palabras for palabra in palabras: res.append(palabra[0]) return res def iniciales(cadena): # cogería cada palabra # apuntaría la primera letra palabras = cadena.split() # me convierte una cadena en una lista de palabras return [palabra[0] for palabra in palabras] # Crear una función menorLongitud a la que le pasamos una cadena y un numero y nos devuelve # una lista con las palabras que tengan menor longitud que ese numero # menorLongitud("hola que tal estamos. Yo estupendo",4)->['que','tal','Yo'] def menorLongitud01(cadena, numero): palabras = cadena.split() res = [] for palabra in palabras: if len(palabra) < numero: res.append(palabra) return res def menorLongitud(cadena, numero): palabras = cadena.split() return [palabra for palabra in palabras if len(palabra) < numero]
from unittest import TestCase from ejercicios_preexamen01 import precioViaje from ejercicios_preexamen01 import iniciales from ejercicios_preexamen01 import menorLongitud class Test(TestCase): def test_precio_viaje(self): precio = precioViaje('vip', 'Atenas') self.assertEqual(precio, 1000) precio = precioViaje('vip', 'Roma') self.assertEqual(precio, 600) precio = precioViaje('normal', 'Atenas') self.assertEqual(precio, 1300) precio = precioViaje('normal', 'Roma') self.assertEqual(precio, 900) def test_iniciales(self): lista = iniciales("hola que tal") self.assertListEqual(lista, ["h", "q", "t"]) lista = iniciales("yo muy bien sabes") self.assertListEqual(lista, ["y", "m", "b", "s"]) def test_menor_longitud(self): lista=menorLongitud("hola que tal estamos. Yo estupendo",4) self.assertListEqual(lista,['que','tal','Yo']) lista = menorLongitud("aa bbb ccc dddd eeeee fffff ggggggg", 5 ) self.assertListEqual(lista, ['aa', 'bbb', 'ccc','dddd'])
Más ejercicios repaso
# Crear una función precio que nos calcule el precio de un viaje de la siguiente manera # precioViaje(tipoCliente,destino) # si el cliente es 'vip' y el destino es 'Atenas' 1000 # si el cliente es 'normal' y el destino es 'Atenas' 1300 # si el cliente es 'vip' y el destino es 'Roma' 600 # si el cliente es 'normal' y el destino es 'Roma' 900 # Crear una función iniciales a la que le pasamos una cadena y nos devuelve una lista # con las primeras letras de cada palabra # iniciales("hola que tal")->['h','q','t'] # Crear una función menorLongitud a la que le pasamos una cadena y un numero y nos devuelve # u na lista con las palabras que tengan menor longitud que ese numero # menorLongitud("hola que tal estamos. Yo estupendo",4)->['que','tal','Yo']
Tratamiento de errores en Python
# Controlar los errores con try: except import math # Intenta hacer el código entre el try y el except try: edad = int(input("Dime tu edad")) print(edad / 4) # Si ha habido algún tipo de error entra en el código del except except: print("Error") print("Algo no has introducido bien") print("Ten más cuidado la próxima vez") print("adios") def division(a, b): try: return a / b except: return math.inf print(division(4, 2)) print(division(4, 0)) def obtenerNumero(): numero = 0 while (numero == 0): try: numero = int(input("Dame un número: ")) except: numero = 0 return numero print(obtenerNumero()) try: num = int(input("Ingrese un número: ")) resultado = 10 / num except ZeroDivisionError as zde: print(f"Error de división por cero: {zde}") except ValueError as ve: print(f"Error de valor no válido: {ve}") except Exception as e: print(f"Ocurrió una excepción no manejada: {e}") try: a = 9 / 0 except Exception as e: print(e)
Soluciones ejercicios
# Cread una función a la que le pasamos una cantidad y nos devuelve el PVP # siguiendo las siguientes reglas # Si el precio es <1000 No hay descuento # Está entre 1000 y <3000 5% de descuento # Es 3000 o más 10% de descuento # devuelvo el importe, no el descuento def getPVP(importe): if importe < 1000: return importe if importe >= 1000 and importe < 3000: return importe - importe * 5 / 100 # importe * 0.95 if importe >= 3000: return importe * 0.9 def getPVP2(importe): if importe < 1000: return importe elif importe < 3000: return importe - importe * 5 / 100 # importe * 0.95 else: return importe * 0.9 def getPVP3(importe): if importe < 1000: return importe if importe < 3000: return importe - importe * 5 / 100 # importe * 0.95 return importe * 0.9 print(getPVP(200)) print(getPVP(700)) print(getPVP(1000)) print(getPVP(10000)) def doble(numero): return numero * 2 print(doble(8)) # Cread una función obtenerIRPF(departamento, sueldo) que nos devuelva el % de irpf acorde a: # Si el departamento es 'marketing' 12% # Si el departamento es 'administracion' y el sueldo es <2500 12%, si es mayor 15% # Si el departamento es 'contabilidad' tiene los siguientes tramos: # hasta 3000 10% de 3000 a 5000 12% mas de 5000 15% def obtenerIRPFOld(departamento, sueldo): if departamento == 'marketing': return .12 if departamento == 'administracion' and sueldo < 2500: return .12 if departamento == 'administracion' and sueldo >= 2500: return .15 if departamento == 'contabilidad' and sueldo < 3000: return .10 if departamento == 'contabilidad' and sueldo >= 3000 and sueldo < 5000: return .12 if departamento == 'contabilidad' and sueldo >= 5000: return .15 def obtenerIRPFClean(departamento, sueldo): if departamento == 'marketing': return .12 if departamento == 'administracion': if sueldo < 2500: return .12 else: return .15 if departamento == 'contabilidad': if sueldo < 3000: return .10 elif sueldo < 5000: return .12 else: return .15 # primero va el and y después el or def obtenerIRPF(departamento, sueldo): if departamento == 'marketing' or (departamento == 'administracion' and sueldo < 2500) or (departamento == 'contabilidad' and sueldo >= 3000 and sueldo < 5000): return .12 if departamento == 'administracion' and sueldo >= 2500 or departamento == 'contabilidad' and sueldo >= 5000: return .15 if departamento == 'contabilidad' and sueldo < 3000: return .10 print(obtenerIRPF('marketing', 1000)) print(obtenerIRPF('administracion', 1000)) print(obtenerIRPF('administracion', 3000)) print(obtenerIRPF('contabilidad', 2000)) print(obtenerIRPF('contabilidad', 3500)) print(obtenerIRPF('contabilidad', 6000))
Reloj en JS superoptimizado y ofuscado
Ejemplos funciones LinkedList
package com.trifulcas.colecciones; import java.util.LinkedList; public class FuncionesLinkedList { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(creaLista(6)); LinkedList<Integer> numeros=new LinkedList<Integer>(); numeros.add(1); numeros.add(2); numeros.add(3); System.out.println(numeros); System.out.println(invertir(numeros)); String[] alumnos= {"Ana","Eva","Pepe","Rosa"}; System.out.println(alumnosPares(alumnos)); } // Crear una función a la que le pasamos un limite y nos crea una lista // de la forma 1 2 3 4 5 4 3 2 1 static LinkedList<Integer> creaLista(int limite){ LinkedList<Integer> res=new LinkedList<Integer>(); res.add(limite); for(int i=limite-1;i>0;i--) { res.addFirst(i); res.addLast(i); } return res; } // Crear una función a la que le pasamos un linkedList y nos devuelve // una linkedlist con los elementos invertidos static LinkedList<Integer> invertir(LinkedList<Integer> lista){ LinkedList<Integer> res=new LinkedList<Integer>(); for(int i:lista) { res.push(i); } return res; } // Crear una función a la que le pasamos un array de alumnos (Strings) // y nos devuelve un linkedlist de los alumnos que están en la posición par static LinkedList<String> alumnosPares(String[] alumnos){ LinkedList<String> res= new LinkedList<String>(); for(int i=0;i<alumnos.length;i++) { if (i%2==0) { res.add(alumnos[i]); } } return res; } }
LinkedList
package com.trifulcas.colecciones; import java.time.LocalDate; import java.util.LinkedList; import java.util.List; public class EjemplosLinkedList { public static void main(String[] args) { LinkedList<String> lista = new LinkedList<String>(); // Lo mismo pero no especifico tipo LinkedList<String> lista2 = new LinkedList<>(); // Lo mismo pero usando la clase abstracta List<String> lista3 = new LinkedList<String>(); // Muy importante: el tipo tiene que ser una clase // LinkedList<int> enteros=new LinkedList<int>(); // Utilizar unas clases 'wrapper' (envolventes) // Que son lo mismo que los tipos primitivos pero en clase LinkedList<Integer> enteros = new LinkedList<Integer>(); LinkedList<Boolean> boleanos = new LinkedList<Boolean>(); LinkedList<Double> decimales = new LinkedList<Double>(); // No especificamos tamaño, porque es dinámico // Yo añado elementos con add, los que quiera enteros.add(5); enteros.add(9); enteros.add(13); System.out.println(enteros); // Puedo recorrer con un for : for (Integer i : enteros) { System.out.println(i); } // Con un for normal usando el size (tamaño) for (int i = 0; i < enteros.size(); i++) { // con get obtenemos el elemento en esa posición System.out.println(enteros.get(i)); } // Podemos usar el foreach enteros.forEach(x -> System.out.println(x)); LinkedList<LocalDate> fechas = new LinkedList<LocalDate>(); fechas.add(LocalDate.now()); // Añadir en un índice determinado enteros.add(1, 666); System.out.println(enteros); // Eliminamos el elemento de la posición 2 enteros.remove(2); System.out.println(enteros); // Si un elemento está dentro el LinkedList System.out.println(enteros.contains(5)); // true System.out.println(enteros.contains(90)); // false // Buscar la posición de un elemento System.out.println(enteros.indexOf(13)); // 2 System.out.println(enteros.indexOf(130)); // -1 porque no lo encuentra // Tenemos una serie de funciones que nos van a recordar a JS // Yo puedo añadir al principio enteros.push(7); System.out.println(enteros); // Recuperar del principio (y se va de la lista) int r = enteros.pop(); System.out.println(enteros); // ver sin eliminar System.out.println(enteros.peekFirst()); System.out.println(enteros.peekLast()); System.out.println(enteros.getFirst()); System.out.println(enteros.getLast()); while (enteros.size() > 0) { System.out.println(enteros.pop()); } for (int i = 2; i < 40; i += 3) { enteros.push(i); } System.out.println(enteros); // Eliminar System.out.println(enteros.poll()); System.out.println(enteros.pollFirst()); System.out.println(enteros.pollLast()); System.out.println(enteros); } }