Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

2 Variables, operadores y expresiones

En Python podemos representar datos mediante variables y operar con ellos utilizando distintos tipos de operadores. Estas herramientas constituyen la base para traducir relaciones matemáticas y condiciones lógicas a código.

En este capítulo estudiaremos variables, tipos de datos, conversiones, operadores aritméticos, relacionales y lógicos, y la construcción de expresiones. Finalmente, integraremos estos conceptos en algunos problemas sencillos de ingeniería.

2.1Variables

Cuando escribimos un programa necesitamos una forma de identificar los valores con los que vamos a trabajar. Por ejemplo, en un cálculo de ingeniería podríamos necesitar representar una masa, una velocidad o una temperatura. Para ello podemos utilizar variables.

En Python, una variable es un nombre que hace referencia a un objeto. La asociación entre un nombre y un objeto se realiza mediante una asignación, utilizando el operador =:

masa = 25
velocidad = 10.0
nombre = "Catalina"

En estas instrucciones, los nombres masa, velocidad y nombre quedan asociados con los valores 25, 10.0 y "Catalina", respectivamente.

Una forma útil de visualizar este proceso consiste en pensar que el nombre de una variable actúa como una etiqueta asociada a un objeto:

En este sentido, la instrucción

masa = 25

puede interpretarse como: asocia el nombre masa con el objeto que representa el valor 25.

2.1.1Reasignación de variables

Una variable puede asociarse posteriormente con otro objeto mediante una nueva asignación:

masa = 25
masa = 30

Después de ejecutar la segunda instrucción, el nombre masa hace referencia al valor 30.

Esto pone de manifiesto una diferencia importante entre la asignación en programación y la igualdad matemática. En Python, el símbolo = no establece una igualdad, sino que realiza una asignación.

Por ejemplo:

x = 5
x = x + 1

En matemáticas, una expresión como

x=x+1x = x + 1

no puede cumplirse. Sin embargo, en Python la segunda instrucción tiene otro significado: primero se evalúa la expresión situada a la derecha, x + 1, y después el resultado se vuelve a asociar con el nombre x.

Así, después de ejecutar las instrucciones anteriores, x queda asociado con el valor 6.

2.1.2Varios nombres y asignación múltiple

Considera ahora el siguiente ejemplo:

m = 7
n = m

Primero se asocia el nombre m con el valor 7. Después, mediante la asignación n = m, el nombre n queda asociado con el mismo objeto al que hace referencia m.

Por ahora basta con comprender que una variable es un nombre asociado con un objeto. Más adelante veremos que esta característica tiene consecuencias importantes cuando trabajamos con estructuras de datos y otros tipos de objetos.

Python también permite realizar varias asignaciones en una sola instrucción:

masa, velocidad = 25, 10

En este caso, masa queda asociado con 25 y velocidad con 10. Para este caso, la instrucción anterior es equivalente a escribir:

masa = 25
velocidad = 10

2.1.3Reglas para nombrar variables

Los nombres de variables deben cumplir algunas reglas sintácticas.

Los nombres pueden contener letras, números y guiones bajos (_):

esfuerzo_axial = 150e6
diametro_01 = 30e-3
nombre = "Ximena"

Un nombre puede comenzar con una letra o con un guion bajo, pero no con un número. Por ejemplo:

temperatura = 35
deformacion_unitaria = 300e-6

son nombres válidos, mientras que:

30_presion = 30e3
  Cell In[84], line 1
    30_presion = 30e3
      ^
SyntaxError: invalid decimal literal

produce un error de sintaxis.

Los espacios tampoco están permitidos en los nombres de variables. Por ejemplo:

modulo de elasticidad = 70e9
  Cell In[87], line 1
    modulo de elasticidad = 70e9
           ^
SyntaxError: invalid syntax

no es válido. Si queremos utilizar un nombre formado por varias palabras, podemos separarlas mediante guiones bajos:

modulo_de_elasticidad = 70e9

Python también distingue entre letras mayúsculas y minúsculas. Por tanto:

nombre = "Ana"
Nombre = "Paola"
NOMBRE = "Ximena"

define tres variables diferentes.

Esta característica suele expresarse diciendo que Python es un lenguaje case sensitive.

2.1.4Palabras clave

Algunas palabras forman parte de la sintaxis del lenguaje y no pueden utilizarse como nombres de variables. Estas palabras se conocen como palabras clave o keywords.

Por ejemplo:

lambda = 1500
  Cell In[98], line 1
    lambda = 1500
           ^
SyntaxError: invalid syntax

produce un SyntaxError, ya que lambda es una palabra clave de Python.

La lista de palabras clave disponibles en la versión de Python que se esté utilizando puede consultarse mediante el módulo keyword:

import keyword

print(keyword.kwlist)

Entre ellas se encuentran palabras como if, else, for, while, def, class, True, False y None.

2.1.5Buenas prácticas para nombrar variables

Además de cumplir las reglas sintácticas, es recomendable elegir nombres que hagan que el código sea fácil de leer y comprender.

En general, conviene utilizar nombres descriptivos. Por ejemplo:

diametro = 0.03

suele ser más informativo que:

d = 0.03

aunque los nombres cortos pueden resultar adecuados cuando tienen un significado claro en el contexto, como ocurre frecuentemente con variables matemáticas.

En Python es habitual utilizar la convención denominada snake_case, que consiste en escribir las palabras en minúsculas y separarlas mediante guiones bajos:

velocidad_angular = 10
temperatura_ambiente = 25
modulo_de_elasticidad = 70e9

Esta convención facilita la lectura de nombres formados por varias palabras y es la recomendada habitualmente para variables y funciones en Python.

También conviene evitar utilizar nombres que Python ya proporciona para funciones o tipos incorporados. Por ejemplo:

sum = 10

es una instrucción válida, pero hace que el nombre sum deje de referirse a la función incorporada que permite sumar elementos.

Por esta razón, suele ser conveniente evitar nombres como:

sum
print
list
int
float
type

cuando su uso pueda ocultar las funciones o tipos correspondientes.

Puedes encontrar recomendaciones adicionales sobre el estilo de los nombres en la guía oficial PEP 8 – Style Guide for Python Code.

Hasta ahora hemos utilizado valores enteros, decimales y cadenas de caracteres sin detenernos en las diferencias entre ellos. En la siguiente sección estudiaremos los tipos de datos básicos disponibles en Python.

2.2Tipos de datos básicos

En la sección anterior vimos que una variable es un nombre asociado con un objeto. Dependiendo de la información que representen, los objetos pueden ser de distintos tipos: números enteros, números de punto flotante, valores lógicos, texto, entre otros.

El tipo de dato indica qué clase de valor representa un objeto y qué operaciones pueden realizarse con él.

Podemos consultar el tipo de un objeto mediante la función type:

masa = 25
temperatura = 24.5
nombre = "motor"
type(masa)
int
type(temperatura)
float
type(nombre)
str

En estos casos, Python identifica los tipos int, float y str, respectivamente.

A continuación veremos algunos de los tipos básicos que utilizaremos con frecuencia a lo largo de estos apuntes.

2.2.1Números enteros: int

Los números enteros se representan mediante el tipo int. Este tipo permite trabajar con valores positivos, negativos o iguales a cero, siempre que no tengan parte decimal.

Por ejemplo:

numero_dientes = 24
muestras = 1000
indice = -1

Podemos comprobar el tipo de uno de estos valores mediante type:

type(numero_dientes)
int

Los valores de tipo int son adecuados para representar cantidades discretas, como el número de elementos de un sistema, la cantidad de muestras adquiridas o el número de iteraciones de un procedimiento.

2.2.2Números de punto flotante: float

Los números que incluyen una parte decimal se representan habitualmente mediante el tipo float.

Por ejemplo:

temperatura = 23.5
longitud = 0.125
densidad = 7850.0

También es posible escribir números de punto flotante mediante notación científica:

modulo_de_elasticidad = 70e9
deformacion = 250e-6

Las expresiones anteriores corresponden a

70×10970\times 10^9

y

250×106,250\times 10^{-6},

respectivamente.

Este tipo de notación resulta especialmente útil en ingeniería, donde es frecuente trabajar con magnitudes muy grandes o muy pequeñas. Conviene notar que un valor como 70e9 es de tipo float, aunque no incluya explícitamente un punto decimal.

type(modulo_de_elasticidad)
float

2.2.3Números complejos: complex

Python también permite trabajar directamente con números complejos mediante el tipo complex.

Un número complejo puede escribirse utilizando j para representar la unidad imaginaria:

z = 3 + 4j
type(z)
complex

En matemáticas es frecuente utilizar ii para representar la unidad imaginaria. En Python se utiliza j, una notación habitual también en áreas como la ingeniería eléctrica.

Por ejemplo, una impedancia eléctrica podría representarse mediante:

impedancia = 10 + 5j

Por ahora basta con reconocer la forma de escritura de este tipo de valores.

2.2.4Valores booleanos: bool

El tipo bool representa valores lógicos y sólo puede tomar dos valores:

True
False

Por ejemplo:

motor_encendido = True
alarma_activa = False
type(motor_encendido)
bool
type(alarma_activa)
bool

Los valores booleanos serán especialmente importantes cuando trabajemos con comparaciones y condiciones. Más adelante veremos que expresiones como las comparaciones producen precisamente resultados de tipo bool.

Es importante escribir True y False con la primera letra en mayúscula, ya que estas palabras forman parte del lenguaje Python.

2.2.5Cadenas de caracteres: str

Python utiliza el tipo str para representar texto. Una cadena de caracteres puede escribirse delimitando su contenido mediante comillas simples o dobles:

material = "acero"
unidad = 'MPa'

Por el momento únicamente necesitamos reconocer str como uno de los tipos básicos disponibles en Python. En un capítulo posterior estudiaremos con mayor detalle cómo crear, manipular y procesar cadenas de caracteres.

2.2.6Una variable puede referirse a objetos de distintos tipos

Una variable no queda asociada permanentemente con un único tipo de dato.

Considera el siguiente ejemplo:

dato = 10
type(dato)
int

Inicialmente, dato hace referencia a un objeto de tipo int. Podemos realizar una nueva asignación:

dato = 10.5
type(dato)
float

Ahora el mismo nombre hace referencia a un objeto de tipo float.

También podríamos escribir:

dato = "temperatura"
type(dato)
str

y dato pasaría a hacer referencia a una cadena de caracteres.

Este comportamiento suele describirse diciendo que Python utiliza tipado dinámico: el nombre de una variable no queda fijado a un único tipo, sino que puede referirse a objetos de distintos tipos a lo largo de la ejecución de un programa.

En ocasiones necesitaremos transformar un valor de un tipo a otro. Por ejemplo, convertir un número entero en uno de punto flotante o transformar una cadena que contiene dígitos en un valor numérico. Este será el tema de la siguiente sección.

2.3Conversión de tipos

En algunas situaciones necesitamos transformar un valor de un tipo de dato a otro. Por ejemplo, podemos convertir un número entero en uno de punto flotante, transformar una cadena que contiene un número en un valor numérico o convertir un valor en texto.

Python proporciona varias funciones incorporadas para realizar estas conversiones de manera explícita:

FunciónConversión
int(x)convierte x a un número entero
float(x)convierte x a un número de punto flotante
complex(x)convierte x a un número complejo
bool(x)convierte x a un valor booleano
str(x)convierte x a una cadena de caracteres

No todas las conversiones son posibles y, en algunos casos, una conversión puede provocar pérdida de información.

2.3.1Conversión a números enteros

La función int permite convertir valores compatibles al tipo int. Por ejemplo:

int(3.8)
3

Al convertir un número de punto flotante a entero, Python elimina la parte decimal:

int(7.9)
7

De manera similar:

int(-2.8)
-2

Por tanto, int no realiza un redondeo, sino que elimina la parte fraccionaria y conserva únicamente la parte entera.

También es posible convertir una cadena de caracteres si su contenido representa correctamente un número entero:

int("25")
25

En este caso, el resultado es el número entero 25.

Sin embargo, una cadena como:

int("25.5")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[261], line 1
----> 1 int("25.5")

ValueError: invalid literal for int() with base 10: '25.5'

no puede convertirse directamente a int, ya que "25.5" representa un número con parte decimal.

2.3.2Conversión a números de punto flotante

La función float permite convertir valores compatibles al tipo float.

Por ejemplo:

float(5)
5.0
float("3.14")
3.14
float("1.5e3")
1500.0

La conversión desde cadenas resulta especialmente útil cuando los datos numéricos provienen de texto, por ejemplo, de una entrada proporcionada por un usuario o de un archivo.

2.3.3Conversión a números complejos

La función complex permite crear números complejos a partir de valores compatibles. Por ejemplo:

complex(5)
(5+0j)

También podemos especificar directamente la parte real y la parte imaginaria:

complex(3, 4)
(3+4j)

O a partir de un string:

complex("-4+2j")
(-4+2j)

2.3.4Conversión a valores booleanos

La función bool permite convertir otros valores al tipo bool. Para valores numéricos, el comportamiento básico es sencillo:

bool(0)
False
bool(1)
True
bool(-3)
True
bool(2.5)
True

El número cero se convierte en False, mientras que cualquier valor numérico distinto de cero se convierte en True. Más adelante veremos que otros tipos de objetos también pueden interpretarse como verdaderos o falsos cuando se utilizan en condiciones.

2.3.5Conversión a cadenas de caracteres

La función str permite obtener una representación textual de un valor. Por ejemplo:

str(25)
'25'
str(3.14)
'3.14'
str(True)
'True'

Es importante distinguir entre un valor numérico y una cadena que contiene los mismos caracteres. Por ejemplo:

25

y:

"25"

no representan el mismo tipo de dato. Podemos comprobarlo mediante type:

type(25)
int
type("25")
str

El primero es un objeto de tipo int, mientras que el segundo es un objeto de tipo str.

2.3.6Conversiones que pueden perder información

Una conversión no siempre conserva toda la información del valor original. Por ejemplo:

temperatura = 23.8
temperatura_entera = int(temperatura)

Después de la conversión:

temperatura_entera
23

La parte decimal se ha perdido.

Además, una conversión puede fallar si el valor no es compatible con el tipo de destino. Por ejemplo:

float("temperatura")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[356], line 1
----> 1 float("temperatura")

ValueError: could not convert string to float: 'temperatura'

produce un error porque la cadena "temperatura" no contiene una representación válida de un número.

2.3.7Operaciones entre distintos tipos numéricos

No siempre es necesario realizar una conversión explícita antes de combinar valores numéricos de distintos tipos.

Por ejemplo:

2 + 3.5
5.5

combina un valor de tipo int con uno de tipo float. El resultado es de tipo float:

type(2 + 3.5)
float

Cuando una operación combina ciertos tipos numéricos compatibles, Python determina automáticamente un tipo adecuado para representar el resultado.

Esto no significa que los objetos originales cambien de tipo. En el ejemplo anterior, 2 continúa siendo un valor de tipo int; simplemente el resultado de la operación se representa mediante un float.

Algo similar ocurre al combinar números reales con números complejos:

2 + 3j
(2+3j)

En este caso, el resultado es de tipo complex.

2.4Operadores aritméticos

Los operadores aritméticos permiten realizar operaciones matemáticas con valores numéricos. En Python podemos utilizarlos directamente con números o con variables que hagan referencia a valores numéricos.

Por ejemplo:

masa = 25
velocidad = 10

masa * velocidad
250

En este caso, el operador * realiza una multiplicación entre los valores asociados con masa y velocidad. Los principales operadores aritméticos disponibles en Python son:

OperadorOperaciónEjemplo
+sumaa + b
-restaa - b
*multiplicacióna * b
/divisióna / b
//división enteraa // b
%residuoa % b
**potenciaa ** b

2.4.1Suma, resta y multiplicación

Los operadores +, - y * representan las operaciones aritméticas habituales de suma, resta y multiplicación.

Por ejemplo:

a = 12
b = 5
a + b
17
a - b
7
a * b
60

También pueden utilizarse para representar relaciones matemáticas sencillas. Por ejemplo, si una fuerza se calcula mediante

F=maF = ma

podemos escribir:

masa = 10
aceleracion = 9.81

fuerza = masa * aceleracion

De manera similar, el área de una superficie rectangular puede calcularse mediante:

base = 3.5
altura = 2.0

area = base * altura

2.4.2División, división entera y residuo

Python dispone de tres operadores relacionados con la división: /, // y %.

El operador / realiza una división ordinaria:

10 / 4
2.5

El operador / produce un resultado de tipo float, incluso cuando la división es exacta:

10 / 2
5.0

El operador // realiza una división entera o floor division:

23 // 5
4

y el operador % devuelve el residuo de la división:

23 % 5
3

En este caso, el primer resultado es 4 y el segundo es 3. Esto significa que 23 contiene 4 grupos completos de 5, con 3 unidades restantes.

2.4.3Potenciación

El operador ** se utiliza para elevar un número a una potencia:

2 ** 4
16

En expresiones de ingeniería es frecuente encontrar potencias. Por ejemplo, la energía cinética de una partícula está dada por:

Ek=12mv2.E_k = \frac{1}{2}mv^2.

En Python podemos escribir:

masa = 10
velocidad = 5

energia_cinetica = 0.5 * masa * velocidad**2

2.4.4Operadores unarios

Los símbolos + y - también pueden actuar sobre un único valor. En este caso se denominan operadores unarios.

Por ejemplo:

x = 5
+x
5
-x
-5

El operador - cambia el signo del valor, mientras que + conserva su signo.

Estos operadores permiten representar directamente cantidades positivas o negativas:

velocidad = -12.5
aceleracion = 9.81

2.4.5Uso de paréntesis

Los paréntesis permiten agrupar operaciones y hacer explícito el orden en que queremos evaluarlas.

Por ejemplo:

a = 2
b = 3
c = 4

(a + b) * c
20

no produce el mismo resultado que:

a + b * c
32

Python sigue reglas de precedencia de operadores para determinar el orden de evaluación de una expresión. Estudiaremos estas reglas con mayor detalle en una sección posterior.

Mientras tanto, los paréntesis pueden utilizarse siempre que ayuden a expresar con claridad la operación que queremos realizar.

2.4.6Operadores de asignación aumentada

En algunas situaciones necesitamos actualizar el valor asociado con una variable utilizando su valor actual.

Por ejemplo:

contador = 10
contador = contador + 1

Python permite escribir esta operación de manera más compacta:

contador = 10
contador += 1

La instrucción:

contador += 1

es una forma abreviada de:

contador = contador + 1

Existen formas similares para otras operaciones frecuentes:

x = 5
x += 1
x
6
x -= 1
x
5
x *= 2
x
10
x /= 2
x
5.0

También existen asignaciones aumentadas asociadas con otros operadores aritméticos, como //=, %= y **=. Estas formas serán especialmente útiles más adelante, cuando trabajemos con estructuras de control y algoritmos que actualizan repetidamente el valor de una variable.

Los operadores aritméticos nos permiten construir expresiones numéricas a partir de valores y variables. En la siguiente sección veremos operadores que permiten comparar valores y obtener resultados booleanos.

2.5Operadores relacionales

Los operadores relacionales permiten comparar valores. Una comparación es una expresión cuyo resultado es un valor booleano, es decir, True o False. Los principales operadores relacionales disponibles en Python son:

OperadorSignificadoEjemplo
==igual aa == b
!=diferente dea != b
<menor quea < b
>mayor quea > b
<=menor o igual quea <= b
>=mayor o igual quea >= b

Por ejemplo:

temperatura = 32
temperatura > 30
True

La expresión anterior produce True, ya que el valor asociado con temperatura es mayor que 30.

Podemos comprobar el tipo del resultado:

type(temperatura > 30)
bool

2.5.1Igualdad y diferencia

El operador == permite comprobar si dos valores son iguales:

velocidad = 0 # creamos la variable velocidad y le asignamos un valor 0

velocidad == 0 # hacemos la comparación usando el operador ==
True

Por otro lado, el operador != permite comprobar si dos valores son diferentes:

velocidad != 0
False

2.5.2Comparaciones de orden

Los operadores <, >, <= y >= permiten comparar el orden relativo entre valores.

Por ejemplo:

temperatura = 28

temperatura < 30
True
temperatura >= 25
True

Estas comparaciones resultan útiles para representar límites físicos u operativos.

Por ejemplo:

presion = 450
presion_maxima = 500

presion <= presion_maxima
True

La expresión anterior comprueba si la presión se encuentra por debajo o exactamente en el límite máximo establecido.

2.5.3Comparaciones encadenadas

Python permite escribir varias comparaciones dentro de una misma expresión. Por ejemplo, para comprobar si una temperatura se encuentra entre 20 y 30 podemos escribir:

temperatura = 25

20 < temperatura < 30
True

Esta forma se corresponde de manera natural con la notación matemática:

20<T<30.20 < T < 30.

La expresión produce True únicamente cuando la temperatura es mayor que 20 y menor que 30.

También es posible incluir los valores límite:

20 <= temperatura <= 30
True

En este caso, la expresión también será verdadera cuando temperatura sea exactamente 20 o 30.

2.5.4Comparaciones como expresiones booleanas

El resultado de una comparación puede almacenarse en una variable.

Por ejemplo:

temperatura = 85
temperatura_segura = temperatura <= 90

Ahora temperatura_segura hace referencia a un valor booleano:

temperatura_segura
True

Podemos comprobar su tipo:

type(temperatura_segura)
bool

Este tipo de expresiones será especialmente importante más adelante, ya que permiten representar condiciones como:

  • una temperatura dentro de un intervalo;

  • una presión por debajo de un límite;

  • una velocidad igual a cero;

  • una magnitud mayor o menor que cierto valor de referencia.

En la siguiente sección veremos cómo combinar varias expresiones booleanas mediante los operadores lógicos and, or y not.

2.6Operadores lógicos

Los operadores lógicos permiten combinar o negar expresiones booleanas. En Python, los principales operadores lógicos son:

OperadorSignificado
andproduce True si ambas expresiones son verdaderas
orproduce True si al menos una expresión es verdadera
notniega el valor lógico de una expresión

Estos operadores resultan especialmente útiles cuando una condición depende de más de una comparación.

2.6.1Operador and

El operador and produce True únicamente cuando las dos expresiones que combina son verdaderas.

Por ejemplo:

presion = 450
temperatura = 80

presion < 500 and temperatura < 90
True

La expresión anterior produce True porque ambas condiciones se cumplen.

También podríamos escribir:

temperatura = 25

temperatura > 20 and temperatura < 30
True

aunque, para expresar intervalos, suele ser más clara una comparación encadenada:

20 < temperatura < 30
True

2.6.2Operador or

El operador or produce True cuando al menos una de las expresiones que combina es verdadera.

Por ejemplo:

presion = 520
temperatura = 85

presion > 500 or temperatura > 90
True

En este caso, la expresión produce True porque la primera condición se cumple.

El resultado también sería True si ambas condiciones fueran verdaderas.

Este tipo de expresión resulta útil cuando basta con que se cumpla una de varias condiciones para considerar que una situación requiere atención.

2.6.3Operador not

El operador not invierte el valor lógico de una expresión.

Por ejemplo:

activo = True

not activo
False

De manera similar:

alarma_activa = False

not alarma_activa
True

El operador not también puede aplicarse al resultado de una comparación:

temperatura = 25

not (temperatura > 30)
True

Primero se evalúa la comparación temperatura > 30 y después se niega su resultado.

2.6.4Combinación de operadores lógicos

Los operadores lógicos pueden combinarse para construir expresiones más complejas.

Por ejemplo, supongamos que queremos comprobar si un sistema está activo y, además, si alguna de dos magnitudes supera su límite:

sistema_activo = True
temperatura = 95
presion = 450

sistema_activo and (temperatura > 90 or presion > 500)
True

En este caso, los paréntesis agrupan las condiciones relacionadas con la temperatura y la presión.

Cuando una expresión combina varios operadores lógicos, los paréntesis ayudan a hacer explícita la intención y a mejorar la legibilidad del código.

Python dispone de reglas de precedencia para determinar el orden de evaluación de los operadores. Estudiaremos estas reglas con mayor detalle en la siguiente sección.

2.6.5Expresiones lógicas y resultados booleanos

Al igual que las comparaciones, una expresión lógica produce un valor de tipo bool.

Por ejemplo:

temperatura = 25
presion = 400

condicion_segura = temperatura < 90 and presion < 500

Ahora condicion_segura hace referencia a True porque ambas condiciones se cumplen.

Este tipo de expresiones será fundamental en el siguiente capítulo, donde utilizaremos valores booleanos para decidir qué instrucciones se ejecutan y cuántas veces se repiten determinadas operaciones.

En la siguiente sección integraremos variables, valores y operadores para estudiar con mayor detalle cómo se construyen y evalúan las expresiones en Python.

2.7Expresiones

Una expresión es una porción de código que Python evalúa para producir un valor.

Las expresiones pueden ser muy sencillas:

2 + 3
5

o pueden combinar variables, valores y varios operadores:

masa = 10
velocidad = 5

0.5 * masa * velocidad**2
125.0

También pueden producir distintos tipos de resultados. Por ejemplo:

temperatura = 25

temperatura > 30
False

Aquí se produce un valor de tipo de tipo booleano.

2.7.1Evaluación de expresiones y precedencia de operadores

Cuando Python encuentra una expresión, evalúa sus componentes siguiendo determinadas reglas hasta obtener un resultado.

Por ejemplo:

a = 4
b = 3

a + 2 * b
10

En este caso, Python evalúa primero la multiplicación y después la suma, por lo que el resultado es 10.

Esto ocurre porque los operadores tienen distintos niveles de precedencia. La precedencia determina qué operaciones se evalúan primero dentro de una expresión.

Para los operadores estudiados hasta ahora, podemos considerar de manera simplificada el siguiente orden:

PrecedenciaOperadores
mayorparéntesis
**
+x, -x
*, /, //, %
+, -
<, <=, >, >=, ==, !=
not
and
menoror

Por ejemplo:

2 * 3 + 4
10

no produce el mismo resultado que:

(2 + 3) * 4
20

En la primera expresión se evalúa primero la multiplicación, mientras que en la segunda los paréntesis fuerzan a evaluar primero la suma.

2.7.2Traducción de expresiones matemáticas a Python

Una necesidad frecuente en ingeniería consiste en traducir relaciones matemáticas a expresiones válidas de Python. Por ejemplo, para un movimiento rectilíneo uniformemente acelerado sabemos que la posición está dada por:

x=x0+v0t+12at2x = x_0 + v_0 t + \frac{1}{2}at^2

La expresión anterior puede escribirse en Python como:

x0 = 0
v0 = 2
a = 0.8
t = 1.5
x = x0 + v0 * t + 0.5 * a * t**2
x
3.9

Veamos otro ejemplo, la ley de Ohm establece que:

I=VRI = \frac{V}{R}

En Python podemos escribir:

V = 12
R = 1000
I = V / R
I
0.012

2.7.3Legibilidad de las expresiones

Una expresión puede ser correcta y, al mismo tiempo, difícil de leer.

Por ejemplo:

ec=0.5*m*v**2

puede producir el resultado esperado, pero:

energia_cinetica = 0.5 * masa * velocidad**2

hace más evidente el significado de las cantidades involucradas.

En cálculos de ingeniería, utilizar nombres descriptivos ayuda a conservar la interpretación física de las expresiones y facilita detectar errores.

Esto no significa que los nombres cortos deban evitarse siempre. En contextos matemáticos donde su significado es claro, nombres como x, y, t o v pueden resultar completamente adecuados.

Los espacios alrededor de los operadores también contribuyen a mejorar la lectura:

fuerza = masa * aceleracion

suele ser más legible que:

fuerza=masa*aceleracion

2.7.4Consideraciones sobre números de punto flotante

Como mencionamos anteriormente, los valores de tipo float tienen precisión finita.

Considera el siguiente ejemplo:

0.1 + 0.2
0.30000000000000004

Observa que el resultado no es exactamente 0.3. Esto ocurre porque muchos números decimales no pueden representarse exactamente mediante la representación binaria utilizada internamente.

Por esta razón:

0.1 + 0.2 == 0.3
False

Este comportamiento no implica que Python esté realizando incorrectamente la operación, sino que es una consecuencia de la precisión finita de los números de punto flotante.

Por ahora basta con recordar que muchos valores de tipo float representan aproximaciones de números reales.

2.7.5Magnitudes físicas y unidades

Cuando utilizamos Python para resolver problemas de ingeniería, las variables suelen representar magnitudes físicas.

Por ejemplo:

masa = 10        # kg
velocidad = 5    # m/s

energia_cinetica = 0.5 * masa * velocidad**2

En este caso, podemos interpretar el resultado como una energía expresada en joules.

Sin embargo, Python únicamente conoce los valores numéricos involucrados. No sabe que masa está expresada en kilogramos ni que velocidad está expresada en metros por segundo.

Por ejemplo:

longitud = 5     # m
tiempo = 2       # s

longitud + tiempo
7

es una expresión válida para Python porque ambas variables hacen referencia a valores numéricos, aunque sumar una longitud y un tiempo no tenga sentido físico.

Por esta razón, al realizar cálculos de ingeniería es responsabilidad de quien escribe el programa mantener la consistencia entre las magnitudes y las unidades utilizadas.

En la siguiente sección utilizaremos variables, tipos de datos y operadores de manera conjunta para resolver algunos problemas sencillos de ingeniería.

2.8Problemas resueltos

En esta sección integraremos los conceptos desarrollados a lo largo del capítulo mediante algunos problemas sencillos de ingeniería. En cada caso seguiremos una idea general:

  1. Identificar los datos disponibles

  2. Representarlos mediante variables

  3. Plantear las relaciones matemáticas necesarias

  4. Traducirlas a expresiones de Python

  5. Interpretar los resultados obtenidos

En algunos problemas más simples nos centraremos únicamente en traducir una expresión matemática a una expresión de Python.

2.8.1Movimiento uniformemente acelerado

Una partícula parte de una posición inicial de 2 m, con una velocidad inicial de 3 m/s y una aceleración constante de 1.5 m/s². Determina su posición después de 4 s.

La posición de una partícula con aceleración constante puede calcularse mediante:

x=x0+v0t+12at2.x = x_0 + v_0 t + \frac{1}{2}at^2.

Definimos los datos del problema:

x0 = 2.0            # m
v0 = 3.0            # m/s
a = 1.5             # m/s^2
t = 4.0             # s

La expresión correspondiente en Python es:

x = x0 + v0 * t + 0.5 * a * t**2
x
26.0

Se obtiene una posición final de 26 m.

Este ejemplo muestra cómo una expresión matemática con sumas, multiplicaciones y potencias puede traducirse directamente a Python utilizando los operadores correspondientes.

2.8.2Energía mecánica

Una masa de 4 kg se encuentra a una altura de 6 m y se mueve con una velocidad de 3 m/s. Calcula su energía cinética, su energía potencial gravitatoria y su energía mecánica total.

La energía cinética está dada por:

K=12mv2\mathcal{K} = \frac{1}{2}mv^2

mientras que la energía potencial gravitatoria puede calcularse mediante:

U=mgh\mathcal{U} = mgh

La energía mecánica total es:

E=K+UE = \mathcal{K} + \mathcal{U}

Utilizando:

g=9.81 m/s2g = 9.81\ \text{m/s}^2

definimos los datos:

m = 4.0          # kg
h = 6.0        # m
v = 3.0     # m/s
g = 9.81            # m/s^2

Podemos calcular primero cada contribución de manera independiente:

K = 1/2 * m * v ** 2
U = m * g * h

y posteriormente calcular la energía total:

E = K + U 

Consultamos los resultados:

E # energía total
253.44
K # energía cinética
18.0
U # energía potencial
235.44

2.8.3Circuito eléctrico y límites de operación

Una resistencia de 8 Ω se conecta a una fuente de 24 V. Determina la corriente y la potencia eléctrica. Después, comprueba si la corriente supera un límite de 2.5 A o si la potencia supera un límite de 60 W.

De acuerdo con la ley de Ohm:

I=VR,I = \frac{V}{R},

y la potencia eléctrica puede calcularse mediante:

P=VI.P = VI.

Definimos los valores:

voltaje = 24.0             # V
resistencia = 8.0          # ohm

limite_corriente = 2.5     # A
limite_potencia = 60.0     # W

Calculamos la corriente y la potencia eléctrica:

corriente = voltaje / resistencia
potencia = voltaje * corriente

Ahora podemos comprobar cada límite por separado:

corriente > limite_corriente
True
potencia > limite_potencia
True

Si queremos determinar si al menos una de las dos magnitudes supera su límite, podemos utilizar el operador or:

fuera_de_limites = (
    corriente > limite_corriente
    or potencia > limite_potencia
)

fuera_de_limites
True

El resultado es True, lo que indica que el circuito no cumple con los límites establecidos.

Este ejemplo combina expresiones aritméticas, comparaciones y operadores lógicos dentro de un mismo problema.

2.8.4Condiciones de operación de un sistema

En cierto proceso, la presión debe mantenerse como máximo en 500 kPa y la temperatura como máximo en 90 °C.

Para un estado determinado se tienen:

presion = 470.0             # kPa
temperatura = 82.0          # °C

presion_maxima = 500.0      # kPa
temperatura_maxima = 90.0   # °C

Podemos comprobar cada condición por separado:

presion <= presion_maxima
temperatura <= temperatura_maxima
True

Para considerar que el sistema se encuentra dentro de condiciones seguras, ambas expresiones deben ser verdaderas. Por tanto, podemos escribir:

condicion_segura = (
    presion <= presion_maxima
    and temperatura <= temperatura_maxima
)

condicion_segura
True

Podemos representar también la condición opuesta mediante:

requiere_atencion = not condicion_segura
requiere_atencion
False

que en este caso produce False.

Ahora supongamos que la temperatura aumenta en 10 grados:

temperatura += 10

Si evaluamos nuevamente:

condicion_segura = (
    presion <= presion_maxima
    and temperatura <= temperatura_maxima
)

condicion_segura
False

el resultado será False, porque ya no se cumplen simultáneamente las dos condiciones.

Este tipo de expresiones booleanas será especialmente importante en el siguiente capítulo, cuando utilicemos estructuras de control para ejecutar diferentes acciones dependiendo del estado de un sistema.

2.8.5Aproximando π\pi

La siguiente expresión nos permite aproximar el valor de π\pi hasta las millonésimas:

π3+860+29602+44603\pi \approx 3 + \frac{8}{60} + \frac{29}{60^2} + \frac{44}{60^3}

Escribe la expresión correspondiente en Python.

En Python podemos escribir dicha expresión como:

pi = 3 + (8/60) + (29/60**2) + (44/60**3)
pi
3.1415925925925925

Es importante tener en cuenta que en este caso los paréntesis no son realmente necesarios, observa:

pi = 3 + 8/60 + 29/60**2 + 44/60**3
pi
3.1415925925925925

Sin embargo el uso de estos suele aportar una mayor legibilidad a las expresiones matemáticas que estamos escribiendo. Hay que tener mucho cuidado con los paréntesis y la precedencia de los operadores, veamos el ejemplo siguiente:

pi = 3 + (8/60) + (29/60)**2 + (44/60)**3
pi
3.7613148148148148

Observa que la expresión colocada ya no corresponde con la aproximación de π\pi descrita con anterioridad, sino más bien correspondería a:

3+860+(2960)2+(4460)33 + \frac{8}{60} + \left(\frac{29}{60}\right)^2 + \left(\frac{44}{60}\right)^3

2.8.6Una estrategia general para resolver problemas sencillos

Los ejemplos anteriores muestran una forma de trabajo que puede aplicarse a muchos problemas básicos de ingeniería. Primero se identifican las cantidades conocidas y las incógnitas. Después, esas cantidades se representan mediante variables con nombres que ayuden a conservar su significado físico. A continuación se plantean las relaciones matemáticas necesarias y se traducen a expresiones de Python utilizando los operadores apropiados. Finalmente, los resultados deben interpretarse dentro del contexto del problema. Obtener un número no suele ser suficiente: es necesario preguntarse qué representa, en qué unidades está expresado y si su valor tiene sentido desde el punto de vista físico.

A medida que incorporemos nuevas herramientas del lenguaje podremos automatizar procedimientos más complejos. Sin embargo, este mismo proceso de traducir datos, relaciones y condiciones a código seguirá siendo una parte fundamental de la resolución de problemas con Python.

2.9Ejercicios

Los siguientes ejercicios tienen como propósito reforzar los conceptos desarrollados a lo largo del capítulo. Algunos están orientados a comprobar la comprensión de la sintaxis y del comportamiento de Python, mientras que otros requieren traducir relaciones matemáticas sencillas a expresiones de código.

Siempre que sea posible, intenta resolver primero los ejercicios sin ejecutar el código. Después puedes utilizar Python para comprobar tus resultados.


Indica cuáles de los siguientes nombres de variables son válidos en Python:

temperatura
2velocidad
esfuerzo_axial
modulo elasticidad
_indice
masa2
lambda

Determina el tipo de dato correspondiente a cada uno de los siguientes valores:

25
3.14
2 + 5j
False
"acero"
1e6

Considera las siguientes instrucciones:

dato = 10
dato = 3.5
dato = "presion"

¿Cuál es el tipo del objeto al que hace referencia dato después de cada asignación?


Predice el resultado de las siguientes conversiones:

int(8.9)
int(-3.7)
float(12)
float("4.5")
str(250)
bool(0)
bool(-2)

¿Cuáles de las siguientes conversiones producen un error?

int("42")
int("4.2")
float("4.2")
float("temperatura")

Observa el siguiente código:

a = 10
b = 20
c = 5
a = b + c
c = b + a
b = a + c
print(a, b, c)

¿Qué valores tendrán a, b y c al mostrarlos?


Determina el resultado de las siguientes expresiones:

8 + 3 * 2
(8 + 3) * 2
2**3 + 4
20 / 4
20 // 6
20 % 6

Explica la diferencia entre las siguientes instrucciones:

temperatura = 30

y:

temperatura == 30

Determina el resultado de las siguientes comparaciones:

10 > 5
10 == 5
7 != 3
20 <= 20
5 < 8 < 12

Considera:

temperatura = 75
presion = 420

Predice el resultado de:

temperatura < 90 and presion < 500
temperatura > 90 or presion > 400
not (temperatura > 80)

Explica por qué la siguiente comparación puede producir False:

0.1 + 0.2 == 0.3

¿Qué característica de los números de tipo float está involucrada?




Una partícula se mueve con velocidad constante. Su posición inicial es de 5 m, su velocidad es de 4.2 m/s y transcurren 6 s.

Utiliza la relación:

x=x0+vtx = x_0 + vt

para calcular la posición final mediante Python.


Una partícula tiene una velocidad inicial de 8 m/s, una aceleración constante de 2.5 m/s² y se estudia su movimiento durante 4 s.

Calcula la velocidad final utilizando:

v=v0+at.v = v_0 + at.

Una fuerza de 3500 N actúa sobre una superficie de 0.025 m².

Calcula el esfuerzo normal:

σ=FA.\sigma = \frac{F}{A}.

Expresa el resultado primero en pascales y después en megapascales. Recuerda que:

1 MPa=106 Pa.1\ \text{MPa} = 10^6\ \text{Pa}.

Una resistencia de 15Ω15\,\Omega se conecta a una fuente de 120 V120 \text{ V}.

Calcula:

  • la corriente eléctrica;

  • la potencia eléctrica.

Utiliza:

I=VRI = \frac{V}{R}

y:

P=VI.P = VI.

Un eje circular tiene un diámetro de 30 mm.

Calcula el área de su sección transversal mediante:

A=πd24.A = \frac{\pi d^2}{4}.

Para este ejercicio utiliza:

pi = 3.1416

Convierte primero el diámetro a metros y expresa el área en metros cuadrados.


Una temperatura de 95 °F debe convertirse a grados Celsius utilizando:

TC=59(TF32).T_C = \frac{5}{9}(T_F - 32).

Construye la expresión correspondiente en Python y calcula el resultado.


Un motor gira a 1800 rpm. Calcula su velocidad angular en radianes por segundo utilizando:

ω=2πn60.\omega = \frac{2\pi n}{60}.

Utiliza:

pi = 3.1416




Evalúa y muestra el valor de la siguiente expresión:

100.375300.25+22+10210310^{0.375} - 30^{0.25} + \frac{2^2+10^2}{10^3}

Evalúa y muestra el valor de la siguiente expresión:

7+6+5\sqrt{ 7 + \sqrt{6 + \sqrt{5}} }

Evalúa y muestra el valor de la siguiente expresión:

5+11150.355 + \frac{1}{1 - \frac{1}{5^{0.35}}}