Módulo 1 · Lección 6 de 59
Pedir datos al usuario
La función input(), por qué todo lo que devuelve es texto y cómo construir tu primer programa realmente interactivo.
Hasta ahora tus programas hacían siempre exactamente lo mismo. Con input() empiezan a responder a quien los usa.
Cómo funciona#
nombre = input("¿Cómo te llamas? ")
print(f"Encantado, {nombre}")¿Cómo te llamas? Erwin
Encantado, ErwinAl llegar a input() ocurren tres cosas:
- Se escribe en pantalla el texto que le pasas entre paréntesis, que se llama prompt.
- El programa se detiene y espera. No avanza hasta que la persona pulse Intro.
- Lo que haya escrito se devuelve, y en este caso se guarda en
nombre.
La regla de oro: input siempre devuelve texto#
Este es el punto que hay que interiorizar hoy. Aunque el usuario escriba cifras, lo que recibes es una cadena.
edad = input("¿Cuántos años tienes? ")
print(type(edad))
print(edad + 1)¿Cuántos años tienes? 30
<class 'str'>
TypeError: can only concatenate str (not "int") to strPython no puede sumar 1 al texto "30". Hay que convertirlo primero:
edad = int(input("¿Cuántos años tienes? "))
print(f"El año que viene tendrás {edad + 1}")¿Cuántos años tienes? 30
El año que viene tendrás 31Fíjate en cómo se anidan: input() se ejecuta primero y su resultado entra directamente en int(). Si te resulta confuso, sepáralo en dos líneas; hace exactamente lo mismo:
respuesta = input("¿Cuántos años tienes? ")
edad = int(respuesta)Para decimales se usa float() en vez de int():
altura = float(input("¿Cuánto mides en metros? "))
print(f"Mides {altura * 100:.0f} centímetros")Limpia siempre lo que llega#
Las personas escriben espacios de más sin darse cuenta, y en un cambio de línea copiado y pegado pasa siempre. Acostúmbrate a encadenar strip():
ciudad = input("¿De qué ciudad eres? ").strip()Y si vas a comparar la respuesta con algo, añade también lower():
respuesta = input("¿Quieres continuar? (s/n) ").strip().lower()
print(f"Has respondido: {respuesta}")Así te da igual que escriban "S", " s " o "s".
Un programa completo#
Junta todo lo del módulo hasta ahora:
print("=" * 40)
print("CALCULADORA DE ÍNDICE DE MASA CORPORAL".center(40))
print("=" * 40)
nombre = input("Nombre: ").strip().title()
peso = float(input("Peso en kilos: "))
altura = float(input("Altura en metros: "))
imc = peso / (altura ** 2)
print()
print(f"{'Persona:':<12}{nombre}")
print(f"{'Peso:':<12}{peso:.1f} kg")
print(f"{'Altura:':<12}{altura:.2f} m")
print(f"{'IMC:':<12}{imc:.1f}")
print("=" * 40)========================================
CALCULADORA DE ÍNDICE DE MASA CORPORAL
========================================
Nombre: erwin garcía
Peso en kilos: 74.5
Altura en metros: 1.78
Persona: Erwin García
Peso: 74.5 kg
Altura: 1.78 m
IMC: 23.5
========================================Con veinte líneas ya tienes una herramienta que funciona. Repasa el código y localiza cada cosa que has aprendido: variables, conversión de tipos, operadores, métodos de cadena y formato.
Varios datos en una sola línea#
Si quieres pedir varios valores de golpe, parte la respuesta con split():
entrada = input("Escribe tres números separados por espacios: ")
partes = entrada.split()
a = int(partes[0])
b = int(partes[1])
c = int(partes[2])
print(f"Suma: {a + b + c}")Escribe tres números separados por espacios: 4 10 6
Suma: 20Cuando veamos listas y bucles esto se podrá escribir en una sola línea elegante, pero de momento así se entiende mejor lo que ocurre.