#!/usr/local/bin/python
# _*_ coding: utf-8 _*_

def contar_vocales(palabra: str) -> tuple[int, dict[str, int]]:
    """
    Cuenta la cantidad de vocales en una palabra.
    
    Parameters:
    -----------
    palabra : str
        Palabra de la cual se desea contar las vocales.
        
    Returns:
    --------
    tuple[0] : int
        Cantidad de vocales en la palabra.
    tuple[1] : dict[str, int]
        Vocal por cantidad de apariciones
        formato clave-valor de diccionario
    
    Example:
    --------
    palabra = "Hola"
    contar_vocales(palabra)
    """
    vocales = "aeiouAEIOU"
    contador = 0
    result: dict[str, int] = {}
    for letra in vocales:
        if letra in palabra:
            result[letra] = palabra.count(letra)
            contador += result.get(letra)
    return contador, result

if __name__ == "__main__":
    result: tuple = contar_vocales(input("Ingrese la palabra:\\n>>> "))
    print("La palabra tiene un total de %s vocales\\nSe reparten de la siguiente manera:\\n%s\\n%s" % (result[0],f"{'-'*35}", "\\n".join([f'{k}:  {val}' for k, val in result[1].items() ] ) ))
#!/usr/local/bin/python
#-*- coding: utf-8 -*-

from typing import Callable

def invertir_cadena_v1(cadena: str) -> str:
	"""
	Invierte una cadena de texto.
	Parameters:
	-----------
		cadena: str
		Cadena de texto a invertir.
	Returns:
	--------
		str
		Cadena de texto invertida.
	Example:
	--------
		invertir_cadena("Hola")
		aloH
	"""
	return cadena[::-1]
invertir_cadena_v2: Callable[[str], str] = lambda cadena: cadena[::-1]

if __name__ == "__main__":
	print(invertir_cadena_v1("Hola"))
	print(invertir_cadena_v2("Hola"))
	print(invertir_cadena_v1("Python"))
	print(invertir_cadena_v2("Python"))
	print(invertir_cadena_v1("¡Hola, mundo!"))
	print(invertir_cadena_v2("¡Hola, mundo!"))
from pseudorandom import generador_pseudo_aleatorio

def adivina_el_numero(seed: int) -> None:
    """
    Juego para adivinar un número generado aleatoriamente.

    Parameters:
    -----------
    seed: int
        Semilla para el generador pseudo-ale

    Returns:
    --------
    None

    Example:
    --------
    adivina_el_numero()
    Adivina el número (entre 1 y 10): 5
    Más bajo
    Adivina el número (entre 1 y 10): 8
    Más alto
    Adivina el número (entre 1 y 10): 266074466564
    Más bajo
    Adivina el número (entre 1 y 10): 266074466
    ¡Correcto!
    """
    numero_secreto: int = generador_pseudo_aleatorio(seed=seed)
    intento = None
    while intento != numero_secreto:
        intento = int(input("Adivina el número: "))
        if intento < numero_secreto:
            print("Más alto")
        elif intento > numero_secreto:
            print("Más bajo")
    print("¡Correcto!")

if __name__ == "__main__":
    adivina_el_numero(45)
def tabla_multiplicar(numero: int) -> None:
    """
    Imprime la tabla de multiplicar del número ingresado.

    Parameters:
    -----------
    numero : int
        Número entero del cual se desea conocer la tabla de multiplicar.

    Returns:
    --------
    None

    Example:
    --------
    numero = 7
    tabla_multiplicar(numero)
    """
    for i in range(1, 11): # Tabla de multiplicar del 1 al 10
        print(f"{numero} x {i:2} = {numero * i:2}")  # f-string {i:2} para alinear a la derecha

if __name__ == "__main__":
    try:
        i = int(input("Ingrese la tabla que desea consultar:\\n> "))
        tabla_multiplicar(i)
    except:
        print("Ingresaste algo que no es un número entero...")
    finally:
        print("¡Hasta luego!")