4. Entrada y Salida de Datos
⌨️ 4.1 La función input() para capturar datos del usuario
Section titled “⌨️ 4.1 La función input() para capturar datos del usuario”Concepto de input()
Section titled “Concepto de input()”La función input() es una función integrada de Python que permite capturar datos ingresados por el usuario a través del teclado. Esta función pausa la ejecución del programa, espera a que el usuario escriba algo y presione Enter, luego retorna el texto ingresado como una cadena de texto (string).
Sintaxis
Section titled “Sintaxis”variable = input(mensaje_opcional)Parámetros:
- mensaje_opcional: Texto que se muestra al usuario como indicación de qué debe ingresar (prompt).
Retorno:
- Siempre retorna un string (cadena de texto), sin importar qué escriba el usuario.
Características importantes
Section titled “Características importantes”| Característica | Descripción |
|---|---|
| Retorna siempre string | Incluso si el usuario escribe números, input() los retorna como texto |
| Pausa la ejecución | El programa se detiene hasta que el usuario presione Enter |
| Mensaje opcional | Es buena práctica incluirlo para indicar qué debe ingresar |
| Captura toda la línea | Captura todo hasta presionar Enter, incluyendo espacios |
Propósito y aplicaciones
Section titled “Propósito y aplicaciones”- Interactividad: Permite crear programas que interactúan con el usuario
- Recopilación de datos: Capturar información necesaria para procesar
- Personalización: Adaptar el comportamiento del programa según la entrada del usuario
- Validación: Solicitar datos hasta que sean correctos
Ejemplo: Uso básico de input()
Section titled “Ejemplo: Uso básico de input()”# Capturar nombre del usuarionombre = input("¿Cómo te llamas? ")print(f"Hola, {nombre}!")
# Salida esperada:# ¿Cómo te llamas? Ana# Hola, Ana!Ejemplo: input() siempre retorna string
Section titled “Ejemplo: input() siempre retorna string”# Capturar edad (retorna string)edad = input("¿Cuántos años tienes? ")print(f"Tipo de dato: {type(edad)}") # <class 'str'>print(f"Tu edad es: {edad}")
# Esto causaría error si intentamos sumar:# resultado = edad + 5 # TypeError
# Solución: convertir a intedad = int(input("¿Cuántos años tienes? "))print(f"Tipo de dato: {type(edad)}") # <class 'int'>print(f"En 5 años tendrás: {edad + 5}")Ejemplo: Capturar diferentes tipos de datos
Section titled “Ejemplo: Capturar diferentes tipos de datos”# Capturar número enteroedad = int(input("Ingresa tu edad: "))print(f"Edad: {edad} años")
# Capturar número decimalaltura = float(input("Ingresa tu altura en metros: "))print(f"Altura: {altura} m")
# Capturar texto (no requiere conversión)ciudad = input("¿En qué ciudad vives? ")print(f"Ciudad: {ciudad}")
# Capturar respuesta sí/norespuesta = input("¿Te gusta Python? (s/n): ")if respuesta.lower() == 's': print("¡Excelente elección!")else: print("Dale una oportunidad")Ejemplo: Capturar múltiples valores
Section titled “Ejemplo: Capturar múltiples valores”# Capturar varios datos en secuencianombre = input("Nombre: ")apellido = input("Apellido: ")edad = int(input("Edad: "))
print(f"\nDatos ingresados:")print(f"Nombre completo: {nombre} {apellido}")print(f"Edad: {edad} años")
# Capturar múltiples valores en una líneadatos = input("Ingresa tu nombre y edad separados por coma: ")nombre, edad = datos.split(",")print(f"Nombre: {nombre.strip()}")print(f"Edad: {edad.strip()}")Ejemplo: Programa interactivo completo
Section titled “Ejemplo: Programa interactivo completo”# Calculadora simple interactivaprint("=== CALCULADORA SIMPLE ===")
num1 = float(input("Ingresa el primer número: "))num2 = float(input("Ingresa el segundo número: "))operacion = input("Operación (+, -, *, /): ")
if operacion == '+': resultado = num1 + num2elif operacion == '-': resultado = num1 - num2elif operacion == '*': resultado = num1 * num2elif operacion == '/': resultado = num1 / num2else: resultado = "Operación no válida"
print(f"\nResultado: {num1} {operacion} {num2} = {resultado}")🖨️ 4.2 Mostrar resultados con print() y f-strings
Section titled “🖨️ 4.2 Mostrar resultados con print() y f-strings”La función print()
Section titled “La función print()”La función print() muestra información en la consola. Es la forma principal de comunicar resultados al usuario en programas de consola.
F-strings (Formatted String Literals)
Section titled “F-strings (Formatted String Literals)”Las f-strings son una forma moderna y eficiente de formatear cadenas en Python (disponibles desde Python 3.6+). Se crean anteponiendo una f o F antes de las comillas y permiten insertar expresiones dentro de llaves {}.
Sintaxis:
f"Texto {variable} más texto"Ventajas de f-strings
Section titled “Ventajas de f-strings”| Ventaja | Descripción |
|---|---|
| Legibilidad | El código es más claro y fácil de leer |
| Eficiencia | Son más rápidas que .format() o concatenación |
| Expresiones dentro | Puedes incluir operaciones y funciones directamente |
| Sintaxis concisa | Menos código para lograr el mismo resultado |
Características de print()
Section titled “Características de print()”- Múltiples argumentos: Acepta varios valores separados por comas
- Separador personalizable: Parámetro
seppara cambiar el separador (por defecto es espacio) - Final personalizable: Parámetro
endpara cambiar el final (por defecto es salto de línea) - Conversión automática: Convierte automáticamente valores a string
Ejemplo: F-strings básicas
Section titled “Ejemplo: F-strings básicas”# Insertar variables en textonombre = "Ana"edad = 25
# Con f-stringprint(f"Mi nombre es {nombre} y tengo {edad} años")
# Sin f-string (menos legible)print("Mi nombre es " + nombre + " y tengo " + str(edad) + " años")
# Múltiples variablesciudad = "Madrid"pais = "España"print(f"{nombre} vive en {ciudad}, {pais}")Ejemplo: Expresiones dentro de f-strings
Section titled “Ejemplo: Expresiones dentro de f-strings”# Operaciones matemáticasprecio = 100descuento = 0.20print(f"Precio original: {precio} pesos")print(f"Precio con descuento: {precio * (1 - descuento)} pesos")
# Llamadas a funcionestexto = "python"print(f"Mayúsculas: {texto.upper()}")print(f"Longitud: {len(texto)} caracteres")
# Expresiones condicionalesedad = 17print(f"Eres {'mayor' if edad >= 18 else 'menor'} de edad")
# Operaciones complejasnumeros = [1, 2, 3, 4, 5]print(f"Suma de la lista: {sum(numeros)}")print(f"Promedio: {sum(numeros) / len(numeros)}")Ejemplo: Formateo de números
Section titled “Ejemplo: Formateo de números”# Formatear decimalespi = 3.14159265359
print(f"Pi con 2 decimales: {pi:.2f}") # 3.14print(f"Pi con 4 decimales: {pi:.4f}") # 3.1416
# Formatear con separadores de milesnumero_grande = 1234567890print(f"Con separadores: {numero_grande:,}") # 1,234,567,890
# Porcentajestasa = 0.1567print(f"Tasa: {tasa:.2%}") # 15.67%
# Notación científicanumero_pequeno = 0.00000123print(f"Científica: {numero_pequeno:.2e}") # 1.23e-06Ejemplo: Alineación y espaciado
Section titled “Ejemplo: Alineación y espaciado”# Alinear textonombre = "Ana"edad = 25
print(f"{nombre:>10}") # Alinear a la derecha (10 espacios)print(f"{nombre:<10}") # Alinear a la izquierdaprint(f"{nombre:^10}") # Centrar
# Rellenar con caracteresprint(f"{nombre:*>10}") # *******Anaprint(f"{nombre:->10}") # -------Ana
# Tabla formateadaprint(f"{'Nombre':<15} {'Edad':>5} {'Ciudad':<10}")print(f"{'Ana':<15} {25:>5} {'Madrid':<10}")print(f"{'Juan':<15} {30:>5} {'Barcelona':<10}")Ejemplo: print() con múltiples argumentos
Section titled “Ejemplo: print() con múltiples argumentos”# Múltiples valoresnombre = "Ana"edad = 25ciudad = "Madrid"
print("Nombre:", nombre, "Edad:", edad, "Ciudad:", ciudad)
# Cambiar separadorprint(nombre, edad, ciudad, sep=" | ")# Salida: Ana | 25 | Madrid
# Cambiar final (sin salto de línea)print("Cargando", end="...")print("Completado")# Salida: Cargando...Completado
# Imprimir en la misma líneafor i in range(5): print(i, end=" ")# Salida: 0 1 2 3 4Ejemplo: Combinación de técnicas
Section titled “Ejemplo: Combinación de técnicas”# Programa que muestra información formateadanombre = "Ana García"edad = 28salario = 45000.50ciudad = "Barcelona"
print("=" * 40)print(f"{'INFORMACIÓN DEL EMPLEADO':^40}")print("=" * 40)print(f"Nombre: {nombre}")print(f"Edad: {edad} años")print(f"Salario: {salario:,.2f} EUR")print(f"Ciudad: {ciudad}")print("=" * 40)📝 4.3 Formateo de texto con variables (f"", format())
Section titled “📝 4.3 Formateo de texto con variables (f"", format())”Métodos de formateo en Python
Section titled “Métodos de formateo en Python”Python ofrece varios métodos para formatear cadenas de texto con variables:
| Método | Descripción | Recomendación |
|---|---|---|
| F-strings | Método moderno con sintaxis f"{var}" | Recomendado (Python 3.6+) |
| .format() | Usa {} como marcadores de posición | Para plantillas reutilizables |
| Operador % | Método heredado de C | Solo código legacy |
El método .format()
Section titled “El método .format()”Sintaxis:
"Texto {} más texto {}".format(valor1, valor2)Características:
- Usa llaves
{}como marcadores de posición - Permite especificar posiciones:
{0},{1} - Soporta nombres:
{nombre},{edad} - Ofrece opciones de formateo similares a f-strings
Ejemplo: Método .format() básico
Section titled “Ejemplo: Método .format() básico”# Uso básiconombre = "Ana"edad = 25
# Marcadores de posición simplesmensaje = "Me llamo {} y tengo {} años".format(nombre, edad)print(mensaje)
# Con índices (posiciones)mensaje = "Me llamo {0} y tengo {1} años. {0} es mi nombre".format(nombre, edad)print(mensaje)
# Con nombresmensaje = "Me llamo {n} y tengo {e} años".format(n=nombre, e=edad)print(mensaje)Ejemplo: Comparación f-strings vs .format()
Section titled “Ejemplo: Comparación f-strings vs .format()”nombre = "Carlos"edad = 30ciudad = "Madrid"
# Con f-string (más legible)mensaje1 = f"{nombre} tiene {edad} años y vive en {ciudad}"print(mensaje1)
# Con .format()mensaje2 = "{} tiene {} años y vive en {}".format(nombre, edad, ciudad)print(mensaje2)
# Con .format() y nombresmensaje3 = "{n} tiene {e} años y vive en {c}".format(n=nombre, e=edad, c=ciudad)print(mensaje3)
# Todos producen el mismo resultadoEjemplo: Formateo de números con .format()
Section titled “Ejemplo: Formateo de números con .format()”# Decimalespi = 3.14159265359print("Pi: {:.2f}".format(pi)) # 3.14print("Pi: {:.4f}".format(pi)) # 3.1416
# Separadores de milesnumero = 1234567print("Número: {:,}".format(numero)) # 1,234,567
# Porcentajestasa = 0.1567print("Tasa: {:.2%}".format(tasa)) # 15.67%
# Alineaciónnombre = "Ana"print("Nombre: {:>10}".format(nombre)) # Derechaprint("Nombre: {:<10}".format(nombre)) # Izquierdaprint("Nombre: {:^10}".format(nombre)) # CentroEjemplo: Plantillas reutilizables
Section titled “Ejemplo: Plantillas reutilizables”# Crear plantilla reutilizableplantilla = "Empleado: {nombre}, Edad: {edad}, Salario: {salario:,.2f}"
# Usar la plantilla con diferentes datosempleado1 = plantilla.format(nombre="Ana", edad=28, salario=45000)empleado2 = plantilla.format(nombre="Juan", edad=35, salario=52000)empleado3 = plantilla.format(nombre="María", edad=42, salario=68000)
print(empleado1)print(empleado2)print(empleado3)Ejemplo: Operador % (legacy)
Section titled “Ejemplo: Operador % (legacy)”# Método antiguo con operador %nombre = "Ana"edad = 25
# Formateo básicomensaje = "Me llamo %s y tengo %d años" % (nombre, edad)print(mensaje)
# %s = string, %d = entero, %f = flotanteprecio = 19.99print("El precio es %.2f pesos" % precio)
# Nota: Este método es menos recomendado en código moderno# Preferir f-strings o .format()Ejemplo: Factura formateada
Section titled “Ejemplo: Factura formateada”# Generar factura con formato profesionalcliente = "Ana García"producto1 = "Laptop"precio1 = 15000producto2 = "Mouse"precio2 = 500
# Con f-stringsprint("=" * 50)print(f"{'FACTURA':^50}")print("=" * 50)print(f"Cliente: {cliente}")print("-" * 50)print(f"{'Producto':<30} {'Precio':>15}")print("-" * 50)print(f"{producto1:<30} {precio1:>15,.2f}")print(f"{producto2:<30} {precio2:>15,.2f}")print("-" * 50)total = precio1 + precio2print(f"{'TOTAL':<30} {total:>15,.2f}")print("=" * 50)✅ 4.4 Validación básica de entradas (ejemplo: edad, nombre)
Section titled “✅ 4.4 Validación básica de entradas (ejemplo: edad, nombre)”Concepto de validación de entradas
Section titled “Concepto de validación de entradas”La validación de entradas es el proceso de verificar que los datos ingresados por el usuario cumplan con ciertos criterios antes de procesarlos. Es fundamental para crear programas robustos y evitar errores.
Importancia de la validación
Section titled “Importancia de la validación”| Aspecto | Descripción |
|---|---|
| Prevenir errores | Evita que el programa falle por datos incorrectos |
| Experiencia del usuario | Proporciona retroalimentación clara sobre datos válidos |
| Seguridad | Protege contra entradas maliciosas |
| Integridad de datos | Asegura que solo se procesen datos correctos |
Tipos de validación común
Section titled “Tipos de validación común”| Tipo | Descripción |
|---|---|
| De tipo | Verificar que el dato sea del tipo esperado (número, texto) |
| De rango | Verificar que un número esté dentro de límites aceptables |
| De formato | Verificar que el texto siga un patrón específico |
| De existencia | Verificar que el campo no esté vacío |
Técnicas de validación
Section titled “Técnicas de validación”- Try-except: Capturar errores de conversión de tipos
- Bucles while: Repetir la solicitud hasta obtener datos válidos
- Métodos de string: Usar
.isdigit(),.isalpha(),.strip(), etc. - Expresiones condicionales: Verificar condiciones con if/elif/else
Ejemplo: Validación de edad (número entero)
Section titled “Ejemplo: Validación de edad (número entero)”# Validación básica de edadwhile True: try: edad = int(input("Ingresa tu edad: "))
# Verificar rango válido if edad < 0: print("❌ La edad no puede ser negativa") elif edad > 120: print("❌ Edad no válida (demasiado alta)") else: print(f"✅ Edad válida: {edad} años") break except ValueError: print("❌ Error: Debes ingresar un número entero")
print(f"\nTu edad es: {edad} años")Ejemplo: Validación de nombre (solo letras)
Section titled “Ejemplo: Validación de nombre (solo letras)”# Validación de nombrewhile True: nombre = input("Ingresa tu nombre: ").strip()
# Verificar que no esté vacío if len(nombre) == 0: print("❌ El nombre no puede estar vacío") # Verificar que solo contenga letras y espacios elif not nombre.replace(" ", "").isalpha(): print("❌ El nombre solo debe contener letras") # Verificar longitud mínima elif len(nombre) < 2: print("❌ El nombre debe tener al menos 2 caracteres") else: print(f"✅ Nombre válido: {nombre}") break
print(f"\nBienvenido, {nombre}!")Ejemplo: Validación de respuesta sí/no
Section titled “Ejemplo: Validación de respuesta sí/no”# Validación de respuesta binariawhile True: respuesta = input("¿Deseas continuar? (s/n): ").lower().strip()
if respuesta in ['s', 'si', 'sí', 'yes']: print("✅ Continuando...") continuar = True break elif respuesta in ['n', 'no']: print("✅ Saliendo...") continuar = False break else: print("❌ Respuesta no válida. Ingresa 's' o 'n'")
if continuar: print("Programa continúa...")else: print("Programa terminado")Ejemplo: Validación de email (básica)
Section titled “Ejemplo: Validación de email (básica)”# Validación básica de emailwhile True: email = input("Ingresa tu email: ").strip()
# Verificar que no esté vacío if len(email) == 0: print("❌ El email no puede estar vacío") # Verificar que contenga @ elif '@' not in email: print("❌ El email debe contener @") # Verificar que contenga punto después de @ elif '.' not in email.split('@')[1]: print("❌ El email debe tener un dominio válido") # Verificar longitud mínima elif len(email) < 5: print("❌ El email es demasiado corto") else: print(f"✅ Email válido: {email}") breakEjemplo: Registro de usuario completo
Section titled “Ejemplo: Registro de usuario completo”# Sistema de registro con validacionesprint("=== REGISTRO DE USUARIO ===\n")
# Validar nombrewhile True: nombre = input("Nombre completo: ").strip() if len(nombre) >= 3 and nombre.replace(" ", "").isalpha(): break print("❌ Nombre inválido (mínimo 3 letras)\n")
# Validar edadwhile True: try: edad = int(input("Edad: ")) if 18 <= edad <= 100: break print("❌ Edad debe estar entre 18 y 100\n") except ValueError: print("❌ Ingresa un número válido\n")
# Validar emailwhile True: email = input("Email: ").strip().lower() if '@' in email and '.' in email.split('@')[1]: break print("❌ Email inválido\n")
# Validar teléfonowhile True: telefono = input("Teléfono (10 dígitos): ").strip() if telefono.isdigit() and len(telefono) == 10: break print("❌ Teléfono inválido (10 dígitos)\n")
# Mostrar resumenprint("\n" + "=" * 40)print("REGISTRO EXITOSO")print("=" * 40)print(f"Nombre: {nombre}")print(f"Edad: {edad} años")print(f"Email: {email}")print(f"Teléfono: {telefono}")print("=" * 40)Ejemplo: Función reutilizable de validación
Section titled “Ejemplo: Función reutilizable de validación”# Crear función para validar entradas numéricasdef solicitar_numero(mensaje, minimo, maximo): """ Solicita un número al usuario con validación de rango. """ while True: try: numero = int(input(mensaje)) if minimo <= numero <= maximo: return numero else: print(f"❌ Debe estar entre {minimo} y {maximo}") except ValueError: print("❌ Ingresa un número válido")
# Usar la funciónedad = solicitar_numero("Ingresa tu edad: ", 0, 120)print(f"Edad registrada: {edad}")
calificacion = solicitar_numero("Calificación (0-10): ", 0, 10)print(f"Calificación: {calificacion}")