# pedir una cadena al usuario
# y decir cuantas vocales tiene
# pido una cadena al usuario
cadena = input("Dame una cadena ")
totalVocales = 0
# Recorreré la cadena
for letra in cadena:
# comprobaré si es vocal
if letra == "a" or letra == "e" or letra == "i" or letra == "o" or letra == "u":
totalVocales += 1
# imprimo el resultado
print("vocales",totalVocales)
vocalesSin=0
vocalescon=0
for letra in cadena:
# comprobaré si es vocal
for vocal in "aeiou":
if letra == vocal:
vocalesSin += 1
for vocal in "áéíóúàèìòùü":
if letra == vocal:
vocalescon += 1
# imprimo el resultado
print("vocales sin acentos",vocalesSin)
print("vocales con acentos",vocalescon)
useContext
crear Contexto: (Contexto.js)
import { createContext } from "react";
const Contexto=createContext("valor por defecto");
export default Contexto;
Proveer de contexto: (App.js)
import './App.css';
import React from 'react';
import ComPadre from './componentes/ComPadre';
import Contexto from './componentes/Contexto';
function App() {
return (
<div className="App">
<Contexto.Provider value="Hola contexto">
<ComPadre texto="Hola" />
</Contexto.Provider>
</div>
);
}
export default App;
Arbol de componentes: (Compadre,comhijo1,comhijo2)
import ComHijo1 from "./ComHijo1";
function ComPadre({ texto }) {
return <ComHijo1 texto={texto}/>;
}
export default ComPadre;
import ComHijo2 from "./ComHijo2";
function ComHijo1({ texto }) {
return <ComHijo2 texto={texto}/>;
}
export default ComHijo1;
import ComHijo3 from "./ComHijo3";
function ComHijo2({ texto }) {
return <ComHijo3 texto={texto}/>;
}
export default ComHijo2;
Consumir el contexo (ComHijo3)
import { useContext } from "react";
import Contexto from "./Contexto";
function ComHijo3({ texto }) {
const textoContexto = useContext(Contexto);
console.log(textoContexto)
return (<>
<h1>{texto}</h1>
<p> Esto viene desde las propiedades por goteo</p>
<h1>{textoContexto}</h1><p> Esto viene del contexto</p>
</>)
}
export default ComHijo3;
Ejemplos de useEffect en Calculadora
import React, {useEffect, useState } from 'react';
const Calculadora = () => {
// Estado para almacenar los datos del formulario
const [formulario, setFormulario] = useState({
numero1: 0,
numero2: 0
});
const [suma, setSuma] = useState(0);
const [multiplicacion, setMultiplicacion] = useState(0);
useEffect(() => {
console.log('El componente se ha montado por primera vez');
}, []); // Array vacío indico que se ejecute una sola vez, al montar (renderizar) el componente
useEffect(() => {
console.log(formulario);
}); // Si parámetros se ejecuta cada vez que renderizamos el componente: cuidado con poner cosas que fuercen a enderizar
useEffect(() => {
console.log('El formulario ha cambiado');
setSuma(formulario.numero1 + formulario.numero2) // Esto va con retraso
setMultiplicacion(formulario.numero1 * formulario.numero2) // Esto va con retraso
}, [formulario]); // Array con propiedades indico que se ejecute cuando cambian esas propiedades
// Función para manejar cambios en los campos de entrada
const handleInputChange = (event) => {
const { name, value } = event.target;
setFormulario({
...formulario,
[name]: Number(value)
});
};
return (
<form >
<label>
Numero 1:
<input
type="number"
name="numero1"
value={formulario.numero1}
onChange={handleInputChange}
/>
</label>
<label>
Numero 2:
<input
type="number"
name="numero2"
value={formulario.numero2}
onChange={handleInputChange}
/>
</label>
<h1>{formulario.numero1 + formulario.numero2}</h1>
<h1>{formulario.numero1 * formulario.numero2}</h1>
<h1>{suma}</h1>
<h1>{multiplicacion}</h1>
</form>
);
};
export default Calculadora;
Solución calculadora
import React, { useState } from 'react';
const Calculadora = () => {
// Estado para almacenar los datos del formulario
const [formulario, setFormulario] = useState({
numero1: 0,
numero2: 0
});
const [suma, setSuma] = useState(0);
const [multiplicacion, setMultiplicacion] = useState(0);
// Función para manejar cambios en los campos de entrada
const handleInputChange = (event) => {
const { name, value } = event.target;
setFormulario({
...formulario,
[name]: Number(value)
});
setSuma(formulario.numero1 + formulario.numero2) // Esto va con retraso
setMultiplicacion(formulario.numero1 * formulario.numero2) // Esto va con retraso
};
return (
<form >
<label>
Numero 1:
<input
type="number"
name="numero1"
value={formulario.numero1}
onChange={handleInputChange}
/>
</label>
<label>
Numero 2:
<input
type="number"
name="numero2"
value={formulario.numero2}
onChange={handleInputChange}
/>
</label>
<h1>{formulario.numero1 + formulario.numero2}</h1>
<h1>{formulario.numero1 * formulario.numero2}</h1>
<h1>{suma}</h1>
<h1>{multiplicacion}</h1>
</form>
);
};
export default Calculadora;
Ejercicio bucle
Vamos a pedir una cadena al usuario y vamos a decir el número de vocales que tiene.
Una vocal es a,e,i,o,u
Pasos:
-Pedir una cadena al usuario
– recorrer las letra de la cadena
– si es vocal contarla
– mostrar el resultado
Ejemplos bucles for
for i in range(10, 0, -1):
print(i)
for i in range(101):
cuadrado = i ** 2
if cuadrado % 2 == 0:
print(cuadrado)
numero = 20000000
queEs = True
for i in range(2, numero):
if numero % i == 0:
queEs = False
break # Un ejemplo muy bueno de uso de break
print(queEs)
# ¿Que nos está averiguando la variable queEs?
if queEs:
print(numero, "es primo")
else:
print(numero, "no es primo")
# break y continue
# break sale del bucle y continue se salta las siguientes instrucciones del bucle
for i in range(10):
if i == 5:
break # Sal del bucle, acabado
print(i)
for i in range(10):
if i == 5:
continue # Salta la siguiente instrucción
print(i)
cesta = [10, 30, 40, 5] # esto es una lista lo veremos
suma = 0
for valor in cesta:
suma += valor
print(suma)
cadena = ""
for i in range(5):
cadena += "*"
print(cadena)
cadena = "hola que tal"
palabras = 1
for letra in cadena:
if letra == " ":
palabras += 1
print(palabras)
# Bucles anidados: un bucle dentro de otro bucle
for i in range(1, 11):
print(i, "x 7 =", i * 7)
print("-----------")
# Todas las tablas de multiplicar
for tabla in range(1, 11):
for i in range(1, 11):
print(i, "x ", tabla, " =", i * tabla)
print("-----------")
# Todos los números primos hasta el 100
for numero in range(2,101):
queEs = True
for i in range(2, numero):
if numero % i == 0:
queEs = False
break
if queEs:
print(numero)
Bucle for
frutas = ["manzana", "banana", "cereza"]
for fruta in frutas:
print(fruta)
for contador in range(10):
print(contador)
# range(valor) -> 0 hasta el valor -1
# range(inicio,fin) -> desde inicio hasta fin -1
# range(inicio,fin,paso) -> desde inicio hasta fin de paso en paso
for i in range(5, 12):
print(i)
print("---------")
for i in range(0, 100, 5): # range(inicio,fin) -> desde inicio hasta fin -1
print(i)
print("---------")
for i in range(10, 1, -1): # range(inicio,fin) -> desde inicio hasta fin -1 en este caso paso negativo
print(i)
suma = 0
for i in range(101):
suma += i
print(suma)
for letra in "hola que tal":
print(letra)
letraABuscar = "a"
contador = 0
cadena = "tal"
for letra in cadena:
if letra == letraABuscar:
contador += 1
print("En '", cadena, "' hay", contador, "letras", letraABuscar)
notas = [5, 8, 1, 3, 6, 9]
aprobados = 0
for nota in notas:
if nota >= 5:
aprobados += 1
print("Hay", aprobados, "aprobados")
Soluciones ejercicios bucles while
# Escribir un programa que nos muestre una cuenta atrás desde 10
# 10 9 8 ...
cuenta = 10
while cuenta > 0:
print(cuenta)
cuenta -= 1
# Escribir un programa que muestre los cuadrados pares de los números del 1 al 100
# 4,16,36....
contador = 1
while contador <= 100:
# calculo el cuadrado
cuadrado=contador**2
# compruebo si es par
if (cuadrado % 2 == 0):
# imprimo
print(cuadrado)
contador += 1
Otro ejemplo de renderizar listas
function Alumnos() {
let lista = [{ id: 1, nombre: "Ana", nota: 7 },
{ id: 2, nombre: "Eva", nota: 5 },
{ id: 3, nombre: "Pep", nota: 8 }
]
return (<ul>
{
lista.map((valor) => <li key={valor.id}>{valor.nombre + " : " + valor.nota}</li>)
}
</ul>)
}
export default Alumnos;
Ejemplo estados complejos
import React, { useState } from 'react';
import Numero from './Numero'
const Contador = () => {
// Quiero variables dentro de una página de react tengo que utilizar estado
const [contador, setContador] = useState({ valor: 0, historial: [] });
const [cadena, setCadena] = useState("")
const incrementarContador = () => {
setContador({ valor: contador.valor + 1,
historial: contador.historial.concat("I") });
setCadena("")
console.log(contador)
};
const decrementarContador = () => {
if (contador.valor > 0) {
setContador({ valor: contador.valor - 1,
historial: contador.historial.concat("D") });
} else {
setCadena("No puedes poner número negativos")
}
};
const resetearContador = () => {
setContador({ valor: 0,
historial: [...contador.historial,"R"] });
setCadena("")
};
return (
<div>
<Numero numero={contador.valor} resetear={resetearContador} />
<p> {cadena}</p>
<button onClick={incrementarContador}>Incrementar</button>
<button onClick={decrementarContador}>Decrementar</button>
<button onClick={resetearContador}>Reset</button>
</div>
);
};
export default Contador;