# 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
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
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)
Ejemplo uso varias cosas de bootstrap con JS
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#myModal"> Añadir tarea </button> <button class="btn btn-info " data-bs-toggle="collapse" data-bs-target="#demo">Ver tareas <span id="num_tareas" class="badge bg-danger">4</span></button> <div id="demo" class="collapse"> <ul id="lista_tareas"></ul> </div> <!-- The Modal --> <div class="modal fade" id="myModal"> <div class="modal-dialog modal-xl modal-dialog-centered"> <div class="modal-content"> <!-- Modal Header --> <div class="modal-header"> <h4 class="modal-title">Tarea nueva</h4> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <!-- Modal body --> <div class="modal-body"> <input id="tarea" class="form-control " type="text" placeholder="Introduzca la tarea"> </div> <!-- Modal footer --> <div class="modal-footer"> <button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button> <button type="button" class="btn btn-success" id="nueva_tarea">Añadir tarea</button> </div> </div> </div> </div> <script src="./js/bootstrap.bundle.js"></script> <script src="./js/script.js"></script>
let modal=document.getElementById("myModal"); let nueva_tarea=document.getElementById("nueva_tarea"); let tarea=document.getElementById("tarea"); let lista_tareas=document.getElementById("lista_tareas"); let num_tareas=document.getElementById("num_tareas"); nueva_tarea.addEventListener("click",()=>{ let tareas=localStorage["tareas"] || "[]" tareas=JSON.parse(tareas); tareas.push(tarea.value); localStorage["tareas"]=JSON.stringify(tareas) bootstrap.Modal.getInstance(modal).hide() num_tareas.innerHTML=tareas.length lista_tareas.innerHTML=tareas.map(x=>"<li>"+x+"</li>").join("") })
Ejemplo barra bootstrap
html
<div class="progress"> <div id="barra" class="progress-bar progress-bar-striped progress-bar-animated" style="width:10%"></div> </div>
jd
let barra = document.getElementById("barra") let cont = 10 setTimeout(incrementarBarra, 1000) function incrementarBarra() { cont+=5 barra.style.width = cont + "%" barra.innerHTML = cont + "%" if (cont < 100) { setTimeout(incrementarBarra, 1000) } }
Solución examen
function repetir(cadena, numero) { if (cadena.length != 1) { return ""; } return cadena.repeat(numero); } console.log(repetir("a", 6)) console.log(repetir("aasdasd", 6)) function masLarga(cad1, cad2) { return cad1.length > cad2.length ? cad1 : cad2 } console.log(masLarga("hola", "adios")) console.log(masLarga("hola amigos", "adios")) function eliminarPares(lista) { return lista.filter(cad => cad.length % 2 != 0) } console.log(eliminarPares(["aa", "bbb", "ccccc", "dddd"])) function repetidas(cadena){ for(i=1;i<cadena.length;i++){ if (cadena.at(i)==cadena.at(i-1) && cadena.at(i)!=" "){ return true; } } return false; } function repetidasForeach(cadena){ let res=false cadena.split('').forEach((valor,i)=>{ if (valor==cadena.at(i+1)){ res= true; return } }) return res; } console.log(repetidasForeach('La luvia en madrid'))
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"