La estructura de control de flujo if
Para practicar con los condicionales, vamos a utilizar la
estructura condicional Si-Entonces
de PSeInt.
Espacio publicitario
En la mayoría de lenguajes de programación, esta
estructura se llama if
.
En Python hay dos estructuras condicionales,
if
ymatch
. La segunda equivale aswitch
en muchos lenguajes de programación. Esta última, la veremos en otro capítulo.
Empecemos preparando lo más básico, la variable que guardará la edad y la entrada para que el usuario la introduzca.
Algoritmo mayorEdad
// Variable del algoritmo
Definir edad Como Entero
// Se le solicita la edad al usuario
Escribir "¿Cuántos años tienes?"
Leer edad
FinAlgoritmo
Si no quieres escribir a mano la nueva estructura
Si-Entonces
de PSeInt, la puedes añadir a tus
algoritmos con el botón que ves en la siguiente imagen:
Esta estructura consta de tres partes:
Si expresion_logica Entonces
acciones_por_verdadero
SiNo
acciones_por_falso
Fin Si
Parte Si-Entonces
La parte Si-Entonces
(Líneas 1-2) consta de cuatro partes:
-
Parte
Si
: Nos indica que se empieza a escribir la estructura condicional. -
Parte
expresion_logica
: Esta será reemplazada por una expresión de comparación, o booleana como las que has visto en el curso. -
Parte
Entonces
: Esta última parte indica que va a empezar el bloque de códigoVERDADERO
. -
Parte
acciones_por_verdadero
: Esta última parte de la sección, será reemplazada por todo el código que quieras que se ejecute con el algoritmo, en caso de que la evaluación salga comoVERDADERO
.
Esta primera parte, espera que le pongamos una expresión
lógica, como las que utilizamos con los operadores de
comparación. Por ejemplo, 10 > 20
es una
expresión lógica que puede ofrecer un resultado lógico o
booleano de VERDADERO
o FALSO
.
Si esta expresión es verdadera, se va a ejecutar el código
que hay después del Entonces
, pero solo la
línea que ves indentada; fíjate que pone
"acciones_por_verdadero"
.
Espacio publicitario
Parte SiNo
En las
líneas 3-4 tenemos la
siguiente sección del condicional, SiNo
. Esta
consta de dos partes:
-
Parte
SiNo
: Esta parte sirve para indicar que empieza esta sección del condicional. -
Parte
acciones_por_falso
: Esta parte sirve para añadir todo el código que quieras que ejecute tu algoritmo en caso de que la expresión de comparación de la sección anterior (Si-Entonces
) evalúe comoFALSO
.
Si la expresión del Si
es falsa, se ignora el
código que haya en la parte de Si
y se
ejecuta el código que tiene este SiNo
.
Parte Fin Si
La parte final, Fin Si
, sirve para indicar al
intérprete de PSeInt que termina ahí mismo la estructura.
En Python y en casi todos los lenguajes de programación, el
Si
de PSeInt equivale aif
, y elSiNo
aelse
. ElEntonces
no existe en Python, pero si en otros lenguajes. Este suele denominarsethen
.
Sin embargo, podríamos decir que en cierto modo, estethen
se aplica en Python con el símbolo de los dos puntos (:
).
if se puede traducir al español como si, y else como si no, o en caso contrario. De ahí vienen los nombres de PSeInt adaptándolos al español.
Entonces se traduce al inglés como then.
Ejemplo práctico
Esto te quedará mucho más claro con el ejemplo práctico.
Algoritmo mayorEdad
// Variable del algoritmo
Definir edad Como Entero
// Se le solicita la edad al usuario
Escribir "¿Cuántos años tienes?"
Leer edad
// Condicional para evaluar si es mayor de edad
Si edad >= 18 Entonces
Escribir "Ok. Puedes acceder."
SiNo
Escribir "No puedes acceder, eres menor de edad."
Fin Si
FinAlgoritmo
En la expresión booleana, he puesto que si
edad
es mayor o igual que (>=
) 18, que le diga al usuario, que puede acceder (se
supone que esto serviría para dejar acceder a un usuario o
no, a un programa completo). En cambio, si la edad
introducida es menor que 18 o no es igual a 18, esta
expresión del Si
, se evalúa como
FALSO
por el intérprete. Por lo que ignora la
parte del Si
y ejecuta la parte del
SiNo
.
Lo que dice el condicional, se podría traducir en lenguaje humano como:
Espacio publicitario
Probando el algoritmo
Primero, vamos a probar con un valor de 20
:
Ahora, con un valor de 16
:
Diagrama de flujo de un condicional SiNo
El diagrama de flujo indica los dos posibles caminos que tiene nuestro algoritmo. Ha dejado de ser un algoritmo lineal, para convertirse en un algoritmo con más de una posibilidad. Presta atención a las flechas que verás en él.
En el futuro, utilizarás en tus algoritmos más de un condicional y podrás hacer más caminos posibles.
Si la expresión edad >= 18
devuelve
VERDADERO
(V
en el diagrama), se ejecuta el camino de la derecha. De
ahí, pasa al fin del algoritmo, pero si hubiese más código
después del condicional, este se ejecutaría.
Ten en cuenta que siempre se va a saltar uno de los dos
caminos.
En cambio, si la expresión evalúa como
FALSO
va por el camino de la izquierda (F
en el diagrama).
Eso es todo, pero ya puedes ver, que puedes dotar a tus algoritmos de cierta "inteligencia". Esto es muy básico, pero pronto harás verdaderas maravillas.
Espacio publicitario
Espacio publicitario
Ejercicio de programación para resolver
25. En el siguiente código, si pongo en la consola una respuesta que no sea ni “feliz”, ni “triste”, ¿qué ocurrirá?
- Se ejecuta el código del
Si
. - Se ejecuta el código del
SiNo
. - Da error por valor no contemplado.
La respuesta correcta es la B. Se va a ejecutar
el bloque de código del SiNo
. Esto es
debido a que el SiNo
, se ejecutará
siempre que no haya una condición verdadera. Puesto
que el bloque Si
nos da
FALSO
al no coincidir, se ejecuta
directamente, el SiNo
.
Con esto podemos llegar a la conclusión, de que el algoritmo no es demasiado robusto, ya que a la que el usuario se sale del "raíl", la respuesta que le da, no será la más adecuada.
Por ejemplo, le paso en la entrada de datos
(Leer
) un "¡Estupendo!", en este caso, al
ejecutarse el SiNo
, me responderá "Oh,
espero que tu día mejore pronto."; cosa que no tiene
sentido.
Para mejorar este algoritmo y hacerlo más consistente, tendremos que aplicar una lógica booleana de forma diferente y algo más compleja, mediante los operadores lógicos o con otras partes adicionales del condicional que veremos en el siguiente curso, el de Python básico.
Espacio publicitario
Espacio publicitario