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:
pip install pyjokesDeberías ver un mensaje similar a la imagen:
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:
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:
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":
# 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:
# ========== 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():
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:
👤 Dijiste: chiste 😂 Chiste: ¿Qué hace una abeja en el gimnasio? ¡Zum-ba! 🤖: ¿Qué hace una abeja en el gimnasio? ¡Zum-ba!
👤 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:
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
| Paso | Acción |
|---|---|
| 1 | Instalar pyjokes con pip install pyjokes |
| 2 | Importar import pyjokes |
| 3 | Crear función chiste() |
| 4 | Agregar elif "chiste" in text: en escuchar() |
| 5 | Actualizar 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:
Cierra VS Code o tu editor
Ábrelo nuevamente
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:
Accede a la base de datos de chistes
Selecciona uno al azar
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
✅ Resumen clave
pip install pyjokes instala la librería de chistes
pyjokes.get_joke() obtiene un chiste aleatorio
Especificar idioma: language='es' para español
Siempre cerrar/abrir editor después de instalar
¡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
c) pip install pyjokes - Recuerda: pip + install + nombre_librería
b) Obtiene un chiste en español - El parámetro language controla el idioma
c) category='neutral' - Es la categoría para chistes apropiados para todos
b) Para manejar posibles errores - Siempre es buena práctica manejar excepciones
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
Publicar un comentario