# función recursiva: una función que se llama a sí misma # factorial de un número: 5!=5*4*3*2*1 multiplicación de todos los números hasta el 1 # factorial de un número: 5! = 5*4! multiplicación del número por el factorial de ese número -1 # Si yo quiero haccer una función recursiva: # identificar el caso base: Siempre hay un final donde devolvemos un valor y no otra llamada # if numero<2 devuelvo 1 # poner nuestra función como una llama a ella misma # numero*factorial(numero-1) # En esta llamada de alguna manera nos acercamos al caso base def factorialRecursivo(numero): if numero < 2: return 1 else: return numero * factorialRecursivo(numero - 1) print(factorialRecursivo(5)) # 120 # funciones de orden superior # utilizar funciones como parámetros # yo tengo una función procesar que tiene dos parámetros # una función y un número def procesar(funcion, numero): return funcion(numero) def cuadrado(numero): return numero**2 def doble(numero): return numero*2 print(procesar(cuadrado,3)) # cuadrado es un parámetro print(procesar(doble,3)) # doble es un parámetro
Categoría: Python
Más cosas de funciones
# valores predeterminador # valores por defecto def saludo(nombre="sin nombre"): return "Hola "+nombre print(saludo("Juan")) print(saludo()) def pvp(precio,iva=.21): return precio*(1+iva) print(pvp(100,.21)) print(pvp(100)) print(pvp(100,.04)) # parámetros arbitrarios def suma(a,b): return a+b print(suma(8,5)) # al poner *args en args se guarda una lista con todos los parámetros que le pasemos def sumaVariable(*args): suma=0 for valor in args: suma+=valor return suma print(sumaVariable(1,2,3)) print(sumaVariable(1,2,3,4,5,6,7)) print(sumaVariable()) # crear una función mayorNumero a la que le pasemos un número variable de argumentos # y nos devuelva el mayor de todos ellos def mayorNumero(*args): mayor=args[0] # recorriendo la lista for valor in args: # y si el elemento que estoy mirando es mayor que el que tengo me quedo con el if valor>mayor: mayor=valor return mayor print(mayorNumero(1,6,4,3)) #6 print(mayorNumero(-1,-6,-4,-3)) #-1 print(mayorNumero(1,6,4,30,100,20,1000,59,1)) #1000
Soluciones ejercicios
# Quiero una función menor a la que le pasamos dos números y nos devuelve el más pequeño # menor(1,8)-> 1 menor(10,2)->2 menor(8,8)->8 def menor1version(num1, num2): # si el numero 1 es menor que el numero 2 devuelvo el numero 1 if num1 < num2: return num1 # si el numero 2 es menor que el numero 1 devuelvo el numero 2 if num2 < num1: return num2 # si son iguales da igual cual devolvamos porque son iguales return num1 # refactorizar: mejorar el código def menor(num1, num2): if num1 < num2: return num1 else: return num2 print(menor(1, 8)) # 1 print(menor(10, 2)) # 2 print(menor(8, 8)) # 8 # Quiero una función a la que le paso una cadena y un numero y nos devuelve la cadena # repetida tantas veces como el número # repetirCadena("Ana",3)->"AnaAnaAna" repetirCadena("qw",5)->"qwqwqwqwqw" def repetirCadena(cadena, numero): res = "" for i in range(numero): res += cadena return res print(repetirCadena("Ana", 3)) # "AnaAnaAna" print(repetirCadena("qw", 5)) # "qwqwqwqwqw"
Y todavía más ejemplos
# calcular el factorial de un número # numero!= 1*2*3...*numero # nombre de la función y parámetros def factorial(numero) # que devuelvo: calcular el factorial # casos de prueba. factorial(3)--> 6 factorial(5)--->120 def factorial(numero): resultado=1 # codigo que me calculará el factorial todavía no sé como for i in range(1,numero+1): resultado*=i return resultado print(factorial(3)) # imprimir 6 print(factorial(5)) # imprimir 120 # quiero una función que me cuente en una cadena las veces que aparece una letra # contarLetra("hola que tal","l")--->2 contarLetra("patata","a")--->3 def contarLetra(cadena,letra): apariciones=0 # calcularé las veces que aparece la letra for caracter in cadena: if caracter==letra: apariciones+=1 return apariciones print(contarLetra("hola que tal","l")) # 2 print(contarLetra("patata","a")) # 3
Más ejemplos funciones
# funciones puras: no dependen del entorno para funcionar # Son como una caja negra que procesan los datos que le pasamos # y devuelven un resultado import math def entrarNoPura(): if edad >= 18: return True else: return False edad = 19 print(entrarNoPura()) edad = 9 print(entrarNoPura()) def entrarPura(edad): if edad >= 18: return True else: return False print(entrarPura(20)) def suma(a, b, c, d): return a + b + c + d print(suma(1, 2, 3, 4)) def saludo(nombre): return "Hola " + nombre cadena = saludo("Ana") print(cadena) print(saludo("Eva")) def nombreCompleto(nombre, apellido): return nombre + " " + apellido print(nombreCompleto("Ana", "Pi")) def contarVocales(cadena): vocales = 0 for letra in cadena: # comprobaré si es vocal for vocal in "aeiouáéíóúàèìòùü": if letra == vocal: vocales += 1 return vocales def esPrimo(numero): for i in range(2,numero): if numero % i == 0: return False return True print(contarVocales("Hola que tal")) print(contarVocales("él es un pingüino matón")) print(esPrimo(17)) print(esPrimo(18))
Ejemplos funciones
# dentro de un programa tengo muchos códigos que hacen diferentes cosas # contarvocales # La idea de una función es: # 1) Poder reutilizar un código en diferentes sitios sin tener que repetirlo # 2) Hacer que nuestro código sea modular y flexible # 3) Costruir funciones puras (ya veremos lo que es) # defino una función saludo def saludo(nombre): print("Hola", nombre, " que tal estás?") print("Hace tiempo que no nos vemos") print("Ya te lamaré", nombre) saludo("Ana") # Llamo a la función con el valor de "Ana" y se ejecutará con este valor saludo("Pep") saludo("Juan") # sintaxis de una función # def nombre_de_la_funcion(parametro1,parametro2,parametro3...): # Un código a ejecutar # return valor # Sin parámetros y sin devolver valor def hola(): print("hola") hola() # No tiene parámetros pero devuelve un valor def numeroPI(): return 3.141592653 pi = numeroPI() print(pi) # Tiene parámetros y devuelve un valor def doble(numero): return numero * 2 a = doble(8) print(a) a = doble(90) print(a) # Tiene un parámetro pero no devuelve ningún valor def despedida(nombre): print("Adios", nombre) despedida("Ana") # función con 3 parámetros que devuelve un resultado def mayor(a, b, c): if b > a: a = b if c > a: a = c return a print(mayor(1, 8, 2)) print(mayor(10, 8, 2))
Solución contar vocales
# pedir una cadena al usuario # y decir cuantas vocales tiene # pido una cadena al usuario cadena = input("Dame una cadena ") totalVocales = 0 # Recorreré la cadena for letra in cadena: # comprobaré si es vocal if letra == "a" or letra == "e" or letra == "i" or letra == "o" or letra == "u": totalVocales += 1 # imprimo el resultado print("vocales",totalVocales) vocalesSin=0 vocalescon=0 for letra in cadena: # comprobaré si es vocal for vocal in "aeiou": if letra == vocal: vocalesSin += 1 for vocal in "áéíóúàèìòùü": if letra == vocal: vocalescon += 1 # imprimo el resultado print("vocales sin acentos",vocalesSin) print("vocales con acentos",vocalescon)
Ejercicio bucle
Vamos a pedir una cadena al usuario y vamos a decir el número de vocales que tiene.
Una vocal es a,e,i,o,u
Pasos:
-Pedir una cadena al usuario
– recorrer las letra de la cadena
– si es vocal contarla
– mostrar el resultado
Ejemplos bucles for
for i in range(10, 0, -1): print(i) for i in range(101): cuadrado = i ** 2 if cuadrado % 2 == 0: print(cuadrado) numero = 20000000 queEs = True for i in range(2, numero): if numero % i == 0: queEs = False break # Un ejemplo muy bueno de uso de break print(queEs) # ¿Que nos está averiguando la variable queEs? if queEs: print(numero, "es primo") else: print(numero, "no es primo") # break y continue # break sale del bucle y continue se salta las siguientes instrucciones del bucle for i in range(10): if i == 5: break # Sal del bucle, acabado print(i) for i in range(10): if i == 5: continue # Salta la siguiente instrucción print(i) cesta = [10, 30, 40, 5] # esto es una lista lo veremos suma = 0 for valor in cesta: suma += valor print(suma) cadena = "" for i in range(5): cadena += "*" print(cadena) cadena = "hola que tal" palabras = 1 for letra in cadena: if letra == " ": palabras += 1 print(palabras) # Bucles anidados: un bucle dentro de otro bucle for i in range(1, 11): print(i, "x 7 =", i * 7) print("-----------") # Todas las tablas de multiplicar for tabla in range(1, 11): for i in range(1, 11): print(i, "x ", tabla, " =", i * tabla) print("-----------") # Todos los números primos hasta el 100 for numero in range(2,101): queEs = True for i in range(2, numero): if numero % i == 0: queEs = False break if queEs: print(numero)
Bucle for
frutas = ["manzana", "banana", "cereza"] for fruta in frutas: print(fruta) for contador in range(10): print(contador) # range(valor) -> 0 hasta el valor -1 # range(inicio,fin) -> desde inicio hasta fin -1 # range(inicio,fin,paso) -> desde inicio hasta fin de paso en paso for i in range(5, 12): print(i) print("---------") for i in range(0, 100, 5): # range(inicio,fin) -> desde inicio hasta fin -1 print(i) print("---------") for i in range(10, 1, -1): # range(inicio,fin) -> desde inicio hasta fin -1 en este caso paso negativo print(i) suma = 0 for i in range(101): suma += i print(suma) for letra in "hola que tal": print(letra) letraABuscar = "a" contador = 0 cadena = "tal" for letra in cadena: if letra == letraABuscar: contador += 1 print("En '", cadena, "' hay", contador, "letras", letraABuscar) notas = [5, 8, 1, 3, 6, 9] aprobados = 0 for nota in notas: if nota >= 5: aprobados += 1 print("Hay", aprobados, "aprobados")