Tema 1. Introducción a la programación

Currículo: esta unidad desarrolla todos los saberes básicos del Bloque A – Introducción a la programación correspondiente a 3º ESO. Además, se evalúan los criterios que puedes encontrar al final de esta página.

Tabla de contenidos

En la actualidad, existen muchos lenguajes de programación diseñados para facilitar el aprendizaje de forma divertida y accesible. El interés por aprender a programar se refleja en páginas web muy populares en educación, como code.org, codecademy.com y programamos.es.

El lema de code.org es: «Cada estudiante de cada escuela debería tener la oportunidad de aprender informática». De manera similar, Steve Jobs, el famoso fundador de Apple, dijo: «Todos deberían aprender a programar un ordenador, porque eso te enseña a pensar».

En este primer tema, continuaremos el camino que iniciamos en cursos anteriores, repasando los lenguajes de programación visuales y descubriendo los textuales. Crearemos programas sencillos para que entiendas cómo están hechas las aplicaciones que utilizas cada día.

1.1. Conexión de los lenguajes de programación visuales con los textuales

Los lenguajes de programación visuales utilizan bloques gráficos que representan diferentes acciones o instrucciones. Estos bloques se conectan en secuencia para crear programas, usando elementos con colores y formas en lugar de texto. Esto los hace ideales para aprender a programar de manera intuitiva.

Por ejemplo, imagina que quieres que un personaje en un juego se mueva hacia adelante y salte para esquivar un obstáculo. Con un lenguaje de programación visual, simplemente unirías los bloques de «avanzar» y «saltar» para lograrlo.

Por otro lado, los lenguajes de programación textuales implican escribir código usando palabras y símbolos. Es como aprender un nuevo idioma que el ordenador entiende. Aunque puede parecer más complicado al principio, te permite crear programas más avanzados y entender en profundidad cómo funcionan las aplicaciones.

📌 Para que puedas empezar a ver cómo se traduce un lenguaje de programación por bloques en uno basado en texto, ve a la página de MakeCode y regístrate para crear una cuenta de usuario.

Este es un pequeño programa gráfico que simula un carril cortado de una carretera, mostrando un aspa que parpadea cada segundo:

Como hemos visto, un lenguaje de programación textual es un conjunto de símbolos e instrucciones que utilizamos para elaborar un programa. Aprender a programar con estos lenguajes te abrirá las puertas para crear tus propias aplicaciones y comprender mejor la tecnología que usas todos los días.

Cada uno de estos dos tipos de lenguajes tienen sus ventajas e inconvenientes:

PROGRAMACIÓN VISUALPROGRAMACIÓN TEXTUAL
Se usan formas geométricas coloreadas que podemos arrastrar por la pantalla y encajarlas entre ellas.Es como aprender un idioma: necesitamos conocer el vocabulario (instrucciones, palabras clave,…) y la sintaxis (operadores, estructuras, tipos de datos,…) para construir las frases correctamente
Es sencilla e intuitiva. Evita los errores de escritura. Se aprende rápido.Permite abordar proyectos complejos. Es el que se usa profesionalmente
Es difícil de implementar en proyectos grandes. Solo se pueden programar dispositivos muy concretos.Requiere un aprendizaje más lento y profundo. Requiere un alto grado de abstracción.
Ejemplos: Scratch, MakeCode, Blockly, App Inventor, ArduinoBlocks,…Ejemplos: Python, C++, Java, Kotlin, JavaScript,…

1.2. Generación de programas

Cuando creamos un programa con un lenguaje de bloques, simplemente arrastramos y unimos los bloques para que hagan lo que queremos. Luego, al pulsar «ejecutar», el ordenador sigue nuestras instrucciones. Pero detrás de ese simple clic, suceden varias cosas importantes.

Primero, los bloques que hemos colocado se convierten en código fuente, que es una versión en texto de nuestras instrucciones. Este código fuente representa las órdenes que hemos dado al ordenador para que realice las acciones que hemos diseñado.

Sin embargo, el ordenador no entiende directamente este código fuente. Necesita que se traduzca a un lenguaje que él pueda entender. Para eso, utilizamos un programa llamado compilador, que actúa como un traductor entre nuestro código y el lenguaje del ordenador.

El compilador convierte nuestro código fuente en código máquina, que es un conjunto de instrucciones en código binario, es decir, una serie de 1 y 0. Este código binario es el lenguaje que el ordenador entiende y puede ejecutar directamente. El resultado de esta traducción se guarda en un archivo llamado código objeto.

Así, cuando ejecutamos nuestro programa, el ordenador lee el código objeto y realiza las acciones que hemos diseñado. Aunque no lo veamos, este proceso de traducción es imprescindible para que nuestras ideas se conviertan en programas que funcionan en el ordenador.

Además, para que podamos escribir nuestro código fuente necesitaremos un programa especial que nos ayudará en esta tarea. Sigue las siguientes instrucciones para instalarlo:

1.2.1. Estructura de un programa

Aunque el vocabulario y la forma de escribir un programa pueden variar según el lenguaje de programación que usemos, la mayoría de los programas se pueden dividir en tres partes principales: Entrada, Procesamiento y Salida. Estas secciones representan cómo el programa recibe datos, los trabaja y luego entrega un resultado.

  • Entrada de datos: es el momento en que el programa recibe información necesaria para funcionar. Esta información puede venir de diferentes fuentes, como el teclado, un archivo o sensores. Por ejemplo, el programa puede pedir al usuario que introduzca su nombre, que elija un número entre varios o directamente leer de un sensor la temperatura.
  • Procesamiento: aquí, el programa toma los datos de entrada y realiza operaciones o cálculos para obtener un resultado. Siguiendo el ejemplo anterior, si el usuario introdujo su nombre, el programa podría crear un saludo personalizado como «¡Hola, María!», calcular si el número es par, o comprobar si hace calor.
  • Salida de datos: finalmente, el programa muestra o entrega el resultado del procesamiento. Esto puede ser un mensaje en pantalla, un sonido, una imagen o cualquier otra forma de comunicación. En nuestro ejemplo, el programa mostraría el saludo personalizado al usuario en la pantalla, mostraría que el número es par en un panel de LEDs, o encendería un ventilador.

Pensar en términos de entrada, procesamiento y salida nos permite planificar mejor nuestros programas, así que te recomiendo que de ahora en adelante cambies tu forma pensar para hacerlo como lo hacen los programas.

1.2.2. Tipos de datos

Cuando nuestro programa recibe datos, necesitamos guardarlos en algún lugar para poder usarlos más adelante. Ese lugar se llama variable. Las variables son como cajas donde almacenamos información importante para que el programa pueda funcionar correctamente.

Sin embargo, no todos los datos son iguales. No es lo mismo guardar un número entero, como la cantidad de camisetas que tienes, que guardar tu nombre o si algo es verdadero o falso. Por eso, las variables pueden ser de diferentes tipos de datos, ya que no podemos trabajar igual con números que con texto o con respuestas de sí o no.

El tipo de dato nos indica qué clase de información estamos almacenando y qué podemos hacer con ella. Además, cada dato tiene tres partes importantes:

  • Identificador: es el nombre que le damos a la variable para reconocerla en nuestro programa. Por ejemplo, si queremos guardar tu número de zapatos, podríamos llamar a la variable «tallaZapato».
  • Tipo: define la naturaleza del dato que se guarda en la variable. Los tipos básicos son:
    • Numérico: para números, como 7, 15 o 3.14.
    • Texto (también llamado string): para letras, palabras o frases, como “k”, “María” o “Bienvenidos a mi web”.
    • Booleano: un tipo especial que solo puede ser verdadero o falso (true o false).
    • Lista (también llamada array): una colección de datos, como una lista de tus libros favoritos.
  • Valor: es el contenido actual de la variable. Es decir, el dato que estamos guardando en ella. Por ejemplo, si la variable se llama “edad” y su valor es 12, significa que tienes 12 años.

Supongamos que estás creando un programa que guarda información sobre tu mascota. Podríamos tener las siguientes variables:

  • Identificador: nombreMascota, de tipo texto y valor: “Luna”.
  • Identificador: edadMascota, de tipo: numérico y valor: 3.
  • Identificador: tieneVacunas, de tipo: booleano y valor true.
  • Identificador: juguetesFavoritos, de tipo: lista y valor: [“Pelota”, “Cuerda”, “Peluche”]

Con estas variables, tu programa puede realizar diferentes acciones, como calcular la edad en años de perro, mostrar el nombre de tu mascota en la pantalla o verificar si necesita vacunas.

Las variables y los tipos de datos son fundamentales en la programación porque nos permiten gestionar la información de manera eficiente. 

1.2.3. Operadores

Una vez que tenemos identificados los datos que nuestro programa necesita, nos interesará realizar operaciones con ellos. Para realizar estas operaciones necesitamos operadores, de la misma manera que las calculadoras necesitan los símbolos +, -, x o ÷, para operar con los datos.

Todos los lenguajes de programación disponen de una amplia colección de operadores, pero en todos los casos compartes tres grandes grupos: los aritméticos, los relacionales y los lógicos.

Operadores aritméticos

Son los que conoces de las matemáticas de toda la vida:

  • +, para sumar.
  • , para restar.
  • *, para multiplicar.
  • /, para dividir.
  • %, es un operador especial -llamado módulo- cuyo resultado es el resto de la división entera.

Por ejemplo: 4*7 será 28, 30/5 será 6 y 5%2 será 1.

Operadores relacionales

Estos operadores los usamos para comparar datos y su resultado siempre será un valor booleano True o False:

  • >, mayor que.
  • >=, mayor o igual que.
  • <, menor que.
  • <=, menor o igual que.
  • ==, igual.
  • !=, distinto.

Por ejemplo: 5 >= 8 será false, 9 == 9 será true y 10 != 5 será true.

La mejor manera de entender estas operaciones es formularlas en forma de pregunta. Si te encuentras 3 > 6 dices ¿es 3 mayor que 6? no, pues el resultado es false.

Operadores lógicos

Estos operadores nos permiten construir preguntas más complejas que las anteriores, combinando expresiones booleanas.

Por ejemplo, si queremos comprobar si una persona está jubilada, podríamos preguntar si  edad >= 18 y edad < 65. A esa y que aparece, le llamamos el operador AND.

El operador AND resulta ser True sólo cuando las expresiones que tiene a izquierda y derecha son también True. En caso contrario, devuelve False.

Por ejemplo

  • 2 > 3 AND 6 > 11: False y False = False.
  • 2 > 3 AND 6 < 11: False y True = False.
  • 2 < 3 AND 6 > 11: True y False = False.
  • 2 < 3 AND 6 < 11: True y True = True.

Si en vez de y usamos la o, estamos ante el operador OR. En este caso, el operador devuelve True si la parte izquierda o la derecha son True. En caso contrario devuelve False.

Por ejemplo

  • 2 > 3 OR 6 > 11: False o False = False.
  • 2 > 3 OR 6 < 11: False o True = True.
  • 2 < 3 OR 6 > 11: True o False = True.
  • 2 < 3 OR 6 < 11: True o True = True.

Por último, tenemos al operador NOT, que lo único que hace es devolver el estado contrario al que se le aplica:

Por ejemplo

  • NOT True: False.
  • NOT False: True.

1.3. Implementación de algoritmos

Sabiendo todo lo anterior, podemos empezar a crear algoritmos con lenguajes de texto. Escribir un algoritmo en un lenguaje de programación textual se llama implementar el algoritmo.

Para ello, y teniendo en mente cómo es la solución a nuestro problema, comenzamos a escribir instrucciones de manera secuencial, es decir, una instrucción detrás de otra. Estamos construyendo así una secuencia de instrucciones, tal y como hacemos cuando escribimos los pasos a seguir por una receta de cocina.

Por ejemplo:

Inicio
Pedirle al usuario su edad
Guardad la edad en la variable EDAD
Comprobar si EDAD es menor que 65
Si la comparación anterior es verdad
	Escribir en pantalla “El usuario no está jubilado”
En otro caso
	Escribir en pantalla “El usuario está jubilado”
Fin

Esta secuencia de instrucciones escrita en lenguaje natural, podríamos escribirla así en uno de los lenguajes más populares, como Python:

edad = int(input("Introduce tu edad: "))
if edad < 65:
    print("El usuario no está jubilado")
else:
    print("El usuario está jubilado")

Además, en muchas ocasiones, los programas que estamos desarrollando son tremendamente largos. Hacer un seguimiento del programa es complicado, por eso se suele aplicar una de las bases del pensamiento computacional y abordar la solución por partes. Si tenemos un problema grande, podemos descomponer la solución en partes más pequeñas e ir construyendo la solución final combinando las soluciones a cada una de sus partes. Estas partes se llaman subalgoritmos o funciones.

Por ejemplo: si tenemos que programar el movimiento de un personaje, no podemos escribir un algoritmo llamado moverPersonaje que mezcle los movimientos de cada uno de sus miembros, porque si luego queremos que el personaje mueva sólo un brazo, gire la cabeza o se agache, tendríamos que reescribir la parte del código de moverPersonaje que realiza sólo ese movimiento. En su lugar, construimos el movimiento del personaje programando por separado cada movimiento: levantarBrazo, flexionarRodilla, agacharse, tumbarse, agarrar, etc. El movimiento del personaje, que es el problema que queríamos resolver, ahora lo hemos resuelto combinando una lista de pequeños movimientos cada uno de los cuales está programado en un subalgoritmo o función. 

También usamos las funciones para evitar reescribir el mismo código una y otra vez. Piensa en cómo funciona cualquier red social: cuando entras tienes una parte que es pública (tus publicaciones, tus likes, tus comentarios, etc…), y otra parte que es privada (tu email, tu contraseña, tus mensajes privados, etc… ). Cuando programas esa aplicación tu programa tiene que estar constantemente comprobando si has iniciado sesión para saber si tienes acceso a la parte privada o no. Si la programación de esa comprobación son, pongamos 10 líneas de código, esas 10 líneas se estarían repitiendo montones de veces a lo largo de todo el código del programa. ¿Qué ocurriría si en algún momento el programador detectara un error en esas 10 líneas? Pues, tendría que leer las miles de líneas de código que forman parte de todo el programa y buscar en todos los sitios donde se usan esas 10 líneas para corregir el error. 

En cambio, si esas 10 líneas estuvieran escritas en una función llamada comprobarInicioSesión, el código estaría en un único lugar y si se detectara un fallo, iríamos directamente a corregirlo a un único lugar, ahorrando tiempo y recursos muy valiosos.

En este sentido, piensa en el personaje de Scratch, queremos que se mueva a izquierda y derecha y tras cada movimiento que diga algo. Podríamos resolverlo así:

Sin embargo, tenemos código repetido (como el trozo en el que habla) y también tenemos mezcladas las instrucciones en las que el gato se mueve a izquierda y derecha. ¿Y si ahora queremos que el gato se mueva siguiendo el patrón: izquierda-izquierda-derecha? Tendríamos que reescribir todo el programa para que el orden de las instrucciones fuera el correcto. En cambio, si hacemos lo siguiente, podemos rehacer el programa principal para programar cualquier secuencia de movimientos a izquierda y derecha en 5 segundos:

De la misma manera, si quisiéramos cambiar el número de pasos que se mueve, la dirección o los mensajes que dice, también nos ahorraríamos una cantidad importante de tiempo. Y esto sólo para un sencillísimo programa de unas pocas líneas. Imagínate el trabajo que nos ahorramos si nuestro programa tiene miles de líneas de código o varios cientos de bloques.

Todo esto ahora te parecerá algo abstracto y es posible que no termines de entender al 100% las implicaciones que tiene, pero cuando ya lleves algún tiempo escribiendo programas te irás dando cuenta de la importancia que tiene. De momento, sólo debes recordar que la mejor manera de resolver un problema es descomponerlo en sus partes más pequeñas, resolver cada una de esas partes y luego construir la solución final combinando las soluciones a esas partes.

Bueno, tenemos claros los conceptos más básicos. De aquí en adelante vamos a empezar aplicarlos y también a aprender otros más avanzados directamente escribiendo código textual.

1.4. Introducción a Python

Python es uno de los lenguajes de programación más populares y utilizados en la actualidad. A diferencia de los lenguajes de programación visuales que usan bloques y gráficos, Python es un lenguaje textual, lo que significa que se programa escribiendo palabras y símbolos, como si estuvieras escribiendo en inglés pero con reglas especiales.

Originalmente, Python fue creado para desarrollar programas de escritorio, especialmente aquellos que necesitaban procesar y analizar grandes cantidades de datos. Por esta razón, se hizo muy conocido en áreas como la ciencia y la ingeniería, donde los investigadores lo usaban para realizar cálculos complejos y manejar información.

Gracias a su facilidad de uso y su potencia, Python ha evolucionado y ahora se utiliza en una gran variedad de aplicaciones. No solo sirve para programas científicos, sino que también puedes: crear sitios web y aplicaciones online, desarrollar videojuegos, controlar dispositivos electrónicos (como la placa Micro:bit que usamos en clase) o trabajar con inteligencia artificial.

A lo largo de este curso, descubriremos Python y aprenderemos a crear nuestros propios programas en texto.

1.4.1. Palabras reservadas

Las palabras reservadas o palabras clave de un lenguaje de programación son las que forman parte del lenguaje y tienen un significado dentro de él.

Por ejemplo, son palabras reservadas en Python: False, None, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield.

Por tanto, sólo puedes usar estas palabras para que funcionen con el objetivo para el que fueron diseñadas. Esto quiere decir que por ejemplo no puedes crear una variable cuyo identificador sea global, porque global ya tiene un significado predefinido en el lenguaje.

1.4.2. Comentarios

Cuando escribimos programas, a veces es útil añadir notas o explicaciones para entender mejor el código, especialmente si lo revisamos más adelante o si otras personas van a leerlo. Estas notas se llaman comentarios. Los comentarios son líneas de texto que el ordenador no ejecuta, es decir, no afectan al funcionamiento del programa. Son como pequeños recordatorios o explicaciones dentro del código.

En Python los comentarios se añaden usando el símbolo # al inicio de cada línea que forma parte del comentario:

# Esto es un comentario de una sola línea

1.4.3. Variables

En programación, las variables son como cajas donde guardamos información que nuestro programa necesita mientras está funcionando. Piensa en una caja donde guardas tu dinero para usarlo cuando quieras, la variable se llamaría ahorros y su valor sería la cantidad de dinero que tiene dentro. Las variables nos permiten almacenar datos y utilizarlos en diferentes partes del código.

Para crear una variable en Python, simplemente le das un nombre y le asignas un valor inicial. Por ejemplo, si quieres guardar cuántas tareas tienes que hacer, puedes crear una variable llamada tareasPendientes así:

tareasPendientes = 2

Ahora la variable tareasPendientes almacena el número 2, y puedes usar ese valor en otras partes de tu programa.

Las variables pueden contener diferentes tipos de datos, como números, texto o valores de verdadero o falso. Es importante seguir ciertas reglas al asignar valores para que Python entienda correctamente el código.

Si necesitas guardar un número, simplemente lo escribes. Para los números decimales, en Python se utiliza el punto para separar la parte entera de la decimal. Por ejemplo:

edad = 12
altura = 1.55  # Altura en metros

Para guardar texto, como palabras o frases, escribimos el contenido entre comillas simples o dobles:

nombre = "María"
saludo = '¡Buenos días!'

En el caso de las variables booleanas solo pueden ser True (verdadero) o False (falso). Se usan para representar respuestas de sí o no, o estados como encendido y apagado.

tiene_mascota = True

Las listas son un tipo especial de variable que nos permite guardar varios valores en una sola variable. Es como tener un álbum donde coleccionas estampas o una estantería con varios libros. Se declaran usando corchetes [ ], y si queremos, podemos poner valores iniciales separados por comas.

Por ejemplo, si quieres guardar tus asignaturas favoritas:

# Lista vacía
asignaturas = []

# Lista con valores iniciales
asignaturas = ["Matemáticas", "Ciencias", "Historia"]

Para acceder a un elemento específico de la lista, usamos su posición dentro de la lista, escribiendo el nombre de la lista seguido del índice entre corchetes. Recuerda que en Python, la primera posición es 0.

Por ejemplo, para obtener la primera asignatura de la lista:

primera_asignatura = asignaturas[0]  # Esto sería "Matemáticas"

Si quieres agregar una nueva asignatura a la lista, puedes usar el método append(), colocando entre paréntesis el nuevo valor:

asignaturas.append("Educación Física")

De esta manera, podríamos ir construyendo nuestros programas, como por ejemplo uno que te ayude a descubrir películas que podrían gustarte. Una parte del programa podrían ser tus gustos:

# Guardamos tu nombre
nombre = "Carlos"

# Guardamos tu edad
edad = 14

# Indica si te gusta el deporte
le_gusta_deporte = True

# Lista de tus películas favoritas
peliculas_favoritas = [“La liga de la justicia", "Tadeo Jones", “La momia"]

# Accedemos a tu película favorita
pelicula_top = peliculas_favoritas[0]  # "La liga de la justicia"

# Añadimos una nueva película a la lista
peliculas_favoritas.append("Jordan - The last dance")

1.4.4. Mostrar datos en pantalla y pedir datos al usuario

Cuando programamos, la interacción con el usuario es muy importante porque nos permite mostrarle datos al usuario (output), y también leer datos que el usuario introduce por el teclado (input). Python facilita enormemente este proceso, haciendo de las tareas de entrada/salida un trabajo realmente simple.

Python utiliza la función print() para mostrar datos en la pantalla. Esta función es muy flexible y permite mostrar texto, variables y resultados de expresiones de manera fácil.

print(valor1, valor2, ..., sep=' ', end='\n')

Donde:

  • valor1, valor2, …: los valores que se desean mostrar. Pueden ser cadenas de texto, números, variables, etc.
  • sep: especifica el separador entre los valores (por defecto es un espacio).
  • end: especifica lo que se muestra al final de la salida (por defecto es un salto de línea).

Veamos un ejemplo práctico de su uso:

# Mostrar una cadena de texto
print("Hola, mundo")

# Mostrar múltiples valores
nombre = "Juan"
edad = 25
print("Nombre:", nombre, "Edad:", edad)

# Cambiar el separador y el final de línea
print("Python", "es", "genial", sep='-', end='!\n')

A veces, podemos necesitar usar la sintaxis F-strings, que nos facilita la escritura de salidas en pantalla:

nombre = "Ana"
edad = 30
print(f"Nombre: {nombre}, Edad: {edad}")

La función input(), por su parte, se utiliza para leer datos introducidos por el usuario desde el teclado. Esta función siempre devuelve una cadena de texto, por lo que es necesario convertir los datos al tipo adecuado si se espera un valor numérico.

# Leer una cadena de texto
nombre = input("Introduce tu nombre: ")
print("Hola", nombre)

# Leer un número entero
edad = int(input("Introduce tu edad: "))
print("Tienes ", edad, " años")

# Leer un número de punto flotante
altura = float(input("Introduce tu altura en metros: "))
print("Mides", altura, " metros")

 

1.4.5. Estructuras condicionales

En programación, un condicional es una instrucción que permite que el programa tome decisiones y realice acciones diferentes según ciertas condiciones. Es como hacer una pregunta de «sí» o «no» y actuar dependiendo de la respuesta.

En Python, los condicionales se escriben utilizando la palabra clave if. Después de if, escribimos la condición que queremos evaluar y terminamos la línea con dos puntos :. Las acciones que queremos que se ejecuten si la condición es verdadera las escribimos en la siguiente línea, dejando un espacio al inicio (sangría) para indicar que pertenecen al bloque del if.

Por ejemplo, queremos decidir si llevamos un paraguas al salir de casa dependiendo de si está lloviendo:

esta_lloviendo = True

if esta_lloviendo:
    llevarParaguas()

En este caso, si la variable esta_lloviendo es True (verdadero), el programa ejecutará las instrucciones que hayas definido dentro de llevarParaguas(), pero si ponemos esta_lloviendo a False, llevarParaguas() nunca se ejecutaría.

Fijate en este ejemplo de MakeCode donde construimos un condicional con bloques y su equivalente en texto:

Podemos combinar varias condiciones usando las palabras and (y) y or (o).

  • and: todas las condiciones deben ser verdaderas para que se ejecute el bloque de código.
  • or: basta con que una de las condiciones sea verdadera para que se ejecute el bloque.

Ejemplo con and, queremos decidir si podemos salir a jugar. Solo saldremos si hace buen tiempo y si hemos terminado los deberes.

hace_buen_tiempo = True
deberes_terminados = False

if hace_buen_tiempo and deberes_terminados:
    salirJugar()

En este caso, como deberes_terminados es False, el programa no ejecutará salirJugar().

Si queremos comprobar varias condiciones una tras otra, podemos usar elif (abreviatura de «else if»). Si ninguna de las condiciones anteriores se cumple, podemos usar else para definir qué hacer en ese caso.

Por ejemplo, decidamos qué actividad hacer según el clima.

clima = "nublado"

if clima == "soleado":
    irPlaya()
elif clima == "lluvioso":
    jugarCasa()
elif clima == "nublado":
    irCine()
else:
    leerCasa()

Cuando ejecutemos el programa anterior:

  • Si clima es “soleado”, el programa ejecutará irPlaya().
  • Si clima es “lluvioso”, se ejecutará jugarCasa().
  • Si clima es “nublado”, el programa ejecutará irCine().
  • Si ninguna de las condiciones anteriores se cumple, por ejemplo, si clima es “ventoso”, se ejecutará leerCasa().

Observa esta traducción de un programa por bloques como MakeCode a un lenguaje textual como Python:

En Python, es muy importante respetar la sangría al escribir condicionales. Las líneas de código que van dentro de un if, elif o else deben empezar con un espacio o tabulación. Esto le indica a Python qué instrucciones pertenecen a cada bloque.

Por ejemplo:

edad = 15

if edad >= 18:
    print("Eres adulto.")
else:
    print("Eres menor de edad.")
    print("Aún no puedes votar.")

En este ejemplo:

  • Las dos líneas después de else están indentadas (con sangría), por lo que ambas pertenecen al bloque else.
  • Si no respetamos la sangría, Python no entenderá qué líneas pertenecen a cada bloque y mostrará un error.

1.4.6. Bucles

Los bucles son herramientas que nos permiten repetir una o varias instrucciones varias veces sin tener que escribir el mismo código una y otra vez. Si quisiéras dar diez palmadas; en lugar de decir «dar una palmada» diez veces, utilizas un bucle que repite esa acción por ti.

Existen dos tipos principales de bucles en Python: while y for.

El bucle while repite el código que tiene dentro mientras se cumpla una condición. Es decir, seguirá ejecutándose hasta que esa condición deje de ser verdadera.

Por ejemplo, si tienes una planta que necesitas regar mientras la tierra esté seca, puedes programarlo así:

tierra_seca = True

while tierra_seca:
    print("Regando la planta...")
    # Aquí podrías tener código que verifica si la tierra sigue seca
    tierra_seca = False  # Supongamos que después de regar, la tierra ya no está seca

En este ejemplo, el programa muestra en pantalla “Regando la planta…” mientras la variable tierra_seca sea True (verdadera). Una vez que la tierra ya no está seca, cambiamos la variable a False y el bucle se detiene.

Las condiciones en los bucles while se escriben igual que en las estructuras condicionales if.

En este ejemplo

El bucle for se utiliza para repetir una parte del código un número específico de veces o para recorrer todos los elementos de una lista.

Si queremos que una acción se repita, por ejemplo, 5 veces, usamos el bucle for con la función range():

for index in range(5):
    print("Esta es la vuelta número")
    print(index)

# Podemos especificar desde donde y hasta donde queremos iterar
for numero in range(5,7):
  print(numero) # Muestra 5 6

# También podemos indicar el tamaño de la iteración
for numero in range(5,11,2):
  print(numero) # Muestra 5 7 9

# Incluso iterar hacia atrás
for numero in range(9,2,-2):
  print(numero) # Muestra 9 7 5 3

En el primer caso, el bucle se ejecutará 5 veces. La variable index empieza en 0 y aumenta en 1 en cada repetición, hasta llegar a 4. 

La variable index es un nombre que elegimos; podrías llamarla como quieras.

En Python, la numeración comienza en 0, por lo que range(5) genera los números 0, 1, 2, 3 y 4.

Los bucles for son muy útiles para recorrer una lista pasando por cada elemento y trabajar con ellos.

Por ejemplo, si tienes una lista de tus colores favoritos:

colores_favoritos = ["rojo", "azul", "verde", "amarillo"]

Puedes mostrar cada color así:

for color in colores_favoritos:
    print(color)

En este bucle, la variable color toma el valor de cada elemento de la lista en orden y los va mostrando uno debajo de otro.

Los bucles son muy útiles porque nos permiten simplificar nuestro código y hacerlo más eficiente. En lugar de escribir varias veces las mismas instrucciones, usamos un bucle para repetirlas las veces que necesitemos. Esto es especialmente útil cuando el número de repeticiones es grande o cuando no sabemos de antemano cuántas veces se debe repetir una acción.

1.4.7. Funciones

Imagina que estás escribiendo el código de un videojuego. En el juego hay muchos personajes y todos ellos son capaces de mover un brazo, agacharse o saltar. Si tenemos 20 personajes, ¿tenemos que programar 20 veces el código que mueve un brazo? Voy un poco más allá, cada personaje se puede mover por diferentes escenarios, pantallas e interactuar con otros personajes. Cada vez que un personaje mueva un brazo, ¿tengo que repetir el mismo código de mover el brazo una y otra vez?

La respuesta, con lo que conocemos hasta ahora, es que sí. Sin embargo, si fuera realmente así la programación sería un trabajo mucho más tedioso de lo que es.

Para ahorrar tiempo y miles de líneas de código, todos los lenguajes de programación tienen estructuras llamadas funciones.

Una función es un bloque de código que realiza una tarea específica y que puedes reutilizar en cualquier momento de tu programa. Es como una receta en un libro de cocina: la escribes una vez y puedes usarla tantas veces como quieras sin tener que repetir todos los pasos.

Para crear una función en Python, usamos la palabra clave def, seguida del nombre de la función y paréntesis ( ). Después, añadimos dos puntos : y escribimos el código que queremos que ejecute la función, indentado (es decir, con un espacio o tabulación al inicio de cada línea dentro de la función).

def saludar():
    print("¡Hola! Bienvenido a mi programa.")

Aquí hemos definido una función llamada saludar que, al ser llamada, mostrará un mensaje de saludo.

Para utilizar la función que hemos creado, simplemente escribimos su nombre seguido de paréntesis:

saludar()

Además, las funciones pueden recibir datos llamados parámetros o argumentos, que permiten que la función trabaje con información diferente cada vez que se la llama.

def saludar(nombre):
    print(f"¡Hola, {nombre}! Bienvenido a mi programa.")

Al llamar a la función, le pasamos el nombre de la persona:

saludar("Ana")

Ahora puedes llamar a la función con diferentes nombres, para que salude a todos ellos:

saludar("Carlos")
saludar("María")
saludar("José Luís")
saludar("Isabel")

Las funciones también pueden realizar cálculos y devolver un resultado usando la palabra clave return:

def sumar(a, b):
    return a+b

Para utilizar el resultado de la función, podemos hacer:

resultado = sumar(5, 3)
print("La suma es:", resultado)

No olvides el orden de ejecución de cada línea de código cuando usas funciones:

Fíjate en en este programa de MakeCode para que veas cómo aplica Microsoft el uso de funciones:

El programa lo único que hace es mostrar en pantalla el icono del corazón y dejar preparados dos eventos para que se muestren otros dos iconos distintos cuando se pulse el botón A o el botón B. Fíjate cómo es el código textual que resuelve ese problema: se definen dos funciones (una para dar respuesta a la pulsación del botón A y otra para el B), pero todavía no se usan.

Después en la línea 7 comienza el programa: se muestra el icono del corazón y se dice que si el usuario pulsa el botón A, debe ejecutarse la primera función, y si se pulsa el B, debe ejecutarse la segunda función. Da igual cuántas veces el usuario pulse uno de los dos botones, porque teniendo las dos funciones definidas no tendremos que volver a escribirlas en ninguna parte más del programa, simplemente las usamos.

1.4.8. Ejercicios resueltos

Para que puedas practicar sobre los conceptos de variables, constantes, operadores, expresiones y la entrada/salida de datos usando Python, aquí tienes una batería de ejercicios resueltos con explicaciones detalladas de cada uno.

Ejercicio 1: calcular la suma de dos números

Escribe un programa que pida al usuario dos números y luego muestre la suma de ambos.

Solución
# Solicitar dos números al usuario
numero1 = float(input("Introduce el primer número: "))
numero2 = float(input("Introduce el segundo número: "))

# Calcular la suma
suma = numero1 + numero2

# Mostrar el resultado
print(f"La suma de {numero1} y {numero2} es: {suma}")

Primero pedimos al usuario que introduzca dos números. Usamos la función input() para obtener los valores, y float() para convertirlos en números decimales. Luego, sumamos ambos números y mostramos el resultado utilizando una F-string en print() para una salida más legible.

Ejercicio 2: calcular el área de un círculo

Escribe un programa que pida al usuario el radio de un círculo y calcule su área.

Solución
# Definir la constante PI
PI = 3.14159

# Solicitar el radio al usuario
radio = float(input("Introduce el radio del círculo: "))

# Calcular el área
area = PI * (radio ** 2)

# Mostrar el resultado
print(f"El área del círculo es: {area}")

Definimos la constante PI y pedimos el radio del círculo. Usamos la fórmula del área de un círculo πr2 y calculamos el resultado. Luego, lo mostramos con print().

Ejercicio 3: convertir grados Celsius a Fahrenheit

Escribe un programa que convierta una temperatura introducida en grados Celsius a grados Fahrenheit.

Solución
# Solicitar los grados Celsius al usuario
celsius = float(input("Introduce la temperatura en grados Celsius: "))

# Convertir a Fahrenheit
fahrenheit = (celsius * 9/5) + 32

# Mostrar el resultado
print(f"{celsius} grados Celsius son {fahrenheit} grados Fahrenheit.")

Solicitamos la temperatura en Celsius, luego usamos la fórmula de conversión F=C×9/5+32 para obtener los grados Fahrenheit. El resultado se muestra usando una F-string.

Ejercicio 4: calcular el doble y el triple de un número

Escribe un programa que pida un número al usuario y muestre tanto el doble como el triple de ese número.

Solución
# Solicitar un número al usuario
numero = float(input("Introduce un número: "))

# Calcular el doble y el triple
doble = numero * 2
triple = numero * 3

# Mostrar los resultados
print(f"El doble de {numero} es: {doble}")
print(f"El triple de {numero} es: {triple}")

El programa solicita un número, luego calcula el doble y el triple usando operaciones de multiplicación. Posteriormente, muestra ambos resultados.

Ejercicio 5: calcular la media de tres números

Escribe un programa que pida tres números al usuario y calcule su media.

Solución
# Solicitar tres números al usuario
numero1 = float(input("Introduce el primer número: "))
numero2 = float(input("Introduce el segundo número: "))
numero3 = float(input("Introduce el tercer número: "))

# Calcular la media
media = (numero1 + numero2 + numero3) / 3

# Mostrar el resultado
print(f"La media de los tres números es: {media}")

Solicitamos tres números, los sumamos y dividimos entre 3 para obtener la media. Luego, mostramos el resultado con print().

Ejercicio 6: multiplicar dos números

Escribe un programa que pida al usuario dos números y muestre su producto.

Solución
# Solicitar dos números al usuario
numero1 = float(input("Introduce el primer número: "))
numero2 = float(input("Introduce el segundo número: "))

# Calcular el producto
producto = numero1 * numero2

# Mostrar el resultado
print(f"El producto de {numero1} y {numero2} es: {producto}")

Solicitamos los dos números, los multiplicamos y mostramos el producto usando la función print().

Ejercicio 7: concatenar dos cadenas de texto

Escribe un programa que pida al usuario dos frases y luego muestre ambas frases concatenadas en una sola línea.

Solución
# Solicitar dos frases al usuario
frase1 = input("Introduce la primera frase: ")
frase2 = input("Introduce la segunda frase: ")

# Concatenar las frases
frases_concatenadas = frase1 + " " + frase2

# Mostrar el resultado
print(f"Las frases concatenadas son: {frases_concatenadas}")

El programa solicita dos cadenas de texto al usuario y las une usando el operador de concatenación +. Posteriormente, muestra la cadena resultante.

Ejercicio 8: calcular el área de un rectángulo

Escribe un programa que calcule el área de un rectángulo a partir de su base y altura proporcionadas por el usuario.

Solución
# Solicitar base y altura al usuario
base = float(input("Introduce la base del rectángulo: "))
altura = float(input("Introduce la altura del rectángulo: "))

# Calcular el área
area = base * altura

# Mostrar el resultado
print(f"El área del rectángulo es: {area}")

Pedimos al usuario la base y la altura, y usamos la fórmula del área del rectángulo base×altura. Mostramos el resultado con print().

Ejercicio 9: calcular el perímetro de un rectángulo

Escribe un programa que pida al usuario la base y la altura de un rectángulo y luego calcule su perímetro.

Solución
# Solicitar base y altura al usuario
base = float(input("Introduce la base del rectángulo: "))
altura = float(input("Introduce la altura del rectángulo: "))

# Calcular el perímetro
perimetro = 2 * (base + altura)

# Mostrar el resultado
print(f"El perímetro del rectángulo es: {perimetro}")

El programa solicita la base y la altura del rectángulo, luego calcula el perímetro usando la fórmula 2×(base+altura). El resultado se muestra al usuario.

Ejercicio 10: determinar si un número es positivo, negativo o cero

Escribe un programa que pida un número al usuario y determine si es positivo, negativo o cero.

Solución
# Solicitar un número al usuario
numero = float(input("Introduce un número: "))

# Condición para evaluar si es positivo, negativo o cero
if numero > 0:
    print("El número es positivo.")
elif numero < 0:
    print("El número es negativo.")
else:
    print("El número es cero.")

Usamos una estructura condicional if, elif y else para verificar si el número es mayor, menor o igual a cero y mostramos el mensaje correspondiente.

Ejercicio 11: comprobar si un número es par o impar

Escribe un programa que pida un número al usuario y determine si es par o impar.

Solución
# Solicitar un número al usuario
numero = int(input("Introduce un número entero: "))

# Verificar si el número es par o impar
if numero % 2 == 0:
    print("El número es par.")
else:
    print("El número es impar.")

Usamos el operador módulo % para dividir el número entre 2. Si el resto es 0, el número es par; si no, es impar.

Ejercicio 12: contar cuántos números son mayores que 10

Escribe un programa que pida cinco números y cuente cuántos de ellos son mayores que 10.

Solución
# Inicializar el contador
contador = 0

# Usar un bucle for para pedir 5 números
for i in range(5):
    numero = float(input(f"Introduce el número {i + 1}: "))
    if numero > 10:
        contador = contaador + 1

# Mostrar cuántos números fueron mayores que 10
print(f"Has introducido {contador} números mayores que 10.")

Usamos un bucle for para pedir cinco números al usuario y un condicional if para aumentar el contador si el número es mayor que 10.

Ejercicio 13: calcular la suma de los números pares del 1 al 100

Escribe un programa que calcule la suma de todos los números pares entre 1 y 100.

Solución
# Inicializar la suma
suma = 0

# Usar un bucle for para recorrer los números del 1 al 100
for numero in range(1, 101):
    if numero % 2 == 0:
        suma = suma + numero

# Mostrar el resultado
print(f"La suma de los números pares del 1 al 100 es: {suma}")

Usamos un bucle for para recorrer los números del 1 al 100 y un condicional if para sumar solo los números pares.

Ejercicio 14: encontrar el mayor de tres números

Escribe un programa que pida tres números y determine cuál es el mayor.

Solución
# Solicitar tres números al usuario
numero1 = float(input("Introduce el primer número: "))
numero2 = float(input("Introduce el segundo número: "))
numero3 = float(input("Introduce el tercer número: "))

# Determinar cuál es el mayor
if numero1 >= numero2 and numero1 >= numero3:
    mayor = numero1
elif numero2 >= numero1 and numero2 >= numero3:
    mayor = numero2
else:
    mayor = numero3

# Mostrar el mayor número
print(f"El número mayor es: {mayor}")

Usamos condiciones compuestas con operadores and para comparar los tres números y determinar cuál es el mayor.

Ejercicio 15: contar los múltiplos de 3 entre dos números

Escribe un programa que pida dos números y cuente cuántos múltiplos de 3 hay entre ellos.

Solución
# Solicitar los dos números
numero1 = int(input("Introduce el primer número: "))
numero2 = int(input("Introduce el segundo número: "))

# Asegurar que el primer número es menor que el segundo
if numero1 > numero2:
    numero1, numero2 = numero2, numero1

# Contar los múltiplos de 3
contador = 0
for numero in range(numero1, numero2 + 1):
    if numero % 3 == 0:
        contador = contador + 1

# Mostrar el resultado
print(f"Hay {contador} múltiplos de 3 entre {numero1} y {numero2}.")

Primero aseguramos que el primer número es menor que el segundo intercambiando sus valores si es necesario. Luego, usamos un bucle for para contar los múltiplos de 3.

Ejercicio 16: suma de dígitos de un número

Escribe un programa que pida un número entero y calcule la suma de sus dígitos.

Solución
# Solicitar un número entero al usuario
numero = input("Introduce un número entero: ")

# Inicializar la suma
suma = 0

# Recorrer los dígitos y sumarlos
for digito in numero:
    suma = suma + int(digito)

# Mostrar la suma de los dígitos
print(f"La suma de los dígitos es: {suma}")

Convertimos el número en una cadena para poder recorrer sus dígitos con un bucle for. Cada dígito se convierte de nuevo en entero para sumarlo.

Ejercicio 17: imprimir los números del 1 al 10 en orden inverso

Escribe un programa que imprima los números del 1 al 10 en orden inverso.

Solución
# Usar un bucle for para imprimir los números en orden inverso
for numero in range(10, 0, -1):
    print(numero)

Usamos un bucle for con un tercer parámetro negativo en la función range() para contar hacia atrás desde 10 hasta 1.

Ejercicio 18: menú para elegir una operación matemática

Escribe un programa que muestre un menú con tres opciones: sumar dos números, restar dos números o multiplicar dos números. El programa debe repetirse hasta que el usuario elija salir.

Solución
# Inicializar la opción seleccionada
opcion = 0

# Repetir el menú hasta que el usuario elija salir
while opcion != 4:
    # Mostrar el menú
    print("Menú de operaciones:")
    print("1. Sumar dos números")
    print("2. Restar dos números")
    print("3. Multiplicar dos números")
    print("4. Salir")
    
    opcion = int(input("Elige una opción (1-4): "))
    
    if opcion == 1:
        numero1 = float(input("Introduce el primer número: "))
        numero2 = float(input("Introduce el segundo número: "))
        print(f"La suma es: {numero1 + numero2}")
    
    elif opcion == 2:
        numero1 = float(input("Introduce el primer número: "))
        numero2 = float(input("Introduce el segundo número: "))
        print(f"La resta es: {numero1 - numero2}")
    
    elif opcion == 3:
        numero1 = float(input("Introduce el primer número: "))
        numero2 = float(input("Introduce el segundo número: "))
        print(f"La multiplicación es: {numero1 * numero2}")
    
    elif opcion == 4:
        print("Saliendo del programa...")
    
    else:
        print("Opción no válida. Intenta de nuevo.")

El programa utiliza un bucle while que repite un menú de opciones hasta que el usuario elija salir. Dependiendo de la opción seleccionada, se realizan distintas operaciones matemáticas básicas.

Ejercicio 19: buscar un número múltiplo de 7 y menor que 100

Escribe un programa que busque el primer número múltiplo de 7 que también sea mayor que 50 y menor que 100. El programa debe saltar los números que no son múltiplos de 7 y detenerse al encontrar el primero.

Solución
# Usar un bucle for para recorrer los números del 51 al 100
for numero in range(51, 101):
    if numero % 7 != 0:
        continue  # Saltar si el número no es múltiplo de 7
    print(f"El primer múltiplo de 7 mayor que 50 es: {numero}")
    break  # Detener el bucle al encontrar el primer múltiplo de 7

El bucle for recorre los números desde 51 hasta 100. Si el número no es múltiplo de 7, continue salta a la siguiente iteración. Cuando encuentra un múltiplo de 7, lo imprime y luego usa break para detener el bucle, ya que no necesitamos buscar más números.

Ejercicio 20: calcular el salario total de un trabajador con horas extras

Escribe una función llamada calcular_salario que reciba el número de horas trabajadas y la tarifa por hora. Si las horas son mayores a 40, las horas adicionales se pagarán al 150% de la tarifa normal. La función debe devolver el salario total. Luego, llama a la función y muestra el resultado.

Solución
# Definir la función para calcular el salario total
def calcular_salario(horas, tarifa):
    if horas > 40:
        horas_extras = horas - 40
        salario = 40 * tarifa + horas_extras * tarifa * 1.5
    else:
        salario = horas * tarifa
    return salario

# Pedir los datos al usuario
horas = float(input("Introduce el número de horas trabajadas: "))
tarifa = float(input("Introduce la tarifa por hora: "))

# Llamar a la función y mostrar el resultado
salario_total = calcular_salario(horas, tarifa)
print(f"El salario total es: {salario_total}")

La función calcula el salario total considerando horas extra. Si el trabajador trabaja más de 40 horas, las horas adicionales se pagan a una tarifa del 150%. La función retorna el salario total y el programa lo muestra.

Ejercicio 21: función que devuelva el número mayor de tres valores

Escribe una función llamada numero_mayor que reciba tres números como parámetros y devuelva el mayor de ellos. Luego, muestra el resultado en el programa principal.

Solución
# Definir la función para encontrar el número mayor
def numero_mayor(a, b, c):
    if a >= b and a >= c:
        return a
    elif b >= a and b >= c:
        return b
    else:
        return c

# Pedir tres números al usuario
a = int(input("Introduce el primer número: "))
b = int(input("Introduce el segundo número: "))
c = int(input("Introduce el tercer número: "))

# Llamar a la función y mostrar el resultado
mayor = numero_mayor(a, b, c)
print(f"El número mayor es: {mayor}")

La función compara tres números utilizando condicionales if para encontrar el mayor. Luego, retorna ese número. En el programa principal, pedimos tres números al usuario y llamamos a la función para encontrar el mayor.

Ejercicio 22: crear una calculadora simple con funciones

Escribe un programa que defina cuatro funciones: sumar(a, b), restar(a, b), multiplicar(a, b) y dividir(a, b). El programa debe permitir al usuario elegir una operación y realizar el cálculo.

Solución
# Definir las funciones de la calculadora
def sumar(a, b):
    return a + b

def restar(a, b):
    return a - b

def multiplicar(a, b):
    return a * b

def dividir(a, b):
    if b != 0:
        return a / b
    else:
        return "Error: División por cero"

# Pedir al usuario que elija una operación
operacion = input("Elige una operación (sumar, restar, multiplicar, dividir): ")

# Pedir los dos números
a = float(input("Introduce el primer número: "))
b = float(input("Introduce el segundo número: "))

# Realizar la operación elegida
if operacion == "sumar":
    print(f"El resultado es: {sumar(a, b)}")
elif operacion == "restar":
    print(f"El resultado es: {restar(a, b)}")
elif operacion == "multiplicar":
    print(f"El resultado es: {multiplicar(a, b)}")
elif operacion == "dividir":
    print(f"El resultado es: {dividir(a, b)}")
else:
    print("Operación no válida.")

Creamos cuatro funciones para las operaciones básicas. Dependiendo de la elección del usuario, se llama a la función correspondiente para realizar la operación. La función dividir incluye una comprobación para evitar divisiones por cero.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *