19. Chistes

 ¡Claro! Te voy a hacer un tutorial paso a paso para agregar la funcionalidad de que el asistente diga chistes, siguiendo exactamente la estructura que muestran las imágenes.


📚 Tutorial: Agregar chistes al asistente de voz

📦 Paso 1: Instalar la librería pyjokes

Primero necesitas instalar la librería que contiene los chistes. Abre la terminal (CMD) y ejecuta:

bash
pip install pyjokes

Deberías ver un mensaje similar a la imagen:

text
successfully installed Jinja2-3.0.3 Markdown pyjokes-x.x.x

📝 Paso 2: Importar la librería en el código

Al inicio de tu archivo Python, agrega la importación de pyjokes junto con las otras librerías:

python
import pyttsx3
import speech_recognition as sr
import datetime
import pywhatkit
import time
import pyjokes  # 👈 NUEVA LIBRERÍA PARA CHISTES

🎭 Paso 3: Crear la función para contar chistes

Después de la función busqueda_youtube(), agrega esta nueva función:

python
def chiste():
    """Cuenta un chiste aleatorio"""
    try:
        # Obtener un chiste en español (categoría 'neutral' para chistes sin groserías)
        joke = pyjokes.get_joke(language='es', category='neutral')
        print(f"😂 Chiste: {joke}")
        hablar(joke)
    except Exception as e:
        print(f"Error al contar chiste: {e}")
        hablar("No pude encontrar un chiste en este momento")

Explicación:

  • pyjokes.get_joke(language='es', category='neutral') obtiene un chiste en español.

  • La categoría 'neutral' evita chistes ofensivos o con groserías.

  • Si hay error, se muestra un mensaje alternativo.


🎤 Paso 4: Agregar el comando en la función escuchar()

Dentro del bucle principal escuchar(), en la sección donde se procesan los comandos, agrega la condición para detectar la palabra "chiste":

python
# Dentro de la función escuchar(), después de los otros comandos

# Comando para chistes
elif "chiste" in text or "chistes" in text or "cuéntame un chiste" in text:
    chiste()

Debe quedar algo así en tu código:

python
# ========== COMANDOS ==========

# Comando para salir
if "adiós" in text or "adios" in text or "salir" in text or "hasta luego" in text:
    hablar("Hasta luego, que tengas un buen día")
    break

# Comando para mostrar ayuda
elif "comandos" in text or "ayuda" in text or "qué puedes hacer" in text:
    mostrar_comandos()

# Comando para fecha/día
elif "dia" in text or "día" in text or "fecha" in text or "hoy" in text:
    hoy = datetime.datetime.now()
    respuesta = f"Hoy es {hoy.day} del {hoy.month} del {hoy.year}"
    print(f"📅 {respuesta}")
    hablar(respuesta)

# Comando para hora
elif "hora" in text:
    ahora = datetime.datetime.now()
    if ahora.minute == 0:
        respuesta = f"Son las {ahora.hour} en punto"
    elif ahora.minute < 10:
        respuesta = f"Son las {ahora.hour} con cero {ahora.minute}"
    else:
        respuesta = f"Son las {ahora.hour} con {ahora.minute}"
    print(f"⏰ {respuesta}")
    hablar(respuesta)

# Comando para YouTube
elif 'busca en youtube' in text:
    busqueda_youtube(text)

# 👇 NUEVO COMANDO PARA CHISTES 👇
# Comando para chistes
elif "chiste" in text or "chistes" in text or "cuéntame un chiste" in text:
    chiste()

# Comando no reconocido
else:
    hablar("No tengo una respuesta para eso")
    print("💡 Tip: Di 'comandos' para ver lo que puedo hacer")

📋 Paso 5: Actualizar la lista de comandos

Para que el usuario sepa que puede pedir chistes, actualiza la función mostrar_comandos():

python
def mostrar_comandos():
    """Muestra los comandos disponibles"""
    print("\n📋 COMANDOS DISPONIBLES:")
    print("  • 'hora' - Te digo la hora")
    print("  • 'fecha', 'día' o 'hoy' - Te digo la fecha")
    print("  • 'busca en youtube [lo que quieras]' - Busca en YouTube")
    print("  • 'chiste' o 'cuéntame un chiste' - Te cuento un chiste")  # 👈 NUEVO
    print("  • 'comandos' - Muestro esta lista")
    print("  • 'adiós' o 'salir' - Salgo del programa")
    print("-" * 40)
    hablar("Puedes preguntarme la hora, la fecha, buscar en YouTube o pedirme un chiste")

✅ Paso 6: Probar el asistente

Ejecuta el programa y prueba los siguientes comandos:

text
👤 Dijiste: chiste
😂 Chiste: ¿Qué hace una abeja en el gimnasio? ¡Zum-ba!
🤖: ¿Qué hace una abeja en el gimnasio? ¡Zum-ba!
text
👤 Dijiste: cuéntame un chiste
😂 Chiste: ¿Cómo se llama el campeón de buceo japonés? Tokofondo
🤖: ¿Cómo se llama el campeón de buceo japonés? Tokofondo

📊 Estructura final del código

Tu código ahora debería tener esta estructura general:

python
import pyttsx3
import speech_recognition as sr
import datetime
import pywhatkit
import time
import pyjokes  # 👈 NUEVA

# Inicializar reconocimiento de voz
listener = sr.Recognizer()

def hablar(texto):
    # ... código existente ...

def bienvenida():
    # ... código existente ...

def mostrar_comandos():
    # ... código actualizado con chistes ...

def busqueda_youtube(busca):
    # ... código existente ...

def chiste():  # 👈 NUEVA FUNCIÓN
    try:
        joke = pyjokes.get_joke(language='es', category='neutral')
        print(f"😂 Chiste: {joke}")
        hablar(joke)
    except Exception as e:
        print(f"Error al contar chiste: {e}")
        hablar("No pude encontrar un chiste en este momento")

def escuchar():
    # ... código existente con el nuevo comando ...

if __name__ == "__main__":
    # ... código existente ...

🎯 Resumen

PasoAcción
1Instalar pyjokes con pip install pyjokes
2Importar import pyjokes
3Crear función chiste()
4Agregar elif "chiste" in text: en escuchar()
5Actualizar mostrar_comandos()
6¡Probar!

¡Y listo! Ahora tu asistente de voz puede contar chistes 



*************************************************

19. Chistes con Python: Tutorial para Principiantes

😂 Introducción: Dale humor a tu asistente

¡Es hora de que tu asistente virtual tenga sentido del humor! Imagina poder pedirle un chiste cuando estés aburrido, necesites alegrar el ambiente o simplemente quieras reírte un poco. Vamos a convertir tu asistente en el "comediante" de tu computadora.

¿Por qué agregar chistes?

  • Hace tu asistente más amigable y divertido

  • Es una excelente forma de practicar nuevas librerías

  • ¡Todos necesitamos reírnos de vez en cuando!


🛠️ Lo que necesitaremos

Nueva librería: pyjokes

Esta es una librería especializada que contiene una colección de chistes para programadores (¡y normales también!).

bash

# En tu terminal o CMD:

pip install pyjokes

Esquema de lo que hace pyjokes:

text

pyjokes → Biblioteca de chistes → Tu asistente → ¡Risas!

      ↑                       ↙

      └── Selecciona uno al azar


📚 ¿Qué es pyjokes?

pyjokes es como una caja de chistes virtual. Contiene:

  • Chistes de programación 🤓

  • Chistes generales 😄

  • Chistes en varios idiomas 🌍

Analoǵía: Es como tener un libro de chistes dentro de Python.


✍️ Código paso a paso explicado

Paso 1: Instalar e importar la librería

python

# Después de instalar con pip, la importamos:

import pyjokes

⚠️ Importante: Como con todas las librerías nuevas, después de instalar:

  1. Cierra VS Code o tu editor

  2. Ábrelo nuevamente

  3. Ahora Python reconocerá pyjokes


Paso 2: Detectar cuando pedimos un chiste

python

# En tu función principal (donde procesas comandos):

if 'chiste' in comando:

    contar_chiste()

Ejemplos que activarán el chiste:

  • "Cuéntame un chiste"

  • "Dime un chiste"

  • "Quiero un chiste"

  • "¿Sabes algún chiste?"


Paso 3: Crear la función del chiste

python

def contar_chiste():

    """

    Obtiene y dice un chiste aleatorio

    """

    # Paso 1: Obtener un chiste

    chiste = pyjokes.get_joke()

    

    # Paso 2: Decirlo en voz alta

    hablar(chiste)

¡Así de simple! pyjokes.get_joke() hace todo el trabajo:

  1. Accede a la base de datos de chistes

  2. Selecciona uno al azar

  3. Lo devuelve como texto


Paso 4: Personalizar los chistes (OPCIONAL)

python

def contar_chiste_personalizado():

    """

    Versión avanzada con opciones

    """

    # OPCIÓN 1: Chiste específico

    chiste = pyjokes.get_joke(

        language='es',      # Idioma: español

        category='neutral'  # Categoría: neutral

    )

    

    # OPCIÓN 2: Con manejo de errores

    try:

        chiste = pyjokes.get_joke(language='es')

        hablar(chiste)

    except Exception as e:

        hablar("No pude encontrar un chiste, lo siento")

        print(f"Error: {e}")


🔧 Configuraciones disponibles en pyjokes

Idiomas soportados:

python

# Español

chiste_es = pyjokes.get_joke(language='es')


# Inglés

chiste_en = pyjokes.get_joke(language='en')


# Alemán

chiste_de = pyjokes.get_joke(language='de')

Categorías:

python

# Neutral (para todos los públicos)

chiste_neutral = pyjokes.get_joke(category='neutral')


# Chuck Norris (chistes de Chuck Norris)

chiste_chuck = pyjokes.get_joke(category='chuck')


# Todos (mezcla)

chiste_todos = pyjokes.get_joke(category='all')


🎭 Código completo mejorado

python

# ASISTENTE VIRTUAL - FUNCIÓN DE CHISTES

import pyjokes  # ← Nueva librería

import pyttsx3

import random


# Configuración de voz

engine = pyttsx3.init()


def hablar(texto):

    """Función para que el asistente hable"""

    engine.say(texto)

    engine.runAndWait()


def contar_chiste():

    """

    Función principal para contar chistes

    ¡Versión mejorada con opciones!

    """

    

    # Opción 1: Chiste simple

    # chiste = pyjokes.get_joke()

    

    # Opción 2: Chiste en español

    # chiste = pyjokes.get_joke(language='es')

    

    # Opción 3: Chiste con categoría específica

    chiste = pyjokes.get_joke(

        language='es',

        category='neutral'

    )

    

    # Decir el chiste

    hablar(chiste)

    

    # Opcional: Imprimir también en pantalla

    print(f"🎭 Chiste: {chiste}")


def contar_chiste_avanzado(comando=""):

    """

    Versión más inteligente que detecta qué tipo de chiste quieres

    """

    

    # Diccionario de opciones según lo que diga el usuario

    if 'programador' in comando or 'código' in comando:

        hablar("Un chiste de programadores...")

        chiste = pyjokes.get_joke(language='es', category='neutral')

    

    elif 'inglés' in comando:

        hablar("Aquí tienes un chiste en inglés...")

        chiste = pyjokes.get_joke(language='en')

    

    elif 'corto' in comando or 'rápido' in comando:

        # Filtramos chistes cortos

        chiste = pyjokes.get_joke(language='es')

        while len(chiste.split()) > 15:  # Si tiene más de 15 palabras

            chiste = pyjokes.get_joke(language='es')

    

    else:

        # Chiste normal

        chiste = pyjokes.get_joke(language='es', category='neutral')

    

    hablar(chiste)

    return chiste


# Función principal del asistente

def asistente_principal():

    hablar("Hola, soy tu asistente. Pídeme un chiste cuando quieras.")

    

    while True:

        # Tu código para escuchar comandos

        comando = escuchar().lower()  # Suponiendo que tienes esta función

        

        if not comando:

            continue

        

        # Detectar pedido de chiste

        if any(palabra in comando for palabra in 

               ['chiste', 'cuéntame un chiste', 'dime un chiste', 'quiero reírme']):

            

            # Respuesta divertida antes del chiste

            respuestas_divertidas = [

                "Claro, aquí va uno...",

                "Este es bueno...",

                "Jaja, este me gusta...",

                "Preparado para reír..."

            ]

            

            hablar(random.choice(respuestas_divertidas))

            

            # Contar el chiste

            contar_chiste()

        

        elif 'salir' in comando:

            hablar("¡Hasta luego! Espero haberte hecho reír.")

            break


# Diagrama visual del proceso:

"""

🎤 TÚ DICES: "Cuéntame un chiste"

     ↓

🎧 ASISTENTE: Detecta palabra "chiste"

     ↓

🤖 FUNCIÓN: contar_chiste() se activa

     ↓

📚 PYJOKES: Busca en su base de datos

     ↓

🎭 SELECCIONA: Chiste al azar en español

     ↓

🔊 ASISTENTE: "¿Qué le dice un bit al otro byte? Nos vemos en el bus"

     ↓

😄 TÚ: ¡Ja ja ja!

"""


🎯 Ejemplos de chistes que obtendrás

Chistes de programación:

text

"¿Qué le dice un bit al otro byte?

 Nos vemos en el bus"

text

"¿Por qué los programadores prefieren el frío?

 Porque hay menos bugs"

Chistes generales:

text

"¿Qué hace una abeja en el gimnasio?

 ¡Zum-ba!"


🚨 Solución de problemas comunes

Problema 1: "No module named 'pyjokes'"

bash

# Solución: Reinstalar

pip uninstall pyjokes

pip install pyjokes

# Luego cerrar y abrir el editor

Problema 2: Chistes en inglés por defecto

python

# Especificar siempre el idioma

chiste = pyjokes.get_joke(language='es')  # ← 'es' para español

Problema 3: Chistes repetidos

python

# Agregar aleatoriedad adicional

import random


def chiste_unico():

    # Intentar varios hasta encontrar uno nuevo

    chistes_vistos = []

    

    while True:

        chiste = pyjokes.get_joke(language='es')

        if chiste not in chistes_vistos:

            chistes_vistos.append(chiste)

            if len(chistes_vistos) > 10:

                chistes_vistos.pop(0)  # Mantener solo 10 en memoria

            return chiste


✨ Ideas para mejorar tu función de chistes

1. Chistes temáticos:

python

if 'chiste de animales' in comando:

    # Tu propia lista de chistes

    chistes_animales = [

        "¿Qué hace una vaca en el cine? Ver una moo-vie",

        "¿Por qué el pollo cruzó la calle? Para llegar al otro lado"

    ]

    chiste = random.choice(chistes_animales)

2. Sistema de valoración:

python

def chiste_con_valoracion():

    chiste = contar_chiste()

    hablar("¿Te gustó el chiste? Di sí o no")

    

    respuesta = escuchar()

    if 'sí' in respuesta or 'si' in respuesta:

        hablar("¡Me alegro! Tengo más para la próxima")

    else:

        hablar("Lo siento, intentaré con uno mejor la próxima vez")

3. Frecuencia de chistes:

python

# Evitar muchos chistes seguidos

import time


ultimo_chiste = 0


def contar_chiste_limitado():

    global ultimo_chiste

    ahora = time.time()

    

    if ahora - ultimo_chiste > 30:  # 30 segundos mínimo entre chistes

        ultimo_chiste = ahora

        contar_chiste()

    else:

        hablar("Espera un poco, no quiero aburrirte con tantos chistes")


📊 Resumen de comandos que funcionarán

Comando

Acción

"Cuéntame un chiste"

Chiste aleatorio

"Dime un chiste de programación"

Chiste temático

"Chiste en inglés"

Chiste en inglés

"Otro chiste"

Nuevo chiste

"No más chistes"

Detener chistes


✅ Resumen clave

  1. pip install pyjokes instala la librería de chistes

  2. pyjokes.get_joke() obtiene un chiste aleatorio

  3. Especificar idioma: language='es' para español

  4. Siempre cerrar/abrir editor después de instalar

  5. ¡Los chistes hacen tu asistente más humano y divertido!


📝 Cuestionario de repaso

Pregunta 1

¿Qué comando instala la librería de chistes?
a) install pyjokes
b) pip install pyjoke
c) pip install pyjokes
d) download pyjokes

Pregunta 2

¿Qué hace pyjokes.get_joke(language='es')?
a) Instala chistes en español
b) Obtiene un chiste en español
c) Traduce chistes al español
d) Busca chistes en internet

Pregunta 3

Si quieres un chiste para todos los públicos, ¿qué categoría usas?
a) category='all'
b) category='general'
c) category='neutral'
d) category='family'

Pregunta 4

¿Por qué es buena idea usar try-except con get_joke()?
a) Porque los chistes pueden ser malos
b) Para manejar posibles errores
c) Para hacer el código más lento
d) Es obligatorio en Python

Pregunta 5

¿Qué palabra clave debería buscar tu código para activar un chiste?
a) "gracioso"
b) "divertido"
c) "chiste"
d) "risa"


Respuestas del cuestionario

  1. c) pip install pyjokes - Recuerda: pip + install + nombre_librería

  2. b) Obtiene un chiste en español - El parámetro language controla el idioma

  3. c) category='neutral' - Es la categoría para chistes apropiados para todos

  4. b) Para manejar posibles errores - Siempre es buena práctica manejar excepciones

  5. c) "chiste" - Es la palabra más directa y fácil de reconocer


🎁 Reto final: Crea tu propia mejora

Desafío 1: Agrega chistes personalizados

python

mis_chistes = [

    "¿Qué estudia el pez? Ictiología",

    "¿Cómo se despiden los químicos? Ácido un placer"

]

Desafío 2: Haz que aprenda de tus gustos

python

if 'ese sí' in respuesta:

    chistes_buenos.append(chiste_actual)

Desafío 3: Crea un comando especial

python

if 'hazme reír' in comando:

    for _ in range(3):

        contar_chiste()

        time.sleep(2)


😄 ¡Felicidades!

Ahora tu asistente tiene:

  • ✅ Sentido del humor

  • ✅ Capacidad para contar chistes

  • ✅ Personalidad más divertida

Próxima meta: Agregar más interacciones divertidas como adivinanzas, frases inspiradoras o curiosidades. ¡Tu asistente cada vez es más completo



https://www.youtube.com/watch?v=Pj9KbAKpQyk

https://www.youtube.com/watch?v=-0tIy8wWtzE

https://www.youtube.com/watch?v=YqSSId7xfwU

https://www.youtube.com/watch?v=MjK-j7YJ5YI


https://www.youtube.com/watch?v=l2G8-iQYfoA



https://www.youtube.com/watch?v=t-YO0XeHczU


Comentarios

Entradas más populares de este blog

1-7. Transforma tu audio a texto

10. Haz que tu asistente hable

8. NUEVO - Solución si tu micrófono no está captando tu audio