Python logo - Curso de Python desde cero

Condicionales I: Instrucción if

Vemos las principales características de esta estructura de control de flujo

Bienvenidos a todos a otra entrega de este curso de programación en python, en el que después de ver los diccionarios, vamos a comenzar a ver las estructuras de control de flujo. , vamos a ver que dentro de las estructuras de control de flujo hay dos grandes grupos, los condicionales y los bucles, y a su vez cada uno de estos grupos tiene varias estructuras diferentes.

En este post vamos a ver los condicionales y vamos a comenzar por la estructura condicional más importante o más utilizada en la mayoría de los lenguajes de programación que es la instrucción o condicional if.

Pero antes de ponernos manos a la obra y explicar cuál es la sintaxis de esta instrucción, tenemos que ver qué es el flujo de ejecución de un programa. Sé que muchos esto lo tenéis totalmente dominado, por lo que podéis avanzar hasta donde se explica la sintaxis.

Aquellos que estáis aprendiendo a programar con python y no tengáis claro qué es el flujo de ejecución de un programa y qué es una estructura condicional, os recomiendo que prestes atención porque es muy importante.

Flujo de ejecución de un programa

El flujo de ejecución de un programa es el orden con el que se ejecutan sus instrucciones. Un programa está compuesto por varias instrucciones que se van escribiendo una debajo de otra, y el flujo de ejecución es el orden que sigue el programa a la hora de leer y ejecutar esas instrucciones.

El orden en este flujo de ejecución normalmente es de arriba a abajo, y digo normalmente porque ese flujo de ejecución se puede ver alterado por diversas causas. Una de ellas es precisamente estas estructuras de control de flujo. Lo que hacen estas estructuras es modificar ese orden natural de arriba hacia abajo en la ejecución de las instrucciones de un programa.

Cómo funciona un condicional if en el flujo de ejecución

Imaginemos que tenemos un programa compuesto por varias líneas y dentro de ese programa hay un bloque con unas cuantas líneas que corresponden a un condicional if.

Fijaos que en este ejemplo de pseudo código he puesto el Condicional if, y luego con una pequeña sangría dos instrucciones dentro de ese condicional. Un condicional es como un bloque de código que contiene en su interior una o muchas líneas de código.

Instrucción
Instrucción
Instrucción
Condicional if
    Instrucción
    Instrucción
Instrucción
Instrucción
Instrucción

¿Cuál sería el flujo de ejecución de este ejemplo de programa? si nosotros ejecutamos el programa éste comenzará la ejecución línea a línea, de arriba hacia abajo. Según va leyendo cada una de estas instrucciones el programa las va ejecutando.

Y cuando llega el condicional el flujo se detiene y lo que hace es evaluar si la condición se cumple o no se cumple, si la condición es cierta o no es cierta. Una estructura condicional no es ni más ni menos que una condición a evaluar dentro de nuestro programa. Cuando nuestro programa lee ese condicional tiene que ver si esa condición es verdadera o falsa, que son las dos únicas alternativas que nos puede dar una condición a evaluar, o es verdad o es mentira, o se cumple o no se cumple.

Imaginemos que cuando nuestro programa evalúa esa condición y resulta que es verdadera, por lo que el flujo de ejecución entra dentro de este bloque if y ejecuta una por una todas las instrucciones que estén en su interior. En este ejemplo hay dos instrucciones y cuando termina de ejecutar las instrucciones de este bloque, continúa el flujo de ejecución hacia abajo ejecutando las instrucciones que ya no pertenecen a ese condicional if hasta que termina el programa

Pero volvamos otra vez al punto donde nuestro flujo de ejecución se detiene en la condición e imaginemos ahora que esa condición ya no es verdadera sino que esa condición es falsa. En este caso el flujo de ejecución salta todo el bloque e ignora las líneas de código que hay en su interior de tal forma que no las ejecuta.

En definitiva, si la condición es verdadera ejecuta lo que hay en el interior del if y si la condición no es verdadera no ejecuta las líneas que hay dentro del bloque.

Esta estructura condicional if es común a muchísimos lenguajes de programación y la filosofía de funcionamiento es exactamente la misma en todos los lenguajes de programación. Lo que cambia de un lenguaje a otro es la sintaxis y ahora es lo que vamos a ver.

Sintaxis del condicional if

Vamos a utilizar conceptos que ya hemos visto en post anteriores y lo vamos a mezclar con estos nuevos conceptos del bloque condicional if de tal forma que vamos a crear una función a la cual voy a llamar valoracion, que es lo que va a hacer esta función. Por supuesto esto se puede hacer de muchas formas diferentes, y yo lo voy a hacer de la forma que entiendo que es más sencillo para explicar el condicional if.

>>> def valoracion(nota):

Esta función va a recibir por parámetro una nota y se va a encargar de decirme en función de la nota que recibe si el alumno está aprobado o no está aprobado. Si la nota es superior o igual a 5 entonces el alumno está aprobado y si la nota no es superior a 5 entonces el alumno está suspenso.

>>> def valoracion(nota):
        evaluacion = "Aprobado"

Creamos la función y dentro de ella creamos una variable llamada evaluacion y la vamos a igualar a Aprobado, es decir, por defecto todo el mundo está aprobado. Ahora es donde entra en juego el condicional if.

Lo que tengo que hacer es evaluar si la nota que hemos pasado por parámetro a esta función es inferior a 5. En el caso de que esto sea verdad debemos cambiar el valor de la variable evaluacion de Aprobado a Suspenso y que esta función nos devuelva con el return correspondiente la variable evaluacion.

Esta es la sintaxis del condicional if:

if nota < 5 :

If seguido de la condición a evaluar, en este caso la variable menor que 5 y dos puntos. Esta es la sintaxis que tiene un condicional if en python y a diferencia de otros lenguajes de programación la sintaxis en python es más sencilla: no hay paréntesis, llaves… lo único es que tenemos que especificar con dos puntos dónde termina la condición.

>>> def valoracion(nota):
        evaluacion = "Aprobado"
        if nota < 5 :

A la hora de trabajar con condicionales también es muy necesario conocer los operadores de comparación que ya vimos en un capítulo anterior de este curso de Python. Estos operadores de comparación se utilizan muchísimo a la hora de trabajar tanto con condicionales como con bucles.

En este ejemplo le estamos diciendo mira a ver si nota es menor que 5, y ahora lo que hacemos es especificar que si la condición se cumple, es decir que si efectivamente la nota es menor que 5, lo que debe hacer es cambiar la variable evaluacion de Aprobado a Suspenso. Por último, le vamos a decir a esta función que nos devuelva lo que haya almacenado en la variable evaluacion.

>>> def valoracion(nota):
        evaluacion = "Aprobado"
        if nota < 5 :
            evaluacion = "Suspenso"
        return evaluacion 

Si os dais cuenta después del condicional if hay que hacer una pequeña sangría para especificar que la siguiente o siguientes líneas de código estarían dentro del bloque if. Todas las líneas que establezcas con esta sangría después de un condicional forman parte del bloque if, mientras que la línea que no tenga esa sangría ya no formaría parte del condicional.

La línea de código que pertenece al condicional if se va a ejecutar solo si la condición es cierta, si la condición es verdadera. Si la condición no es verdadera lo que hará el programa será ignorar la línea que se encuentra dentro del condicional if y continuar la ejecución del programa.

La lógica de esta función

Aquellos que ya tenéis conocimientos de programación ya sé que es extremadamente sencillo pero los que estáis aprendiendo a programar con este curso fijaos en la lógica que tiene este programa: La primera línea [evaluacion = "Aprobado"] se va a ejecutar siempre que llamemos a la función, y la última línea [return evaluacion] también se va a ejecutar siempre.

Esto quiere decir que si el bloque if no se ejecuta lo que nos va a devolver la función va a ser siempre Aprobado mientras que si el bloque if se ejecuta, le cambia el valor a la variable evaluacion y después nos devuelve el valor de esa variable.

Lo único que nos queda es llamar a esta función de alguna manera entonces vamos a utilizar la instrucción print para decir que imprima en consola valoracion y cómo esta función está preparada para recibir un parámetro en la llamada se lo tenemos que pasar, vamos a pasarle por ejemplo un 4.

>>> print(valoracion(4))
Suspenso
>>> print(valoracion(7))
Aprobado

Si ejecutamos este programa vemos como efectivamente nos devuelve suspenso. Pues este es el funcionamiento básico de un condicional if.

Ejemplo del condicional if con input()

Vamos a complicar un poco más este ejemplo y vamos a utilizar por primera vez un código que nos va a permitir introducir información por teclado, es decir nos va a permitir introducir la nota por teclado. Cuando ejecutemos el programa se quedará a la espera de que introduzcamos desde nuestro teclado la nota que tiene un alumno.

La instrucción que nos va a permitir introducir por teclado esa nota es una función predefinida de python, que es la función input(). Cuando el flujo de ejecución llegue a ella el programa se detendrá y se quedará a la espera de que introduzcamos un valor por teclado. Hasta que no introduzcamos un valor por teclado y pulsemos la tecla enter, el flujo de ejecución no continuará hacia abajo.

Vamos a colocar esta instrucción en primer lugar, vamos a crear una variable a la cual voy a llamar por ejemplo nota_alumno y voy a decir que esto es igual a input():

nota_alumno = input()

def valoracion(nota):
    evaluacion = "Aprobado"
    if nota < 5 :
        evaluacion = "Suspenso"
    return evaluacion 

Entonces como digo el flujo de ejecución del programa cuando el programa se ejecute leerá la primera línea, y cuando el flujo de ejecución llega ahí se detiene esperando a que introduzcamos un valor por teclado.

Ya os anticipo que esta instrucción nos va a dar un pequeño error pero es que quiero que de ese error para que se entienda la naturaleza del error.

La función la vamos a dejar definida como está, pero ahora vamos a llamar a esa función. La llamada ya no puede ser igual porque no quiero pasarle la nota fija sino que quiero pasar la nota que el usuario que está ejecutando el programa introduzca por teclado.

De esta forma que tendremos que decirle print(evaluacion()) pero en vez de 4, como os podéis imaginar nota_alumno.

>>> print(valoracion(nota_alumno))
nota_alumno = input()

def valoracion(nota):
    evaluacion = "Aprobado"
    if nota < 5 :
        evaluacion = "Suspenso"
    return evaluacion 

print(valoracion(nota_alumno))

Aquí sí que es importante ver mentalmente el flujo de ejecución:

  • Se ejecuta la primera línea y el programa se queda a la espera de que introduzcamos un dato por teclado.
  • Cuando introduzcamos este dato por teclado, el dato se va almacenar en la variable nota_alumno.
  • El programa continuaría con la ejecución de la función print(valoracion(nota_alumno)) que llama a la función valoracion.

Hay que distinguir aquí que lo que hay almacenado en nota_alumno viaja y se almacena en la variable nota da igual que sea una variable que sea un valor fijo el funcionamiento del parámetro va a ser exactamente el mismo.

Como os decía antes que el programa va a fallar pero ahora explicaré por qué. Introducimos un valor, por ejemplo 7, cuando yo pulse enter, ese 7 se va a almacenar en nota_alumno, después leerá el print, el 7 viajará a nota, se ejecutará toda la función y debería devolver un valor. Sin embargo veremos que nos da un error:

print(valoracion(nota_alumno))
 Traceback (most recent call last):
   File "", line 1, in 
     print(valoracion(nota_alumno))
   File "", line 3, in valoracion
     if nota < 5 :
 TypeError: '<' not supported between instances of 'str' and 'int'

Fijaros en la descripción del error como me dice que no se soporta instancias de string e int, esto quiere decir que el valor que nosotros hemos introducido por teclado, este 7 es considerado por python como un valor de texto.

Cualquier cosa que introduzcamos a través de una instrucción input(), es considerado como texto, es decir este 7 para python no es un valor numérico con el que poder operar sino que se trata de un valor de texto. Por este motivo cuando nosotros hacemos esto se obtiene un error porque no se puede comparar un int con un string.

Lo que tenemos que hacer es decirle a nuestro programa de python que lo que introduzcamos a través del input() sea considerado como valor numérico y eso lo hacemos con otra función predefinida de python que es la función int(). Esta función transformará en entero, siempre que sea posible, cualquier cosa que introduzcamos en los parámetros de la función int().

Convirtiendo en entero con int()

De esta forma que si nosotros le decimos print, valoracion, función int de nota_alumno, le estamos diciendo que ese dato que es considerado por defecto como texto, lo transforme en un valor numérico entero.

print(valoracion(int(nota_alumno)))

Una vez que está transformado el valor numérico entero eso viaja y se almacena en nota de tal forma que ya no tendrá un texto sino que tendrá un valor numérico y el programa funcionará.

Últimos apuntes

Antes de acaba hay que señalar que la función input puede admitir parámetros. Por ejemplo es muy habitual que dentro de los parámetros de la función input, se introduzca un mensaje para informar al usuario. Por ejemplo:

nota_alumno = input("Por favor, introduzca la nota media del alumno")
Por favor, introduzca la nota media del alumno

Con esto conseguimos que antes del cursor parpadeante esperando nuestra información salga este mensaje para que al usuario se le indique qué tipo de dato está esperando.

Otro apunte importante cuando trabajamos con un condicional y cuando trabajamos con funciones es el término ámbito. Hay que tener en cuenta el ámbito de las variables y de esto hablaremos más adelante en el curso, pero es muy importante saber que una variable solamente es accesible dentro de un ámbito.

Por ejemplo hablemos de la variable evaluacion de nuestro ejemplo. La variable evaluacion se ha declarado dentro de una función. Hay que tener claro dónde comienza y dónde termina esa función. La función comienza con su declaración y termina con la instrucción return. Fuera de este ámbito esta variable no es alcanzable, es decir no se puede manipular ni leer. Solamente se puede leer y manipular dentro del ámbito de la función.

Ocurre lo mismo si nosotros por ejemplo dentro de este condicional if declaramos otra variable, esta variable sólo es accesible dentro de su ámbito, es decir dentro de este bloque y desde que se abre el if hasta que se cierra.

Esto lo comento antes de que lleguemos en el curso a hablar del ámbito un poco más detenidamente porque estoy seguro de que muchos de vosotros vais a empezar a jugar cambiando las cosas de sitio, lo cual está bien y sería lo normal. Entonces es posible que os dé un error precisamente por eso, porque no sabéis lo que es el ámbito de una variable y probablemente aparezca algún error de ese tipo si intentais utilizar una variable fuera de su ámbito, fuera de donde ha sido declarada.

Bueno, pues vamos a dejar este post en el punto en el que nos encontramos y os digo lo de siempre; os invito a que permanezcamos atentos a la próxima entrega. Hasta entonces que os vaya bien.

Ir arriba

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para «permitir cookies» y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en «Aceptar» estarás dando tu consentimiento a esto.

Cerrar