Corso Python - 3.1 Sección 1 - Toma de Decisiones en Python
Corso Python - 3.1 Sección 1 - Toma de Decisiones en Python
Una computadora ejecuta el programa y proporciona las respuestas. El programa debe ser capaz
de reaccionar de acuerdo con las respuestas recibidas.
Si, es cierto.
No, esto es falso.
Nunca obtendrás una respuesta como Déjame pensar...., no lo sé, o probablemente sí, pero no lo sé
con seguridad.
Para hacer preguntas, Python utiliza un conjunto de operadores muy especiales. Revisemos
uno tras otro, ilustrando sus efectos en algunos ejemplos simples.
Es un operador binario con enlazado del lado izquierdo. Necesita dos argumentos y verifica si
son iguales.
3.1.3 Ejercicios
Ahora vamos a hacer algunas preguntas. Intenta adivinar las respuestas.
2 == 2
Respuesta: True - por supuesto, 2 es igual a 2. Python responderá True (recuerda este par de literales
predefinidos, True y False - también son palabras clave de Python).
2 == 2.
Respuesta: Esta pregunta no es tan fácil como la primera. Afortunadamente, Python puede convertir el valor
entero en su equivalente real y, en consecuencia, la respuesta es True.
1 == 2
Respuesta: Esto debería ser fácil. La respuesta será (o mejor dicho, siempre es) False.
3.1.4 Operadores
Igualdad: El operador igual a (==)
var == 0
Toma en cuenta que no podemos encontrar la respuesta si no sabemos qué valor está almacenado
actualmente en la variable var.
Ahora imagina a un programador que sufre de insomnio, y tiene que contar las ovejas negras y
blancas por separado siempre y cuando haya exactamente el doble de ovejas negras que de las
blancas.
La pregunta será la siguiente:
black_sheep == 2 * white_sheep
Debido a la baja prioridad del operador ==, la pregunta será tratada como la siguiente:
black_sheep == (2 * white_sheep)
Entonces, vamos a practicar la comprensión del operador == - ¿puedes adivinar la output del código a
continuación?
Si deseas saber si hay más ovejas negras que blancas, puedes escribirlo de la siguiente manera:
Ambos operadores (estrictos y no estrictos), así como los otros dos que se analizan en la siguiente
sección, son operadores binarios con enlazado del lado izquierdo, y su prioridad es mayor que
la mostrada por == y !=.
Si queremos saber si tenemos que usar un gorro o no, nos hacemos la siguiente pregunta:
Existen al menos dos posibilidades: primero, puedes memorizarlo (almacenarlo en una variable) y
utilizarlo más tarde. ¿Cómo haces eso? Bueno, utilizarías una variable arbitraria como esta:
La segunda posibilidad es más conveniente y mucho más común: puedes utilizar la respuesta que
obtengas para tomar una decisión sobre el futuro del programa.
Necesitas una instrucción especial para este propósito, y la discutiremos muy pronto.
Ahora necesitamos actualizar nuestra tabla de prioridades, y poner todos los nuevos operadores en
ella. Ahora se ve como a continuación:
3.1.6 LAB Variables ‒ Preguntas y
Respuestas
Escenario
Usando uno de los operadores de comparación en Python, escribe un programa simple de dos líneas
que tome el parámetro n como entrada, que es un entero, e imprime False si n es menor que 100,
y True if n es mayor o igual que 100.
No debes crear ningún bloque if (hablaremos de ellos muy pronto). Prueba tu código usando los
datos que te proporcionamos.
Datos de Prueba
3.1.7 Condiciones y ejecución condicional
Ya sabes como hacer preguntas a Python, pero aún no sabes como hacer un uso razonable de las
respuestas. Se debe tener un mecanismo que le permita hacer algo si se cumple una condición, y
no hacerlo si no se cumple.
Es como en la vida real: haces ciertas cosas o no cuando se cumple una condición específica, por
ejemplo, sales a caminar si el clima es bueno, o te quedas en casa si está húmedo y frío.
Para tomar tales decisiones, Python ofrece una instrucción especial. Debido a su naturaleza y su
aplicación, se denomina instrucción condicional (o sentencia condicional).
Existen varias variantes de la misma. Comenzaremos con la más simple, aumentando la dificultad
lentamente.
La primera forma de una sentencia condicional, que puede ver a continuación, está escrita de
manera muy informal pero figurada:
if true_or_not:
do_this_if_true
Esta sentencia condicional consta de los siguientes elementos, estrictamente necesarios en este
orden:
La palabra clave reservada if;
Uno o más espacios en blanco;
Una expresión (una pregunta o una respuesta) cuyo valor se interpretar únicamente en
términos de True (cuando su valor no sea cero) y False (cuando sea igual a cero);
Unos dos puntos seguidos de una nuevalínea;
Una instrucción con sangría o un conjunto de instrucciones (se requiere absolutamente al
menos una instrucción); la sangría se puede lograr de dos maneras: insertando un número
particular de espacios (la recomendación es usar cuatro espacios de sangría), o usando
el tabulador; nota: si hay mas de una instrucción en la parte con sangría, la sangría debe ser
la misma en todas las líneas; aunque puede parecer lo mismo si se mezclan tabuladores con
espacios, es importante que todas las sangrías sean exactamente iguales Python 3 no
permite mezclar espacios y tabuladores para la sangría.
después, almorzaremos
Como puedes ver, almorzar no es una actividad condicional y no depende del clima.
Sabiendo que condiciones influyen en nuestro comportamiento y asumiendo que tenemos las
funciones sin parámetros go_for_a_walk() y have_lunch(), podemos escribir el siguiente fragmento
de código:
if the_weather_is_good:
go_for_a_walk()
have_lunch()
Si un determinado desarrollador de Python sin dormir se queda dormido cuando cuenta 120 ovejas, y
el procedimiento de inducción del sueño se puede implementar como una función especial
llamada sleep_and_dream(), el código toma la siguiente forma:
Hemos dicho que las sentencias condicionales deben tener sangría. Esto crea una estructura
muy legible, demostrando claramente todas las rutas de ejecución posibles en el código.
Como puedes ver, tender la cama, tomar una ducha y dormir y soñar se
ejecutan condicionalmente - cuando sheep_counter alcanza el límite deseado.
Ahora vamos a discutir otra variante de la sentencia condicional, que también permite realizar una
acción adicional cuando no se cumple la condición.
Nota: no hay una palabra sobre lo que sucederá si el clima es malo. Solo sabemos que no saldremos
al aire libre, pero no sabemos que podríamos hacer. Es posible que también queramos planificar
algo en caso de mal tiempo.
Podemos decir, por ejemplo: Si el clima es bueno, saldremos a caminar, de lo contrario, iremos al
cine.
Ahora sabemos lo que haremos si se cumplen las condiciones, y sabemos lo que haremos si no
todo sale como queremos. En otras palabras, tenemos un "Plan B".
Python nos permite expresar dichos planes alternativos. Esto se hace con una segunda forma,
ligeramente mas compleja, de la sentencia condicional, la sentencia if-else:
if true_or_false_condition:
perform_if_condition_true
else:
perform_if_condition_false
Por lo tanto, hay una nueva palabra: else - esta es una palabra clave reservada.
La parte del código que comienza con else dice que hacer si no se cumple la condición especificada
por el if (observa los dos puntos después de la palabra).
if the_weather_is_good:
go_for_a_walk()
else:
go_to_a_theater()
have_lunch()
Todo lo que hemos dicho sobre la sangría funciona de la misma manera dentro de la rama else:
if the_weather_is_good:
go_for_a_walk()
have_fun()
else:
go_to_a_theater()
enjoy_the_movie()
have_lunch()
Sentencias if-else anidadas
Ahora, analicemos dos casos especiales de la sentencia condicional.
Lee lo que hemos planeado para este Domingo. Si hay buen clima, saldremos a caminar. Si
encontramos un buen restaurante, almorzaremos allí. De lo contrario, vamos a comer un sandwich.
Si hay mal clima, iremos al cine. Si no hay boletos, iremos de compras al centro comercial más
cercano.
Escribamos lo mismo en Python. Considera cuidadosamente el código siguiente:
La sentencia elif
El segundo caso especial presenta otra nueva palabra clave de Python: elif. Como probablemente
sospechas, es una forma más corta de else if.
Nuestro siguiente ejemplo se parece a la anidación, pero las similitudes son muy leves. Nuevamente,
cambiaremos nuestros planes y los expresaremos de la siguiente manera: si hay buen clima,
saldremos a caminar, de lo contrario, si obtenemos entradas, iremos al cine, de lo contrario, si hay
mesas libres en el restaurante, vamos a almorzar; si todo falla, regresaremos a casa y jugaremos
ajedrez.
¿Has notado cuantas veces hemos usado las palabras de lo contrario? Esta es la etapa en la que la
palabra clave reservada elif desempeña su función.
Esto puede sonar un poco desconcertante, pero ojalá que algunos ejemplos simples ayuden a
comprenderlo mejor.
Todos los programas resuelven el mismo problema - encuentran el número mayor de una serie de
números y lo imprimen.
Ejemplo 1:
Comenzaremos con el caso más simple - ¿cómo identificar el mayor de los dos números?:
El fragmento de código anterior debe estar claro - lee dos valores enteros, los compara y encuentra cuál es el
más grande.
Ejemplo 2:
Ahora vamos a mostrarte un hecho intrigante. Python tiene una característica interesante - mira el
código a continuación:
Nota: si alguna de las ramas de if-elif-else contiene una sola instrucción, puedes codificarla de forma
más completa (no es necesario que aparezca una línea con sangría después de la palabra clave),
pero solo continúa la línea después de los dos puntos).
Sin embargo, este estilo puede ser engañoso, y no lo vamos a usar en nuestros programas futuros,
pero definitivamente vale la pena saber si quieres leer y entender los programas de otra persona.
Es hora de complicar el código - encontremos el mayor de los tres números. ¿Se ampliará el código?
Un poco.
Suponemos que el primer valor es el más grande. Luego verificamos esta hipótesis con los dos
valores restantes.
Este método es significativamente más simple que tratar de encontrar el número más grande comparando todos los
pares de números posibles (es decir, el primero con el segundo, el segundo con el tercero y el tercero con el primero).
Intenta reconstruir el código por ti mismo.
¿Pero qué sucede si te pedimos que escribas un programa que encuentre el mayor de doscientos
números? ¿Te imaginas el código?
Por ahora ignoraremos los requisitos de la sintaxis de Python e intentaremos analizar el problema sin
pensar en la programación real. En otras palabras, intentaremos escribir el algoritmo, y cuando
estemos contentos con él, lo implementaremos.
En este caso, utilizaremos un tipo de notación que no es un lenguaje de programación real (no se
puede compilar ni ejecutar), pero está formalizado, es conciso y se puede leer. Se
llama pseudocódigo.
En primer lugar, podemos simplificar el programa si, al principio del código, le asignamos a la
variable largest_number un valor que será más pequeño que cualquiera de los números ingresados.
Usaremos -999999999 para ese propósito.
En segundo lugar, asumimos que nuestro algoritmo no sabrá por adelantado cuántos números se
entregarán al programa. Esperamos que el usuario ingrese todos los números que desee - el
algoritmo funcionará bien con cien y con mil números. ¿Cómo hacemos eso?
Hacemos un trato con el usuario: cuando se ingresa el valor-1, será una señal de que no hay más
datos y que el programa debe finalizar su trabajo.
De lo contrario, si el valor ingresado no es igual a -1, el programa leerá otro número, y así
sucesivamente.
El truco se basa en la suposición de que cualquier parte del código se puede realizar más de una vez
- precisamente, tantas veces como sea necesario.
La ejecución de una determinada parte del código más de una vez se denomina bucle. El significado
de este término es probablemente obvio para ti.
¿Puedes usar una estructura similar en un programa escrito en Python? Si, si puedes.
Información Adicional
Python a menudo viene con muchas funciones integradas que harán el trabajo por ti. Por ejemplo,
para encontrar el número más grande de todos, puede usar una función incorporada de Python
llamada max(). Puedes usarlo con múltiples argumentos. Analiza el código de abajo:
# Se leen tres números.
number1 = int(input("Ingresa el primer número: "))
number2 = int(input("Ingresa el segundo número: "))
number3 = int(input("Ingresa el tercer número: "))
# Verifica cuál de los números es el mayor
# y pásalo a la variable largest_number.
largest_number = max(number1, number2, number3)
# Imprime el resultado.
print("El número más grande es:", largest_number)
De la misma manera, puedes usar la función min() para devolver el número más pequeño. Puedes
reconstruir el código anterior y experimentar con él en Sandbox.
Vamos a hablar sobre estas (y muchas otras) funciones pronto. Por el momento, nuestro enfoque se
centrará en la ejecución condicional y los bucles para permitirte ganar más confianza en la
programación y enseñarte las habilidades que te permitirán comprender y aplicar los dos conceptos
en tu codigo. Entonces, por ahora, no estamos tomando atajos.
3.1.10 LAB Operadores de comparación y
ejecución condicional
Escenario
Espatifilo, más comúnmente conocida como la planta de Cuna de Moisés o flor de la paz, es una de
las plantas para interiores más populares que filtra las toxinas dañinas del aire. Algunas de las
toxinas que neutraliza incluyen benceno, formaldehído y amoníaco.
Imagina que tu programa de computadora ama estas plantas. Cada vez que recibe una entrada en
forma de la palabra Espatifilo, grite involuntariamente a la consola la siguiente cadena: "¡Espatifilo es
la mejor planta de todas!"
Escribe un programa que utilice el concepto de ejecución condicional, tome una cadena como
entrada y que:
imprima el enunciado "Si - ¡El Espatifilo! es la mejor planta de todos los tiempos!" en la pantalla si la
cadena ingresada es "ESPATIFILIO" (mayúsculas)
imprima "No, ¡quiero un gran Espatifilo!" si la cadena ingresada es "espatifilo" (minúsculas)
imprima "¡Espatifilo!, ¡No [entrada]!" de lo contrario. Nota: [entrada] es la cadena que se toma como
entrada.
Prueba tu código con los datos que te proporcionamos. ¡Y hazte de un Espatifilo también!
3.1.11 LAB Fundamentos de la sentencia
if-else
Escenario
Érase una vez una tierra de leche y miel - habitada por gente feliz y próspera. La gente pagaba
impuestos, por supuesto - su felicidad tenía límites. El impuesto más importante,
denominado Impuesto Personal de Ingresos (IPI, para abreviar) tenía que pagarse una vez al año y
se evaluó utilizando la siguiente regla:
si el ingreso del ciudadano no era superior a 85,528 pesos, el impuesto era igual al 18% del ingreso
menos 556 pesos y 2 centavos (esta fue la llamada exención fiscal).
si el ingreso era superior a esta cantidad, el impuesto era igual a 14,839 pesos y 2 centavos, más el
32% del excedente sobre 85,528 pesos.
Nota: este país feliz nunca devuelve dinero a sus ciudadanos. Si el impuesto calculado es menor que
cero, solo significa que no hay impuesto (el impuesto es igual a cero). Ten esto en cuenta durante
tus cálculos.
Observa el código en el editor - solo lee un valor de entrada y genera un resultado, por lo que debes
completarlo con algunos cálculos inteligentes.
tax = round(tax, 0)