Operadores, expresiones y conversión de tipos
Operadores y operandos
Los operadores son símbolos especiales que representan cálculos, como la suma o la multiplicación. Los valores a los cuales se aplican estos operadores reciben el nombre de operandos.
Aquí algunos operadores aritméticos:
| Operador | Descripción | Ejemplo |
|---|---|---|
| Suma | + | 2+3 |
| Resta | - | 5-2 |
| Producto (multiplicación) | * | 9*3 |
| División | / | 8/4 |
| División entera | // | 8//4 |
| Módulo | % | 9%5 |
| Potencia | ** | 6**3 |
En Python al dividir dos enteros en los que su división no es exacta, el resultado es del tipo float.
minuto = 59
minuto/60 # minuto tiene el valor 0.98333333333333
Si deseamos hacer la división y que se trunque el resultado a un entero se utiliza el operador //.
minuto = 59
minuto//60 # minuto tiene el valor 0
La raíz cuadrada es la inversa de la potencia. Por lo tanto, realizar la raíz cuadrada de un número es lo mismo que elevar ese número a 1/2.
En el caso de la raíz cúbica, sería elevar un número a 1/3, etc.
Ejemplos de uso de estos operadores:
20 + 32
hora - 1
hora * 60
minuto / 60
5**2
(5 + 9) * (15 + 7)
Operador módulo
El operador módulo trabaja con enteros y obtiene el resto de la operación consistente en dividir el primer operando por el segundo. En Python, el operador módulo utiliza el signo de porcentaje %. La sintaxis es la misma que se usa para los demás operadores.
cociente = 7 // 3
print(cociente) # Imprime: 2
resto = 7 % 3
print(resto) # Imprime: 1
El resultado de la división entera entre 7 y 3 es 2 y el resto es 1.
El signo del módulo será siempre del segundo valor:
resto = -7 % 3 # => 2
El operador módulo resulta ser muy útil. Puedes comprobar si un número es divisible por otro. Si el módulo entre los dos números es 0 significa que es divisible.
También solo puede obtener el dígito más a la derecha de un número. Por ejemplo, x % 10 obtiene el dígito más a la derecha de x.
Operaciones con cadenas
El operador + funciona con cadenas, pero no realiza una suma. En lugar de eso, realiza una concatenación. Eso significa que une ambas cadenas, enlazando el final de una con el principio de la otra. Ejemplo:
primero = 10
segundo = 15
print(primero+segundo) # Imprime: 25
primero = '100'
segundo = '150'
print(primero + segundo) # Imprime: 100150
Concatenar con + frente a separar con , en print()
Ya viste en Entrada y salida básica que print() admite varios valores separados por comas, mostrándolos seguidos y separados por un espacio. El operador + es otra forma de combinar cadenas, pero con reglas distintas:
, en print() | + (concatenación) | |
|---|---|---|
| ¿Qué produce? | Pasa varios valores por separado a print() | Construye una única cadena nueva |
| ¿Se puede guardar en una variable? | No, solo sirve dentro de print() | Sí: el resultado es una cadena que puedes guardar, devolver desde una función, etc. |
| ¿Mezcla tipos automáticamente? | Sí, convierte cada valor a texto por ti | No: solo funciona entre cadenas |
| ¿Añade espacios automáticamente? | Sí, un espacio entre cada valor | No, tienes que escribirlos tú donde los necesites |
Por ejemplo, esto funciona sin problema:
edad = 20
print("Tengo", edad, "años") # Imprime: Tengo 20 años
Pero si intentas hacer lo mismo con +, obtienes un error, porque edad es un int y + no mezcla tipos automáticamente:
edad = 20
print("Tengo " + edad + " años")
# Error: TypeError: can only concatenate str (not "int") to str
Para poder concatenarlo, primero hay que convertirlo a texto explícitamente con str():
edad = 20
print("Tengo " + str(edad) + " años") # Imprime: Tengo 20 años
El operador * también trabaja con cadenas multiplicando el contenido de una cadena por un entero. Ejemplo:
primero = 'Test '
segundo = 3
print(primero * segundo) # Imprime: Test Test Test
Operadores de actualización
En Python existen operadores de actualización de valores de variables. Son los siguientes:
| Operador | Descripción | Ejemplo |
|---|---|---|
| Suma y asignación | += | a+=3 |
| Resta y asignación | -= | a-=1 |
| Multiplicación y asignación | *= | a*=2 |
| División y asignación | /= | a/=10 |
| División entera y asignación | //= | a//=4 |
| Módulo y asignación | %= | a%=2 |
| Exponenciación y asignación | **= | a**=7 |
Estos operadores realizan una operación de actualización sobre la variable de la parte izquierda:
x += 3
Esta operación actualiza el valor de la variable x sumándole 3. Esta es equivalente a:
x = x + 3
El resto de operadores funcionan de la misma manera pero realizando la operación correspondiente.
Conversión de tipo de datos
En Python, las conversiones entre diferentes tipos de datos básicos son una tarea común que permite que los datos se manipulen y se utilicen de forma adecuada para diferentes operaciones.
Conversión a entero (int)
Para convertir un valor a un tipo de dato entero (int), puedes usar la función int(). Esta función puede convertir tipos de datos como flotantes y cadenas de texto que representan números enteros.
De float a int
num_float = 3.14
num_int = int(num_float) # Lo convierte a 3, truncando la parte decimal
De string a int
num_str = "42"
num_int = int(num_str) # Lo convierte a 42
Nota: Si intentas convertir una cadena de texto que no representa un número entero válido, como "3.14", obtendrás un error.
Conversión a flotante (float)
Para convertir un valor a un tipo de dato flotante (float), usa la función float(). Esta función puede convertir tipos de datos como enteros y cadenas de texto que representan números decimales.
De int a float
num_int = 5
num_float = float(num_int) # Lo convierte a 5.0
De string a float
num_str = "3.14"
num_float = float(num_str) # Lo convierte a 3.14
Nota: Si la cadena de texto no representa un número decimal válido, como "hello", obtendrás un error.
Conversión a cadena de texto (string)
Para convertir un valor a un tipo de dato cadena de texto (string), usa la función str(). Esta función puede convertir tipos de datos como enteros, flotantes, y listas en cadenas de texto.
De int a string
num_int = 42
num_str = str(num_int) # Lo convierte a "42"
De float a string
num_float = 3.14
num_str = str(num_float) # Lo convierte a "3.14"
Conversión a booleano (bool)
Para convertir un valor a un tipo de dato booleano (bool), usa la función bool(). Esta función convierte valores a True o False basándose en su "veracidad" en contextos booleanos.
De int a bool
num_int = 0
result = bool(num_int) # Lo convierte a False
num_int = 1
result = bool(num_int) # Lo convierte a True
De float a bool
num_float = 0.0
result = bool(num_float) # Lo convierte a False
num_float = 3.14
result = bool(num_float) # Lo convierte a True
De string a bool
str_empty = ""
result = bool(str_empty) # Lo convierte a False
str_non_empty = "hello"
result = bool(str_non_empty) # Lo convierte a True
Orden de operaciones
Cuando en una instrucción aparece más de un operador, el orden de evaluación depende de las reglas de precedencia. Para los operadores matemáticos, Python sigue las convenciones matemáticas:
- Los paréntesis tienen un nivel superior de precedencia, y pueden usarse para forzar que una expresión sea evaluada en el orden que se desee. Dado que las expresiones entre paréntesis se evalúan primero,
2 * (3-1)es 4 y(1 + 1)**(5 - 2)es 8. Se pueden utilizar paréntesis para hacer una expresión más fácil de leer, incluso si el resultado de la misma no varía, como por ejemplo(minuto * 100) / 60. - La potenciación tiene el siguiente nivel más alto de precedencia. De este modo
2**1 + 1es 3, no 4; y3 * 1**3es 3, no 27. - La multiplicación y la división tienen la misma precedencia, que es superior a la de la suma y la de la resta, las cuales también tienen el mismo nivel de precedencia. Así que
2 * 3 - 1es 5, no 4; y6 + 4 / 2es 8, no 5. - Los operadores con igual precedencia se evalúan de izquierda a derecha. Así, la expresión
5 - 3 - 1es 1, no 3, porque5 - 3se evalúa primero.
En caso de duda, añade siempre paréntesis a tus expresiones para asegurarte de que las operaciones se realicen en el orden que deseas.
Ejemplo: Cálculo salario bruto
Escribe un programa que calcule el salario bruto de una persona a partir de las horas trabajadas y lo que cobra en € por cada hora. Los datos se introducen mediante consola.
Solución 1
"""
Escribe un programa que calcule el salario bruto de una persona a
partir de las horas trabajadas y lo que cobra en € por cada hora.
Los datos se introducen mediante consola.
"""
# Pedimos al usuario el número de horas y lo guardamos en la
# variable "horas"
horas = input("Indica el número de horas? ")
# La variable anterior es una cadena de texto, necesitamos
# transformar el valor a un valor entero
horas = int(horas)
# Pedimos al usuario la tarifa por hora y la guardamos en la
# variable "tarifa_hora"
tarifa_hora_texto = input("Introduzca la tarifa por hora? ")
# La variable anterior es una cadena de texto, necesitamos
# transformar el valor a un valor decimal
tarifa_hora= float(tarifa_hora_texto)
# Calculamos el salario multiplicando las horas por el salario de
# cada hora
salario = horas * tarifa_hora
# La variable salario es un float, necesitamos convertirlo a
# una cadena de texto para poder concatenarlo con un mensaje
salario_texto = str(salario)
# Concatenamos el texto que queremos imprimir con el salario
# calculado en el apartado anterior
mensaxe = "El salario bruto es " + salario_texto
# Imprimimos el mensaje indicando el salario
print(mensaxe)
Solución 2
"""
Escribe un programa que calcule el salario bruto de una persona a
partir de las horas trabajadas y lo que cobra en € por cada hora.
Los datos se introducen mediante consola.
"""
# Pedimos al usuario el número de horas y lo guardamos en la
# variable "horas"
horas = input("Indica el número de horas? ")
# Pedimos al usuario la tarifa por hora y la guardamos en la
# variable "tarifa_hora"
tarifa_hora= input("Introduzca la tarifa por hora? ")
# Calculamos el salario multiplicando las horas por el salario de
# cada hora
salario = int(horas) * float(tarifa_hora)
# Concatenamos el texto que queremos imprimir con el salario
# calculado en el apartado anterior
mensaxe = "El salario bruto es " + str(salario)
# Imprimimos el mensaje indicando el salario
print(mensaxe)
Solución 3
"""
Escribe un programa que calcule el salario bruto de una persona a
partir de las horas trabajadas y lo que cobra en € por cada hora.
Los datos se introducen mediante consola.
"""
# Pedimos al usuario el número de horas y lo guardamos en la
# variable "horas" ya transformado a un entero
horas = int(input("Indica el número de horas? "))
# Pedimos al usuario la tarifa por hora y la guardamos en la
# variable "tarifa_hora" ya transformado a un decimal
tarifa_hora= float(input("Introduzca la tarifa por hora? "))
# Calculamos el salario multiplicando las horas por el salario de
# cada hora
salario = horas * tarifa_hora
# Imprimimos el mensaje indicando el salario utilizando comas
# en el print para no transformar horas en cadena de texto
print("El salario bruto es ", salario)
Ejemplo: Conversión de unidades
Escribe un programa que le pida al usuario una temperatura en grados Celsius, la convierta a grados Fahrenheit e imprima por pantalla la temperatura convertida.
Solución 1
"""
Escribe un programa que le pida al usuario una temperatura en
grados Celsius, la convierta a grados Fahrenheit e imprima por
pantalla la temperatura convertida.
"""
# Pedimos al usuario la temperatura en grados Celsius
celsius = input("Indica la temperatura en grados Celsius: ")
# Fórmula -> Fahrenheit = (Celsius * 1.8) + 32
# Primero calculamos la parte del paréntesis, además tenemos
# que transformar la variable celsius a decimal
aux1 = float(celsius) * 1.8
# Ahora calculamos el resultado del paréntesis más 32
fahrenheit = aux1 + 32
# Construimos el mensaje para mostrar al usuario, además
# transformamos el valor de la temperatura a texto
mensaje = "La temperatura en grados Fahrenheit es " + str(fahrenheit)
# Mostramos el mensaje al usuario
print(mensaje)
Solución 2
"""
Escribe un programa que le pida al usuario una temperatura en
grados Celsius, la convierta a grados Fahrenheit e imprima por
pantalla la temperatura convertida.
"""
# Pedimos al usuario la temperatura en grados Celsius
celsius = input("Indica la temperatura en grados Celsius: ")
# Fórmula -> Fahrenheit = (Celsius * 1.8) + 32
# Hacemos el cálculo en una única expresión utilizando paréntesis
fahrenheit = (float(celsius) * 1.8) + 32
# Mostramos el mensaje al usuario, en este caso ya no guardamos
# en una variable lo que queremos mostrar
print("La temperatura en grados Fahrenheit es ", fahrenheit)