Condiciones en Python
SOLUCIONARIO
Condiciones en Python
2024-10-11
Por
Occam's Razor

#!/usr/bin/env python
# -*- coding: utf-8 -*-
n=42

v = int(input ("Adivina en que número estoy pensando ? "))

if (v < 0):
    print ("Solo números positivos")
    exit (1)

if  (v == n):     print ("Bien Hecho!")
else:
    print ("Sigue Probando\nEl número es " + ("MAYOR" if (n > v) else "MENOR"))

    # Si hemos fallado añadimos una pista
    h = abs (v -n)
    print ("PISTA  :", end='')        # No imprime retorno de carro
    if    h < 5 :  print ("TE QUEMAS!!!");
    elif  h < 10:  print ("CALIENTE");
    elif (h < 15): print ("TEMPLADO");
    else: print ("FRIO");
    

Python ofrece la construcción if-else para la comprobación de condiciones como la mayoría de otros lenguajes, sin embargo, como ya hemos mencionado anteriormente, Python agrupa instrucciones, indentando todas ellas al mismo nivel, en lugar de utilizar caracteres especiales como las llaves {}. Así que, para añadir instrucciones a un bloque condicional, solo tenemos que indentarlas bajo el inicio del bloque, el cual se indica con el carácter :. Esta es la forma que tiene Python de indicar que lo que sigue es un bloque de instrucciones.

SOY NOVATO

Python, al igual que Perl, no requiere que declaremos nuestra variable por adelantado como C o C++ (si bien esto lo podemos hacer y es una buena práctica) y tampoco requiere el uso de caracteres especiales como Perl.

Python, al igual que Perl, ofrece una forma especial para el caso en el que queramos añadir una condición al bloque else. En ese caso utilizaremos elfi ( contracción de else-if), la cual nos permite añadir una nueva condición.

La siguiente secuencia de instrucciones

if h < 5    : print ("TE QUEMAS!")
elif h < 10 : print ("CALIENTE")
else        : print ("FRIO")

se leería como:

  • Si h es menor que 5 imprime TE QUEMAS
  • Sino (si h es mayor o igual que 5) si h es menor que 10 imprime CALIENTE
  • Sino (si h es mayor o igual que 10) imprime FRIO

Los paréntesis entorno a las condiciones no son necesario, pero se pueden utilizar para hacer más fácil la lectura del código, siendo solo necesarios en casos en los que tengamos que componer condiciones complejas. Así, la expresión que comprueba si hemos acertado el número la podemos escribir como:

if v == n : print ("Bien Hecho!)

En el caso de que el bloque condicional solo contenga una instrucción, esta la podemos añadir a continuación del caracter :. Como sucede en la línea:

if (v == n) : print ("Bien Hecho!")

SABÍAS QUE…

En realidad, podemos añadir tantas instrucciones como queramos en un if de una línea, solo tenemos que separarlas con el caracter ;


if (v < 0): print ("Solo números positivos"); exit(1);

Cualquier bloque else o elif que siga, deben ir en una línea separada. Es posible escribir una condición if-else en una sola línea utilizando el operador ternario. Python no tiene un operador ternario como C o Perl, sin embargo ofrece una sintaxis alternativa que puede resultar un poco confusa si uno está acostumbrado al operador ternario estilo C ?:. Esta sintaxis la podemos ver en la línea en la que indicamos si el número es mayor o menor y es algo como esto:

    INSTRUCION-THEN if (condicion) else INSTRUCCION-ELSE`
    "MAYOR"         if (n > v)     else "MENOR"

Alternativamente se puede utilizar la siguiente constructor:

   (condicion and INSTRUCION-THEN  or INSTRUCCION-ELSE
   (n > n     and       "MAYOR"    or      "MENOR")

En este caso estamos abusando de los operadores lógicos and y or para conseguir un resultado similar al del operador ternario, si bien, hay que tener cuidado con las partes INSTRUCCION-THEN y INSTRUCCION-ELSE ya que si INSTRUCCION-THEN resulta devolver un valor, 0, False o None la expresión no funcionará como se espera. Esta construcción se basa en la secuencia de evaluación de una expresión lógica. Para entender la mejor, vamos a re-escribirla de esta forma:

((condicion) AND True) OR valor

Python comenzará evaluando la primera expresión, nuestra condición, la cual se convierte en el primer parámetro para la operación and que sigue. Un and lógico solo es verdadero si los dos operadores son verdaderos:

A AND B = TRUE <===> A = TRUE y B = TRUE

Si A es verdadero, entonces entremos que evaluar el siguiente operando, para saber si la expresión es verdadera, el cual debe retornar un valor True, o de lo contrario la parte else también se ejecutará. Puesto que la primera parte de la expresión es verdadera, y la operación lógica or es verdadera con que solamente uno de sus operadores sea verdadero… pues ya no tenemos que ejecutar INSTRUCCION-ELSE.

Por el contrario, si condicion es falso, el primer operador and devolverá falso independientemente del valor de INSTRUCCION-THEN, la cual no es necesario ejecutar. Pero, la expresión OR que sigue, aún puede cumplirse dependiendo de el resultado de INSTRUCCION-ELSE… así que es necesario ejecutar esa última instrucción.

Como podéis ver este, llamémoslo truco, necesita que INSTRUCCION-THEN sea una expresión (algo que devuelva un valor), no podemos utilizar sentencias como print si usamos Python2… pero la función print de Python3 funcionará perfectamente.

SOY NOVATO

Como Perl, Python es capaz de inferir el tipo, pero a diferencia de este, una vez que el tipo es asignado a una variable ese tipo es fijo. Por esa razón necesitamos utilizar int al principio del programa, para convertir la cadena de caracteres que devuelve input en un número. De lo contrario las condiciones de más abajo fallarían ya que estaríamos comparando cadenas de caracteres y números.

Python, al igual que Perl, no ofrece una instrucción switch, sin embargo es posible simular esta instrucción utilizando distintas técnicas como diccionarios, iteradores o clases.

Así mismo, Python tampoco permite definir constantes. En su lugar los programadores Python tienen como convenio considerar valores contantes las variables cuyos nombres están en mayúsculas, lo cual es una práctica habitual en muchos lenguajes.

Resumen

  • Soporta if ... [elif] ...[else] ...
  • Soporta forma reducida Comando if (cond);
  • Soporta operador terciario valor_Verdad if (condicion) else Valor_Falso
  • Python no soporta booleanos como tipo nativo pero si como una subclase de los enteros
  • No soporta switch
  • No soporta constantes nativamente. El convenio es usar nombres en mayúsculas

Interesado en aprender Python

A través de nuestra cuenta del Programa de Afiliados de Amazon, te recomendamos este libro:

Curso intensivo de Python. Tercera Edición.

Como parte de este programa, recibimos una comisión por compras realizadas utilizando este enlace.


SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)