# ## Profesores
# * Alvaro Montenegro, PhD,
# * Campo Elías Pardo, PhD,
# * Daniel Montenegro, Msc,
# * Camilo José Torres Jiménez, Msc,
# ## Asesora Medios y Marketing digital
# * Maria del Pilar Montenegro, pmontenegro88@gmail.com
# * Jessica López Mejía, jelopezme@unal.edu.co
# ## Jefe Jurídica
# * Paula Andrea Guzmán, guzmancruz.paula@gmail.com
# ## Coordinador Jurídico
# * David Fuentes, fuentesd065@gmail.com
# ## Desarrolladores Principales
# * Dairo Moreno, damoralesj@unal.edu.co
# * Joan Castro, jocastroc@unal.edu.co
# * Bryan Riveros, briveros@unal.edu.co
# * Rosmer Vargas, rovargasc@unal.edu.co
# * Venus Puertas, vpuertasg@unal.edu.co
# ## Expertos en Bases de Datos
# * Giovvani Barrera, udgiovanni@gmail.com
# * Camilo Chitivo, cchitivo@unal.edu.co
# ## Suma de variables y concatenación de variables
# Es posible sumar variables usando el símbolo **+**. Cuando las variables son numéricas, se **suman matemáticamente** y cuando son textos se **concatenan**. Revise cuidadosamente el siguiente ejemplo.
# In[ ]:
# "Sumar" dos textos
x = "Python es "
y = "asombroso"
z = x + y
print(z)
# In[ ]:
# Sumar dos números
n1 = 1
n2 = 5
suma = n1 + n2
print(suma)
# In[ ]:
# Escribir texto y números
print("la suma de", n1, "y", n2, "es igual", suma)
print("la suma de " + str(n1) + " y " +
str(n2) + " es igual " + str(suma))
# ## Operadores Aritméticos y redondeo
# Mediante el uso de operadores podemos utilizar Python para hacer cálculos que haríamos con una calculadora. Por ejemplo, podemos ejecutar operaciones muy sencillas teniendo en cuenta la siguiente tabla:
#
# | **Operador** | **Descripción** |
# | :---: | :---: |
# |`+`|Suma|
# |`-`|Resta|
# |`*`|Multiplicación|
# |`/`|División|
# |`**`|Potencia|
# |`%`|Módulo (residuo)|
# |`//`|División entera (cociente)|
#
# ## División y residuo entre enteros
#
# La división es una operación bien especial pues la mayoría de las ocasiones produce un número con cifras decimales. Sin embargo, cuando estábamos pequeños nos enseñaron a dividir enteros dando como respuesta un entero llamado **cociente** y lo que hacía falta para completar la división, un número llamado **residuo**. En Python podemos calcular esos valores con `//` para el **cociente** y `%`para el **residuo**. Por ejemplo, sabemos que:
#
# $$ 20 \div 3 = 6, \ \ \ \text{ con residuo } 2.$$
#
# Tenemos que en Python se escribe la división entre enteros como
#
# In[ ]:
res = 20 // 3
print(res)
# y el residuo de la división, es decir la operación módulo como
# In[ ]:
res = 20 % 3
print(res)
# ### Precedencia de operadores aritméticos
#
# Para que Python pueda traducir exitosamente una expresión numérica, existen reglas de precedencia en el orden de ejecución de las operaciones. Estas reglas son comunes a todos los lenguajes de programación. La siguiente tabla muestra la procedencia, es decir, el orden en el cual se ejecutan las operaciones aritméticas en una expresión numérica.
#
#
# | **Precedencia** | **Operadores** |
# | :---: | :---: |
# |0|`(...)`|
# |1|`**`|
# |2|`%`|
# |3|`*`, `/`|
# |4|`+`, `-`|
#
#
# Si queremos operar por ejemplo la expresión:
#
# $$ 5\times(3-5)^2-\cfrac{6}{81^{1/4}}$$
#
# tenemos que escribir:
# In[ ]:
res = 5*(3-5)**2-6/81**(1/4)
print(res)
# El cálculo ocurre de la siguiente forma
#
# * `(3-5)` es igual a `-2`
# * `(1/4)` es igual a `0.25`
# * `(3-5)**2` es igual a `(-2)**2` que es `4`
# * `81**(1/4)` es igual a `81**0.25` que es `3`
# * `5*(3-5)**2` es igual a `5*4` que es `20`
# * `6/81**(1/3)` es igual a `6/3` que es `2`
# * `5*(3-5)**2-6/81**(1/4)` es igual a `20 - 2` que es `18`
# ### Ejercicio
#
# Es muy importante usar bien los paréntesis, el uso o desuso puede generar problemas graves en las cuentas, encuentre el error y describa lo que hizo Python en los siguientes casos respecto a la operación anterior:
# In[ ]:
res = 5*3-5**2-(6)/(81**(1/4))
print(res)
# In[ ]:
res = 5*(3-5)**2-6/(81**1/4)
print(res)
# In[ ]:
res = 5*(3-5)**2-6/81**1/4
print(res)
# In[ ]:
res = 5*3-5**2-6/81**1/4
print(res)
# ## Operadores de comparación
# | **Operador** | **Descripción** |**Ejemplo**|**Resultado**|
# | :---: | :---: |:---: |:---: |
# |`==`|Prueba si dos valores son iguales| `3==3` | `True`|
# |`!=`|Prueba si dos valores no son iguales entre si| `2!=3` | `True` |
# |`<`|Prueba si el valor de la izquierda es menor que el de la derecha| `4<3`|`False`|
# |`>`|Prueba si el valor de la izquierda es mayor que el de la derecha| `4>3`|`True`|
# |`<=`|Prueba si el valor de la izquierda es menor o igual que el de la derecha|`4<=3`|`False`|
# |`>=`|Prueba si el valor de la izquierda es mayor igual que el de la derecha|`4>=3`|`True`|
# ## Operadores Lógicos
# | **Operador** | **Descripción** |**Ejemplo**|**Resultado**|
# | :---: | :---: |:---: |:---: |
# |`and`|Regresa verdadero si el valor de las izquierda y el de la derecha son verdaderos| `(3<4)and(5>1)`|`True`|
# |`or`|Regresa verdadero si uno de los dos valores a(izquierda o derecha es verdadero, o ambos| `(3>4)or(5<1)`|`False`|
# |`not`|Regresa verdadero si el valor que se está evaluando es falso|`not(3>2)`|`False`|
# ### Ejercicio
#
# Verifique que entiende que hace el siguiente código. ¿Cuál es la salida?
# In[ ]:
edad = 15
estado = (edad>12)and(edad<20):
print('estado =', estado)
# ## Resultados con números complejos
# Revise la siguiente línea y asegúrese que la entiende. Si tiene dudas consulte a sus profesores o asistentes monitores.
# In[ ]:
res = 3+(-4)**(1/2) # Recordemos un poquito de nuestras matemáticas
print(res)
# ## Redondeo de números reales
# Finalmente, una función elemental y útil para el tratamiento de números decimales es `round`. La usamos para redondear los valores reales con el número de decimales que escojamos. Por defecto el redondeo quita todas las cifras decimales. Por favor revise los siguientes dos ejemplos y haga sus pruebas propias.
# In[ ]:
# Cálculo original
n1 = 47 / 3
print(n1)
# In[ ]:
# Redondea sin cifras decimales
n2 = round(n1)
print(n2)
# In[ ]:
# Redeondeo con tres cifras decimales
n3 = round(n1, 3)
print(n3)
# ### Ejercicio
#
# Use la función `round()` para redondear el número $\pi$ con 6 cifras decimales.
#
# Para poder usar el número $\pi$ almacenado en la variable denominada `pi` del módulo `math`, vamos a usar el siguiente código: `from math import pi`
# In[ ]:
# importando la variable que almacena el número pi:
from math import pi
# imprime el número pi con 6 cifras decimales: