Curso de Python · Bloque 01 de 09

Tipos de datos y variables

Tipos escalares, nombres, operadores, cadenas y conversiones.

Audiencia. Personas que ya han visto algo de programación y quieren repasar Python de forma práctica.
Prerrequisitos. Saber ejecutar una celda de Jupyter; no hace falta conocer Python.
Duración orientativa. 60–90 minutos, incluida la práctica.

Objetivos de aprendizaje

  • Reconocer los tipos escalares principales de Python.
  • Crear variables con nombres claros y comprender la asignación.
  • Convertir valores de forma explícita y combinar operadores.
  • Trabajar con texto, valores booleanos y None.

Itinerario

  1. Valores y tipos
  2. Variables
  3. Números y operadores
  4. Booleanos
  5. Cadenas
  6. Conversiones
  7. Práctica

Cómo trabajar: ejecuta las celdas en orden, predice el resultado antes de verlo y modifica los ejemplos. Cada bloque termina con un ejercicio, un punto de partida y una solución posible.

1. Valores y tipos

En Python cada valor tiene un tipo, que determina qué operaciones admite. type() permite inspeccionarlo. Los nombres de tipo más frecuentes al empezar son int, float, complex, bool, str y NoneType.

Python
ejemplos = [42, 3.14, 2 + 3j, True, "Python", None]
[(valor, type(valor).__name__) for valor in ejemplos]
Resultado
[(42, 'int'),
 (3.14, 'float'),
 ((2+3j), 'complex'),
 (True, 'bool'),
 ('Python', 'str'),
 (None, 'NoneType')]

Python usa tipado dinámico: una variable no queda ligada para siempre a un tipo. El valor sí tiene tipo; el nombre simplemente apunta a ese valor. Esto ofrece flexibilidad, pero cambiar de tipo sin motivo suele dificultar la lectura.

Python
puntuacion = 10
print(puntuacion, type(puntuacion).__name__)

puntuacion = 10.5
print(puntuacion, type(puntuacion).__name__)
Resultado
10 int
10.5 float

2. Variables y asignación

Usa nombres descriptivos en snake_case. No pueden comenzar con un número ni coincidir con palabras reservadas como if, for o class. Por convención, las constantes se escriben en mayúsculas.

Python
nombre_usuario = "Ada"
edad = 36
PI_APROXIMADO = 3.1416

# Asignación múltiple y desempaquetado
x, y = 10, 20
x, y = y, x
nombre_usuario, edad, x, y
Resultado
('Ada', 36, 20, 10)

La asignación = no significa «es igual a» en sentido matemático: vincula un nombre con un valor. == compara valores. Los operadores aumentados actualizan a partir del valor actual: +=, -=, *=, /=.

Python
contador = 7
contador += 3
print("Valor actualizado:", contador)
print("¿Es igual a 10?", contador == 10)
Resultado
Valor actualizado: 10
¿Es igual a 10? True

3. Números y operadores

  • int: enteros de precisión arbitraria.
  • float: números en coma flotante; son aproximaciones binarias.
  • complex: números con parte real e imaginaria.

Precedencia básica: paréntesis, potencias, multiplicación/división y suma/resta.

Python
a, b = 17, 5
resultados = {
    "suma": a + b,
    "resta": a - b,
    "producto": a * b,
    "division_real": a / b,
    "division_entera": a // b,
    "resto": a % b,
    "potencia": a ** 2,
}
resultados
Resultado
{'suma': 22,
 'resta': 12,
 'producto': 85,
 'division_real': 3.4,
 'division_entera': 3,
 'resto': 2,
 'potencia': 289}

Los float no representan exactamente todos los decimales. Para compararlos, suele ser mejor math.isclose() que ==. Para dinero real se suele usar decimal.Decimal.

Python
import math

calculo = 0.1 + 0.2
print(calculo)
print("Comparación directa:", calculo == 0.3)
print("Comparación tolerante:", math.isclose(calculo, 0.3))
Resultado
0.30000000000000004
Comparación directa: False
Comparación tolerante: True

4. Comparaciones, booleanos y verdad lógica

Las comparaciones producen True o False. Se pueden encadenar y combinar con and, or y not. Python considera falsos, entre otros, False, None, cero y las colecciones vacías.

Python
temperatura = 22
es_confortable = 18 <= temperatura <= 25
necesita_abrigo = temperatura < 15

print(es_confortable)
print(necesita_abrigo or temperatura < 18)
print(not necesita_abrigo)
print(bool(""), bool("texto"), bool(0), bool(12), bool(None))
Resultado
True
False
True
False True False True False

5. Cadenas de texto

str representa texto Unicode. Las cadenas son inmutables: los métodos crean una nueva cadena. Se accede a caracteres y fragmentos con índices y slices; el índice inicial es 0 y los índices negativos cuentan desde el final.

Python
lenguaje = "Python"
print(lenguaje[0], lenguaje[-1])
print(lenguaje[1:4])
print(lenguaje[::-1])

mensaje = "  aprender Python paso a paso  "
limpio = mensaje.strip().capitalize()
print(limpio)
print(mensaje)  # la cadena original no cambió
Resultado
P n
yth
nohtyP
Aprender python paso a paso
  aprender Python paso a paso  

Métodos útiles: lower, upper, strip, replace, split, join, startswith y endswith. Para insertar valores de forma legible, las f-strings son la opción habitual.

Python
nombre = "Lin"
unidades = 3
precio = 19.95
total = unidades * precio

resumen = f"{nombre} compró {unidades} unidades: {total:.2f} €"
palabras = "rojo,verde,azul".split(",")
print(resumen)
print(" | ".join(palabras))
Resultado
Lin compró 3 unidades: 59.85 €
rojo | verde | azul

6. None, identidad y conversiones

None representa ausencia de valor. Se compara por identidad con is None, no con == None. Las funciones int, float, str y bool convierten cuando la conversión tiene sentido; una entrada inválida produce una excepción que veremos en el bloque 6.

Python
resultado = None
print(resultado is None)

texto_entero = "120"
entero = int(texto_entero)
decimal = float("2.5")
etiqueta = str(2026)
print(entero + 5, decimal * 2, etiqueta, type(etiqueta).__name__)
Resultado
True
125 5.0 2026 str

Errores habituales

  • Confundir = (asignación) con == (comparación).
  • Mezclar texto y número sin convertir: "Edad: " + 20 falla.
  • Comparar decimales binarios con igualdad exacta.
  • Reutilizar un nombre para valores de tipos sin relación.

Extensión opcional: explora decimal.Decimal y fractions.Fraction en la biblioteca estándar.

Práctica · Resumen de una compra

Dados un producto, un precio unitario, una cantidad y un descuento porcentual:

  1. Calcula subtotal, descuento e importe final.
  2. Crea una sola cadena con formato monetario de dos decimales.
  3. Comprueba que el total es positivo.
Tu turno
# Punto de partida: completa el cuerpo y ejecuta tus pruebas.
def resumir_compra(producto, precio_unitario, cantidad, descuento_pct):
    # TODO: calcula y devuelve la cadena pedida.
    pass
Ver una solución posible
Solución
# Solución posible
def resumir_compra(producto, precio_unitario, cantidad, descuento_pct):
    subtotal = precio_unitario * cantidad
    descuento = subtotal * descuento_pct / 100
    total = subtotal - descuento
    es_valido = total > 0
    return (
        f"{producto}: subtotal={subtotal:.2f} €, "
        f"descuento={descuento:.2f} €, total={total:.2f} €, "
        f"válido={es_valido}"
    )

resumen = resumir_compra("Cuaderno", 4.75, 6, 10)
print(resumen)
assert "total=25.65 €" in resumen
Resultado
Cuaderno: subtotal=28.50 €, descuento=2.85 €, total=25.65 €, válido=True

Comprobación rápida

  • [ ] Distingo int, float, bool, str y None.
  • [ ] Sé cuándo usar =, == e is None.
  • [ ] Puedo convertir y formatear valores.

Volver al índice · Siguiente →