2.4. Variables, expresiones y operadores
Objetivo de la sección
El objetivo de esta sección es introducir y discutir los conceptos de instrucción, valor, variable, asignación, expresión y operador.
Para empezar, lea con cuidado el siguiente programa escrito con el lenguaje de programación Python. Aunque breve, ilustra los conceptos más básicos del lenguaje, empezando por el concepto de instrucción.
>>>
1) v1 = 5
2) v2 = 1 + 2
3) v3 = v1 + v2
4) v4 = v3 / (4 + 1)
5) print("v4:", v4)
>>>
Este programa está compuesto por 5 instrucciones, cada una de las cuales
se escribió en una línea aparte. Como veremos, cada una de estas
instrucciones le da una orden al computador y esa orden se tiene que
terminar de ejecutar antes de que se pueda pasar a la siguiente
instrucción. Esto quiere decir que podemos estar seguros de que la
última instrucción (print(v4)
)
se va a ejecutar después de que se hayan ejecutado las 4 instrucciones
anteriores. ¡Aunque puede parecer simple, este concepto es
extremadamente importante!
Lectura del código anterior por PPI:
1) Se define la variable "v1" y se le asigna el valor 5, el cual es un int.
2) Se define la variable "v2" y se le asigna el resultado de la suma de los int 1+2; es decir v2=3
3) Se define la variable "v3" y se le asigna el resultado de la suma de v1 +v2; v3 =5+3 =8
4) Se define la variable "v4" como la división entre v3 y la suma de los enteros (int) 4 y 1; es decir
v4 = 8/5
5) se muestra por pantalla el str (cadena de texto) "v4:" y el valor almacenado en v4
A continuación vamos a ver esto en nuestro notebook de google colab:
>>>
# Seccion 2.4
1) v1 = 5
2) v2 = 1 + 2
3) v3 = v1 + v2
4) v4 = v3 / (4 + 1)
5) print("v4:", v4)
v1 = 5
v1
>>5
v2=1+2
v2
>> 3
v3=v1+v2
v3
>> 8
v4=v3/(4+1)
v4
>> 1.6
print("v4:", v4)
>> v4:1.6
>>>
2.4.1. Analizando la primera instrucción
Analicemos ahora la primera instrucción del programa:
v1 = 5
Esta instrucción se puede separar en dos partes dividas por el carácter =
. En la parte derecha, encontramos sólo el carácter 5
, el cual expresa el valor que corresponde al número natural 5.
En la parte izquierda encontramos sólo el texto v1
. Como sabemos, este texto no puede expresar ninguno de los tipos de datos que ya conocemos (int, float, str) así que v1
no puede ser un valor. En este caso, v1
representa entonces el nombre de una variable definida por el programador.
Una variable es un espacio en la memoria del
computador en el cual se puede almacenar un valor o del cual se puede
leer un valor, mientras se ejecute el programa. Cuando un programador
define una variable, le asigna un nombre o identificador para que sea
fácil de recordar y utilizar en el resto del programa. En nuestro
ejemplo, la variable tiene el nombre v1
.
Nota:
Se debe procurar que los nombres de las variables sean lo más
descriptivos posibles para que su objetivo sea claro. En el ejemplo la
variable tiene un nombre que no es muy explícito, pero en las siguientes
líneas quedará claro por qué se seleccionó el nombre v1
. En el programa completo del inicio del capítulo, una de las variables se llamaba hipotenusa
: sería difícil encontrar un nombre que expresara con más claridad el objetivo de esa variable.
Finalmente, volvamos al carácter =
que separa la variable que se encuentra a la izquierda del valor que se encuentra a la derecha. En Python, el carácter =
se utiliza para especificar que en un programa se debe hacer una asignación. Es decir, cuando se ejecute una instrucción con una asignación, el programa debe tomar el valor que se encuentra a la derecha del carácter y lo debe almacenar en la variable que se encuentra a la izquierda.
La instrucción que estamos analizando entonces se encarga de crear una variable con el nombre v1
y almacenar en ella el valor entero 5
.
En Python, el tipo de una variable depende del valor que esté
almacenado en ella así que en este caso la variable será de tipo int 2.
Cuidado: Cuando se hace una asignación, el valor de la derecha se almacenará en la variable de la izquierda. Es un error bastante común entre principiantes escribir instrucciones como ‘5 = v1’: esta instrucción no sería válida en Python y el intérprete mostraría un error similar al siguiente:
2.4.2. Operadores y expresionesSi analizamos ahora la segunda línea del programa, veremos que tiene varios de los elementos que acabamos de estudiar: v2 = 1 + 2
A la izquierda tenemos una variable llamada En Python, una expresión es una combinación de
valores, literales, variables, llamados y operadores, que al evaluarse
produce un valor. Cuando escribimos una instrucción como la del ejemplo,
le estamos indicando a Python que la expresión de la derecha debería
evaluarse para producir un valor y que ese valor debería almacenarse en
la variable. En nuestro ejemplo, el valor de la expresión de la derecha
será
2.4.3. Instrucciones con variablesA continuación, analizaremos las siguientes dos instrucciones del
programa, pero recordando un principio muy importante: para que estas
instrucciones se ejecuten, se tienen que haber ejecutado antes las
anteriores. Es decir, que cuando estas instrucciones se ejecuten ya se
habrá creado la variable v3 = v1 + v2
Esta instrucción es muy similar a la anterior: a la nueva variable Ahora bien, ¿cómo puede calcular Python la suma de dos cosas que no
son literales? La respuesta es que también tiene que evaluar esas dos
cosas para averiguar qué valor tienen. Como En este punto volvimos a una situación idéntica a la de la instrucción
anterior y ya sabemos que se va a resolver dejando el valor entero
Nota: La evaluación de la instrucción anterior fue exitosa porque a las variables
2.4.4. Paréntesis y tipos de datosAntes de pasar a la siguiente instrucción, observemos lo que responde
Python cuando le preguntamos por los tipos de las variables >>> type(v1)
<class 'int'>
>>> type(v2)
<class 'int'>
>>> type(v3)
<class 'int'>
No es una sorpresa que Pasemos ahora a la siguiente instrucción, en la que nuevamente tenemos una asignación y una expresión con operadores a la derecha. v4 = v3 / (4 + 1)
Lo primero que tenemos que notar es que en este
caso se utilizaron paréntesis, los cuales tienen el mismo efecto que
tendrían si estuviéramos resolviendo un ejercicio de matemáticas. En
este caso los paréntesis son obligatorios porque en Python los
operadores matemáticos siguen las reglas de precedencia tradicionales.
Es decir que la expresión En este programa, Python empezará a calcular los valores que se están
dividiendo, empezando por el de la izquierda. Es decir que buscará el
valor de la variable v4 = 8 / (4 + 1)
Debido a que el divisor sigue siendo una expresión, Python evaluará su valor y reescribirá los que estaba dentro de los paréntesis. La nueva estructura de la instrucción será: v4 = 8 / 5
Finalmente tenemos una instrucción que sólo tiene
literales y el operador de división, así que la expresión de la derecha
se puede obtener simplemente calculando la división entre 8 y 5, para
luego asignárselo a la variable v4 .
2.4.5. Otro tipo de instruccionesSi revisamos con cuidado las 4 instrucciones que hemos analizado, nos daremos cuenta que la única orden que le hemos dado al programa es que almacene valores dentro de variables. Como vamos a ver a continuación, la última instrucción de nuestro programa es fundamentalmente diferente a las anteriores porque no hace ninguna asignación. print("v4:", v4)
En primer lugar, revisemos qué pasa cuando se ejecuta esta línea. Suponiendo, como siempre, que ya se habían ejecutado las líneas anteriores del programa, al ejecutar esta línea lo que debería ver el usuario en la consola es lo siguiente. v4: 1.6
Lo que hace nuestra instrucción es una invocación a una función básica de Python llamada En este caso la invocación a la función se está haciendo con dos
parámetros que podemos identificar porque aparecen dentro de paréntesis y
están separados por una coma. El primer parámetro ( Al igual que una asignación necesita calcular el valor de la derecha para que se pueda almacenar el valor en la variable, para hacer una invocación a una función se necesitan los valores de los parámetros. En nuestro caso, el primer parámetro es un literal así que su valor ya es conocido; como el segundo parámetro es una variable, Python buscará el valor que se había almacenado en la variable y lo usará para hacer la invocación. El último paso en la ejecución de nuestro programa no podemos verlo:
son las instrucciones que se encuentran dentro de la función
2.4.6. Comentarios en PythonEl siguiente programa es exactamente equivalente al que hemos estado estudiando, con la diferencia de que se han incluido comentarios. # Definir 4 variables (v1 hasta v4)
v1 = 5
v2 = 1 + 2
v3 = v1 + v2 # El valor de v3 es de tipo int porque es la suma de dos int
v4 = v3 / (4 + 1) # El valor de v4 va a ser de tipo float
print("v4:", v4) # Mostrarle al usuario el valor de v4
Un comentario en un programa es una anotación que
dejó el programador para que otros programadores, o él mismo, puedan
entender con más facilidad el objetivo de un programa o de un bloque de
código. En el caso de Python, la forma más común de incluir comentarios
es utilizando el carácter En el caso de nuestro ejemplo, se ha incluido un número relativamente grande de comentarios para un programa tan sencillo. Sin embargo, esto sirve para ilustrar un principio importante: ante la duda, es mejor tener más comentarios que menos comentarios en un programa. Tip Si tiene dudas sobre si debería incluir uno o no, entonces inclúyalo. En la mayoría de los casos siempre será mejor tener más comentarios que menos comentarios. 2.4.7. Más operadores en PythonEn las secciones anteriores estudiamos sólo los operadores para sumar y dividir. A continuación, describimos otras de las operaciones que es posible hacer en Python. 2.4.7.1. Operadores para númerosLos siguientes son los operadores disponibles para hacer operaciones con números. Es decir que estos operadores pueden aplicarse sólo sobre datos que sean de tipo int o float.
1) El término aridad hace referencia a la cantidad de operandos sobre los que se aplica el operador. Los operadores unarios sólo requieren un operador mientras que los binarios necesitan 2. (2) La precedencia de un operador indica en qué orden se evaluarán
varios operadores en caso de que no haya paréntesis que permitan
resolver el orden. En Python, el primer operador que se evaluará es el
operador de exponenciación. En caso de que la precedencia de dos
operadores sea la misma, los operadores se aplicarán de izquierda a
derecha. Por ejemplo, en el caso de la expresión (3) En Python, la división siempre produce un resultado de tipo
float, el cual muchas veces se redondea automáticamente. En el caso del
ejemplo, la división (4) Para valores positivos, la operación de división entera calcula la parte entera del resultado de la división y por ende siempre es un número entero. En el caso de la expresión Para números negativos, el resultado es el mayor número entero menor o
igual al resultado de la división. Es decir que para el valor de la
expresión
2.4.7.1.1. El operador módulo (%)La operación módulo calcula el residuo de la división entera entre dos números. Por ejemplo, el valor de la expresión La operación módulo y la división entera se complementan. Cuando se
está aprendiendo a dividir, es común que el resultado de una división se
exprese como un valor y su residuo. Así, >>> entero = 27 // 10
>>> residuo = 27 % 10
>>> print(entero, residuo)
2 7
La operación módulo es muy utilizada también para averiguar la paridad de un número: el resultado de la expresión x%2 será 0 sólo cuando x sea un número par y será 1 cuando x sea impar
2.4.7.2. Operadores para cadenas de caracteresPython sólo ofrece dos operadores que se pueden aplicar sobre cadenas de caracteres.
El operador de concatenación se utiliza para unir dos cadenas de caracteres y convertirlas en una sola. El operador de repetición se aplica sobre dos operandos de diferente tipo: una cadena de caracteres y un entero. El resultado será una cadena de caracteres que será el resultado de repetir la cadena tantas veces como indique el número. 2.4.7.3. Operadores con acumulaciónEn Python existen también versiones alternativas de algunos de los operadores presentados que permiten acumular los valores. Veamos primero un ejemplo de esto: >>> a = 1
>>> a += 2
>>> a += 5
>>> print(a)
8
En la primera instrucción del programa anterior estamos creando una nueva variable con el valor >>> a = 1
>>> a = a + 2
>>> a = a + 5
>>> print(a)
8
Como
se puede ver, la única diferencia significativa es que el primer
programa es un poco más corto. Otros operadores con acumulación
disponibles incluyen 2.4.7.4. Expresiones con múltiples tipos de datosEn Python no es posible escribir expresiones que combinen valores de diferentes tipos a menos que se hagan conversiones explícitamente. Por ejemplo, para construir una cadena que combine caracteres y números se debe hacer una conversión como en el siguiente ejemplo: 'El salón asignado es el ' + str(614) + ' del edificio ML'
Por otro lado, para hacer operaciones numéricas con valores almacenados en una cadena se debe convertir esa cadena a un número como en el siguiente ejemplo: 1 + float('2.3') + 3
Finalmente, si se quieren hacer combinaciones de tipos se deben utilizar paréntesis que eliminen los posibles problemas. 'El resultado es ' + str(2**3)
En el ejemplo anterior lo primero que se hace es evaluar la operación de exponenciación, luego se convierte el resultado a una cadena y finalmente se concatenan las dos cadenas. 2.4.8. Ejercicios
¿Qué resultado se obtendrá al evaluar la siguiente expresión en Python? 'a' * 3 + '/*' * 5 + 2 * 'abc' + '+'
¿Qué resultado se obtendrá al evaluar las siguientes expresiones en Python? 25 / 3 // 2
25 / (3 // 2)
(25 / 3) // 2
25 // 3 / 2
25 // (3 / 2)
(25 // 3) / 2
2.4.9. Más allá de PythonEsta sección presentó en detalle los detalles más importantes de la sintaxis de Python. Sin embargo, los conceptos presentados son comunes a la mayoría de lenguajes de programación imperativos 6. Aunque puede parecer que las diferencias entre Python y otros lenguajes son muy grandes, en realidad los conceptos que se manejan son básicamente los mismos: todos los lenguajes tienen literales, tienen variables para almacenar temporalmente valores, tienen expresiones que se tienen que evaluar, y tienen mecanismos para invocar fragmentos de código definidos en algún otro lugar. Si tenemos perfectamente claro todo lo expuesto en este capítulo, aplicar las mismas ideas a otros lenguajes debería ser muy sencillo.
|
1) expresión incorrecta en lineas
ResponderBorrar2,3,4 porque existen variables no definidas