El informe que no cuadra
Son las nueve. El informe dice que el quiosco vendió ayer 14,30 euros. La caja dice 26,30.
Puedes cambiar líneas al azar hasta que cuadre. O puedes comprobar una cosa cada vez. La segunda forma siempre termina. La primera, a veces, no.
Al final de esta lección
Nota
Puedo encontrar un fallo comprobando una sola cosa cada vez.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Fallo | algo que el programa hace mal | un total que no cuadra |
| Depurar | buscar y corregir un fallo | |
| Traza del error | el mensaje que Python muestra cuando se para | Traceback |
| una orden que muestra un valor mientras el programa corre | ||
| Partir por la mitad | mirar en el medio para descartar media parte |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La traza se lee de abajo arriba
Cuando Python se para, escribe una traza del error. Asusta, pero tiene orden.
La última línea dice qué ha pasado: el tipo de error y el dato que falló. Justo encima está la línea del código donde ocurrió, con su número.
Lee primero esas dos. Ejecuta el bloque siguiente y busca las dos en la traza.
Prueba: lee la traza
# Suma las horas extra de la semana de una repartidora.
extra_hours = {"lunes": 2, "martes": 1, "miercoles": 3}
def week_total(hours):
total = 0
for day in ["lunes", "martes", "miércoles"]:
total = total + hours[day]
return total
print("Horas extra:", week_total(extra_hours))
Imprime para ver, no para adivinar
A veces no hay error. El programa termina, pero el resultado está mal.
Entonces pon un print dentro del bucle. Muestra cada valor y lo que el programa decide con él. Usa repr() para ver los espacios y las mayúsculas que no se notan.
Compara lo que ves con lo que esperabas. El primer valor que no coincide es tu pista.
Practica: los tickets de Madrid
# Cuenta los tickets de soporte de clientes de Madrid.
tickets = ["Madrid", "Sevilla", "madrid", "Madrid ", "Bilbao"]
def count_city(cities, wanted):
count = 0
for city in cities:
print("Miro:", repr(city), "¿Es igual?", city == wanted)
if city == wanted:
count = count + 1
return count
print("Tickets de Madrid:", count_city(tickets, "Madrid"))
# Deberían salir 3. Lee las líneas Miro para ver por qué no.
# Luego cambia city == wanted por city.strip().lower() == wanted.lower()
Un error frecuente
Advertencia
Mucha gente cree que lo rápido es cambiar varias cosas a la vez. Si lo arreglas así, no sabes qué cambio lo arregló. Si lo empeoras, tampoco sabes cuál fue. Cambia una sola cosa, ejecuta y mira el resultado.
Parte el problema por la mitad
Imagina un proceso de ocho pasos y un resultado final mal. No mires los ocho uno por uno.
Mira el resultado después del paso 4. Si está bien, el fallo está en los pasos 5 a 8. Si está mal, está en los pasos 1 a 4.
Repite con la mitad que queda. En tres comprobaciones llegas al paso culpable.
Ejemplo: ocho pasos, tres comprobaciones
| Comprobación | Miras después del paso | Resultado | Queda por mirar |
|---|---|---|---|
| 1 | 4 | bien | pasos 5 a 8 |
| 2 | 6 | mal | pasos 5 y 6 |
| 3 | 5 | bien | el paso 6 es el culpable |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.