Condicionales y operadores lógicos

Enterate del próximo post
Un mail cuando publico algo nuevo. Sin spam y te podés dar de baja cuando quieras.

Un mail cuando publico algo nuevo. Sin spam y te podés dar de baja cuando quieras.
Elegir qué ropa llevar a la calle depende de más de un dato a la vez. No alcanza con mirar la temperatura: un día de 15 grados y cielo despejado pide una campera liviana, y ese mismo día de 15 grados con lluvia pide además un paraguas o una campera impermeable. Hay una decisión sobre la temperatura y otra, aparte, sobre la lluvia, y la ropa final depende de cómo se combinen las dos respuestas.
El post anterior mostró que un algoritmo ejecuta siempre la misma secuencia de pasos, sin importar los datos de entrada. Eso deja de ser cierto acá: según lo que valga un dato, el algoritmo elige entre más de un camino posible, y ese camino se puede decidir con una sola condición o con varias combinadas a la vez.
Una condición es una pregunta sobre los datos que solo admite dos respuestas: verdadero o falso. "La temperatura es menor a 10" es una condición: para cualquier temperatura concreta, esa frase es verdadera o es falsa, nunca las dos cosas ni ninguna.
Las condiciones más simples se arman comparando dos valores. Los comparadores habituales son igual a, distinto de, mayor que, menor que, mayor o igual a y menor o igual a. El post anterior ya usó uno de ellos, "mayor o igual a", sin detenerse a nombrarlo como parte de un grupo más amplio.
Con una condición armada, si y sino deciden qué pasos se ejecutan según si esa condición es verdadera o falsa:
si condición:
pasos si es verdadera
sino:
pasos si es falsaSolo una de las dos ramas se ejecuta en cada llamada, nunca las dos. Cuando hace falta elegir entre más de dos caminos, la misma estructura se encadena con sino si, que agrega una condición nueva sin abrir una rama completamente aparte:
si condición 1:
pasos
sino si condición 2:
pasos
sino:
pasosEl algoritmo evalúa las condiciones en el orden en que están escritas y se queda con la primera que resulte verdadera; el sino final cubre todo lo que ninguna condición anterior cubrió.
Además de comparar valores, una condición se puede combinar con otra usando operadores lógicos. y exige que las dos condiciones sean verdaderas a la vez; alcanza con que una sola sea falsa para que toda la combinación sea falsa. o exige que al menos una de las dos sea verdadera; solo es falsa cuando las dos lo son. no invierte una condición: convierte una verdadera en falsa y una falsa en verdadera. Los tres se leen igual que en una frase cotidiana: "hace frío y llueve", "es feriado o es domingo", "no tiene stock".
El siguiente algoritmo clasifica una temperatura en tres categorías, usando comparadores y una cadena de sino si.
algoritmo clasificar_temperatura(temperatura):
si temperatura es menor a 10:
devolver "frío"
sino si temperatura es mayor a 25:
devolver "caluroso"
sino:
devolver "templado"Con temperatura en 5: la primera condición (menor a 10) es verdadera, así que devuelve "frío" sin evaluar nada más. Con 30: la primera condición es falsa, la segunda (mayor a 25) es verdadera, y devuelve "caluroso". Con 18: las dos primeras condiciones son falsas, así que se ejecuta el sino y devuelve "templado". Ninguna llamada evalúa las tres ramas: apenas encuentra una condición verdadera, el algoritmo se queda con esa y no revisa las que siguen.
El segundo ejemplo combina dos datos con o: una tienda aplica un descuento si la compra supera cierto monto, o si la persona que compra es socia, sin importar cuánto haya gastado.
algoritmo aplicar_descuento(monto_compra, es_socio):
si monto_compra es mayor o igual a 50000 o es_socio:
devolver "10% de descuento"
sino:
devolver "sin descuento"Con un monto de $60000 y sin ser socia: la primera parte de la condición ya es verdadera, así que alcanza para aplicar el descuento sin que importe la segunda. Con un monto de $8000 pero siendo socia: la primera parte es falsa, pero la segunda es verdadera, y el descuento se aplica igual. Solo cuando las dos partes son falsas -monto bajo y sin ser socia- se llega al sino.
Clasificar un número en positivo, negativo o cero.
Pista: son tres resultados posibles, no dos, así que una sola condición no alcanza para separarlos. Antes de escribir nada, conviene decidir qué se pregunta primero: ¿conviene arrancar por el caso más particular de los tres, o por uno cualquiera?
algoritmo clasificar_numero(numero):
si numero es igual a 0:
devolver "cero"
sino si numero es mayor a 0:
devolver "positivo"
sino:
devolver "negativo"Con 0: la primera condición ya es verdadera y corta ahí. Con 7: la primera es falsa, la segunda (mayor a 0) es verdadera, y devuelve "positivo". Con -3: las dos primeras son falsas -no es igual a 0 ni mayor a 0-, así que el sino se hace cargo y devuelve "negativo" sin necesidad de comparar contra 0 de nuevo.
Un gimnasio deja usar la pileta a quienes son socios y además llevan puesta la pulsera de acceso del día. A quienes no son socios no se les permite el ingreso, tengan pulsera o no. Escribir el algoritmo que decide si una persona puede entrar a la pileta.
Pista: hay dos formas válidas de plantear esta condición. Una pregunta primero por los casos que sí permiten el ingreso; la otra pregunta primero por los que lo impiden, usando no sobre alguno de los dos datos. Elegir cualquiera de las dos no cambia el resultado.
algoritmo permitir_pileta(es_socio, tiene_pulsera):
si no es_socio o no tiene_pulsera:
devolver "no puede entrar"
sino:
devolver "puede entrar"Con una persona socia y con pulsera: las dos negaciones son falsas, así que la condición completa es falsa y se llega al sino, "puede entrar". Con una persona socia pero sin pulsera: "no tiene_pulsera" es verdadero, así que alcanza para devolver "no puede entrar" sin mirar si es socia o no. El mismo algoritmo se puede escribir al revés, preguntando primero por el caso que sí permite el ingreso (es_socio y tiene_pulsera) en lugar de por los que lo impiden. Las dos formas llegan al mismo resultado para cualquier combinación de datos; elegir una u otra es una cuestión de qué pregunta resulta más natural de plantear primero.
Una condición es una pregunta que solo admite verdadero o falso, y
si/sino/sino sideciden qué pasos se ejecutan según esa respuesta.y,oynocombinan condiciones para plantear reglas que dependen de más de un dato a la vez, de la misma forma en que se combinan en una frase cotidiana. La misma regla se puede escribir de más de una manera igualmente correcta; lo que importa es que el resultado sea el mismo para cualquier dato de entrada.
Hasta acá, cada algoritmo de la serie ejecutó cada paso exactamente una vez. El próximo paso de la serie trata qué pasa cuando un paso, o un bloque entero de pasos, necesita repetirse más de una vez, ya sea una cantidad de veces conocida de antemano o hasta que se cumpla una condición.