Entrada y salida de datos simple
Entrada y Salida de Datos en Python
1. Salida de datos — la función print()
print() es la función principal para mostrar información en pantalla. Acepta cualquier tipo de dato y tiene varias opciones de formato.
Uso básico
print("Hola, mundo") # texto
print(42) # número entero
print(3.14) # decimal
print(True) # booleano
print([1, 2, 3]) # lista
```
Salida:
```
Hola, mundo
42
3.14
True
[1, 2, 3]
Imprimir varias cosas en la misma línea
Puedes pasar varios valores separados por comas y print los une con un espacio por defecto:
nombre = "Ana"
edad = 22
nota = 8.5
print(nombre, edad, nota)
# Ana 22 8.5
El parámetro sep — cambiar el separador
Por defecto los valores se separan con un espacio, pero puedes cambiarlo con sep:
print("Ana", "García", "López", sep=" | ")
# Ana | García | López
print("2024", "01", "15", sep="-")
# 2024-01-15
print("Python", "es", "genial", sep="...")
# Python...es...genial
print("A", "B", "C", sep="")
# ABC (sin separador)
El parámetro end — qué poner al final
Por defecto print añade un salto de línea al final. Con end puedes cambiarlo:
print("Cargando", end="")
print("...")
# Cargando...
print("Alumno: ", end="")
print("Ana García")
# Alumno: Ana García
# Imprimir lista en una línea
notas = [8, 6, 9, 5, 7]
for nota in notas:
print(nota, end=" ")
# 8 6 9 5 7
2. Formas de formatear texto al imprimir
Método 1 — Concatenación con +
Une strings directamente. Los números hay que convertirlos a texto con str():
nombre = "Ana"
nota = 8.5
print("Alumna: " + nombre + ", nota: " + str(nota))
# Alumna: Ana, nota: 8.5
Es el método más antiguo y el menos cómodo porque hay que convertir cada número manualmente.
Método 2 — El método .format()
Usa llaves {} como marcadores de posición dentro del texto:
nombre = "Ana"
nota = 8.5
asignatura = "Matemáticas"
print("La alumna {} ha sacado {} en {}".format(nombre, nota, asignatura))
# La alumna Ana ha sacado 8.5 en Matemáticas
Puedes usar índices para reutilizar valores o cambiar el orden:
print("{0} sacó {2} en {1}. {0} está muy contenta.".format("Ana", "Matemáticas", 9))
# Ana sacó 9 en Matemáticas. Ana está muy contenta.
Y aplicar formato a los números:
precio = 1234.5678
print("Precio: {:.2f} €".format(precio)) # 2 decimales
# Precio: 1234.57 €
print("Precio: {:,.2f} €".format(precio)) # con separador de miles
# Precio: 1,234.57 €
print("Porcentaje: {:.1%}".format(0.856)) # como porcentaje
# Porcentaje: 85.6%
Método 3 — F-strings (el más moderno y recomendado)
Se escriben poniendo una f antes de las comillas. Las variables se insertan directamente entre llaves dentro del texto:
nombre = "Ana"
edad = 22
nota = 8.5
print(f"Alumna: {nombre}, edad: {edad}, nota: {nota}")
# Alumna: Ana, edad: 22, nota: 8.5
Puedes hacer cálculos directamente dentro de las llaves:
precio = 100
descuento = 0.15
print(f"Precio original: {precio} €")
print(f"Descuento: {precio * descuento:.2f} €")
print(f"Precio final: {precio * (1 - descuento):.2f} €")
# Precio original: 100 €
# Descuento: 15.00 €
# Precio final: 85.00 €
Formato de números en f-strings:
nota = 8.756432
print(f"{nota:.1f}") # 8.8 → 1 decimal
print(f"{nota:.2f}") # 8.76 → 2 decimales
print(f"{nota:.0f}") # 9 → sin decimales, redondeado
numero = 1500000
print(f"{numero:,}") # 1,500,000 → separador de miles
print(f"{numero:_}") # 1_500_000 → separador con guión bajo
porcentaje = 0.734
print(f"{porcentaje:.1%}") # 73.4%
print(f"{porcentaje:.0%}") # 73%
Alineación y relleno en f-strings, muy útil para tablas en consola:
alumnos = [("Ana García", 8.5), ("Carlos López", 6.0), ("Marta Ruiz", 9.2)]
print(f"{'Nombre':<20} {'Nota':>6}")
print("-" * 28)
for nombre, nota in alumnos:
print(f"{nombre:<20} {nota:>6.1f}")
```
Salida:
```
Nombre Nota
----------------------------
Ana García 8.5
Carlos López 6.0
Marta Ruiz 9.2
<20significa alineado a la izquierda con 20 caracteres de ancho.>6significa alineado a la derecha con 6 caracteres.
3. Imprimir con saltos de línea y caracteres especiales
Los caracteres de escape permiten dar formato dentro de un string:
# \n — salto de línea
print("Línea 1\nLínea 2\nLínea 3")
# Línea 1
# Línea 2
# Línea 3
# \t — tabulación horizontal
print("Nombre:\tAna")
print("Nota:\t8.5")
# Nombre: Ana
# Nota: 8.5
# \\ — barra invertida literal
print("Ruta: C:\\Usuarios\\Ana")
# Ruta: C:\Usuarios\Ana
# \" o \' — comillas dentro del string
print("El profesor dijo: \"Muy bien\"")
# El profesor dijo: "Muy bien"
4. Entrada de datos — la función input()
input() detiene la ejecución del programa, muestra un mensaje al usuario, espera a que escriba algo y pulse Enter, y devuelve lo que escribió como un string.
Uso básico
nombre = input("¿Cuál es tu nombre? ")
print(f"Hola, {nombre}!")
```
Ejecución:
```
¿Cuál es tu nombre? Ana
Hola, Ana!
Importante — input() siempre devuelve texto
Aunque el usuario escriba un número, input() lo devuelve como string. Si necesitas operar con él debes convertirlo:
# Esto daría error porque edad es un string
edad = input("¿Cuántos años tienes? ")
print(edad + 1) # TypeError: can only concatenate str to str
# Correcto: convertir a entero
edad = int(input("¿Cuántos años tienes? "))
print(edad + 1) # ahora sí funciona
Conversión según el tipo que esperas
# Para números enteros
num_asignaturas = int(input("¿Cuántas asignaturas cursas? "))
# Para números decimales
nota = float(input("Introduce tu nota: "))
# Para texto (no hace falta convertir)
ciudad = input("¿De qué ciudad eres? ")
Proteger la entrada con try/except
Si el usuario escribe texto cuando esperas un número, el programa daría un error. Para evitarlo:
try:
nota = float(input("Introduce tu nota (0-10): "))
print(f"Nota introducida: {nota}")
except ValueError:
print("Error: debes introducir un número válido")
```
Ejecución con entrada incorrecta:
```
Introduce tu nota (0-10): ocho
Error: debes introducir un número válido
Pedir varios datos seguidos
print("=== Registro de alumno ===")
nombre = input("Nombre: ")
apellidos = input("Apellidos: ")
edad = int(input("Edad: "))
ciudad = input("Ciudad: ")
nota = float(input("Nota media: "))
print(f"\nDatos registrados:")
print(f" Alumno: {nombre} {apellidos}")
print(f" Edad: {edad} años")
print(f" Ciudad: {ciudad}")
print(f" Nota media: {nota:.1f}")
```
Ejecución:
```
=== Registro de alumno ===
Nombre: Ana
Apellidos: García López
Edad: 22
Ciudad: Madrid
Nota media: 8.5
Datos registrados:
Alumno: Ana García López
Edad: 22 años
Ciudad: Madrid
Nota media: 8.5
5. Ejemplos completos con operadores
Ejemplo 1 — Calculadora de nota final con operadores aritméticos
Este programa pide las notas de tres evaluaciones con sus pesos y calcula la nota final ponderada.
Operadores que usa: * (multiplicación), + (suma), / (división), >= (comparación), % (módulo para curiosidad)
print("=== Calculadora de Nota Final ===\n")
# Entrada de datos
nombre = input("Nombre del alumno: ")
nota1 = float(input("Nota del primer parcial (0-10): "))
nota2 = float(input("Nota del segundo parcial (0-10): "))
nota_fin = float(input("Nota del examen final (0-10): "))
# Pesos de cada parte
peso1 = 0.25 # 25%
peso2 = 0.25 # 25%
peso_fin = 0.50 # 50%
# Cálculo con operadores aritméticos
nota_final = (nota1 * peso1) + (nota2 * peso2) + (nota_fin * peso_fin)
# Determinar calificación
if nota_final >= 9:
calificacion = "Sobresaliente"
elif nota_final >= 7:
calificacion = "Notable"
elif nota_final >= 5:
calificacion = "Aprobado"
else:
calificacion = "Suspenso"
# Aprobado o no con operador de comparación
aprobado = nota_final >= 5
# Salida formateada
print(f"\n{'='*40}")
print(f" RESULTADO DE {nombre.upper()}")
print(f"{'='*40}")
print(f" Parcial 1: {nota1:.1f} (peso: {peso1:.0%})")
print(f" Parcial 2: {nota2:.1f} (peso: {peso2:.0%})")
print(f" Final: {nota_fin:.1f} (peso: {peso_fin:.0%})")
print(f"{'–'*40}")
print(f" Nota final: {nota_final:.2f}")
print(f" Calificación: {calificacion}")
print(f" Resultado: {'✓ APROBADO' if aprobado else '✗ SUSPENSO'}")
print(f"{'='*40}")
```
Ejecución:
```
=== Calculadora de Nota Final ===
Nombre del alumno: Ana García
Nota del primer parcial (0-10): 8
Nota del segundo parcial (0-10): 7
Nota del examen final (0-10): 9
========================================
RESULTADO DE ANA GARCÍA
========================================
Parcial 1: 8.0 (peso: 25%)
Parcial 2: 7.0 (peso: 25%)
Final: 9.0 (peso: 50%)
––––––––––––––––––––––––––––––––––––––––
Nota final: 8.25
Calificación: Notable
Resultado: ✓ APROBADO
========================================
Ejemplo 2 — Conversor de temperatura con operadores aritméticos y comparación
Convierte entre Celsius, Fahrenheit y Kelvin según lo que elija el usuario.
Operadores que usa: * - + / == or
print("=== Conversor de Temperatura ===\n")
print("Opciones de conversión:")
print(" 1 → Celsius a Fahrenheit y Kelvin")
print(" 2 → Fahrenheit a Celsius y Kelvin")
print(" 3 → Kelvin a Celsius y Fahrenheit")
opcion = int(input("\nElige una opción (1, 2 o 3): "))
if opcion == 1:
celsius = float(input("Introduce la temperatura en Celsius: "))
fahrenheit = (celsius * 9/5) + 32
kelvin = celsius + 273.15
print(f"\n{celsius}°C equivale a:")
print(f" → {fahrenheit:.2f} °F")
print(f" → {kelvin:.2f} K")
if celsius < 0:
estado = "por debajo del punto de congelación del agua"
elif celsius == 0:
estado = "el punto de congelación del agua"
elif celsius == 100:
estado = "el punto de ebullición del agua"
elif celsius > 100:
estado = "por encima del punto de ebullición del agua"
else:
estado = "dentro del rango habitual de temperaturas"
print(f" → Esta temperatura está {estado}")
elif opcion == 2:
fahrenheit = float(input("Introduce la temperatura en Fahrenheit: "))
celsius = (fahrenheit - 32) * 5/9
kelvin = celsius + 273.15
print(f"\n{fahrenheit}°F equivale a:")
print(f" → {celsius:.2f} °C")
print(f" → {kelvin:.2f} K")
elif opcion == 3:
kelvin = float(input("Introduce la temperatura en Kelvin: "))
if kelvin < 0:
print("Error: el Kelvin no puede ser negativo (0 K es el cero absoluto)")
else:
celsius = kelvin - 273.15
fahrenheit = (celsius * 9/5) + 32
print(f"\n{kelvin} K equivale a:")
print(f" → {celsius:.2f} °C")
print(f" → {fahrenheit:.2f} °F")
else:
print("Opción no válida. Elige 1, 2 o 3.")
```
Ejecución:
```
=== Conversor de Temperatura ===
Opciones de conversión:
1 → Celsius a Fahrenheit y Kelvin
2 → Fahrenheit a Celsius y Kelvin
3 → Kelvin a Celsius y Fahrenheit
Elige una opción (1, 2 o 3): 1
Introduce la temperatura en Celsius: 37
37.0°C equivale a:
→ 98.60 °F
→ 310.15 K
→ Esta temperatura está dentro del rango habitual de temperaturas
Ejemplo 3 — Calculadora de IMC con operadores aritméticos, comparación y lógicos
Calcula el Índice de Masa Corporal y da una interpretación detallada.
Operadores que usa: ** (potencia), / (división), and or not (lógicos), < > >= <= (comparación)
print("=== Calculadora de IMC ===")
print("(Índice de Masa Corporal)\n")
# Entrada de datos
nombre = input("Nombre: ")
peso = float(input("Peso en kilogramos (ej: 70.5): "))
altura = float(input("Altura en metros (ej: 1.75): "))
edad = int(input("Edad: "))
# Cálculo del IMC con operador de potencia (**)
imc = peso / (altura ** 2)
# Clasificación según OMS
if imc < 18.5:
categoria = "Bajo peso"
consejo = "Se recomienda consultar con un nutricionista"
elif imc >= 18.5 and imc < 25:
categoria = "Peso normal"
consejo = "¡Enhorabuena! Tu peso es saludable"
elif imc >= 25 and imc < 30:
categoria = "Sobrepeso"
consejo = "Se recomienda aumentar la actividad física"
elif imc >= 30 and imc < 35:
categoria = "Obesidad grado I"
consejo = "Se recomienda consultar con un médico"
else:
categoria = "Obesidad grado II o superior"
consejo = "Se recomienda atención médica urgente"
# Cálculo del rango de peso saludable para su altura
peso_min = 18.5 * (altura ** 2)
peso_max = 24.9 * (altura ** 2)
# Diferencia con el peso ideal (punto medio del rango)
peso_ideal = (peso_min + peso_max) / 2
diferencia = peso - peso_ideal
es_mayor = diferencia > 0
es_peso_sano = imc >= 18.5 and imc < 25
# Advertencia especial para menores
es_menor = edad < 18
advertencia = "\n⚠ Nota: para menores de 18 años el IMC se interpreta de forma diferente." if es_menor else ""
# Salida
print(f"\n{'='*45}")
print(f" RESULTADO DEL IMC — {nombre.upper()}")
print(f"{'='*45}")
print(f" Datos introducidos:")
print(f" Peso: {peso} kg")
print(f" Altura: {altura} m")
print(f" Edad: {edad} años")
print(f"{'–'*45}")
print(f" IMC calculado: {imc:.1f} kg/m²")
print(f" Categoría: {categoria}")
print(f"{'–'*45}")
print(f" Rango de peso saludable para {altura} m:")
print(f" Mínimo: {peso_min:.1f} kg")
print(f" Máximo: {peso_max:.1f} kg")
print(f" Ideal: {peso_ideal:.1f} kg")
print(f"{'–'*45}")
if es_peso_sano:
print(f" Tu peso está dentro del rango saludable ✓")
else:
direccion = "por encima" if es_mayor else "por debajo"
print(f" Estás {abs(diferencia):.1f} kg {direccion} del peso ideal")
print(f"\n Consejo: {consejo}")
print(f"{'='*45}")
print(advertencia)
```
Ejecución:
```
=== Calculadora de IMC ===
(Índice de Masa Corporal)
Nombre: Carlos
Peso en kilogramos (ej: 70.5): 85
Altura en metros (ej: 1.75): 1.78
Edad: 35
=============================================
RESULTADO DEL IMC — CARLOS
=============================================
Datos introducidos:
Peso: 85.0 kg
Altura: 1.78 m
Edad: 35 años
–––––––––––––––––––––––––––––––––––––––––––––
IMC calculado: 26.8 kg/m²
Categoría: Sobrepeso
–––––––––––––––––––––––––––––––––––––––––––––
Rango de peso saludable para 1.78 m:
Mínimo: 58.7 kg
Máximo: 78.9 kg
Ideal: 68.8 kg
–––––––––––––––––––––––––––––––––––––––––––––
Estás 16.2 kg por encima del peso ideal
Consejo: Se recomienda aumentar la actividad física
=============================================