Python Para Principiantes (II) - Estructuras de datos y de control (I)

Estructuras de datos y de control (I)

Índice.

Antes de arrancar con estos nuevos tópicos, ampliaremos algunos conceptos trabajados en los encuentros anteriores y agregaremos algunas ideas nuevas.

Modos de ejecutar programas

El intérprete interactivo es útil cuando queremos probar pequeños fragmentos de código en tiempo real, ahora bien, cuando cerramos lo cerramos perdemos toda la información allí trabajada. Entonces no es recomendado para escribir programas largos. Los IDE son una buena herramienta para desarrollar rápidamente el código pero no para ejecutarlo, al menos no de manera una forma estándar, es decir abriendo una terminal y llamando al comando.

Ejecutar un programa desde la línea de comando.

La idea es crear un archivo de extensión .py. Esto lo podemos hacer con un IDE o bien con un editor de texto plano (nano, vim, gedit, etc). Suponiendo que armamos el clásico “hola mundo!” y lo guardamos en un archivo de nombre “holamundo.py” podemos hacer lo siguiente:

1
$python3 holamundo.py 

Ejecutarlo como un script

Cuando ejecutamos un programa Python como un script evitamos llamar explícitamente al intérprete. Debemos agregar en la primera línea del código

1
#!/usr/bin/env python3

Dicha línea le dice al sistema operativo que llame al intérprete para ejecutar el código. Luego debemos darle permisos de ejecución.

1
$chmod +x holamundo.py 

Y finalmente lo podemos ejecutar como cualquier programa GNU/Linux

1
$./holamundo.py 

Datos tipo lógicos o booleanos (boolean).

Anteriormente hemos visto tres tipos de datos: float, int y string. Hay un tipo nuevo que es el tipo lógico comúnmente llamado booleano.

Recuerde que: una variable booleana puede tener solo dos valores posibles, o verdadero (True) o falso (False).

1
2
3
>>> a = True
>>> type (a) #Mostramos el tipo de la variable a
>>> print(a) #Imprimimos en pantalla
1
2
<class 'bool'>
True

Ahora bien, este tipo de dato es muy útil ya que nos permite realizar operaciones lógicas, es decir comparar datos bajo un cierto criterio, observemos el siguiente código:

1
2
>>> c = 100>1
>>> print(c) #Imprimimos en pantalla
1
>>> True

En el código le hemos asignado a la variable “c” el resultado de una operación lógica (100 > 1). Python identifica que esto es una operación lógica y devuelve un tipo booleano. En este caso devuelve True. A continuación, veremos en profundidad como se construye una operación lógica.

Operadores de relación u operadores relacionales

En el ejemplo anterior trabajamos una operación (100>1) y nos devolvió True (Verdadero). ¿Por que? Porque las operaciones booleanas pueden ser pensadas como una pregunta y esa pregunta puede ser respondida con True (verdadero) o False (Falso).

Si hiciéramos:

1
2
>>> c = 100>1
>>> print(c) #Imprimimos en pantalla

Estamos preguntando ¿100 es mayor que 1? la respuesta es True (verdadero) La siguiente tabla presenta los operadores booleanos que Python tiene disponible.

Operador Descripción Ejemplo Resultado
== ¿a y b son iguales? 100 == 1 False
!= ¿ a y b son distintos? 100 != 1 True
< ¿a es menor que b? 100 < 1 False
> ¿a es mayor que b? 100 > 1 True
<= ¿a es menor o igual que b? 100 <= 1 False
>= ¿a es mayor o igual que b? 100 >= 1 True

Estos operadores pueden ser usados con cadenas de caracteres, por ejemplo si queremos saber si dos oraciones son idénticas usamos el operador correspondiente.

1
2
>>> c = "Hola" == "Mundo" 
>>> print(c) #Imprimimos en pantalla
1
False

En este ejemplo estamos preguntando ¿“Hola” es igual que “Mundo”? y guardando el resultado de esa operación en la variable “c”. En este caso la respuesta es False (falso). Para que nos hubiera dado verdadero ambas partes necesitaban ser idénticas.

1
2
>>> c = "Hola" == "Hola" 
>>> print(c) #Imprimimos en pantalla
1
True

Como vimos podemos también comparar números. ¿Qué ocurre si queremos saber si 10 es menor que 2 por 2? Podríamos hacer lo siguiente:

1
2
>>> c = 10 < 2*2 
>>> print(c) #Imprimimos en pantalla

Operadores Lógicos

Los operadores lógicos nos permiten unir dos o más operaciones lógicas. Imaginemos que quisiéramos saber si alguien tiene más de 21 años y menos que 65. ¿Cómo haríamos? Tendríamos que hacer dos operaciones, la primera preguntar si es mayor que 21 y la segunda, si es menor que 65. Luego necesitaríamos saber si ambas respuestas son verdaderas. Para ayudarnos en esta tarea aparecen los operadores lógicos. Observemos el siguiente ejemplo:

1
2
3
>>> edad = 40
>>> resultado = (edad > 21) and (edad < 65)
>>> print (resultado)
1
True

Analicemos: Hicimos dos comparaciones edad > 21 y edad < 65, ambas comparaciones dan Verdadero, luego esas comparación fueron “unidas” con el operador and. Este operador devuelve verdadero si todas las comparaciones son verdaderas, si alguna es falsa devuelve falso.

En la siguiente tabla se muestran los operadores lógicos disponibles y un resumen de ellos.

Operador Descripción Ejemplo Resultado
and ¿Son a y b verdaderos? 100 > 2 and 100 > 50 True
or ¿Es a o b verdadero? 100 > 2 or 100 > 1000 True
not Invierte el resultado de la operación not (1<2) False

Veamos un ejemplo con el operador and:

1
2
3
4
5
6
>>> a = 100
>>> b = 50
>>> c = 200
>>> res = (b<a) and (c > a)
>>> print (res)
True
1
True

Preguntamos si “¿b es menor que a?” (Verdadero), si “¿c es mayor que a?” (Verdadero) y luego verifica si ambas preguntas son verdaderas (Verdadero)

Ahora con el operador or:

1
2
3
4
>>> a = 1500
>>> b = 10
>>> res = (a > 1000) or (b > 100)
>>> print (res)
1
True

Primero resuelve si ¿a es mayor que 1000? (Verdadero), luego ¿b es mayor que 100? (Falso) y finalmente se pregunta: ¿alguno de los dos resultados es verdadero?"

Por ultimo el operador not

1
2
3
>>> a = 10
>>> b = 20
>>> not (a>b)

Se pregunta: ¿a es mayor que b? Falso, luego invierte el resultado es decir lo convierte a Verdadero.

Sentencia If

La declaración if (Si) es útil en aquellos momentos que queremos evaluar una condición y que, si esta es verdadera, ejecute un fragmento de código.

La sintaxis de if es la siguiente

1
2
3
4
5
if evaluación:
	código a ser lanzado si la evaluación es verdadera
	...
	...
	...

Por ejemplo: queremos evaluar si el valor de una variable es mayor que el de otra variable.

1
2
3
4
a = 10
b = 5
if (a>b):
    print("A es mayor que B")

Explicación: Creamos dos variables “a” y “b”. Le asignamos valores a cada una de ellas. Luego evaluamos “si a es mayor que b”, si la evaluación es verdadera se lanza la función print que imprimirá en pantalla “A es mayor que B”. Si es falsa no hará nada.

Nótese el espacio vació antes del llamado a la función print(). Esto es conocido como Indentación.
Todo lo que este indentado se ejecutará si la evaluación es verdadera. Recuerde, además, que la expresión if finaliza con : (dos puntos)

Sentencia else

Una sentencia if (si) puede estar sucedida por una sentencia else (sino). Vayamos a un ejemplo práctico: imaginemos que queremos mostrar un mensaje si es mayor de edad y sino otro mensaje distinto.

1
2
3
4
5
6
edad = 19

if edad>=21:
    print("Es mayor de edad")
else:
    print("Es menor de edad")

Explicación: la sentencia if evalúa si el valor de la variable edad es mayor o igual que 21, si es verdadero muestra el mensaje “Es mayor de edad”, sino se ejecuta el segundo mensaje “Es menor de edad”.

Sentencias múltiples: if, elif, else

Supongamos que queremos mostrar un mensaje distinto según un número dado.

1
2
3
4
5
6
7
8
numero = 10

if numero == 5:
    print("El número es cinco")
elif numero == 10:
    print("El número es diez")
else:
    print("El número no es ni cinco ni diez")

La sentencia elif nos brinda la posibilidad de hacer una evaluaciones adicionales.

El programa primero evalúa if numero == 5: si verdadero ejecuta print(“El numero es cinco”) si es falso evalúa elif numero == 10: si verdadero ejecuta print(“El numero es diez”) si es falso ejecuta print(“El numero no es ni cinco ni diez”)

Lógica booleana

La lógica booleana nos permite hacer evaluaciones mediante la sentencia if pero de mayor complejidad.

Operador and

El operador and (“y” en español) nos permite realizar dos o más evaluaciones, si todas son verdaderas se ejecutará el código que le indiquemos.

1
2
3
4
5
6
7
edad = 42
nombre = "Pablo"

if nombre=="Pablo" and edad==42:
    print("Ud. es Pablo y tiene 42 años de edad")
else:
    print("Ud. no es Pablo")

Como las evaluaciones para nombre y edad son verdaderas ejecuta el mensaje “Ud. es Pablo y tiene 42 años de edad”.

Recuerde que todos los argumentos evaluados deben ser verdaderos para que se ejecute el bloque que se le indica.

Operador or

El operador or (“ó” en español) permite realizar dos o más evaluaciones, pero a diferencia del and, en este caso basta con que alguno de ellos sea verdadero para que ejecute el bloque.

1
2
3
4
5
6
7
numero = 34
valor = 80

if numero==1000 or valor==80:
    print("El número vale 1000 o el valor vale 80")
else:
    print("El número no es 1000 ni el valor es 80")

Operador not

El operador not invierte el resultado de una operación lógica.

1
2
3
4
>>> 1 == 1
True
>>> not 1==1
False

Notas sobre los operadores lógicos

Recuerden que siempre que realicemos evaluaciones es buena idea usar paréntesis para señalar, como en matemáticas, lo primero que se debe evaluar.

Ejemplo

1
2
3
4
5
6
a = 10
b = 1
c = 1
    
if (a==1 or b==1) and c ==1:
    print ("a o b valen 1 y c vale 1")

En el ejemplo anterior, evalúa primero el contenido del paréntesis (a == 1 or b == 1) y luego el que queda afuera (and c == 1) , finalmente evalúa el operador and.

updatedupdated2021-02-032021-02-03