Abby's Digital Cafe

Entrada y salida de datos: cómo interactuar con el usuario

Qué son la entrada y la salida

Cuando ejecutas un programa de consola, la entrada es lo que el usuario escribe con el teclado y la salida es lo que el programa muestra en pantalla. Piensa en una conversación: tú preguntas, la persona responde; luego tú muestras un resultado. Para empezar no necesitas más. Más adelante verás conceptos como archivos, argumentos o errores separados, pero hoy nos quedamos con lo básico.

La forma más simple de interactuar con un programa en consola
CanalPara qué lo usamosEjemplo
Entrada (teclado)Leer lo que escribe el usuarioNombre, edad, una opción del menú
Salida (pantalla)Mostrar mensajes y resultadosSaludo, totales, confirmaciones

Tu primer hola y un saludo personalizado

Empecemos mostrando un texto en pantalla y luego pidamos un nombre para saludar. Estos ejemplos son de consola, así que ejecútalos desde el intérprete o el runtime del lenguaje.

[typescript]
// Mostrar un texto console.log('Hola desde Node'); // Pedir un nombre y saludar import readline from 'node:readline/promises'; import { stdin as input, stdout as output } from 'node:process'; const rl = readline.createInterface({ input, output }); const nombre = (await rl.question('¿Cómo te llamas? ')).trim(); const quien = nombre === '' ? 'Invitado' : nombre; // valor por defecto si está vacío console.log('¡Hola, ' + quien + '!'); rl.close();
[python]
# Mostrar un texto print('Hola desde Python') # Pedir un nombre y saludar nombre = input('¿Cómo te llamas? ').strip() quien = nombre if nombre != '' else 'Invitado' print('¡Hola, ' + quien + '!')

Saltos de línea ( ) y tabulaciones (\t) en strings

Para dar formato al texto dentro de una cadena usa secuencias de escape. Estas no se ven como texto literal, sino que producen un efecto: salto de línea o tabulación. Si necesitas mostrar los caracteres literalmente ( , \t), escapa la barra invertida.

  • Salto de línea real:
  • Tabulación real: \t
  • Mostrar literalmente : \
  • Mostrar una sola barra invertida: \\
[python]
print("Línea 1 Línea 2") print("Columna\tValor") # Mostrar texto literal " " y "\t" print("Texto con \ y \\t literales")
[typescript]
console.log("Línea 1 Línea 2"); console.log("Columna\tValor"); // Mostrar texto literal " " y "\t" console.log("Texto con \ y \\t literales");

Leer números sin enredarse: de texto a número

La entrada siempre llega como texto. Si necesitas operar con números, convierte el texto. El truco más importante es verificar que la conversión no falle y, si no hay dato, usar un valor por defecto razonable (por ejemplo, 0). Mantendremos la validación muy simple: si no es un número, informamos y terminamos; más adelante podrás reintentar en un bucle.

[typescript]
import readline from 'node:readline/promises'; import { stdin as input, stdout as output } from 'node:process'; const rl = readline.createInterface({ input, output }); const edadTexto = (await rl.question('Edad: ')).trim(); const edad = Number.parseInt(edadTexto, 10); if (Number.isNaN(edad)) { console.log('No ingresaste un número válido.'); } else { console.log('En 5 años tendrás ' + (edad + 5)); } rl.close();
[python]
edad_texto = input('Edad: ').strip() try: edad = int(edad_texto) print('En 5 años tendrás', edad + 5) except ValueError: print('No ingresaste un número válido')

Buenas prácticas mínimas que ayudan mucho

  • Usa mensajes claros: termina los prompts con dos puntos y un espacio, por ejemplo: "Nombre: ".
  • Limpia espacios con trim/strip para evitar errores invisibles.
  • Muestra un ejemplo del formato esperado cuando sea útil: "Fecha (AAAA-MM-DD): ".
  • Elige valores por defecto sencillos si el usuario no escribe nada, como "Invitado" o 0.
  • Separa pasos: primero lee, luego convierte, por último usa el dato.

Pequeño ejercicio guiado (3 pasos)

  1. Pide el nombre y, si está vacío, usa un valor por defecto.
  2. Pide una cantidad y conviértela a número. Si no es válida, muestra un mensaje simple y termina.
  3. Muestra un mensaje final que combine ambos datos, por ejemplo: "Gracias, Ana. Guardamos la cantidad 12".

Ejemplo completo sencillo

[typescript]
import readline from 'node:readline/promises'; import { stdin as input, stdout as output } from 'node:process'; const rl = readline.createInterface({ input, output }); const nombre = (await rl.question('Nombre: ')).trim() || 'Invitado'; const cantTexto = (await rl.question('Cantidad (entero): ')).trim(); const cant = Number.parseInt(cantTexto, 10); if (Number.isNaN(cant)) { console.log('Cantidad inválida.'); rl.close(); } else { console.log('Gracias, ' + nombre + '. Guardamos la cantidad ' + cant + '.'); rl.close(); }
[python]
nombre = input('Nombre: ').strip() if nombre == '': nombre = 'Invitado' cant_texto = input('Cantidad (entero): ').strip() try: cant = int(cant_texto) print('Gracias, ' + nombre + '. Guardamos la cantidad ' + str(cant) + '.') except ValueError: print('Cantidad inválida.')

Preguntas frecuentes

¿Qué pasa si la persona pulsa Enter sin escribir nada?

Decide un valor por defecto. Por ejemplo, si el nombre está vacío, usa "Invitado"; si es un número, puedes usar 0 o volver a preguntar en una versión más avanzada. En nuestros ejemplos ya aplicamos un valor por defecto para el nombre.

¿Cómo convierto un número con decimales?

En Node usa Number.parseFloat; en Python usa float. El resto del proceso es igual: lees texto, conviertes y verificas que la conversión haya funcionado antes de operar con el valor.

¿Cómo hago para que el prompt se vea antes de leer?

En los ejemplos que usamos, el runtime ya muestra el prompt a tiempo. Si alguna vez notas que no aparece, asegúrate de imprimir el mensaje con un salto de línea o con un vaciado del buffer (por ejemplo, en C++ imprimir con endl). En Node y Python, con los ejemplos de arriba no deberías tener problemas.

¿Puedo leer varios datos en una sola línea?

Sí, pero para principiantes es más claro pedir uno por vez. Cuando avances, podrás leer una línea y dividirla por espacios (split) o por comas. Por ahora, prioriza la claridad del paso a paso.


Documentación oficial de Python sobre input(). Fuente
Documentación oficial de Node sobre readline. Fuente

Comentarios