# Cread una función a la que le pasamos dos cadenas y nos devuelve la cadena más larga # si son iguales nos devuelve la primera # masLarga("hola","adios")-> "adios" # Cread una función que nos devuelva True si la cadena empieza y acaba por la misma letra, False en caso contrario # mismoInicioFin("hola")->False mismoInicioFin("ajada")->True # Cread una función a la que le pasemos una cadena y nos reemplace todas las 'l' por un '1' # y todas las 'e' por '3' independientemente de si son mayúsculas o minúsculas # nnumerizar("leche")->"13ch3" # Cread una función a la que le pasemos una cadena y nos devuelva la cadena invertida # alreves("hola")->"aloh" # Cread una función que nos diga si en una cadena hay letras repetidas consecutivas # repetidas("hola que tal")-> False repetidas("sevilla")->True
Ejemplos funciones de cadena
# podemos definir nuestras propias funciones # pero python tiene muchas funciones predefinidas cadena = "Hola que tal" print(len(cadena)) # Funciones de cadena: nos permiten manipular cadenas de texto # Acceder a un carácter específico de la cadena o a un rango de caracteres print(cadena[3]) # imprime la letra 'a' # Con los dos puntos obtenemos una subcadena de la cadena desde el primer carácter hasta el último NO INCLUÍDO print(cadena[3:7]) # imprime 'a qu' va del 3 al 6 (incluído) for i in range(0, len(cadena) + 1): print(cadena[0:i]) mayusculas = cadena.upper() print(mayusculas) minusculas = cadena.lower() print(minusculas) print(cadena.title()) # Si una cadena está dentro de otra print("que" in cadena) print("pepe" in cadena) # Nos busca la posición de una cadena dentro de otra # Si no está nos devuelve -1 posicion = cadena.find("que") print(posicion) posicion = cadena.find("pepe") print(posicion) # Podemos reemplazar una cadena por otra print(cadena.replace("que", "ke")) print(cadena.replace("a", "@")) print(cadena.replace("a", "")) # Podemos indicar las veces que queremos reemplazar cadena = "patatas para ana" print(cadena.replace("a", "@", 3)) cadena = " hola que tal " # con strip quito espacios del principio y del final print(cadena.strip().upper()) # encadenamiento y funciona porque las funciones devuelven un valor sinespacios = cadena.strip() mayus = sinespacios.upper() print(mayus) # en una cadena reemplazar las A por @ independentemiente de mayúsculas o minúsculas cad = "CADA PATATA tiene carbohidratos" print(cad.lower().replace("a", "@")) some_string = 'Hello World' print('Testing a String') print('-' * 20) print('some_string', some_string) print("some_string.startswith('H')", some_string.startswith('H')) print("some_string.startswith('h')", some_string.startswith('h')) print("some_string.endswith('d')", some_string.endswith('d')) print('some_string.istitle()', some_string.istitle()) print('some_string.isupper()', some_string.isupper()) print('some_string.islower()', some_string.islower()) print('some_string.isalpha()', some_string.isalpha()) print('String conversions') print('-' * 20) print('some_string.upper()', some_string.upper()) print('some_string.lower()', some_string.lower()) print('some_string.title()', some_string.title()) print('some_string.swapcase()', some_string.swapcase()) print('String leading, trailing spaces', " xyz ".strip())
Parámetros por defecto y llamar a otra función
# Podemos tener parámetros por defecto o con valores predeterminados def saludo(nombre="Anónimo"): return "Hola " + nombre ana = saludo("Ana") anonim = saludo() # Como no paso un valor a 'nombre' pone por defecto 'Anónimo' print(ana, anonim) def potencia(numero, exponente=2): return numero ** exponente # En python para elevar un número a otro se usa ** numero^exponente # suma 1+1+1+1+1 5*1 (multiplicación) # multiplicación 5*5*5*5 5^4 (potencia) print(potencia(2, 4)) print(potencia(8)) # Como no le pongo valor a 'exponente' le pone por defecto 2 # En la siguiente función vamos a hacer que la cantidad por defecto sea '2' # Si yo pongo repetir("Ana")-> "AnaAna" def repetir2(cadena, cantidad): return cadena * cantidad # Que las funciones pueden llamar a otras funciones def esPar(numero): # En general siempre que tenemos un if que devuelve true o false podemos devolver directamente la condición del if return numero % 2 == 0 def sumaPares(numero): suma = 0 for i in range(0, numero + 1): if esPar(i): suma += i return suma print(sumaPares(100)) def esVocal(letra): if letra == "a" or letra == "e" or letra == "i" or letra == "o" or letra == "u": return True else: return False def contarVocales(cadena): # variable que acumula: en este caso lo que hago es contar contador = 0 # Bucle para recorrer, en este caso recorro todas letras de la cadena for letra in cadena: # En letra tenemos todas las letras de la cadena # Llamamos a la función esVocal para saber si es vocal o no if esVocal(letra): # Si sí que es vocal, contamos uno contador += 1 # devolvemos el resultado return contador print(esVocal("a")) print(esVocal("j")) print(contarVocales("hola que tal")) # 5 def esPrimo(numero): for i in range(2, numero): if numero % i == 0: return False return True def mostrarPrimos(numero): resultado="1" for i in range(2,numero+1): if esPrimo(i): resultado+=f",{i}" return resultado print(esPrimo(100)) print(esPrimo(17)) print(mostrarPrimos(50))
Soluciones funciones
# Cread una función a la que le pasemos un nombre y nos devuelva una cadena con un saludo # saludo("Ana") -> "Hola Ana" def saludo(nombre): resultado = "Hola " + nombre return resultado # Cread una función a la que le pasamos una cadena y una cantidad y nos devuelve la cadena repetida esa cantidad # repetir("Ana",3)->"AnaAnaAna" def repetir(cadena, cantidad): # código que nos repita una cadena una cantidad de veces # Variable que me servirá de 'acumulador' resultado = "" # Bucle que me recorra una serie de elementos o, como en este caso, que me repita algo un número # determinado de veces for i in range(0, cantidad): # Hago la operación que sea: concatenar, sumar, contar, multiplicar... resultado += cadena return resultado def repetir2(cadena, cantidad): return cadena * cantidad def nombreTriple(nombre): return (f'{nombre}\n' * 3) # Lo estamos imprimiendo directamente por la consola IMPURA nombreTriple('Jenn') # Cread una función a la que le pasamos un número y nos devuelve True si es par y False si no lo es # esPar(5)->False esPar(80)->True def esPar(numero): if numero % 2 == 0: resultado = True else: resultado = False return resultado def esParCompacta(numero): # En general siempre que tenemos un if que devuelve true o false podemos devolver directamente la condición del if return numero % 2 == 0 repetida = repetir("Hola", 5) print(repetida) repetida = repetir2("Hola", 5) print(repetida) print("hola" * 5) print(nombreTriple("Ana")) nombrerepetido = nombreTriple("Federico") print(esPar(5)) print(esPar(6)) print(esParCompacta(5)) print(esParCompacta(6))
Ejercicio funciones
# Cread una función a la que le pasemos un nombre y nos devuelva una cadena con un saludo # saludo("Ana") -> "Hola Ana" # Cread una función a la que le pasamos una cadena y una cantidad y nos devuelve la cadena repetida esa cantidad # repetir("Ana",3)->"AnaAnaAna" # Cread una función a la que le pasamos un número y nos devuelve True si es par y False si no lo es # esPar(5)->False esPar(80)->True
Ejemplos funciones
# Programación funcional # lo que hemos estado haciendo hasta ahora es lineal # cada instrucción sigue a la siguiente hasta que acabamos # El primer paso para una programación estructurada es usar funciones # ¿Qué es una función? # Bloque de código reutilizable que permite recibir parámetros y devolver un resultado # sintaxis def nombre_de_la_funcion(parametros): # Esta función no tiene parámetros pero uso () igual def saludar(): # Estas tres líneas se ejecutan cuando se llama a la función print("Hola") print("¿Qué tal estás") print("Yo muy bien") saludar() print("------") saludar() print("------") # Incorporamos un parámetro def saludarNombre(nombre): print(f"Hola {nombre}") print("¿Qué tal estás") print("Yo muy bien") saludarNombre("Ana") print("------") saludarNombre("Juan") # Añadir devolver un resultado def suma(a, b): return a + b print(suma(2, 3)) print(suma(8, 10)) resultado = suma(19, 35) print(resultado) # Un ejemplo más complejo def contarLetra(cadena, letra): contador = 0 for c in cadena: if c == letra: contador += 1 return contador total = contarLetra("mancha", "a") print(total) total = contarLetra("En un lugar de la mancha", "n") print(total)
Break y continue
for i in range(1, 100): print(i) if i == 16: break cadena = input("Dime una cadena") tiene = False for letra in cadena: if letra == "ñ": tiene = True break if tiene: print("Tiene Ñ") else: print("No hay ninguna Ñ") numero = int(input("Dime un número")) esPrimo = True for i in range(2, numero): if numero % i == 0: esPrimo = False break if esPrimo: print(f"{numero} es primo") else: print(f"{numero} no es primo") # continue Se salta las instrucciones que hay a continuación y sigue con el bucle numero = 100 suma = 0 for i in range(1, numero + 1): if i % 2 == 0: continue print(i) suma += i cadena = input("Dime una cadena ") resultado = "" for letra in cadena: if letra == "a": continue resultado += letra print(resultado)
Ejemplos bucles anidados
# bucles anidados (y cualquier tipo de anidación) # Nosotros podemos poner bucles dentro de bucles igual que poníamos ifs dentro de ifs for numero in range(1, 11): # Este bucle va del 1 al 10 print(f"Tabla del {numero}: ") # ¿Cuantas veces se imprime esto? 10 veces for i in range(1, 11): # Este también va del 1 al 10 print(f"{i} x {numero} = {i * numero}") # ¿Cuantas veces se imprime esto? 100 veces colores = ["rojo", "verde", "azul"] frutas = ["manzana", "plátano", "uva"] for color in colores: for fruta in frutas: print(color, fruta) # ¿Cuantas veces se imprime esto? 9 veces vocales="aeiou" consonantes="ptd" for vocal in vocales: for consonante in consonantes: print(consonante+vocal) # pa ta da pe te de... # pa pe pi po pu ta te ti to tu da de di do du for consonante in consonantes: for vocal in vocales: print(consonante+vocal) # Reloj for hora in range(1,25): for minuto in range(1,60): print(f"{hora}:{minuto}")
Soluciones ejercicios for
# 1.- Pedir un número al usuario y mostrar la suma de todos los números hasta ese número # 5->1+2+3+4+5=15 numero = int(input("Dime un número")) suma = 0 for i in range(1, numero + 1): suma += i print(suma) # 2.- Pedir una cadena al usuario y escribir si tiene o no tiene alguna 'ñ' # 'Logroño'-> Tiene 'Barceloba'->No tiene cadena = input("Dime una cadena") tiene = False for letra in cadena: if letra == "ñ": tiene = True if tiene: print("Tiene Ñ") else: print("No hay ninguna Ñ") # 3.- Pedir un número al usuario y escribir su tabla de multiplicar numero = int(input("Dime el número ")) for i in range(1, 11): print(f"{i} x {numero} = {i * numero}") # 4.- Pedir dos números al usuario (mínimo y máximo) y calcular la suma entre los dos # 2 y 5 ->2+3+4+5=14 minimo = int(input("Dime el primer número ")) maximo = int(input("Dime el segundo número ")) suma = 0 for i in range(minimo, maximo + 1): suma += i print(suma) # 5.- Pedir una cadena al usuario y escribir una cadena sin la letra 'a' # 'patata' -> ptt 'ayer se fue' -> 'yer se fue' cadena = input("Dime una cadena ") resultado = "" for letra in cadena: if letra != "a": resultado += letra print(resultado)
Ejercicios for
# 1.- Pedir un número al usuario y mostrar la suma de todos los números hasta ese número # 5->1+2+3+4+5=15 # 2.- Pedir una cadena al usuario y escribir si tiene o no tiene alguna 'ñ' # 'Logroño'-> Tiene 'Barceloba'->No tiene # 3.- Pedir un número al usuario y escribir su tabla de multiplicar # 4.- Pedir dos números al usuario (mínimo y máximo) y calcular la suma entre los dos # 2 y 5 ->2+3+4+5=14 # 5.- Pedir una cadena al usuario y escribir una cadena sin la letra 'a' # 'patata' -> ptt 'ayer se fue' -> 'yer se fue'