Operadores

Sitio: Facultad de Ingeniería U.Na.M.
Curso: Informática ET241/EM241/IC241/IN241/IM204
Libro: Operadores
Imprimido por: Invitado
Día: lunes, 22 de julio de 2024, 16:07

1. Matemáticos

Los operadores aritméticos Python

Los operadores aritméticos se utilizan con los valores numéricos para realizar operaciones matemáticas comunes:

Veremos cada uno de ellos escribiendo en Spyder para realizar pruebas con el propósito de fijar los conceptos.

1.1. Operador Suma

x = 5
y = 3
print(x + y)

Escribir las siguientes líneas de Python: 

 

Figura 1

  

Para que el usuario introduzca un dato mediante el teclado se utiliza la instrucción input.

 

Escribir el código:

 

Figura 2


  

a. ¿Qué pasa si se elimina  int de las líneas 10 y 11?

 

b. ¿Qué resultado arroja? ¿los valores se suman?

 

c. ¿Puede explicar el por qué del error?

 

d. ¿Si quisiera ingresar y sumar dos números con decimales, qué cambiaría? 

 

e. ¿Qué hace la función type en Python?

1.2. Operador Resta

x = 5
y = 3
print(x - y)


 Figura 1

 Figura 2

 

 

 

 

Preguntas:

  

a. ¿Qué pasa si elimino float sólo de la línea 16? ¿y si lo quito también de la línea 17?

 

b. Si el resultado aparece con demasiados decimales ¿cómo podría dar formato de dos decimales? 

  

c. ¿Qué debería modificar para que sea una resta de números enteros?

 

 Para limitar a dos decimales se puede utilizar round(valor, 2) o format {valor:.2f}

 

1.3. Operador Multiplicación

x = 5
y = 3

print(x * y)

 

Figura 1

Figura 2

a. ¿Qué operador se usó para “partir” la línea 18?

 

b. ¿Qué pasa si sacamos las palabras int de las líneas 16 y 17? ¿Entiende el por qué del error?

 

c. ¿Qué tipo de marcador usa el format? ¿Indice o nombre?

 

Figura 3


a. ¿Qué modificación tiene éste Script respecto del anterior?

 

b. ¿Qué pasa si no se modifica el orden de los argumentos dentro del format?

 

c. ¿Qué pasa si ingreso números reales en lugar de números enteros al ejecutar la línea 16 y17?

 

1.4. Operador División

x = 12
y = 3
print(x / y)


 Figura 1


a. ¿En qué línea tira el error si cambia la línea 10 por y=0?

 

b. ¿En qué línea tira el error si cambia la línea 9 por x=0?

  


 Figura 2


a. ¿Qué tipo de dato se almacena en x e y?

 

b. ¿Cómo puedo saber el tipo de dato en Python? ¿Usando que operador? 

 

c. Modifique el código para que el Intérprete de Python les diga qué tipo de variable son es x e y.

 

d. ¿Qué tipo de dato es x/y? Escriba print(type(x/y)) para ver el tipo de dato

 

e. ¿Qué pasa si cuando le pide que ingrese un número Ud. ingresa un número real?

 

f. ¿Qué sucede si se elimina de la línea 16 y 17 el operador int?

  


 Figura 3


a. ¿Qué tipo de dato es x e y?

 

b. ¿Por qué si en la línea 17, ingresamos para y el valor 0?

 

Mas adelante veremos como evitar este tipo de errores, con la sentencia Try.

1.5. Operador Módulo

El operador módulo se invoca mediante el símbolo "%" .

Este operador obtiene el resto R de una división. (A/B=C+R), NO devuelve la parte decimal.

x = 37
y = 7
print(x % y)

print(5%3)

 Figura 1

 

a. ¿Qué pasa si se ingresan valores enteros? ¿funciona?

 

b. ¿Qué pasa si se ingresa valores reales? ¿funciona?

 

c. ¿Qué pasa si se ingresa un valor real y otro entero?¿funciona?

  


  

 Figura 2



 

¿Cúal es la salida si se ingresa x=3 e y=2? ¿Tira error?¿Por qué?

 


   

 

 Figura 3

  


a. ¿Qué cree que hace la línea 25?

  

b. ¿Qué cree que hace la línea 27?

  

c. Cuando un número x es par ¿cuánto da el resto si lo dividimos por 2?

  

d. Cuando un número y no es múltiplo de 3, ¿cuánto da el resto de y/3?

1.6. Operador División Entera

El operador "//" (doble barra diagonal) devuelve la parte entera de una división.

x=300
y=11
print(x//y)

Al hacer floor division se obtiene un resultado entero,
(descartando cualquier resultado fraccional) podés usar el operador //.

Se conoce como División baja, o Floor Divison, floor significa piso en inglés.


Figura 1

 

Interprete el resultado del operador // observando los resultados.

  


Figura 2

 

Interprete el resultado del operador // observando los resultados.

  

 

¿Cuál es el resultado de utilizar // ?

1.7. Operador Potencia

El operador "**" se utiliza para calcular la enésima potencia de un número: x elevado a la y

x=3
y=7
print(x**y)

El operador permite expresar potenciación x elevado a la y => x**y si lo queremos expresar en lenguaje Python.

  

 Figura 1

 

 Figura 2

a. ¿Cómo debería corregir el código para que la salida mostrada en la línea 27 

 

sea la correcta sin dejar de utilizar los marcadores vacíos de format?

 

b. ¿Qué sucede si se ingresan números reales? ¿qué línea tira error y por qué?

  

c. ¿Qué sucede si eliminamos el operador int de las líneas 24 y 25? ¿tira error? ¿por qué?

  

d. ¿Qué sucede si reemplazamos int por float? ¿se puede realizar la potenciación de

 

números reales?

1.8. Orden de Evaluación y Precedencia

Si escribimos la siguiente expresión:

2+3*4**5/6-2

Creo que a cualquiera le surge la duda de ¿cómo asociar los números para resolver la operación?

Alternativas podrían ser:

Bueno, cada lenguaje  tiene una Ley que sigue para interpretar el orden en que son evaluados los operandos (potencia, multiplicación, división, suma, resta)

Esta se conoce como Ley de Orden de Evaluación y Precedencia .

Para poder recordarla le propongo una regla nemotécnica.

Figura 1

 

Volviendo a nuestro ejemplo, vamos a poner paréntesis; que es lo que nos ayuda a agrupar las operaciones:

  1. 2+3*4**5/6-2   =>  potencia => 2+3*(4**5) / 6-2 => 2+3*1024/6-2
  2. 2+3*1024/6-2  => multiplicación =>2+(3*1024)/6-2 = 2+ 3072 /6-2
  3. 2+ 3072 /6-2 => división  => 2+ (3072 /6)-2= 2+512-2
  4. 2+512 -2=> suma =>(2+512)-2= 514-2
  5. 514-2 => resta => 512

Veamos si es cierto nuestro análisis..

Figura 2

Figura 3

Coincide con nuestro análisis.

   

 

 Podemos ver en el interprete de Python que si usamos los () podemos prescindir de las reglas de  precedencia de evaluación ya que los paréntesis hacen que se resuelvan desde el más anidado hasta el menos anidado, de la misma manera que se hace en matemática.

1.9. Preguntas

a. ¿Cuál representa en Python la expresión anterior de manera correcta?

  1. 3**a+b/(a-(1/a))
  2. 3**(a+b)/((a-1)/a)
  3. 3**(a+b)/(a-(1/a))
  4. 3*(a+b)/(a-(1/a))
b. Si ejecutamos el siguiente código: tres = 3 cinco = 5 tres = cinco ¿Qué aparecerá en pantalla si escribimos "tres" y pulsamos enter en el intérprete de Python?
  1. 3
  2. 5
  3. tres
  4. 8
c. ¿Qué caracter utilizamos en Python para obtener el resto de una división?
  1. /
  2. %
  3. $

1.10. Operador Igual

Operador Igual

Es importante notar que el operador asignación, permite asignar el valor de lo que está del lado derecho al lado izquierdo.

Ejemplo:

x= 5    # asigna el valor 5 a x  , x<-5
print(x)

2. Asignación y algo más

En Python tenemos el signo = (asignación) que tiene varios usos.
Veamos algo sobre el tema.

2.1. Asignación Múltiple

Asignación Múltiple, Intercambio de Variables

En Python existe una forma que se conoce como asignación múltiple.

Una asignación múltiple permite realizar una inicialización o dar valores a múltiples variables en una misma línea, por ejemplo:

a,b,c=1,2,3 es equivalente a tres lineas=>      
a=1
b=2
c=3

Podemos ver que se va asignando en el orden que aparecen. También esta asignación múltiple permite realizar otra operación muy curiosa la cual veremos.

Esta asignación múltiple es muy útil al momento de "rotar valores".

Veamos un ejemplo:

a,b = 10,1    # en este punto a=10 y b=1, se corresponde la asignación con el orden.

a,b = b,a     # en este punto se produce una rotación entre a y b.

 

Figura 1

Si quisiéramos hacer esto sin asignación múltiple se necesitaría una variable más:


Figura 2

Como vemos este tipo de asignación simplifica el código.

Una sola línea : a,b=b,a se corresponde con tres líneas temp=a, a=b, b=temp. Veamos de manera más gráfica.

Figura 3

Asignaciones simples no serían suficientes para lograr esta rotación, tal como lo vemos a continuación:

Figura 4 Figura 5
En este caso al finalizar perdimos el valor de b=10 ! En este caso al finalizar perdimos el valor de a=1 !

Como era de esperarse, en cualquier caso se pierde el valor de a o de b, es por eso que necesitamos una tercer variable para hacer la rotación  o podemos usar la asignación múltiple de Python

Figura 1

2.2. Notación Compacta

Veamos una manera comprimida o avanzada de usarlo.

Así que en lugar de escribir en Python

b=b-3    # podríamos escribir

b-=3      # para indicar lo mismo.

Esto lo suele usar los programadores avanzados como una maneras abreviada de escribir código, solamente eso.

Recordar que va el = en la notación abreviada DESPUÉS del signo de la operación y que el valor de la variable se modifica!!

Veamos un ejemplo de cada uno, se pide al alumno escribir y analizar lo que hace cada línea.

 Escribir el código: 

Figura 1

Figura 2


3. Lógicos

Introducción

Los operadores lógicos se utilizan para combinar las sentencias condicionales:


3.1. AND

Operador : and

Este operador "and" , también se conoce como "Y" lógico

"and", es una Palabra Clave o Reservada.

Para entender el concepto vamos a usar una analogía hidráulica.

Figura 1

Esto es una analogía de lo que sería la operación de un AND.

Si queremos que el agua pase en el sentido de la flecha, las DOS llaves de paso DEBEN estar abiertas, de lo contrario NUNCA pasará el agua.

Plantemos las posibilidades en una tabla:

 Figura 2

Podemos ver que la ÚNICA posibilidad es que ambas llaves estén abiertas.

Podemos observar que los estados de las llaves de paso son del tipo Booleano, es decir, sólo permiten 2 estados:  Abierto o Cerrado.

Si planteamos esto con los valores posibles True ( abierta) o False ( cerrada) quedaría:

 Figura 3

Esta es la tabla de AND, se conoce como álgebra de Boole, o álgebra booleana, fué definida por George Boole en una publicación de 1847.


Esta tabla se utilizan el los sistemas lógicos en particular en Electrónica, y sabemos que los Microprocesadores están formados por transistores

que son componentes Electrónicos, de allí la relación tan estrecha. Como estos sistemas funcionan con Sistema de Numeración Binaria, la tabla también se suele escribir:

 Figura 4

Veamos esto en Python como se usa, vamos a mostrar la tabla para “and”

  

Figura 5

Podemos ver en la figura como se señala el uso del operador “and” dentro de format en este caso particular.

Bien podría estar en cualquier otra expresión.

 

¿Cuántas combinaciones tenemos para dos entradas distintas donde cada entrada puede tener dos estados o valores posibles?

Con el propósito de darle algo mas de sentido con algún ejemplo, vamos a introducir el operador > (mayor), los cuales veremos en el próximo tema con mayor profundidad.

El operador mayor  realiza una comparación y retorna un valor booleano.  Vemos un ejemplo:

 

Figura 6

 

a. ¿Cuáles son las dos entradas de el operador and que se encuentra como argumento de format en la línea 14?

b. Ingrese varios valores para que le permitan comprobar la tabla de and de la figura 3. ¿ Obtuvo los valores correctos?

c. ¿Qué pasa para si cambio format(x<y and a<b) en la línea 14? Modifique en texto del string del print para que la salida se la correcta para esta modificación propuesta



3.2. OR

Operador : or

or, es una Palabra Clave o Reservada. El operador "or" también se conoce como el "O" lógico

Figura 1

Esto es una analogía de lo que sería la operación de una OR. Si queremos que el agua pase  en el sentido de la flecha, al menos una de las DOS llaves de paso DEBEN estar abiertas , de lo contrario NUNCA pasará el agua.
Realizando el razonamiento al igual que en el Operador AND, tendremos:

Figura 2

Podemos ver que la ÚNICA posibilidad para que NO pase el AGUA en que las DOS lLaves estén cerradas.
Podemos observar que los estados de las llaves de paso son del tipo Booleano, es decir, sólo permiten 2 estados : Abierto o Cerrado.
Si planteamos esto con los valores posibles True (abierta) o False (cerrada) quedarían:

Figura 3

Esta es la tabla de OR  que forma parte de las publicaciones de George Boole.

Podemos escribir la tabla también:

Figura 4

Veamos esto en Python como se usa, vamos a mostrar la tabla para “or"

 

Figura 5

Podemos ver en la figura como se señala el uso del operador “or” dentro de format en este caso particular.

Bien podría estar en cualquier otra expresión.

Se suele usar mucho en programación las tablas and (en el capítulo anterior) y or (vista aquí).

Siempre hay DOS ENTRADAS y  producen UNA ÚNICA SALIDA (TRUE o FALSE)

Se plantean algunos ejercicios para que los alumnos razonen y fijen el concepto de and y or.

 

  • 3<5 and 5<8 : es ¿Verdadero o Falso?
  • 3<5 or 5<8 : es ¿Verdadero o Falso?
  • 3<5 and 9<8 : es ¿Verdadero o Falso?
  • 3<5 or 9< 8 : es ¿Verdadero o Falso?
  • estoy vivo and estoy en cuarentena: es ¿Verdadero o Falso?
  • estamos en el 2023 and hay clases presenciales :  es ¿Verdadero o Falso?
  • estamos en el 2023 or hay clases presenciales : es e¿Verdadero o Falso?

  

Figura 6

a. ¿Cuáles son las dos entradas del operador or que se encuentra como argumento de format en la línea 14?

b. Ingrese varios valores para que le permitan comprobar la tabla de or de la figura 3. ¿ Obtuvo los valores correctos?

c. ¿Qué pasa para si cambio format(x<y and a<b) en la línea 14? Modifique en texto del string del print para que la salida sea la correcta para ésta modificación propuesta.



3.3. NOT

Operador: not

not es una Palabra Clave o Reservada, este operador invierte el valor de la variable Booleana, Si es verdadero lo hace falso y si es falso lo hace verdadero.

Figura 1

Figura 2

En este ejemplo vemos que el valor almacenado en x es del tipo String, ya que input no tiene ningún operador int o float.

Es por eso que en la línea 10 , al mostrar el tipo, nos indica que es Class 'str'.

pero en la línea 11 y 12 , utilizamos el operador 'not', entonces el resultado es un valor lógico ( booleano) que puede ser True o False.

En particular en la línea 12 lo usamos dos veces: not(not(x)) .

 

Figura 3

Ver que para cualquier ingreso , la salida de la línea 12 da siempre False.

¿Qué pasa si no se ingresa ningún número solo se da ENTER cuando pide los números, es lógica la salida?

4. Relación

Introducción

Estos operadores comparan 2 objetos y devuelve verdadero (True) si la comparación es cierta o falso (False) en  caso contrario.


4.1. Igual igual

Igual igual

Compara si dos valores (objetos) son iguales  (==). No confundir con el operador de asignación (=).

Figura 1


Notar que = no es lo mismo que ==

No es lo mismo usar  = que usar  == , el operador = ( igual ) es de asignación, y el operador == es de Relación!!

Si escribo x=3, estoy asignando el valor 3 a x, Pero si escribo x==3, en lenguaje coloquial estaría diciendo: ¿Es x=3? ,vemos que los signos de pregunta hacen la Diferencia, estos signos de pregunta en el lenguaje Python se expresa con dos iguales ==.

Figura 2

Figura 3

a. ¿Qué pasa si se ingresa un texto por ejemplo aabbcc para a y xxyyzz para b? ¿Funciona, sí o no?¿Por qué?

b. ¿Qué pasa si se ingresa un a=2.5 para b=3.7? ¿Funciona, si o no?¿Por qué?

c. ¿Qué pasa si se presiona ENTER , cuando pide el ingreso de a y b? ¿Funciona?¿Por qué?

d. ¿De qué tipo es a y b y cómo puedo ver mostrar por pantalla el tipo de a y b?

e. ¿Cómo modifico la línea 10 y 11 para que sean tomados a y b como enteros?

f. ¿Como modifico la línea 10 y 11 para que sean tomados a y b como reales?

4.2. Distinto

Distinto

Compara si dos valores (objetos) son distintos  (!=). 

Por ejemplo:

Figura 1



Notar que en el teclado no existe el símbolo matemático de distinto  ( ) , así que este se reemplaza por !=.

Figura 2

Figura 3

a. ¿Qué pasa si se ingresa un texto por ejemplo aabbcc para a y xxyyzz para b? ¿Cuál es la salida? ¿Es correcta?

b. ¿Qué pasa si se presiona ENTER  cuando pide el ingreso de a y b? ¿Funciona?¿Por qué?

c. ¿Cómo modifico la línea 10 y 11 para que sean tomados a y b como números enteros?

d. ¿Cómo modifico la línea 10 y 11 para que sean tomados a y b como números reales?

4.3. Mayor que

Mayor que

Compara si el valor (objeto) de la izquierda es mayor que el que se encuentra a la derecha del operador.

 Figura 1

La salida sería True.

Figura 2

a. ¿Qué pasa si se ingresa a=aabb y b=aabb ( de iguales  valores ) ?¿Es correcta la salida?

b. ¿Ingresa a=23 y b=9, la salida es correcta? ¿Por que? Busque justificar la respuesta.

c. ¿Ingresa a=9 y b=7, la salida es correcta? ¿Por que? Busque justificar la respuesta.

d. ¿Qué debería modificar para que si a=23 y b=9 la comparación a>b me de True?


4.4. Mayor o igual

Mayor o igual

Compara si el valor (objeto) de la izquierda es mayor o igual (no menor) que el que se encuentra a la derecha del operador.

 Figura 1


Así como decimos "mayor o igual" también es el orden de los operadores.
No es correcto escribir => , está MAL.





Figura 2




a. ¿Qué pasa si ingresamos a=x y b=X? ¿Es correcta la salida? ¿Por qué?

b. ¿Qué pasa si ingresamos a=0 y b=9? ¿Es correcta la salida? ¿Por qué?

c. ¿Qué valores decimales corresponden para el ASCII x y X?

d. ¿Qué valores decimales corresponden para el ASCII 0 y 9?

e. ¿Qué modificación deberíamos hacer para que ingresando a=0 y b=9, la salida 0>=9 sea False?

4.5. Menor que

Menor que


Compara si el valor (objeto) de la izquierda es menor que el que se encuentra a la derecha del operador.

 Figura 1

La salida sería False por que 20 NO es menor que 15.

Figura 2

a. ¿Cómo se llama el último caracter de la línea 16?

b. ¿Qué efectos tiene el caracter \?


4.6. Menor o igual

Menor o igual

Compara si el valor (objeto) de la izquierda es menor o igual (no menor) que el que se encuentra a la derecha del operador.

Figura 1


Así como decimos "menor o igual" también es el orden de los operadores.
No es correcto escribir =< , está MAL.


Figura 2



a. ¿Qué sucede si cambio las palabras "menor o igual" por "igual" dentro del print , en la sección de código en verde de la línea 16?
b. ¿Cuántos argumentos recibe format en la línea 16?
c. ¿Qué sucede si elimino los índices numéricos dentro de los marcadores en la línea 16 ({0}{1}{2})? ¿Funciona? ¿Por qué?