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
- Valores y tipos
- Variables
- Números y operadores
- Booleanos
- Cadenas
- Conversiones
- 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.
ejemplos = [42, 3.14, 2 + 3j, True, "Python", None]
[(valor, type(valor).__name__) for valor in ejemplos]
[(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.
puntuacion = 10
print(puntuacion, type(puntuacion).__name__)
puntuacion = 10.5
print(puntuacion, type(puntuacion).__name__)
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.
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
('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: +=, -=, *=, /=.
contador = 7
contador += 3
print("Valor actualizado:", contador)
print("¿Es igual a 10?", contador == 10)
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.
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
{'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.
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))
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.
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))
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.
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ó
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.
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))
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.
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__)
True 125 5.0 2026 str
Errores habituales
- Confundir
=(asignación) con==(comparación). - Mezclar texto y número sin convertir:
"Edad: " + 20falla. - 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:
- Calcula subtotal, descuento e importe final.
- Crea una sola cadena con formato monetario de dos decimales.
- Comprueba que el total es positivo.
# 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 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
Cuaderno: subtotal=28.50 €, descuento=2.85 €, total=25.65 €, válido=True
Comprobación rápida
- [ ] Distingo
int,float,bool,stryNone. - [ ] Sé cuándo usar
=,==eis None. - [ ] Puedo convertir y formatear valores.