# crear una función generarRango a la que le pasamos un número y nos devuelve una lista # desde el 1 hasta ese número generarRango(5)_>[1,2,3,4,5] #crear una función mediaAritmetica a la que le pasamos una lista de números y nos devuelve la media # mediaAritmetica([2,4,6])->4 # crear una función a la que le pasamos una letra y un número y nos genera una lista con esa letra # repetida una, dos y hasta n veces # generarCadenas("a",5)->["a","aa","aaa","aaaa","aaaaa"] # Crear una función a la que le pasamos un nombre de archivo y un número y nos crea ese archivo # y nos escribe números de líneas hasta el número # crearArchivo("datos.txt",5) nos genera un archivo 'datos.txt' con 5 líneas numeradas del 1 al 5
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
Listas, una introducción
numero = 5 cadena = "hola que tal" numero += 9 cadena += " yo muy bien" alumno1 = "Ana" alumno2 = "Eva" alumno3 = "Pep" # Si tengo 20 alumnos no voy a tener 20 variables una para cada alumno # Se han inventado las listas: una variable en la que yo puedo introducir muchos elementos # como defino una lista: con corchetes [...] # cada elemento está separado por comas alumnos = ["Ana", "Eva", "Pep"] # lista de nombres notas = [5, 8, 6] # lista de notas print(alumnos) print(notas) # como accedo a los elementos de la lista: por su posición print(alumnos[0]) # Ana print(alumnos[1]) # Eva print(alumnos[2]) # Pep alumnos[2] = "Juan" # en la posición 2 cambio Pep por Juan print(alumnos) # recorrer la lista for alumno in alumnos: print(alumno) for i in range(len(alumnos)): print(i, alumnos[i]) listaMixta = [1, "Ana", True, 7.8] listaMixtaAnidada = [1, "Ana", True, 7.8, [1, 2, 3]] # valor y referencia precio=15 otroprecio=precio # copia por valor precio=20 # cuando cambio el valor de precio no cambia el de otroprecio print(precio, otroprecio) lista=[1,2,3,4] otralista=lista # copia por referencia otraMas=lista.copy() # copia por valor lista[1]=27 # cuando cambio el valor de lista SI CAMBIA el de otralista print(lista,otralista,otraMas) def cambiarLista(lista): for i in range(len(lista)): lista[i]+=2 cambiarLista(lista) print(lista,otralista) # añadir elementos al final lista.append(90) print(lista) # recupera y borra el elemento del final elemento=lista.pop() print(lista,elemento) # recupera y borra un elemento en cualquier posición elemento=lista.pop(0) print(lista,elemento) # insertar un elemento en cualquier posición lista.insert(2,666) print(lista) cuadrados=[] for i in range(11): cuadrados.append(i**2) print(cuadrados) print(cuadrados[-1]) # el mismo slicing que en cadenas print(cuadrados[2:4]) print(cuadrados[2:]) print(cuadrados[:4]) print(cuadrados[2:-2]) print(cuadrados[-7:-2]) print(cuadrados[0::2])
Ejemplos trabajo con archivos
# trabajar con archivos en python # Tengo que abrir un archivo: open # al abrirlo especifico el modo lectura (r) escritura (w) añadir(a) # hago operaciones de escritura o de lectura # cierro el archivo import random archivo=open("prueba.txt","w") for i in range(5): archivo.write("Hola que tal\n") archivo.close() # Es importante cerrar aunque si no cerramos no pasa nada archivo=open("prueba.txt","r") contenido=archivo.read() print(contenido) archivo.close() archivo=open("tiradas.txt","w") def tirada(): if random.randint(1,2)==1: return "cara" else: return "cruz" for i in range(10): archivo.write(tirada()+"\n") archivo.close() archivo=open("datos.csv","r") datos=archivo.read() for linea in datos.split("\n"): print("-->",linea) alumno=linea.split(";") print(alumno) archivo.close() # leer línea a línea archivo = open("datos.csv", "r") for linea in archivo: print("-->", linea.strip()) archivo.close() archivo = open("datos.csv", "r") linea = archivo.readline() while (linea): print("-->", linea.strip()) linea = archivo.readline() archivo.close()
el archivo datos.csv:
Ana;ana@ana.com
pepe;pepe@pepe.com
Eva;eva@eva.com
Solución ejercicio bootstrap
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="./css/bootstrap.css"> <!-- Mis estilos van después del bootstrap --> <link rel="stylesheet" href="css/estilos.css"> </head> <body> <!-- Utilizamos el card de w3school ¡copiado!--> <div class="d-flex "> <div class="card" style="width:400px"> <div class="card-body"> <h4 id="user_name" class="card-title">Jane Doe</h4> <p id="user_info" class="card-text">Some example text some example text. Jane Doe is an architect and engineer</p> <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">-</span></button> </div> <img id="user_image" class="card-img-bottom" src="../bootstrap4/img_avatar6.png" alt="Card image" style="width:100%"> </div> <div id="demo" class="collapse"> <!--Utilizo la tabla para que quede más o menos bonito--> <table class="table table-striped m-4"> <thead> <tr> <th>Tareas pendientes</th> <!-- Tengo el id para borrar todas las tareas--> <th> <button type="button" class="btn btn-danger" id="borrar_tareas"> Eliminar todas </button></th> </tr> </thead> <tbody id="lista_tareas"> </tbody> </table> </div> </div> <!-- Utilizamos el Modal de w3school ¡copiado1 --> <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> <!-- El input tiene un id porque necesito el valor --> <div class="modal-body"> <input id="tarea" class="form-control " type="text" placeholder="Introduzca la tarea"> </div> <!-- El boton de nueva tarea tiene un id por la misma razón --> <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> <!-- Aquí los scripts --> <script src="./js/bootstrap.bundle.js"></script> <script src="./js/script.js"></script> </body> </html>
// Todas las acciones las hago cuando se ha cargado la página window.onload = function () { // recojo todos los elementos con los que voy a trabajar 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"); let borrar_tareas = document.getElementById("borrar_tareas"); // Cuando pulsen borrar_tareas elimino todas las tareas // Cómo? Obtener tareas->Modificar tareas->guardar tareas->pintar tareas borrar_tareas.addEventListener("click", () => { // borrar tareas localStorage.setItem("tareas", "[]"); // pintar tareas pintaTareas(); }); // Cuando pulsen nueva_tarea añado la tarea a la lista nueva_tarea.addEventListener("click", () => { // obtener tareas let tareas = getTareas(); // modificar taras tareas.push(tarea.value); // guardar tareas setTareas(tareas); // Oculto el modal bootstrap.Modal.getInstance(modal).hide(); // pintar tareas pintaTareas(); }) // Obtengo los datos de la api fetch("https://randomuser.me/api") .then(response => response.json()) .then(resultado => { // Aqui 'resultado' tiene ya el json convertido a variable, la podemos usar console.log(resultado); // Llamo a una función con el usuario devuelto pintaUsuario(resultado.results[0]); }); // pinto las tareas al iniciar la página para que si refresco me pinte lo que hay pintaTareas(); function pintaTareas() { // Recupera las tareas let tareas = getTareas(); // Modifica el número del badge num_tareas.innerHTML = tareas.length; // Si no tengo tareas no muestro el botón if (tareas.length==0){ borrar_tareas.classList.add("d-none") }else{ borrar_tareas.classList.remove("d-none") } // Crea los elementos de la tabla de tareas, lo hago con map // A cada botón le pongo el indice de la tarea que quiero borrar // Cómo? con el segundo parámetro del map // lo guardo en un atributo especial del html que es el data- // En el dataset tendré un atributo idtarea que valdrá el índice de la tarea que quiero borrar lista_tareas.innerHTML = tareas.map((x, i) => "<tr><td>" + x + `</td><td><button data-idtarea="${i}" type="button" class="btn btn-danger btn-sm borrar_tarea"> Borrar </button></td></tr>`).join(""); // A cada botón le añado el evento de borrar for (let boton of document.getElementsByClassName("borrar_tarea")) { boton.addEventListener("click", function () { // Obtengo la tarea let tareas = getTareas(); // Modifico las tareas: yo en dataset.idtarea tengo el id de la tarea que quiero eliminar tareas = tareas.filter((x, i) => i != this.dataset.idtarea); // Guardo las tareas setTareas(tareas); // Pinto las tareas pintaTareas(); }) } } } function getTareas() { // Recupero las tareas del storage y las parseo del JSON let tareas = localStorage["tareas"] || "[]"; tareas = JSON.parse(tareas); return tareas; } function setTareas(tareas) { // Lo guardo en el localstorage localStorage["tareas"] = JSON.stringify(tareas); } function pintaUsuario(usuario) { // Ponemos los datos en el card let nombre = document.getElementById("user_name"); let email = document.getElementById("user_info"); let foto = document.getElementById("user_image"); // nombre.innerHTML = Object.values(usuario.name).join(" "); nombre.innerHTML = usuario.name.title + " " + usuario.name.first + " " + usuario.name.last; email.innerHTML = usuario.email; foto.src = usuario.picture.large; }
Ejercicios cadenas Python
# Vamos a crear una función cuantasPalabras a la que le pasamos una cadena y un caracte # Y nos dice cuantas palabras en esa cadena contienen ese caracter # cuantasPalabras("En un lugar de la mancha","e")->2 # cuantasPalabras("En un lugar de la mancha","n")->3 # cuantasPalabras("En un lugar de la mancha","j")->0 # Como veis da lo mismo mayúsculas que minúsculas def cuantasPalabras(cadena, letra): """Nos cuenta cuantas palabras tienen esa letra""" cadena = cadena.lower() letra = letra.lower() cont = 0 # recorrer las palabras for palabra in cadena.split(): # saber si una palabra tiene esa letra if letra in palabra: cont += 1 return cont print(cuantasPalabras("En un lugar de la mancha", "e")) # 2 print(cuantasPalabras("En un lugar de la mancha", "n")) # 3 print(cuantasPalabras("En un lugar de la mancha", "j")) # 0 print(cuantasPalabras("En un lugar de la mancha", "a")) # 3 # Vamos a crear una función mezclar a la que le pasamos una cadena y nos crea otra con # la primera parte las letras pares y la segunda las impares, con unos ejemplos lo vemos mejor: # mezclar("abcdefg")->"acegbdf" mezclar("12345678")->"13572468" def mezclarFor(cadena): """Nos crea una cadena con las letras pares primero y después las impares""" par = "" impar = "" for i in range(len(cadena)): if i % 2 == 0: par += cadena[i] else: impar += cadena[i] return par + impar def mezclar(cadena): """Nos crea una cadena con las letras pares primero y después las impares""" return cadena[0::2] + cadena[1::2] print(mezclar("abcdefg")) # acegbdf print(mezclar("12345678")) # 13572468 # Vamos a crear una funcion que nos devuelva True si hay dos letras iguales repetidas # repetidas("hola que tal")->False # repetidas("viva sevilla")->True (hay dos l) # repetidas("mi carro me lo robaron")->True (hay dos r) def repetidas(cadena): for i in range(len(cadena) - 1): if cadena[i] == cadena[i + 1]: return True return False print(repetidas("hola que tal")) # ->False print(repetidas("viva sevilla")) # ->True (hay dos l) print(repetidas("mi carro me lo robaron")) # ->True (hay dos r) def dobleLetra(frase): fraseLower = frase.lower() # pongo el lower para que me pueda identificar todos los caracteres iguales indice = 1 # variable de soporte para comparar cada letra en el for vs. la siguiente letra de fraseLower (la cadena en la que busco dobles seguidos) for letra in fraseLower: if indice < len(frase) and letra == fraseLower[indice]: return True else: indice += 1 return False print(dobleLetra("Hola que tal")) # debería devolver un false print(dobleLetra("Mi carro me lo robaron")) # debería devolver True
Ejemplo función: palíndromo
# 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
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'))