# calcular el factorial de un número # numero!= 1*2*3...*numero # nombre de la función y parámetros def factorial(numero) # que devuelvo: calcular el factorial # casos de prueba. factorial(3)--> 6 factorial(5)--->120 def factorial(numero): resultado=1 # codigo que me calculará el factorial todavía no sé como for i in range(1,numero+1): resultado*=i return resultado print(factorial(3)) # imprimir 6 print(factorial(5)) # imprimir 120 # quiero una función que me cuente en una cadena las veces que aparece una letra # contarLetra("hola que tal","l")--->2 contarLetra("patata","a")--->3 def contarLetra(cadena,letra): apariciones=0 # calcularé las veces que aparece la letra for caracter in cadena: if caracter==letra: apariciones+=1 return apariciones print(contarLetra("hola que tal","l")) # 2 print(contarLetra("patata","a")) # 3
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
Más ejemplos funciones
# funciones puras: no dependen del entorno para funcionar # Son como una caja negra que procesan los datos que le pasamos # y devuelven un resultado import math def entrarNoPura(): if edad >= 18: return True else: return False edad = 19 print(entrarNoPura()) edad = 9 print(entrarNoPura()) def entrarPura(edad): if edad >= 18: return True else: return False print(entrarPura(20)) def suma(a, b, c, d): return a + b + c + d print(suma(1, 2, 3, 4)) def saludo(nombre): return "Hola " + nombre cadena = saludo("Ana") print(cadena) print(saludo("Eva")) def nombreCompleto(nombre, apellido): return nombre + " " + apellido print(nombreCompleto("Ana", "Pi")) def contarVocales(cadena): vocales = 0 for letra in cadena: # comprobaré si es vocal for vocal in "aeiouáéíóúàèìòùü": if letra == vocal: vocales += 1 return vocales def esPrimo(numero): for i in range(2,numero): if numero % i == 0: return False return True print(contarVocales("Hola que tal")) print(contarVocales("él es un pingüino matón")) print(esPrimo(17)) print(esPrimo(18))
Ejemplos funciones
# dentro de un programa tengo muchos códigos que hacen diferentes cosas # contarvocales # La idea de una función es: # 1) Poder reutilizar un código en diferentes sitios sin tener que repetirlo # 2) Hacer que nuestro código sea modular y flexible # 3) Costruir funciones puras (ya veremos lo que es) # defino una función saludo def saludo(nombre): print("Hola", nombre, " que tal estás?") print("Hace tiempo que no nos vemos") print("Ya te lamaré", nombre) saludo("Ana") # Llamo a la función con el valor de "Ana" y se ejecutará con este valor saludo("Pep") saludo("Juan") # sintaxis de una función # def nombre_de_la_funcion(parametro1,parametro2,parametro3...): # Un código a ejecutar # return valor # Sin parámetros y sin devolver valor def hola(): print("hola") hola() # No tiene parámetros pero devuelve un valor def numeroPI(): return 3.141592653 pi = numeroPI() print(pi) # Tiene parámetros y devuelve un valor def doble(numero): return numero * 2 a = doble(8) print(a) a = doble(90) print(a) # Tiene un parámetro pero no devuelve ningún valor def despedida(nombre): print("Adios", nombre) despedida("Ana") # función con 3 parámetros que devuelve un resultado def mayor(a, b, c): if b > a: a = b if c > a: a = c return a print(mayor(1, 8, 2)) print(mayor(10, 8, 2))
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")