04 - Condiciones (1: if)
Versión en video (8:48 min):
Fund.Prog con Python 2020
04 - Condiciones (1: if)
Vamos a ver ahora cómo comprobar condiciones en Python.
Lo haremos empleando la orden "if".
Como siempre, vamos a nuestro entorno online, para no tener que instalar nada por ahora. Vamos a hacer un primer programa que lo que haga es pedir un número usuario y responderle si ese número es positivo o no es positivo.
La forma será la siguiente: empezaremos, como siempre, por avisarle de que queremos leer un número y guardarlo en alguna variable. Ya sabes, para avisar, en principio usaríamos la orden "print", haríamos cosas como estas:
print("Dime un número")
Y para leer un dato haríamos cosas como éstas, decir ese dato va a ser "input", que es lo que teclea el usuario.
dato = input()
¿Mejoras?
Por una parte, que estas dos órdenes se pueden fusionar en una. Yo puedo decir "dime algo", mostrando ese mensaje de aviso:
dato = input("Dime un número")
En ese caso, como aparecerá justo a continuación, vamos a poner aquí un símbolo de dos puntos y un espacio.
dato = input("Dime un número: ")
Y como segundo detalle, ese dato va a ser numérico, con lo cual "le diremos esa entrada del usuario conviertela a número entero" y para eso usaremos la palabra "int". y parentesis adicionales:
dato = int(input("Dime un número: "))
¿Qué haremos ahora, entonces, para comprobar una condición?
Pues simplemente poner la traducción directa de la palabra "si", que es "if": decir "if" y a continuación indicaremos qué condición queremos comprobar.
En este caso para ver si un dato es positivo, pondríamos, "si ese dato es mayor que cero", y el símbolo de dos puntos para indicar que lo que viene a continuación es lo que tendrá que hacer en caso de que se cumpla esa condición.
if dato > 0 :
Y este detalle es importante: Lo que vayamos a hacer si se cumple una cierta condición, deberá estar tabulado más a la derecha, es decir, deberá estar precedido por al menos dos espacios.
En el caso de mi entorno online, de "repl.it", directamente al poner los dos puntos y pulsar intro, lo mueve automáticamente dos espacios hacia la derecha. Aún así, la mayoría de gente recomienda usar cuatro espacios, para que resulte más fácil de leer.
Por eso, voy a pulsar el espacio dos veces más y ahora, ya aquí, pongo lo que quiero que haga mi programa: si se cumple esa condición, que el dato sea positivo, en este caso querré escribir un mensaje en pantalla, que será "Es positivo":
dato = int(input("Dime un número: "))
if dato > 0 :
print("Es positivo")
Vamos a empezar por comprobar si funciona y luego lo mejoraremos. Como siempre para comprobar, si funciona vamos al botón de la flecha....
"Dime un número", le pongo el 4 y me dice que es positivo.
Dime un número: 4
Es positivo
Si vuelvo a lanzar el programa, y no le pongo un número que no sea positivo. Lo que va a hacer es no contestar siquiera. Pongo, por ejemplo, el "menos cinco" y no contesta.
Dime un número: -5
Por eso vamos a mejorar este programa para indicarle qué debe hacer en caso de que no se cumpla esa condición. Para eso lo que haremos es movernos hacia atrás, hasta estar justo debajo de la palabra "if", entonces poner la palabra "else".
"else", seguido de un símbolo de los puntos, será la orden que nos permitirá indicar qué decir en caso contrario,
qué hacer, en general, en caso contrario. En este caso sería... nuevamente la tabulamos más a la derecha para que sean cuatro... Escribiría que "es negativo o cero"
dato = int(input("Dime un número: "))
if dato > 0 :
print("Es positivo")
else :
print("Es negativo o cero")
Si ahora probamos el programa nuevamente, veremos que si yo pongo un número negativo o si pongo un cero, como no se cumple esta primera condición de que sea mayor que cero, no escribirá "es positivo", sino que entrará al caso de la palabra "else". Vamos a comprobarlo...
Dime un número: -5
Es negativo o cero
Pongo el número "-5", igual que antes, y me dice que es negativo o 0. Si vuelvo a lanzar y en esta ocasión pongo un cero. También me dirá que es negativo o cero:
Dime un número: 0
Es negativo o cero
Una curiosidad: Sólo hemos puesto una orden en el bloque "if" y una orden en el bloque "else". ¿Qué ocurre si quiero dar más de un paso?
Por ejemplo, si quiero el "es negativo o cero" partirlo en dos líneas.
Pues simplemente, esa segunda línea tendrá que estar también tabulada. Con que esté más la derecha que las anteriores, Python ya sabrá que estas dos líneas forman un bloque que depende, en este caso, de "else":
dato = int(input("Dime un número: "))
if dato > 0 :
print("Es positivo")
else :
print("Es negativo")
print("o cero")
Por lo mismo, si quisiéramos hacer algo más, si se cumple la condición, simplemente lo pondríamos tabulado.
dato = int(input("Dime un número: "))
if dato > 0 :
print("Es positivo")
print("...")
else :
print("Es negativo")
print("o cero")
Vamos a comprobar que funcionan las dos cosas... "Dime un número", pongo el 4 y me dice que es positivo y luego los puntos suspensivos:
Dime un número: 4
Es positivo
...
Y si ahora vuelvo a lanzar con un número negativo, me mostrará primero el mensaje "es negativo" y luego el mensaje "o cero". Es decir. ejecuta o procesa la primera orden y luego la segunda.
Dime un número: -5
Es negativo
o cero
¿Detalles que hemos pasado por alto? pues... un par. Por una parte:
¿Cómo se comparan valores?
Hemos puesto "mayor que cero" y el "mayor que" es bastante evidente. Pero hay más operadores...
Tenemos un operador "mayor que", tenemos un operador "menor que"... Tenemos un operador "mayor o igual", que es un primero, un símbolo de mayor y luego, inmediatamente después, un símbolo de igual, totalmente seguidos. El de "menor o igual" será la misma idea: un menor, un igual, sin espacio intermedio y además siempre puesto así, no podemos poner "igual menor" ni "igual mayor". Tendrá que ser siempre el menor y luego el igual, o el mayor y luego el igual. ¿Qué haremos para comprobar si algo es igual? Pues usaremos "dos símbolos de igual". Por ejemplo, podríamos poner cosas como "si mi dato es igual a cero"
if dato == 0 :
Es decir, si esta variable en la que guardado lo que usuario había introducido. tiene el valor cero, es decir, si el usuario había tecleado 0.
¿Qué hago para comprobar si no es cero? Pues el operador es un poco más rebuscado, es una admiración y una igual: "if dato != 0 :" y a continuación haría lo que tuviera que hacer.
if dato != 0 :
Como segundo detalle importante, se puede encadenar varias condiciones. Por ejemplo, decir si "dato >= 0" es lo mismo que decir si "dato > 0" o (or) El dato es igual a cero (dato == 0).
if dato > 0 or dato == 0:
Ese "or" será verdad si: o bien la primera condición es verdad, o bien la segnunda condición es verdad.
Tenemos tres conectores:
Tenemos el conector "and", qué quiere decir "y", y que será cierto cuando las dos sean ciertas. Por ejemplo, yo podría poner si el dato es mayor que cero. Y el dato es igual a cero.
if dato > 0 and dato == 0:
Como podéis imaginar, esta condición nunca será verdad. Un número no puede ser a la vez mayor que cero y también igual a cero. Podemos usar también el conector "or", el que habíamos dicho antes: Si el dato es mayor que cero o el dato es igual a cero, y también tenemos un conector "not", para indicar que no se cumple una condición. Por ejemplo, yo podría poner, "si no ocurre que el dato sea mayor que cero"... y en ese caso, quiero que hagas tal cosa...
if not ( dato > 0 ) :
En la siguiente entrega profundizaremos un poco más, veremos una sintaxis alternativa de "if". Y veremos como encadenar muchas condiciones seguidas.
Ejercicio propuesto 4.1. Pide al usuario un número entero y responde si es par o impar (pista: es par si el resto de la división entre 2 es 0).
Ejercicio propuesto 4.2. Pide un número real y responde si es positivo, negativo o cero (pista: deberás enlazar dos "if").
Ejercicio propuesto 4.3. Pide dos números enteros y muestra en pantalla su división (o el mensaje de aviso "no se puede dividir entre cero" si el segundo es cero).