Entrada y salida
En resumen: La entrada es el texto que el programa lee desde el teclado: en Python se lee con input(), se convierte en número con int() o float(), y las f-strings muestran los números con un formato.
Problema
El programa solo conoce un nombre
El programa saluda al cliente por su nombre:
name = "María"print("¡Hola, " + name + "!")¡Hola, María!Funciona, pero saluda a todos como María. El nombre está escrito en el código. Para cada cliente nuevo tienes que cambiar el programa y ejecutarlo otra vez. Quieres que el programa pregunte por sí mismo.
La idea
Leer desde el teclado
Cuando el programa lee, se detiene y espera. La persona escribe y pulsa Enter. Lo que escribe es la entrada del programa.
name = input("¿Cómo te llamas? ")print("¡Hola, " + name + "!")María¿Cómo te llamas? ¡Hola, María!input("¿Cómo te llamas? ") imprime la pregunta que está entre los paréntesis, espera a que la persona escriba una línea y pulse Enter, y devuelve lo que escribió. Aquí se guarda en name.
Aquí la entrada y la salida se muestran por separado. En la consola, el nombre aparece donde lo escribes: después de «¿Cómo te llamas? ». input imprime la pregunta sin pasar a una línea nueva: la respuesta queda en la misma línea.
Más precisamente, para curiosos
input()sin nada entre los paréntesis solo lee, sin pregunta.- Si la entrada se ha terminado (no hay más líneas),
input()detiene el programa conEOFError.
Problema
12 + 30 = 1230
El cajero introduce dos pagos, 12 € y 30 €. El programa tiene que mostrar el total:
first = input()second = input()total = first + secondprint("Total: " + total + " €")1230Total: 1230 €En lugar de 42 salió 1230. El programa no se equivocó en la cuenta. No hizo ninguna cuenta.
Aquí no hay pregunta: input() solo lee una línea.
La idea
De texto a número
Escriba lo que escriba la persona, input() devuelve texto. "12" y "30" son dos textos, y + entre textos los pega. Para hacer cálculos, convierte el texto en número:
first = int(input())second = int(input())total = first + secondprint(f"Total: {total} €")1230Total: 42 €Convertir texto en un valor de otro tipo se llama parsear (en inglés, parsing).
int(...)da unint.float(...)da unfloat.- Lo contrario, de número a texto, lo hace
str(...).
El total entra en el texto con una f-string, porque Python no pega texto y número.
La suma de aquí es el primer cálculo del curso. La resta, la multiplicación y la división llegan en la próxima lección.
first = int(input())second = int(input())total = first + secondprint(f"Total: {total} €")Paso a paso, en palabras
- La persona escribe 12 y Enter. input() devuelve el texto «12», no un número.
- int convierte el texto en el número 12. Va a first.
- 30 sigue el mismo camino: texto, conversión, un número en second.
- Ahora + suma números: 12 + 30 = 42.
- Se imprime «Total: 42 €».
Más precisamente, para curiosos
- Si el texto no es un número (por ejemplo, "doce"), el programa se detiene con
ValueError. Los espacios alrededor no importan:int(" 12 ")es 12. Cómo capturar un error así lo verás en el módulo «Errores y excepciones».
print(int(" 12 "))print(float("3.5"))print(int("doce"))123.5Traceback (most recent call last): File "/home/student/sum.py", line 3, in <module> print(int("doce")) ^^^^^^^^^^^ValueError: invalid literal for int() with base 10: 'doce'floatsiempre quiere un punto, sea cual sea la configuración de la computadora:float("3,5")se detiene conValueError.int("3.5")también se detiene: un número decimal no es un número entero.
Pruébalo
¿Cuántas entradas?
El programa lee cuántos adultos y cuántos niños hay.
23¿Qué imprimirá el programa?
adults = int(input())children = int(input())print("Entradas: " + adults + children)"Entradas: " + adults, texto + número. Python no pega texto y número, y se detiene: TypeError: can only concatenate str (not "int") to str. La suma entra en el texto con una f-string: f"Entradas: {adults + children}" da "Entradas: 5".La idea
Los números como tú quieres
En la lección anterior, el precio 49.90 salió como 49.9. Para un precio siempre quieres dos cifras después del punto decimal. Esto es la salida con formato:
product = "Auriculares"price = 49.9qty = 2print(f"{product}: {price:.2f} €")print(f"{qty} uds. en el carrito")label = f"Precio: {price:.2f} €"print(label)Auriculares: 49.90 €2 uds. en el carritoPrecio: 49.90 €Ya conoces la f-string: los valores van entre llaves, {product}. Esto se llama interpolación de cadenas.
Después del valor puede haber dos puntos y un formato: {price:.2f} significa un número decimal con exactamente 2 cifras después del punto. .0f no tiene cifras después del punto, .3f tiene tres.
Una f-string no sirve solo para imprimir. label = f"…" guarda el texto terminado en una variable.
El valor de la variable no cambia. El formato solo decide cómo se ve al imprimirlo.
Más precisamente, para curiosos
- Separador de miles y alineación en columnas:
total = 1234.5print(f"Total: {total:,.2f} €")print(f"{'Café':<10}|{2.5:8.2f}")print(f"{'Portátil':<10}|{1299.0:8.2f}")Total: 1,234.50 €Café | 2.50Portátil | 1299.00, añade un separador de miles. El número antes del punto es el ancho: {2.5:8.2f} ocupa 8 caracteres, alineado a la derecha, y {'Café':<10} ocupa 10, alineado a la izquierda (<).
- Las f-strings no siguen la configuración regional: el punto sigue siendo un punto en cualquier computadora. Si quieres una coma decimal, como se escribe en España y en gran parte de Europa, ponla tú:
price = 49.9print(f"Precio: {price:.2f} €".replace(".", ","))Precio: 49,90 €Pruébalo
Dos cifras
Una noche en el hotel cuesta 65.5 €. Quieres que salga «Por noche: 65.50 €». ¿Qué va en el espacio en blanco?
print(f"Por noche: {price:} €").2f: un número decimal con exactamente dos cifras después del punto.
Pruébalo
Encuentra el error
Ya hay 12 entradas reservadas, y el programa suma tantas como introduzcas. Con la entrada 4 se detiene en la línea 3 con TypeError: unsupported operand type(s) for +: 'int' and 'str'. ¿En qué línea está el error?
Elige la línea con el error.
input() devuelve texto, "4". En la línea 3 se suma un número con un texto, y Python se detiene ahí. Pero el error está antes: lo leído nunca se convirtió en número. La corrección es tickets = int(input("Número de entradas: ")).Ejercicio
Programas que preguntan
Resuelve las tareas en tu editor. La entrada es una línea por cada valor. No imprimas preguntas como «Introduce un nombre:», para que tu salida coincida con el ejemplo: escribe input() sin nada entre los paréntesis.
1. Saludo por nombre. Lee un nombre y saluda a la persona.
María¡Hola, María!2. Suma de dos números. Lee dos números enteros e imprime la cuenta.
172517 + 25 = 423. Dos textos en uno. Lee dos textos e imprímelos juntos, con un espacio entre ellos.
BuenosAiresBuenos Aires4. π con dos cifras. Guarda π en una variable como 3.14159265358979 e imprímelo con dos cifras después del punto. El valor ya listo math.pi llega en la próxima lección.
3.14Más tareas
- Edad. Lee un nombre y una edad (un número entero) e imprime «María tiene 19 años.»
- Una tarjeta de visita desde el teclado. Lee un nombre, una profesión y un teléfono e imprime con ellos la tarjeta de visita de la lección «Tu primer programa».
- Un precio con dos cifras. Lee un precio como número decimal e imprímelo con dos cifras y el símbolo del euro: con la entrada
7.5, la salida esPrecio: 7.50 €. - Suma de dos precios. Lee dos precios decimales e imprime su suma con dos cifras: con la entrada
12.4y3.15, la salida esTotal: 15.55 €.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Tu primer programa · Variables y tipos
- Continúa en: Operadores y aritmética · Condiciones · Bucles · Listas
- Ejercicios sobre el tema: Fundamentos del lenguaje