Solución contar vocales

# 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;