Tiza Las materias del CBC
Practicar →

Pensamiento Computacional (090) · Unidad 2 — Datos, expresiones y funciones

Tipos de datos

Cada valor tiene un tipo, y el tipo decide qué se puede hacer con él. El mismo signo + suma números y pega textos.

Practicar este tema →7 ejercicios que te corrigen paso a paso · gratis, sin cuenta

La explicación

Los cuatro tipos simples

int     números enteros        42   -7   0
float   números con coma      3.14   -0.5   2.0
str     texto (entre comillas)  "hola"   "42"
bool    verdadero o falso     True   False

En Python el tipo no se declara: se deduce de lo que escribís. type(x) te lo dice.

2 y 2.0 no son lo mismo

2 es int y 2.0 es float. Valen lo mismo pero se comportan distinto, y eso se contagia: cualquier operación con un float da float.

5 // 2     → 2     (int)
5.0 // 2   → 2.0   (float)

"42" no es 42

Este es el error más frecuente de toda la materia. Un número entre comillas es texto. Se parece a un número, pero no se puede sumar con uno:
"3" + 4     → error
"3" + "4"   → "34"  (los pega)
3 + 4       → 7     (los suma)
Y viene siempre del mismo lado: input() devuelve texto, siempre, aunque la persona escriba un número.

Convertir de un tipo a otro

int("42")     → 42
float("3.5")   → 3.5
str(42)       → "42"
int(3.9)      → 3   (corta, no redondea)

Ojo con el último: int() sobre un float trunca hacia cero, no redondea. int(3.9) da 3 y int(-3.9) da -3. Si querés redondear, es round(). Y int("hola") tira error: sólo convierte lo que parece número.

Leer del teclado

edad = input("¿Cuántos años tenés? ")   # esto es texto
edad = int(edad)                     # ahora sí es número

edad = int(input("¿Cuántos años tenés? "))   # las dos cosas de una
La conversión que falla más seguido. int("42.5") no da 42: tira ValueError: invalid literal for int() with base 10: '42.5'. int() sobre un texto exige que el texto sea un entero entero, sin punto. Si el usuario puede escribir decimales hay que pasar por float primero: int(float("42.5")) sí da 42. Es la diferencia entre convertir texto a número y recortar un número que ya tenés.

Preguntarle a Python de qué tipo es algo

type(42)       → int
type(3.14)     → float
type("hola")   → str
type(True)     → bool

No hace falta memorizar nada: cuando un programa se comporta raro, intercalar un print(type(x), x) antes de la línea que falla resuelve la mitad de los casos. Casi siempre la respuesta es que algo que creías número es str, porque vino de un input.

Cualquier valor sirve como condición

Aunque bool tenga solo dos valores, Python sabe leer cualquier dato como verdadero o falso, y esto se usa muchísimo en la unidad 3:

Falso:  0  ·  0.0  ·  ""  ·  []  ·  {}  ·  None
Verdadero:  todo lo demás (incluido -3, y también [0])
Fijate el detalle que se toma: [0] es verdadero aunque adentro tenga un cero, porque lo que se mira es si la lista está vacía, no qué contiene. Por eso if lista: se lee «si la lista tiene algo», y es la forma idiomática de preguntarlo — mejor que if len(lista) > 0:, que dice lo mismo más largo.
Ejemplo resuelto

Un programa pide dos números con input() y muestra la suma, pero con 3 y 4 imprime 34. ¿Por qué, y cómo se arregla?

El programa que falla:

a = input("Primero: ")
b = input("Segundo: ")
print("La suma es", a + b)

Por qué. input() siempre devuelve str. Entonces a vale "3" y b vale "4", y entre dos strings el + no suma: concatena.

El arreglo es convertir apenas entra el dato:

a = int(input("Primero: "))
b = int(input("Segundo: "))
print("La suma es", a + b)

Ahora imprime La suma es 7.

Conviene convertir en la misma línea del input, no más abajo. Si dejás la conversión para después, hay un tramo del programa donde la variable es texto pero parece número, y ahí es donde aparecen los errores raros.

Control de razonabilidad: si una suma da un número con los dígitos de los dos sumandos pegados (3 y 4 → 34), no falló la cuenta: son strings.

Y si el usuario escribe 3.5. El programa se cae con ValueError: invalid literal for int() with base 10: '3.5', porque int() sobre texto no acepta el punto. Hay dos arreglos y son decisiones distintas, no una mejor que la otra: si el enunciado pide enteros, está bien que corte y lo que falta es avisarlo (eso se hace con try/except, en 5.2); si tiene sentido aceptar decimales, se cambia a float(input(...)) y listo. Lo que no hay que hacer es int(float(...)) sin pensarlo: eso acepta el 3.5 y en silencio lo convierte en 3.

Cómo verlo antes de que explote: poné print(type(a), a) justo después del input. Si dice <class 'str'> 3 falta el int; si dice <class 'int'> 3 está bien. Ese print de diagnóstico se borra después, y mientras tanto ahorra media hora de mirar el programa sin entender.

Dónde se cae la mayoría

Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.

Practicar Tipos de datos →

Ver todos los temas de Pensamiento Computacional