Lesson 3
Condiciones: if-then-else
1. Sintaxis
Todos los programas en la primera lección se ejecutaron secuencialmente, línea tras línea. No se puede omitir ninguna línea.
Consideremos el siguiente problema: para el entero dado X determine su valor absoluto. Si X> 0, el programa debería imprimir el valor X, de lo contrario debería imprimir -X. Este comportamiento no se puede alcanzar usando el programa secuencial. El programa debe seleccionar condicionalmente el siguiente paso. Ahí es donde las condiciones ayudan:
x = int(input()) if x > 0: print(x) else: print(-x)
Este programa usa una declaración condicional if
. Después del if
ponemos una condición (x > 0)
seguida por dos puntos. Después de eso, colocamos un bloque de instrucciones que se ejecutará solo si la condición es verdadera (es decir, se evalúa como True
). Este bloque puede ir seguido de la palabra else
, dos puntos y otro bloque de instrucciones que se ejecutará solo si la condición es falsa (es decir, se evalúa como False
). Es el caso anterior, la condición es falsa, por lo que se ejecuta el bloque 'else'. Cada bloque debe sangrarse usando espacios.
En resumen, el enunciado condicional en Python tiene la siguiente sintaxis:
if condition : true-block several instructions that are executed if the condition evaluates to True else: false-block several instructions that are executed if the condition evaluates to False
La palabra clave else
con el bloque 'falso' puede omitirse en caso de que no se haga nada si la condición es falsa. Por ejemplo, podemos reemplazar la variable x
con su valor absoluto así:
x = int(input()) if x < 0: x = -x print(x)
En este ejemplo, la variable x
se asigna a -x
solo si x < 0
. Por el contrario, la instrucción print(x)
se ejecuta cada vez, porque no está sangrada, por lo que no pertenece al bloque 'verdadero'.
La sangría es una forma general en Python para separar bloques de código. Todas las instrucciones dentro del mismo bloque deben sangrarse de la misma manera, es decir, deben tener el mismo número de espacios al comienzo de la línea. Se recomienda usar 4 espacios para sangría.
La sangría es lo que hace que Python sea diferente de la mayoría del otro idioma, en el que las llaves {
y }
se utilizan para formar los bloques.
Por cierto, hay una función incorporada para valor absoluto en Python:
x = int(input()) print(abs(x))
2. Condiciones anidadas
Cualquier instrucción de Python puede colocarse en bloques 'verdaderos' y bloque 'falso', incluida otra instrucción condicional. De esta forma obtenemos condiciones anidadas. Los bloques de condiciones internas se sangran usando dos veces más espacios (por ejemplo, 8 espacios). Veamos un ejemplo. Dadas las coordenadas del punto en el plano, imprime su cuadrante.
x = int(input()) y = int(input()) if x > 0: if y > 0: # x es mayor que 0, y es mayor que 0 print("Quadrant I") else: # x es mayor que 0, y es menor o igual que 0 print("Quadrant IV") else: if y > 0: # x es menor o igual que 0, y es mayor que 0 print("Quadrant II") else: # x es menor o igual que 0, y es menor o igual que 0 print("Quadrant III")
En este ejemplo usamos los comentarios: el texto explicativo que no tiene ningún efecto en la ejecución del programa. Este texto comienza con el hash #
y dura hasta el final de la línea.
3. Operadores de comparación
Por lo general, la condición después de if
tiene uno o más de los siguientes operadores:
-
<
- Menos - la condición es verdadera si el lado izquierdo está por debajo del lado derecho.
-
>
- mayor - la condición es verdadera si el lado izquierdo es mayor que el lado derecho.
-
<=
- menos o igual.
-
>=
- mayor o igual.
-
==
- igual.
-
!=
- no es igual.
Por ejemplo, la condición x * x < 1000
significa que "el valor de la expresión x * x
es menor que 1000", y la condición 2 * x != y
significa "el valor doble de la variable x
no es igual al valor de la variable y
".
Los operadores de comparación en Python se pueden agrupar así: a == b == c
o x <= y >= 10
. Es algo raro entre los lenguajes de programación.
4. Bool objetos y operadores lógicos
Cuando sumamos dos objetos enteros usando el operador +
, como 2 + 5
, obtenemos un nuevo objeto: 7
. Del mismo modo, cuando comparamos dos enteros usando el operador <
, como 2 < 5
, obtenemos un nuevo objeto: True
.
print(2 < 5) print(2 > 5)
True
y False
tienen un tipo especial llamado bool
. Como cada nombre de tipo se puede usar para lanzar objetos en ese tipo, veamos qué proporciona este elenco para los números:print(bool(-10)) # Cierto print(bool(0)) # Falso: cero es el único número falso print(bool(10)) # Cierto print(bool('')) # Falso: la cadena vacía es la única cadena falsa print(bool('abc')) # Cierto
Algunas veces necesita verificar varias condiciones a la vez. Por ejemplo, puede verificar si un número n
es divisible entre 2 usando la condición n % 2 == 0
( n
da un residuo 0
cuando se divide por 2
). Si es necesario comprobar que los dos números n
y m
son a la vez divisible por 2, usted debe comprobar tanto n % 2 == 0
y m % 2 == 0
. Para hacer eso, únete a ellos usando un operador and
(AND lógico): n % 2 == 0 and m % 2 == 0
.
Python tiene lógica AND, lógica O y negación.
Operador and
es un operador binario que evalúa como True
si y solo si su lado izquierdo y su lado derecho son True
.
Operador or
es un operador binario que evalúa como True
si al menos uno de sus lados es True
.
El operador not
es una negación unaria, es seguido por algún valor. Se evalúa como True
si ese valor es False
y viceversa.
Comprobemos que al menos uno de los dos números termina con 0:
a = int(input()) b = int(input()) if a % 10 == 0 or b % 10 == 0: print('YES') else: print('NO')
Comprobemos que el número a
sea positivo y el número b
no negativo:
if a > 0 and not (b < 0):
En lugar de not (b < 0)
podemos escribir (b >= 0)
.
5. palabra 'elif'
Si tiene más de dos opciones para diferenciar usando el operador condicional, puede usar if... elif... else
statement.
Vamos a mostrar cómo funciona al reescribir el ejemplo con el punto (x, y) en el plano y los cuadrantes desde arriba:
x = int(input()) y = int(input()) if x > 0 and y > 0: print("Quadrant I") elif x > 0 and y < 0: print("Quadrant IV") elif y > 0: print("Quadrant II") else: print("Quadrant III")
En este caso, las condiciones en if
y elif
se verifican una tras otra hasta que se encuentre la primera condición verdadera. Entonces solo se está ejecutando el bloque verdadero para esa condición. Si todas las condiciones son falsas, el bloque 'else' se está ejecutando, si está presente.