================
== Pythonisas ==
================
Brujas del teclado. Alquimistas de los bits.

Práctica 1.3 — Academia Pythonisa III: El Bufón de la Academia

prácticas

Misión: Hacer reír al tribunal

Contexto mágico: Cada fin de trimestre, la Academia celebra el Banquete de los Bits, y este año te toca ser el Bufón o la Bufona. Tu programa tiene que contar chistes con buen ritmo: la pregunta, una pausa (¡el suspense!) y el remate. Parece fácil, pero enseguida te encontrarás con un enemigo inesperado: las comillas. ¿Cómo escribes un apóstrofo dentro de una cadena que ya empieza con comillas simples?

Esta práctica es corta y te servirá para dominar print()… y para aprender el conjuro mejorado que usaremos a partir de ahora: las f-strings.

Basado en el Capítulo 4 de Inventa tus propios juegos de computadora con Python – Al Sweigart (Cap. 4: Un programa que cuenta chistes)


Los problemas a resolver

  1. El ritmo — Un chiste necesita una pausa antes del remate. ¿Cómo hace un programa para esperar a que la persona pulse Enter?

  2. Comillas dentro de comillas — '¿Por qué vuelan los pájaros pa'l sur?' rompe el programa. ¿Por qué? ¿Cómo lo arreglas?

  3. Caracteres invisibles — Saltos de línea, tabuladores, la propia barra \… Hay caracteres que no se pueden escribir tal cual: necesitan un código de escape

  4. Terminar la línea (o no) — print() siempre salta de línea al acabar. A veces no quieres que lo haga

  5. Concatenar cansa — 'Hola, ' + nombre + ', tienes ' + str(edad) + ' años' es largo y fácil de equivocar. Hay un hechizo mejor


Herramientas a tu disposición

HerramientaPara qué sirve
input() sin guardarPausa hasta que se pulse Enter (no hace falta guardar lo que escriben)
print() vacíoImprime una línea en blanco
"..." y '...'Si el texto lleva ', rodéalo de " (y al revés)
\' y \"Comilla escapada: se imprime la comilla, no cierra la cadena
\nSalto de línea
\tTabulador
\\Una barra invertida de verdad
end=''print('Hola', end='') no salta de línea al terminar
f'...{variable}...'f-string: mete el valor de las variables directamente en el texto

Desafío 1: Tu repertorio

Este es el esqueleto de un chiste, sacado del libro:

print('¿Qué sale del cruce entre un mono y un pato?')
input()
print('¡Un monopatín!')
print()

Requisitos:

  • Crea chistes.py con al menos 4 chistes tuyos (o de tu familia, o de internet: ¡pero que sean para todos los públicos!)
  • Cada chiste tiene pregunta, pausa con input() y remate
  • Al menos uno debe tener dos pausas (pregunta → “no sé, ¿qué?” → remate)

Diagnóstico: si el programa no para entre la pregunta y el remate, revisa que tienes el input() en medio.


Desafío 2: La guerra de las comillas

Requisitos:

  • Al menos un chiste debe llevar un apóstrofo o unas comillas dentro del texto. Resuélvelo de las dos formas: cambiando el tipo de comillas y usando \' o \"
  • Crea un cartel del Banquete con \n y \t en un solo print(). Por ejemplo:
=== BANQUETE DE LOS BITS ===
	Presenta:	La Bufona Ada
	Hora:		cuando compile
  • Usa end='' al menos una vez para que dos print() seguidos salgan en la misma línea

Diagnóstico: si Thonny te colorea medio programa del color de las cadenas, es que una comilla ha cerrado la cadena antes de tiempo. Busca la primera línea donde cambia el color.

💡 Truco de bruja: si pones una r delante de la cadena (r'C:\nueva'), Python no interpreta las barras: es una cadena en bruto. Te vendrá genial para el arte ASCII del Ahorcado.


Desafío 3: El conjuro mejorado (f-strings)

Haz que tu Bufón pregunte el nombre del público al principio y lo use en los chistes.

Primero hazlo concatenando, como hasta ahora:

nombre = input('¿Cómo te llamas? ')
print('Oye, ' + nombre + ', ¿sabes cuál es el colmo de una programadora?')

Y después reescríbelo con una f-string:

print(f'Oye, {nombre}, ¿sabes cuál es el colmo de una programadora?')

La f delante de las comillas le dice a Python: todo lo que esté entre llaves { } es una variable, sustitúyela por su valor. Y además convierte los números a texto sola, sin str():

chistes_contados = 4
print(f'Hoy te he contado {chistes_contados} chistes, {nombre}.')

Requisitos:

  • El programa pide el nombre y lo usa al menos en 2 chistes
  • Al final muestra cuántos chistes ha contado, usando una f-string con un número
  • Deja una línea con concatenación comentada (con #) junto a su versión f-string, para comparar

Diagnóstico: si en pantalla sale literalmente {nombre}, te has olvidado la f delante de las comillas.

A partir de esta práctica, usa f-strings siempre que mezcles texto y variables.


Entrega

PRACTICA1.3/
+-- chistes.py        <-- tu repertorio completo
+-- explicacion.md    <-- tus respuestas a "Explica tu código"

Súbela al servidor SFTP del aula (put -r PRACTICA1.3).

Requisitos funcionales:

  • Al menos 4 chistes con pausa antes del remate
  • Comillas dentro de una cadena resueltas de las dos formas
  • Cartel con \n y \t en un solo print()
  • end='' usado al menos una vez
  • El nombre del público aparece en f-strings

Explica tu código

  1. ¿Por qué 'pa'l sur' da error y "pa'l sur" no?
  2. ¿Qué diferencia hay entre print('a\nb') y print(r'a\nb')? Pruébalo
  3. ¿Qué ventajas le ves a la f-string frente a la concatenación con +?

Rúbrica por competencias

CriterioHechicería (9-10)Aprendizaje (6-8)Iniciación (0-5)Peso
Ritmo y estructura4+ chistes, pausas bien colocadas, uno con doble pausaChistes correctos pero sin doble pausaMenos de 3 chistes o sin pausas20%
Comillas y escapesResuelve las comillas de las dos formas; \n, \t correctosSolo una forma, o el cartel sale descuadradoErrores de sintaxis por comillas25%
endLo usa con sentido (no solo por cumplir)Lo usa pero sin efecto visibleNo aparece10%
f-stringsNombre y contador con f-strings; comparación con concatenaciónf-strings correctas pero sin la comparaciónSigue concatenando o sale {nombre}25%
Estilo y creatividadChistes propios, nombres claros, salida bien presentadaChistes del libro con pocos cambiosCopia literal del libro10%
Explica tu códigoRespuestas claras, con pruebas propiasCorrectas pero sin probarSin explicacion.md10%

Bonus (hasta +1.5)

BonusDescripciónPuntos
Arte ASCII del BufónUn gorro de bufón o una careta dibujada con caracteres (¿con r'''...'''?)+0.5
Suspense con puntosLos puntos suspensivos aparecen uno a uno (pista: end='' e import time)+0.5
AplausómetroTras cada chiste pregunta “¿te ha hecho gracia? (s/n)” y cuenta los “s”+0.5

Conceptos clave

ConceptoDónde lo ves
input() como pausaNo guardas el valor: solo esperas el Enter
Comillas simples y dobles"pa'l sur": las de fuera no pueden aparecer dentro sin escapar
Carácter de escape\n, \t, \', \", \\
Cadena en brutor'...': las barras \ se quedan tal cual
Argumento de palabra claveend='' cambia cómo termina print()
f-stringf'Hola, {nombre}': variables dentro del texto

“Un chiste sin pausa es como un programa sin input(): se acaba antes de empezar.”