# 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]
def generarRango(numero):
rango = []
for i in range(numero):
rango.append(i + 1)
return rango
print(generarRango(9)) # [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
def mediaAritmetica(lista):
return sum(lista) / len(lista)
print(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"]
def generarCadenas(letra, numero):
lista = []
if len(letra) != 1:
return lista
for i in range(numero):
lista.append(letra * (i + 1))
return lista
print(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
def crearArchivo(nombre,rango):
archivo=open(nombre,"w")
for i in range(rango):
archivo.write(str(i+1)+"\n")
archivo.close()
crearArchivo("datos.txt",5)
Bootstrap grid varios ejemplos
<!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 href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-sm-3 bg-primary text-white">25%</div>
<div class="col-sm-6 bg-dark text-white">
<h1>hola</h1>
</div>
<div class="col-sm-3 bg-success text-white">25%</div>
</div>
<div class="row">
<div class="col-md bg-primary text-white"><img class="img-fluid " src="./img/foto.jpg" /></div>
<div class="col-md bg-dark text-white"><img class="img-fluid " src="./img/foto.jpg" /></div>
<div class="col-md bg-success text-white"><img class="img-fluid " src="./img/foto.jpg" /></div>
</div>
<div class="row">
<div class="col bg-primary text-white">25%</div>
<div class="col bg-dark text-white">
<h1>hola</h1>
</div>
<div class="col bg-success text-white">25%</div>
<div class="col bg-primary text-white">25%</div>
<div class="col bg-success text-white">25%</div>
</div>
<div class="row">
<div class="col-sm-6 col-md-3 bg-primary text-white">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua.<br>
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.
</div>
<div class="col-sm-6 col-md-3 bg-dark text-white">
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam
rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt
explicabo.
</div>
<div class="col-sm-6 col-md-3 bg-success text-white">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua.<br>
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.
</div>
<div class="col-sm-6 col-md-3 bg-warning text-white">
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam
rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt
explicabo.
</div>
</div>
<div class="row">
<div class="col">--</div>
</div>
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-4">
<div class="col bg-primary text-white">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua.<br>
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.
</div>
<div class="col bg-dark text-white">
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam
rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt
explicabo.
</div>
<div class="col bg-success text-white">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua.<br>
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.
</div>
<div class="col bg-warning text-white">
<div class="row">
<div class="col bg-primary text-white">25%</div>
<div class="col bg-dark text-white">
<h1>hola</h1>
</div>
<div class="col bg-success text-white">25%</div>
<div class="col bg-primary text-white">25%</div>
<div class="col bg-success text-white">25%</div>
</div>
</div>
</div>
</div>
</body>
</html>
Solución alumnos definitiva
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lista alumnos</title>
<link rel="stylesheet" href="./css/bootstrap1.css">
</head>
<body>
<div class="container ">
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#modalAlumno">
Añadir alumno
</button>
<!--Utilizo la tabla para que quede más o menos bonito-->
<table class="table table-striped m-4">
<thead>
<tr>
<th>Alumno</th>
<th>Nota</th>
<!-- Tengo el id para borrar todas las tareas-->
<th> <button type="button" class="btn btn-danger" id="borrar_alumnos">
Eliminar todos
</button></th>
</tr>
</thead>
<tbody id="lista_alumnos">
</tbody>
</table>
<!-- Utilizamos el Modal de w3school ¡copiado! -->
<div class="modal fade" id="modalAlumno">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title">Nuevo alumno</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="nombreAlumno" class="form-control " type="text"
placeholder="Introduzca el nombre del alumno">
<input id="notaAlumno" class="form-control " type="number"
placeholder="Introduzca la nota del alumno">
</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="nuevo_alumno">Añadir alumno</button>
</div>
</div>
</div>
</div>
</div>
<script src="./js/bootstrap.bundle.js"></script>
<script src="./js/alumnos.js"></script>
</body>
</html>
let estado = {} // Para guardar todos los componentes que me hacen falta
window.onload = function () {
// Guardo todos los accesos a los elementos html que necesito
// Me olvido del html para el resto del código
estado.nuevo = document.getElementById("nuevo_alumno");
estado.nuevo.addEventListener("click", nuevoAlumno);
estado.borrar = document.getElementById("borrar_alumnos");
estado.borrar.addEventListener("click", borrarAlumnos);
estado.tabla = document.getElementById("lista_alumnos");
estado.nombre = document.getElementById("nombreAlumno");
estado.nota = document.getElementById("notaAlumno");
estado.modal = document.getElementById("modalAlumno");
estado.alumnos = [];
iniciar();
}
function iniciar() {
// Rcupero los datos del storage esto se hace solo una vez
getStorageData();
pintarAlumnos();
}
function nuevoAlumno() {
// Recuperar los datos del modal
let alumno = getDatosAlumno();
if (alumno.nota<0 || alumno.nota>10){
alert("Nota incorrecta")
return
}
// Añadirlos al estado
estado.alumnos.push(alumno);
// Pintar los datos
pintarAlumnos()
ocultarModal()
}
function borrarAlumnos() {
estado.alumnos = [];
pintarAlumnos();
}
function getDatosAlumno() {
return { nombre: estado.nombre.value, nota: Number(estado.nota.value) }
}
function ocultarModal() {
bootstrap.Modal.getInstance(estado.modal).hide();
}
function borrarAlumno() {
let idalumno=this.dataset.idalumno
estado.alumnos=estado.alumnos.filter((x,i)=>i!=idalumno);
pintarAlumnos();
}
// Funciones de localStorage
function getStorageData(){
let alumnos=localStorage.getItem("alumnos") || "[]";
alumnos=JSON.parse(alumnos);
estado.alumnos=alumnos
}
function setStorageData(){
localStorage.setItem("alumnos",JSON.stringify(estado.alumnos))
}
// Una capa intermedia entre la función pura y nuestro programa
// Con el fin de que todo sea más escalable
function pintarAlumnos() {
setStorageData();
pintarDatos(estado.alumnos, estado.tabla)
}
function pintarDatos(alumnos, destino) {
lista = "";
let suma=0;
let i=0;
for (let alumno of alumnos) {
lista += `<tr><td>${alumno.nombre}</td><td class=${alumno.nota >= 5 ? "text-success " : "text-danger"}>${alumno.nota}</td><td>
<button data-idalumno="${i}" type="button" class="btn btn-danger btn-sm borrar_alumno">
Borrar
</button>
</td></tr>`;
i++
suma+=alumno.nota
}
let media=Math.round(suma*100/alumnos.length)/100
lista += alumnos.length>0?`<tr><td>Media</td><td class=${media >= 5 ? "text-success " : "text-danger"}>${media}</td></tr>`:"";
destino.innerHTML = lista;
for (let boton of document.getElementsByClassName("borrar_alumno")) {
boton.addEventListener("click",borrarAlumno);
}
}
Solución ejercicio alumnos 1 versión
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lista alumnos</title>
<link rel="stylesheet" href="./css/bootstrap1.css">
</head>
<body>
<div class="container ">
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#modalAlumno">
Añadir alumno
</button>
<!--Utilizo la tabla para que quede más o menos bonito-->
<table class="table table-striped m-4">
<thead>
<tr>
<th>Alumno</th>
<th>Nota</th>
<!-- Tengo el id para borrar todas las tareas-->
<th> <button type="button" class="btn btn-danger" id="borrar_alumnos">
Eliminar todos
</button></th>
</tr>
</thead>
<tbody id="lista_alumnos">
</tbody>
</table>
<!-- Utilizamos el Modal de w3school ¡copiado! -->
<div class="modal fade" id="modalAlumno">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title">Nuevo alumno</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="nombreAlumno" class="form-control " type="text"
placeholder="Introduzca el nombre del alumno">
<input id="notaAlumno" class="form-control " type="number"
placeholder="Introduzca la nota del alumno">
</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="nuevo_alumno">Añadir alumno</button>
</div>
</div>
</div>
</div>
</div>
<script src="./js/bootstrap.bundle.js"></script>
<script src="./js/alumnos.js"></script>
</body>
</html>
let estado = {} // Para guardar todos los componentes que me hacen falta
window.onload = function () {
// Guardo todos los accesos a los elementos html que necesito
// Me olvido del html para el resto del código
estado.nuevo = document.getElementById("nuevo_alumno");
estado.nuevo.addEventListener("click", nuevoAlumno);
estado.borrar = document.getElementById("borrar_alumnos");
estado.borrar.addEventListener("click", borrarAlumnos);
estado.tabla = document.getElementById("lista_alumnos");
estado.nombre = document.getElementById("nombreAlumno");
estado.nota = document.getElementById("notaAlumno");
estado.modal = document.getElementById("modalAlumno");
estado.alumnos = [];
iniciar();
}
function iniciar() {
estado.alumnos = [{ nombre: "Ana", nota: 5 }, { nombre: "Eva", nota: 8 }, { nombre: "Pep", nota: 3 }];
pintarAlumnos()
}
function nuevoAlumno() {
// Recuperar los datos
let alumno = getDatosAlumno();
// Añadirlos al estado
estado.alumnos.push(alumno);
// Pintar los datos
pintarAlumnos()
ocultarModal()
}
function borrarAlumnos() {
estado.alumnos = [];
pintarAlumnos();
}
function getDatosAlumno() {
return { nombre: estado.nombre.value, nota: Number(estado.nota.value) }
}
function ocultarModal() {
bootstrap.Modal.getInstance(estado.modal).hide();
}
// Una capa intermedia entre la función pura y nuestro programa
// Con el fin de que todo sea más escalable
function pintarAlumnos() {
pintarDatos(estado.alumnos, estado.tabla)
}
function pintarDatos(alumnos, destino) {
lista = "";
let suma=0;
for (let alumno of alumnos) {
lista += `<tr><td>${alumno.nombre}</td><td class=${alumno.nota >= 5 ? "text-success " : "text-danger"}>${alumno.nota}</td></tr>`;
suma+=alumno.nota
}
let media=Math.round(suma*100/alumnos.length)/100
lista += `<tr><td>Media</td><td class=${media >= 5 ? "text-success " : "text-danger"}>${media}</td></tr>`;
destino.innerHTML = lista;
}
Chuletas interactivas HTML CSS y JS
Ejercicios listas
# 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
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