Variables y operaciones aritméticas#

Hay diferentes formas de empezar a aprender Python, o más en general, programar. Una posible es empezar usándolo como una calculadora.

Operaciones aritméticas#

Las operaciones aritméticas básicas en Python son las siguientes:

Operación

Operador

Ejemplo

Resultado

suma

+

2 + 3

5

resta

-

2 - 3

-1

multiplicación

*

2 * 3

6

división

/

2 / 3

1.5

exponenciación

**

2**3

8

división entera

//

7 // 3

2

módulo o resto

%

7 % 3

1

que son las mismas que en la mayoría de los lenguajes. La única que difiere de es la exponenciación **, que en otros lenguajes suele ser ^.

Podemos probarlas en una celda de código:

2**3
8

En expresiones compuestas por múltiples operadores, ciertos operadores tienen precedencia sobre otros. En orden de prioridad:

  1. exponenciación

  2. multiplicación o división

  3. suma o resta

Por ejemplo:

1 + 2 * 3
7

Es decir, evaluó primero el 2 * 3 y después sumó 1.

Si quisiéramos hacerlo al revés, se puede usar paréntesis para agrupar las expresiones:

(1 + 2) * 3
9

Una pregunta típica que surge es como evalúa Python la «doble división»:

4 / 2 / 2.

Hay dos opciones:

  1. (4 / 2) / 2 -> 1

  2. 4 / (2 / 2) -> 4

Cuando los operadores tienen la misma prioridad, se evalúa de izquierda a derecha. Es decir, la opción 1.

Pero no me crean a mí. Siempre que tengan una duda, pueden probarlo en una celda de código:

4 / 2 / 2
1.0

Ejercicio 1: evaluar un polinomio#

Usando las operaciones aritméticas, obtener el resultado de evaluar el polinomio \(f(x) = 2 x^2 - 5x + 2\) en \(x=2\).

# Escriba su solución aquí

Solución#

Hide code cell content
2 * 2**2 - 5 * 2 + 2
0

Asignación de variables#

El código que escribimos resuelve el problema 1.

Sin embargo, si quisiéramos cambiar el punto donde evaluamos el polinomio, ya no nos es tan útil.

Por ejemplo, si quisiéramos evaluar en \(x=4\), reemplazar el 2 por 4.

Pero hay muchos 2, y no todos corresponden a x. Algunos eran coeficientes del polinomio.

Esta solución es poco práctica. Una mejor solución a este problema es parametrizar el código usando variables.

Asignando una variable#

Una variable es un nombre que le damos a un valor, y nos permite reusar dicho valor a través de este nombre.

La sintaxis para asignar una variable es: nombre = valor. Por ejemplo:

x = 2

Nombres de variables#

Como nombre, podemos usar casi cualquier conjunto de letras, números, y/o guión bajo (_).

En Python, la convención es escribir las variables en minúscula y usar guión bajo como espacio entre palabras. Por ejemplo, mi_numero.

Hay un conjunto de nombres reservados que Python interpreta de manera especial y no se pueden usar.

Pero no hace falta aprenderlos. Si los tratamos de usar, Python nos va a avisar que hay un error. Por ejemplo, traten de correr and = 1 en una celda de código.

Inspeccionando una variable#

Si queremos ver que valor está «guardado» en una variable, hay dos formas:

Podemos escribir su nombre en una celda y ejecutarla:

x
2

que funciona cuando estamos corriendo Python de manera interactiva.

Si no, la otra forma es utilizar la función print:

print(x)
2

En este caso, el resultado es el mismo.

Usando una variable#

En lugar de usar explícitamente el valor 2, podemos usar el nombre x para hacer operaciones:

3 * x
6

Python reemplaza la variable x por su valor actual, 2, antes de hacer la operación.

También podemos guardar este resultado si lo asignamos a otra variable:

y = 3 * x

Noten que, al asignar una variable, no nos muestra el resultado.

Pero, si pedimos que nos muestre la variable:

y
6

guardó el resultado de 3 * x.

Asignar no representa una igualdad#

A pesar de usar el =, al poner y = 3 * x, no estamos declarando una igualdad entre x e y.

Si cambiamos el valor de x y volvemos a pedir el valor de y:

x = 10
y
6

y sigue siendo 6, no 3 * x.

Es decir, y no sabe nada del actual valor de x.

Una asignación no es una igualdad. Es ponerle un nombre a un valor.

Para evitar la confusión, otros lenguajes de programación prefieren usar otras expresiones, como nombre <- valor.

En las asignaciones, primero se resuelve la parte de la derecha, reemplazando las variables por sus valores actuales, y después se le asigna el nombre de la izquierda.

Por ejemplo, nos permite hacer esto:

x = 1
x = x + 1
x
2

Matemáticamente, x = x + 1 no tendría sentido.

Pero, primero se resolvió x + 1, que resultó 2, y después se lo volvió a «guardar» en la variable x.

Borrando una variable#

Finalmente, así como se pueden asignar variables, se puede borrar variables con la palabra clave del:

del x

Luego, si tratamos de acceder a x, nos devuelve un error diciendo que no está definido:

x
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[16], line 1
----> 1 x

NameError: name 'x' is not defined

Es poco usual usar explícitamente del. Veremos más adelante que Python lo hace automáticamente en ciertas situaciones.

Ejercicio 2: parametrizar un polinomio#

Asignando \(x=2\) como variable, repetir el ejercicio 1:

Usando las operaciones aritméticas, obtener el resultado de evaluar el polinomio \(f(x) = 2 x^2 - 5x + 2\) en \(x=2\).

Luego, cambiar \(x\) a un valor distinto y volver a correr el código.

Por ejemplo, para \(x=0\), el resultado debería ser \(2\).

# Escriba su solución aquí

Solución#

Hide code cell content
x = 2

2 * x**2 - 5 * x + 2
0

Parametrizar el código tiene dos ventajas:

  1. Al usar el código, es más práctico para cambiar el valor donde queremos evaluar el polinomio.

  2. Al leer el código, es más explícito a simple vista que es un polinomio en x.

Variables intermedias#

Además de parametrizar el código, usar variables permite separar (y explicar) una operación compleja en varias operaciones más simples.

Por ejemplo, imaginemos que 8 personas se juntaron a comer y compraron 3 pizzas a $1500 cada una y 2 gaseosas a $300 cada una. ¿Cuánto tendría que pagar cada uno?

Se puede resolver fácilmente en una linea:

(3 * 1500 + 2 * 300) / 8
637.5

o se puede resolver claramente en varias lineas:

personas = 8
pizza = 1500
bebida = 300

total = 3 * pizza + 2 * bebida
total_por_persona = total / personas

total_por_persona
637.5

De ambas maneras, llegamos al mismo resultado, pero el código se explica por sí mismo en el segundo caso.

No tengo que explicar que parte del código modificar si hay que cambiar la cantidad de personas.

Pero no solo se trata de usar variables intermedias. También es importante usar nombres de variables claros. A pesar de que llegamos al mismo resultado, no es lo mismo si usamos nombres genéricos:

n = 8
x = 1500
y = 300

t = 3 * x + 2 * y
tn = t / n

tn
637.5

Elegir un nombre apropiado para una variable depende del contexto.

Por ejemplo, ¿se entiende que pizza es el precio de una pizza y no la cantidad? Si no, podríamos usar precio_pizza.

Ejercicio 3: raíces de la cuadrática#

Combinando lo aprendido, calcular las raíces del polinomio \(f(x) = 2 x^2 - 5x + 2\) utilizando la fórmula cuadrática:

\[ \frac{-b \pm \sqrt{b^2 - 4 ac}}{2 a} \]

Ayuda:

  • Para calcular la raíz cuadrada, use que \(\sqrt x = x^½\).

  • No existe el operador ±, use + y - por separado.

  • Para mostrar dos variables, x1 y x2, puede escribir:

    • x1 y x2 en dos celdas distintas,

    • x1, x2 al final de la celda de código,

    • print(x1) y print(x2) en distintas lineas,

    • print(x1, x2).

# Escriba su solución aquí

Solución#

Hide code cell content
a = 2
b = -5
c = 2

disc = (b**2 - 4 * a * c) ** (1 / 2)
raiz_1 = (-b - disc) / (2 * a)
raiz_2 = (-b + disc) / (2 * a)

raiz_1, raiz_2
(0.5, 2.0)

Usar una variable intermedia disc para el discriminante* tiene dos ventajas:

  1. La menos relevante, en este caso, es que el código es más eficiente.

    Si calcular el discriminante fuese computacionalmente muy intensivo, querríamos hacerlo una única vez y reusar su resultado para cada una de las raíces.

  2. La más importante es que el código es más legible.

    Si no hubiésemos usado una variable intermedia, tendríamos una maraña de operaciones y paréntesis, y sería más difícil de comprobar que está bien escrito.

    Por ejemplo, el siguiente código tiene un error en algún lado:

raiz_1 = (-b - (b**2 - 4 * a * c) * (1 / 2)) / (2 * a)
raiz_2 = (-b + (b * 2 - 4 * a * c) ** (1 / 2)) / (2 * a)

raiz_1, raiz_2
(0.125, (1.25+1.2747548783981961j))

*técnicamente, el discriminante es antes de tomar la raíz cuadrada.