Apéndice F — Entrada estándar.

Objetivo. Revisar el uso de la función input() para la entrada estándar.

F.1 Entrada estándar con input().

En Python es posible que el usuario proporcione información a un código durante su ejecución, para que, con base en esta información, realice una acción.

Para ello se usa la función input(). Por ejemplo:

# Cuando se ejecuta esta celda, se espera a que el usuario 
# teclee la información y luego <enter>
input("Escribe tu nombre:") 
Escribe tu nombre: Lola
'Lola'

Observaciones.

  • La cadena entre los paréntesis proporciona información para saber lo que se debe teclear. Esta cadena se conoce como prompt.
  • Esta cadena se imprime cuando se ejecuta la función input() y luego se espera a que teclees alguna información.
  • Cuando se teclea <enter> la función input() lee la información proporcionada.
  • input() lee toda la información y la almacena una cadena (str).

La información que se teclea se puede almacenar en una variable:

numero = input('Teclea un número entero:')
Teclea un número entero: 13

Posteriormente, se puede ver el contenido y el tipo de la variable numero:

print(numero, type(numero)) 
13 <class 'str'>

Observa que el tipo de la variable es str. Entonces, si queremos usar el valor de un número para realizar un cálculo, lo debemos convertir al tipo numérico requerido. Por ejemplo:

numero = int(input('Teclea un número entero:'))
Teclea un número entero: 13
# Checamos el contenido y el tipo
print(numero, type(numero)) 
13 <class 'int'>

Observa que ahora el tipo corresponde a un entero debido a que hicimos la conversión (casting) con la función int().

También podemos convertir a tiplo flotante:

numero_f = float(input('Teclea un número flotante:'))
Teclea un número flotante: 3.1416
print(numero_f, type(numero_f)) 
3.1416 <class 'float'>

.

Ejemplo F.1: Área de un triángulo.

Calcular el área de un triángulo cuyos datos de la base y la altura son proporcionados por el usuario.

Primer intento.

base = input('Escribe la base del triángulo:')
altura = input('Escribe la altura del triángulo:')

Area = base * altura / 2
Escribe la base del triángulo: 5
Escribe la altura del triángulo: 10
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[10], line 4
      1 base = input('Escribe la base del triángulo:')
      2 altura = input('Escribe la altura del triángulo:')
----> 4 Area = base * altura / 2

TypeError: can't multiply sequence by non-int of type 'str'

Como puedes observar, hay un error de tipo TypeError: dado que la función input() transforma lo que lee en str, entonces no es posible multiplicar dos cadenas.

Por lo tanto debemos realizar una conversión antes de usar la información obtenida por input():

Segundo intento.

base = int(input('Escribe la base del triángulo:'))
altura = int(input('Escribe la altura del triángulo:'))
area = base * altura / 2

print(f"El área del triángulo de base {base} y altura {altura} es {area}")
Escribe la base del triángulo: 5
Escribe la altura del triángulo: 10
El área del triángulo de base 5 y altura 10 es 25.0

Observa que aunque los datos de la base y la altura se transforman a tipo int el resultado del cálculo del área es de tipo flotante.

Sin embargo, se obtiene un error de tipo ValueError, como el que se muestra a continnuación, cuando se dan datos de tipo flotante por ejemplo base = 3.5 y altura = 2.3.

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[13], line 1
----> 1 base = int(input('Escribe la base del triángulo:'))
      2 altura = int(input('Escribe la altura del triángulo:'))
      3 area = base * altura / 2

ValueError: invalid literal for int() with base 10: '3.5'

Entonces, una implementación más robusta sería la siguiente:

Tercer intento.

base = float(input('Escribe la base del triángulo:'))
altura = float(input('Escribe la altura del triángulo:'))
area = base * altura / 2

print(f"El área del triángulo de base {base} y altura {altura} es {area}")
Escribe la base del triángulo: 3.5
Escribe la altura del triángulo: 2.5
El área del triángulo de base 3.5 y altura 2.5 es 4.375

Cuarto intento.

En esta versión solo cambiaremos la manera en que imprimimos la salida usando la función str.format():

base = float(input('Escribe la base del triángulo:'))
altura = float(input('Escribe la altura del triángulo:'))
area = base * altura / 2

print("El área del triángulo de base {b:^10.3f} y altura {a:^10.3f} es {area:^10.3f}".format(b = base, a = altura, area = area))
Escribe la base del triángulo: 3.5
Escribe la altura del triángulo: 2.5
El área del triángulo de base   3.500    y altura   2.500    es   4.375