CYR3ESO Presentación
Bienvenidos a 3º de Computación y Robótica. Los dos últimos cursos habéis programado con bloques: Scratch, arrastrar y soltar piezas, bucles, condicionales. Eso se acaba este año.
Qué cambia en 3º
Este curso el salto es real: dejamos la programación por bloques y empezamos a escribir código de verdad, en Python. No es solo cambiar de programa, es cambiar de manera de pensar el código: en vez de piezas que encajan, ahora vais a escribir texto, con sus reglas de sintaxis, su indentación, sus errores por poner mal una coma.
Además de programación en Python (con funciones y código modular, que es la gran novedad de este curso), este año vais a tocar:
- Robótica más autónoma: robots que deciden su ruta, no solo que siguen una secuencia fija.
- IoT completo: dispositivos conectados en red, con seguridad de los datos y algo de nube.
- Diseño de apps móviles: primera toma de contacto con crear una aplicación de verdad (si el centro lo autoriza para todo el grupo).
- Diseño web: durante todo el curso, hasta construir vuestro propio porfolio digital.
- Big Data: bases de datos, visualización avanzada, y qué implica en privacidad manejar tantos datos.
- IA: clasificación, regresión, entrenar modelos sencillos y hablar en serio de ética.
- Ciberseguridad avanzada: ataques reales, nociones de criptografía, seguridad en redes.
Antes de nada
Rellenad este formulario
La actividad de hoy: El Robot con Funciones
En 1º descubristeis que un ordenador hace exactamente lo que le dices. En 2º aprendisteis a darle órdenes que se repiten (bucles) y que deciden (condicionales). Hoy vamos a resolver el problema que tienen los bucles y los condicionales solos: repetir el mismo bloque de instrucciones en distintos puntos del programa sin tener que volver a escribirlo entero cada vez. A eso se le llama modularidad, y es exactamente lo que vais a hacer este curso en Python con las funciones.
Las órdenes permitidas
Las mismas cuatro básicas de siempre:
AVANZAGIRA DERECHA/GIRA IZQUIERDAREPITE n VECES:seguido de un bloque de instruccionesSI HAY PARED DELANTE:seguido de un bloque de instrucciones
Y la novedad de este año, con la sintaxis que vais a usar de verdad en Python:
def nombre_de_la_funcion():— define una función. Debajo, indentado (sangrado, un poco más a la derecha), escribes las instrucciones que la componen. Se define una sola vez.nombre_de_la_funcion()— llama a esa función. Se puede llamar tantas veces como quieras, en cualquier punto del programa, sin volver a escribir sus instrucciones.
Nada de corchetes esta vez: en Python los bloques se marcan con dos puntos (:) y con la sangría. Si una línea está más a la derecha que la anterior, es que pertenece al bloque de arriba. Fijaos bien en la indentación de los ejemplos de abajo, porque este curso os va a perseguir todo el año: en Python, si te falla la indentación, el programa directamente no funciona.
Material
Un folio con un tablero (cuadrícula de unas 8×8, salida, meta, paredes) y otro folio para escribir el programa. Diseñad el tablero de forma que el mismo movimiento o maniobra tenga que repetirse en dos puntos distintos y no consecutivos del recorrido (por ejemplo, esquivar una pared con la misma forma en dos lugares diferentes del tablero). Sin eso, no tiene sentido usar una función: el ejercicio pierde la gracia.
Cómo se juega
- Formad parejas. Una persona diseña el tablero (con esa maniobra repetida en dos puntos) sin enseñárselo a la otra.
- Escribe el programa completo. Antes de nada, identifica qué maniobra se repite y conviértela en una función con
def. El resto del programa se escribe usando esa función, además de las órdenes básicas y, si hace falta, bucles y condicionales. - Se enseña el tablero. La otra persona hace de robot y ejecuta el programa literalmente, línea a línea.
- Si falla, entre los dos revisáis dónde: ¿el error está en la lógica del recorrido, o en que la función no estaba bien definida o mal llamada?
- Cambiáis de papel con un tablero nuevo.
Ejemplo resuelto
Imaginad un tablero donde, tanto cerca de la salida como cerca de la meta, hay que esquivar una pared exactamente de la misma forma: girar a la derecha, avanzar una casilla, girar a la izquierda para retomar la dirección original.
Sin función, tendríais que escribir esas tres líneas dos veces, en dos sitios distintos del programa. Con función:
def esquiva_pared():
GIRA DERECHA
AVANZA
GIRA IZQUIERDA
AVANZA
AVANZA
esquiva_pared()
REPITE 3 VECES:
AVANZA
esquiva_pared()
AVANZA
Fijaos: esquiva_pared se define una vez, arriba del todo, y luego se llama dos veces, en dos momentos distintos del recorrido. Si mañana descubrís que la maniobra estaba mal (por ejemplo, que había que girar primero a la izquierda), la corregís una sola vez, dentro de la función, y se arregla en los dos sitios donde se usa. Esa es la ventaja real de una función: no es solo escribir menos, es que cuando hay que corregir algo, lo corriges en un único sitio.
Para quien vaya sobrado
Diseñad un tablero donde la misma maniobra haga falta en tres puntos distintos, y donde además la función reciba un dato (por ejemplo, cuántas casillas avanzar antes de girar, en vez de un número fijo). No hace falta que sepáis cómo se escribe eso en Python todavía —lo veremos con el lenguaje real en unas semanas—, basta con que lo expliquéis con vuestras palabras al lado del programa: “esta función necesitaría saber cuántas casillas avanzar cada vez que se la llama”.
Al terminar
Entregad tablero y programa de las dos rondas, con vuestros nombres. Los recojo yo.
Lo que quiero que os llevéis hoy a casa no es la palabra “función”: es la idea de que un buen programa no es el que hace más cosas, sino el que evita escribir dos veces lo mismo.
