Variables y tipos de datos en Python: guía con ejercicios

Actualizado el 29 de septiembre de 2026

Todo programa trabaja con datos: un nombre, una edad, un precio, si un usuario pagó o no. Una variable es un nombre que le pones a un dato para poder usarlo después. En Python crear una variable es tan simple como escribir el nombre, un signo = y el valor.

En esta guía vas a ver cómo crear variables, qué tipos de datos básicos existen, cómo convertir de un tipo a otro y cómo armar textos con valores dentro. Es el primer paso de todo lo demás, así que vale la pena entenderlo bien.

Crear y cambiar variables

nombre = "Camila"
edad = 21
altura = 1.68

edad = 22   # una variable puede cambiar de valor
print(nombre, edad)  # Camila 22

El signo = no significa "es igual a" como en matemáticas: significa "guarda este valor con este nombre". Por eso edad = edad + 1 tiene sentido: toma el valor actual, le suma 1 y lo vuelve a guardar.

Reglas y costumbres para los nombres:

  • Pueden tener letras, números y guiones bajos, pero no pueden empezar con un número: precio2 sí, 2precio no.
  • Distinguen mayúsculas: edad y Edad son dos variables distintas.
  • No pueden ser palabras reservadas del lenguaje, como if, for o def.
  • Por convención se escriben en minúsculas con guiones bajos (precio_con_iva), y conviene que digan qué guardan: total es mejor que t.

Los tipos de datos básicos

Cada valor tiene un tipo, que determina qué se puede hacer con él. Python lo deduce solo, sin que tengas que declararlo, y la función type() te dice cuál es:

type(21)        # <class 'int'>       número entero
type(1.75)      # <class 'float'>     número con decimales
type("Camila")  # <class 'str'>       texto (string)
type(True)      # <class 'bool'>      verdadero o falso
type(None)      # <class 'NoneType'>  "ningún valor"
  • int: enteros, positivos o negativos, sin límite de tamaño.
  • float: números con punto decimal. Se escriben con punto, nunca con coma: 1.75.
  • str: texto, entre comillas simples o dobles ('hola' y "hola" son lo mismo).
  • bool: solo dos valores, True y False, con mayúscula inicial.
  • None: representa la ausencia de valor, por ejemplo un dato que todavía no se conoce.

Convertir de un tipo a otro

Las funciones int(), float(), str() y bool() convierten un valor al tipo correspondiente:

int("42")      # 42
float("3.5")   # 3.5
str(10)        # '10'
int(3.9)       # 3   (corta los decimales, no redondea)
round(3.9)     # 4

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

Esto importa mucho con input(), la función que lee lo que escribe el usuario: siempre devuelve texto, aunque el usuario escriba un número. Para hacer cuentas con ese valor, primero hay que convertirlo: edad = int(input("Tu edad: ")).

Con bool(), los valores "vacíos" (0, "", [], None) se convierten en False y todo lo demás en True. Ojo: bool("0") es True, porque es un texto que no está vacío.

Textos con valores dentro: f-strings

Para armar un texto que incluya variables, lo más cómodo es una f-string: una f antes de las comillas y cada valor entre llaves. Dentro de las llaves puede ir cualquier expresión, y después de : se puede indicar un formato.

nombre = "Camila"
edad = 21
precio = 1990.5

f"{nombre} tiene {edad} años"   # 'Camila tiene 21 años'
f"El próximo año: {edad + 1}"   # 'El próximo año: 22'
f"{precio:.2f}"                 # '1990.50' (dos decimales)

Asignación múltiple

Python permite asignar varias variables en una línea. Un uso práctico es intercambiar dos valores sin una variable auxiliar:

a, b = 1, 2
a, b = b, a
print(a, b)  # 2 1

Errores comunes

Sumar texto y números

"Edad: " + 21
# TypeError: can only concatenate str (not "int") to str

Python no convierte los tipos por su cuenta. Usa una f-string (f"Edad: {21}") o convierte el número con str().

Olvidar convertir lo que devuelve input()

Si el usuario escribe 10 y 5, input() + input() da "105": se unieron dos textos. Con int(input()) + int(input()) el resultado es 15.

NameError por una mayúscula

NameError: name 'Edad' is not defined casi siempre significa que el nombre está mal escrito: se creó edad y se usó Edad. Revisa mayúsculas, tildes y guiones bajos.

Esperar decimales exactos

0.1 + 0.2            # 0.30000000000000004
round(0.1 + 0.2, 2)  # 0.3

Los float se guardan en binario y algunos decimales no tienen representación exacta. No es un error de Python: pasa en casi todos los lenguajes. Para mostrar resultados, redondea con round() o con un formato como :.2f.

Ejercicios resueltos

Intenta resolver cada ejercicio antes de abrir la solución: equivocarse y corregir es la parte que más enseña.

1.Describir a una persona

Los ejercicios se escriben como funciones: def crea la función, los valores de entrada llegan entre paréntesis y return entrega el resultado. Se explican a fondo en la guía de funciones; por ahora basta con completar el return.

Escribe una función describir(nombre, edad) que devuelva el texto "<nombre> tiene <edad> años".

  • describir("Camila", 21) → "Camila tiene 21 años"
Punto de partida
def describir(nombre, edad):
    return ...
Ver solución
Solución
def describir(nombre, edad):
    return f"{nombre} tiene {edad} años"

Una f-string arma el texto directamente, sin importar que edad sea un número. La alternativa con + obliga a convertir: nombre + " tiene " + str(edad) + " años", que es más largo y más fácil de equivocar (un espacio que falta, un str() olvidado).

2.Celsius a Fahrenheit

Escribe una función celsius_a_fahrenheit(celsius) que convierta una temperatura usando la fórmula F = C × 9 / 5 + 32.

  • celsius_a_fahrenheit(25) → 77.0
  • celsius_a_fahrenheit(0) → 32.0
  • celsius_a_fahrenheit(-40) → -40.0
Punto de partida
def celsius_a_fahrenheit(celsius):
    return ...
Ver solución
Solución
def celsius_a_fahrenheit(celsius):
    return celsius * 9 / 5 + 32

La fórmula se traduce casi literal. El resultado es float (77.0 y no 77) porque la división / en Python siempre devuelve un float, aunque el resultado sea exacto. Si necesitas un entero, puedes envolverlo en round().

3.Sumar números que llegan como texto

Escribe una función sumar_textos(a, b) que reciba dos números enteros escritos como texto y devuelva su suma como número.

  • sumar_textos("12", "30") → 42
  • sumar_textos("-5", "5") → 0
Punto de partida
def sumar_textos(a, b):
    return ...
Ver solución
Solución
def sumar_textos(a, b):
    return int(a) + int(b)

Es la misma situación que con input() o con datos que vienen de un archivo: los números llegan como texto. Sin convertir, a + b devolvería "1230". int() entiende también el signo negativo, así que "-5" funciona sin casos especiales.

Practica Python con ejercicios a tu nivel

En Coditer resuelves ejercicios en el navegador, con tests automáticos que revisan tu código y una IA que te da pistas cuando te atascas. Practicar es gratis.