Semestre 02, 2026
Un dato es una pieza básica de información que un programa puede manipular.
42
3.14
"Hola"
True
Cada uno representa un tipo distinto de información. Y ese tipo no es un detalle: decide qué se puede hacer con el dato.
El tipo de dato define qué clase de información almacena una variable y qué operaciones tienen sentido sobre ella.
Todo valor en Python tiene un tipo. No existe un dato suelto sin tipo.
El mismo operador hace cosas distintas según el tipo de los operandos.
3 + 2 # 5 suma de números
"3" + "2" # "32" unión de textos
3 * 2 # 6 multiplicación
"🐍" * 3 # "🐍🐍🐍" repetición de texto
El símbolo + no significa sumar: significa combinar, y cada tipo define cómo se combina.
"10" + 5
# TypeError: can only concatenate str (not "int") to str
Python no adivina. Si mezclamos texto con número, se detiene y avisa.
dato = 10 # ahora es int
dato = "diez" # ahora es str, y es válido
El tipo lo decide el valor y puede cambiar. Más flexible al escribir, los errores aparecen al ejecutar.
El tipo se declara y no cambia. Más estricto al escribir, los errores aparecen antes de ejecutar.
| Tipo | Guarda | Ejemplo |
|---|---|---|
int | Números enteros | 42 |
float | Números decimales | 3.14 |
str | Texto | "Hola" |
bool | Verdadero o falso | True |
numero = 10
precio = 3.5
nombre = "Luis"
es_mayor = True
Representan números sin parte decimal: positivos, negativos o cero.
edad = 20
temperatura = -5
cero = 0
poblacion = 17_000_000 # el guion bajo solo ayuda a leer
A diferencia de otros lenguajes, en Python un entero puede crecer tanto como la memoria lo permita.
print(2 ** 100)
# 1267650600228229401496703205376
7 / 2 # 3.5 división normal, siempre devuelve float
7 // 2 # 3 división entera, descarta la parte decimal
7 % 2 # 1 residuo de la división
El operador de residuo dice si un número es par: numero % 2 == 0.
Representan números con parte decimal.
precio = 19.99
altura = 1.75
negativo = -0.5
cientifico = 1.5e3 # 1500.0
10 / 5 # 2.0, no 2
type(10 / 5) # <class 'float'>
Los decimales se guardan en binario y muchos valores no tienen representación exacta.
0.1 + 0.2 # 0.30000000000000004
0.1 + 0.2 == 0.3 # False
No se comparan decimales con igualdad. Se compara si la diferencia es lo bastante pequeña.
abs((0.1 + 0.2) - 0.3) < 0.0001 # True
Una cadena es una secuencia de caracteres escrita entre comillas.
nombre = "Ana"
apellido = 'Pérez' # comillas simples o dobles, da igual
vacia = "" # una cadena vacía es válida
frase = "Dijo: \"hola\"" # comilla escapada
parrafo = """Primera línea
Segunda línea"""
"25" # es texto, no se le puede sumar
25 # es un número
"25" + 1 # TypeError
Esta es la confusión más común al empezar, y aparece siempre que se lee datos del usuario.
Solo admite dos valores: True y False. Se escriben con mayúscula inicial.
es_mayor = True
termino = False
Toda comparación produce un booleano.
20 >= 18 # True
5 == 5 # True
"a" == "b" # False
True + True # 2
int(True) # 1
int(False) # 0
Python trata como falso al cero, al vacío y a None.
bool(0) # False
bool("") # False
bool([]) # False
bool(None) # False
bool(42) # True
bool("hola") # True
La función type() devuelve el tipo de un valor.
numero = 10
print(type(numero))
# <class 'int'>
isinstance() responde con un booleano y es lo que se usa en programas reales.
isinstance(numero, int) # True
isinstance(numero, str) # False
Convertir es transformar un valor de un tipo a otro. También se le llama casting.
| Función | Convierte a |
|---|---|
int() | Entero |
float() | Decimal |
str() | Texto |
bool() | Booleano |
numero = 3.14
entero = int(numero) # 3
La conversión trunca, no redondea: int(3.99) da 3, no 4. Para redondear existe round().
texto = "25"
numero = int(texto) # 25
edad = 20
texto_edad = str(edad) # "20"
int("hola") # ValueError: invalid literal for int()
int("3.5") # ValueError: hay que pasar por float primero
float("3.5") # 3.5, correcto
int() solo acepta texto que represente un entero. Si viene con punto decimal, primero float() y después int().
La función input() muestra un mensaje y devuelve lo que el usuario escribe.
nombre = input("¿Cómo te llamas? ")
print("Hola", nombre)
input() siempre devuelve texto. Aunque el usuario escriba 25, lo que llega es la cadena "25".
edad = input("¿Cuántos años tienes? ")
print(type(edad))
edad = int(edad)
print(type(edad))
faltan = 18 - edad
print("Te faltan", faltan, "años")
edad = input("¿Cuántos años tienes? ")
print(type(edad))
edad = int(edad)
print(type(edad))
faltan = 18 - edad
print("Te faltan", faltan, "años")
Mostramos el mensaje y esperamos a que el usuario escriba. Lo que teclea queda guardado en la variable.
edad = input("¿Cuántos años tienes? ")
print(type(edad))
edad = int(edad)
print(type(edad))
faltan = 18 - edad
print("Te faltan", faltan, "años")
Aquí aparece la sorpresa: el tipo es str, no int. Aunque el usuario escriba 25, lo que llega es texto y restarlo daría error.
edad = input("¿Cuántos años tienes? ")
print(type(edad))
edad = int(edad)
print(type(edad))
faltan = 18 - edad
print("Te faltan", faltan, "años")
Convertimos el texto a entero y guardamos el resultado en la misma variable. Ahora el tipo sí es int.
edad = input("¿Cuántos años tienes? ")
print(type(edad))
edad = int(edad)
print(type(edad))
faltan = 18 - edad
print("Te faltan", faltan, "años")
Ya con un número podemos hacer la resta. Esta es la razón práctica por la que los tipos importan desde el primer programa.
| Tipo | Ejemplo | Convertir con | Cuidado |
|---|---|---|---|
int | 42 | int() | Trunca al convertir desde float |
float | 3.14 | float() | No compares con == |
str | "Hola" | str() | "25" no es 25 |
bool | True | bool() | Se escribe con mayúscula |
Veremos tipos que agrupan varios datos: listas, tuplas, diccionarios y conjuntos.
Ya sabemos qué tipos de datos existen. Ahora necesitamos guardarlos en algún lado.
Es necesaria una forma de guardar información.
Una variable es un nombre que hace referencia a un valor almacenado en memoria. Permite trabajar con datos sin conocer su valor de antemano.
mensaje = "Hola Mundo"
mensaje es la variable.Hola Mundo es el valor almacenado.En Python el valor vive en memoria y la variable es una etiqueta que apunta hacia él.
a = 10
b = a # b apunta al mismo valor
a = 20 # a apunta a otro valor; b sigue en 10
print(b) # 10
Asignar significa guardar un valor en una variable. La forma es: variable = valor.
El signo = no es igualdad: es una orden de guardar. Se lee de derecha a izquierda.
edad = 18
edad = 18
edad = 19
contador = 0
contador = contador + 1 # ahora vale 1
contador += 1 # forma abreviada, ahora vale 2
Primero se calcula el lado derecho y después se guarda el resultado.
x, y = 1, 2
a = b = 0
_.edad y Edad son distintas.
50marimbas = "ensamble" # empieza con número
nombre completo = "Ana" # tiene un espacio
class = "CC2005" # palabra reservada
nombre_completo = "Ana Pérez"
_privado = 1
notaFinal = 85
Son palabras que el lenguaje ya usa y no se pueden reutilizar como nombres.
False None True and as assert
break class continue def del elif
else except for from global if
import in is lambda not or
pass return try while with yield
nombre_completo, nota_final.promedio_notas comunica más que pn.PI = 3.1416.Una expresión es la combinación de datos, variables y operadores que produce un resultado.
x = 10
y = (2 * x) + 5
y es el resultado de una expresión.
Produce un valor: 2 + 3, edad >= 18.
Ejecuta una acción: edad = 18, print(edad).
Toda asignación contiene una expresión del lado derecho.
| Operador | Significado | Ejemplo | Resultado |
|---|---|---|---|
+ | Suma | 5 + 2 | 7 |
- | Resta | 5 - 2 | 3 |
* | Multiplicación | 5 * 2 | 10 |
/ | División | 5 / 2 | 2.5 |
// | División entera | 5 // 2 | 2 |
% | Residuo | 5 % 2 | 1 |
** | Potencia | 5 ** 2 | 25 |
10 / 2 # 5.0 siempre float
10 // 2 # 5 entero
10 / 0 # ZeroDivisionError
| Operador | Significado |
|---|---|
== | Igual |
!= | Diferente |
> | Mayor |
< | Menor |
>= | Mayor o igual |
<= | Menor o igual |
Devuelven un valor booleano.
Las cadenas se comparan en orden alfabético, según el código de cada carácter.
edad = 20
edad >= 18 # True
"ana" == "Ana" # False, las mayúsculas importan
"a" < "b" # True
Sirven para crear conexiones y formar expresiones más compuestas.
and → verdadero si ambos lados son verdaderos.or → verdadero si al menos un lado es verdadero.not → invierte el valor.| A | B | A and B | A or B |
|---|---|---|---|
True | True | True | True |
True | False | False | True |
False | True | False | True |
False | False | False | False |
edad = 20
tiene_credencial = True
edad >= 18 and tiene_credencial # True
Python permite escribir rangos de forma natural: 0 <= nota <= 100.
resultado = (5 + 3) * 2 # 16, primero el paréntesis
otro = 5 + 3 * 2 # 11, primero la multiplicación
Concatenar es unir dos cadenas.
nombre = "Ana"
saludo = "Hola " + nombre
print(saludo)
# Hola Ana
Solo se concatena texto con texto. Para incluir un número hay que convertirlo con str().
Es la forma moderna y recomendada de armar texto con variables.
nombre = "Ana"
edad = 20
print(f"Hola {nombre}, tienes {edad} años")
print(f"El doble es {edad * 2}")
print("🐍" * 3)
# 🐍🐍🐍
¿No era lo que esperaban?
Los tipos de datos son importantes ya que dictaminan el comportamiento de los operandos dada una operación.
= (asignar) con == (comparar).input().==.
numero = "10"
numero + 5
# TypeError: can only concatenate str (not "int") to str
print(total)
# NameError: name 'total' is not defined
edad = 18 # guarda 18 en edad
edad == 18 # pregunta si edad vale 18
int, float, str y bool.type() verifica el tipo; int(), float(), str() y bool() convierten.input() siempre devuelve texto: hay que convertirlo para hacer cálculos.= guarda, no compara.