# saber si una cadena es un palíndromo
# Una cadena es un palíndromo si se lee igual de principio a fin que viceversa
# Isaac no ronca asi
# esPalindromo(cadena)- True si es palíndromo y false en caso contrario
def esPalindromo(cadena):
"""
Comprueba si una cadena es un palíndromo, se lee igual de derecha a izquierda que al revés
Args:
cadena: cadena a comprobar
Returns:
bool: True si es palíndromo
"""
# poner la cadena en mayúsculas o en minúsculas
cadena = cadena.lower()
# quitar espacios
cadena = cadena.replace(" ", "")
"""if (cadena==cadena[::-1]):
return True
else:
return False"""
return cadena == cadena[::-1]
print(esPalindromo("Isaac no ronca asi")) # true
print(esPalindromo("Hola que tal")) # false
print(esPalindromo("Dabale arroz a la zorra el abad")) # true
Categoría: Python
Ejemplos de cadenas en python
Subcadenas: https://www.learnbyexample.org/python-string-slicing/
cad1 = "hola"
cad2 = "adios"
print(cad1 + " y " + cad2)
print(cad1, " y ", cad2)
cad3 = "ana" * 3
print(cad3)
print(len(cad3))
# subcadenas usamos la sintaxis de los corchetes
cad4 = "En un lugar de la mancha. Camión"
print(cad4[4]) # me escribe la posición 4
print(cad4[4:8]) # me escribe la posición 4 a la posición 8 no incluída
print(cad4[4:-4]) # desde la posición 4 hasta la posición 4 empezando desde el final
print(cad4[4:-1]) # desde la posición 4 hasta la posición 1 empezando desde el final
print(cad4[-4:-1]) # desde la posición 4 empezando desde el final hasta la posición 1 empezando desde el final
print(cad4[-1]) # último carácter
print(cad4[-2]) # penúltimo carácter
for i in range(len(cad4)):
print(cad4[0:i + 1])
# conversiones de mayúsculas/minúsculas
print(cad4.upper()) # lo pone en mayúsculas
print(cad4.lower()) # lo pone en minúsculas
print(cad4.capitalize()) # la primera letra de cada frase en mayúsculas, resto en minúsculas
print(cad4.title()) # la primera letra de cada pelabra en mayúsculas, resto en minúsculas
print(cad4.swapcase()) # las mayúsculas pasan a minúsculas y viceversa
print(cad4.casefold()) # También a minúsculas
# reemplazar
cad5 = cad4.replace("a", "@") # reemplaza todas las apariciones de a en la cadena por @
cad6 = cad4.replace("a", "@", 2) # lo mismo pero solo las dos primeras
print(cad5)
print(cad6)
# eliminar espacios
cad6 = " hola que tal "
print("|" + cad6.strip() + "|") # elimina espacios al principio y al final de la cadena
print("|" + cad6.lstrip() + "|") # elimina espacios al principio de la cadena
print("|" + cad6.rstrip() + "|") # elimina espacios al final de la cadena
# buscar subcadenas dentro de una cadena
print("mancha" in cad4) # esto me devuelve true porque mancha es una subcadena de cad4
print("pepe" in cad4) # esto me devuelve false porque pepe NO es una subcadena de cad4
pos = cad4.find("en") # busca la cadena 'en' dentro de la cad4 y nos devuelve la posición
pos3 = cad4.lower().find("en") # busca la cadena 'en' dentro de la cad4 y nos devuelve la posición
pos2 = cad4.find("un") # busca la cadena 'en' dentro de la cad4 y nos devuelve la posición
print(pos) # -1 porque la cadena 'en' no está, está 'En' que no es lo mismo
print(pos2) # porque 'un' está en la posición 3
print(pos3) # porque 'en' está en la posición 0 (al principio) si lo paso a minúsculas
pos4 = cad4.find("a")
while pos4 != -1:
print(pos4)
pos4 = cad4.find("a", pos4 + 1) # todas las apariciones de la letra 'a' dentro de cad4
cad6="en casa en ocasiones entiendo mis enredos"
pos=cad6.find("en")
print(pos)
pos=cad6.find("en",1)
print(pos)
pos=cad6.find("en",9)
print(pos)
for i in range(len(cad4)):
print(i,cad4[i])
# pasar de cadena a lista y viceversa
# split y join
lista=cad4.split() # me separa cada palabra y me la pone en una lista
print(lista)
print(len(lista)) # Número de palabras de la cadena
for palabra in lista:
print(palabra) # Voy recorriendo cada palabra de la lista
print(cad6.count("en")) # todas las veces que aparece 'en' que puede ser dentro de una palabra
cont=0
for palabra in cad6.split():
if palabra=="en":
cont+=1
print(cont) # cuenta las veces que tenemos la palbra 'en'
cad7="1,2,3,4,5,6,7,8"
numeros=cad7.split(",")
print(numeros)
cad8="-".join(numeros)
print(cad8)
print(cad6[0:8:2]) # Voy de la posición 0 a la 8 de 2 en 2
print(cad6[8:0:-1]) # Voy de la posición 8 a la 0 de uno en uno pero al revés
print(cad6[:4]) # Va desde el principio hasta la posición 4
print(cad6[4:]) # Va desde la posición 4 hasta el final
print(cad6[::-1]) # Invierte la cadena
invpalabras=""
for palabra in cad6.split():
invpalabras+=palabra[::-1]+" "
print(invpalabras)
Ejercicios argumentos variables
# vamos a crear una función a la que le pasamos una cantidad variable # de números y nos dice cuantos pares hay # contarPares(1,2,3)->1 contarPares(1,2,4,6)-> 3 # documentadla # Vamos a crear una función a la que le pasemos una cantidad variable de números # y nos diga la cantidad de aprobados (valor>=5) # aprobados(3,6,7,5)->3 aprobados(7,1,2,9)->2 #documentadla
Recursión en Python
Enlaces de más sencillo a más complicado:
https://www.programiz.com/python-programming/recursion
Recursividad y funciones de orden superior
# 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
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))