Datos

Los datos que utilizan los programas se guardan en la memoria principal y pueden ser literales o estar identificados mediante lo que llamamos como variables. Como su nombre indica, una variable puede cambiar de contenido a lo largo de la ejecución de un programa.

Las variables tienen tres características que las definen por completo: su nombre, su tipo y su valor.

Nombre

Es una combinación de caracteres, dígitos y el signo de subrayado que permiten identificar una variable de modo único. Todo nombre debe empezar por un carácter.

  • Ejemplos de nombres válidos: x, y, pi, var2, var_2, precio_de_coste

  • Ejemplos de nombres inválidos: 14_de_mayo , 35a , +set, capitol 14

Es muy recomendable que las variables empiecen con minúscula.

Debemos pensar que hay una serie de nombres que Python utiliza como parte del lenguaje y, por tanto, no son válidos como nombre de variable, ya que pueden darnos resultados inesperados. A continuación se pueden ver:

Palabras clave en Python

False

def

if

raise

None

del

import

return

True

elif

in

try

and

else

is

while

as

except

lambda

with

assert

finally

nonlocal

yield

break

for

not

class

from

or

continue

global

pass

Tipo

El tipo define la naturaleza de los valores que puede tener una variable. También limita las operaciones que se pueden realizar con ellas.

Los tipos de datos elementales son: carácter, entero, real y booleano:

Carácter permite representar información referente a caracteres simples y a secuencias de caracteres, se representan entre comas, ya sean simples ‘ o dobles “. En el mundo de la programación conocemos una secuencia de caracteres con el nombre de String (str). Python considera los caracteres como strings de longitud 1.

  • Ejemplos de caracteres: ‘a’, ‘b’, ‘\n’.

  • Ejemplos de String: ‘3’, “llonguet”, “Josep”.

Entero (int) permite representar valores numéricos tanto positivos como negativos.

  • Ejemplos de enteros: -33, 14, 28 o 8545445.

Real (float): este tipo designa un número de coma flotante. Estos valores se especifican con un punto decimal. Opcionalmente, se puede añadir el carácter e o E seguido de un entero positivo o negativo para especificar el número en notación científica.

  • Ejemplos de números reales: -1.2, 3.1416, -0.26989, 4. , 3e7 (3000000.0), 1.6e-4 (0.00016).

Complejo: valores numéricos en formato complejo. Se especifican como +j.

  • Ejemplos de números complejos: 2+3j, 33+0j.

Booleano: valores lógicos. Pueden tener únicamente dos valores: verdad (True) o falso (False).

El valor máximo y mínimo que podemos guardar en una variable de tipo entero o real no están definidos, como ocurre en otros lenguajes, dependen de la máquina donde ejecutan el código.

Declaraciones de variables

Durante el transcurso del programa, el programador debe especificar cada una de las variables que necesitará. La especificación de estas variables se llama una declaración.

Normalmente, estas declaraciones se realizan al inicio del programa. Como mínimo, debe definirse el nombre y asignarse un valor inicial. Si no se quiere (o no se puede) asignar un valor, en Python tenemos el valor nulo: None.

A continuación tiene la primera muestra de código, declaramos una variable de cada uno de los diferentes tipos de datos que hemos descrito en la sección anterior:

[1]:
caracter = 'a'
estring = "Hello!"
enter =  123
decimal = 1.23
complexe = 1+23j
logic = False


#Este código no es relevante para nosotros, solamente el resultado
print(type(caracter))
print(type(estring))
print(type(enter))
print(type(decimal))
print(type(complexe))
print(type(logic))
<class 'str'>
<class 'str'>
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'bool'>

Operadores i operandos

En Python, los operadores son símbolos especiales que indican que es necesario realizar algún tipo de computación. Los valores con los que actúa un operador se llaman operandos.

Lo entenderemos con un pequeño ejemplo:

x = 10.0
y = 5
resultado = x + y

En este caso, el operador + nos permite sumar los operandos x y y juntos y guardar el resultado en la variable del mismo nombre. Debemos destacar que en este código hemos necesitado definir tres variables distintas.

Un operando puede ser una variable o literal. Definimos los literales en un programa como la idea de expresar un valor que no cambia en el código fuente, estos deben ser de uno de los diferentes tipos de datos que hemos descrito anteriormente.

A continuación tenemos otro fragmento de código en el que usamos otros operadores y literales de tipo entero:

a = 10
b = 20
x = 45
r = (a + b - 5) + (x + 10 + 20)

Una secuencia de operandos y operadores, como + b - 5, se llama expresión. Python admite muchos operadores diferentes para combinar operandos de diferentes tipos, esto nos permitirá crear expresiones diferentes para solucionar los diferentes problemas que se presenten.

Operadores aritméticos

La siguiente tabla lista los operadores aritméticos compatibles con Python:

Operador

Ejemplo

Definición

Resultado

+ (unari)

+a

Unario Positivo

a Realmente no hace nada. Existe para complementar la negación unaria.

+ (binari)

a + b

Suma

Suma a i b

- (unari)

-a

Negació unària

El mismo valor que a pero con el signo opuesto

- (binari)

a - b

Resta

Resultado de restar b al operando a

*

a * b

Multiplicación

Producto de a y b

/

a / b

División

Cociente de a dividido por b. El resultado siempre es del tipo float float.

%

a % b

Módulo

Resto de a dividido por b

//

a // b

División entera

Cociente de dividir a entre b, redondeado al siguiente número entero más pequeño

**

a ** b

Exponente

a elevado a b

Aquí tenéis algunos ejemplos de su uso:

[2]:
division_decimal = 3 / 2
print(division_decimal)
1.5
[3]:
division_entera = 3 // 2
division_entera
[3]:
1

Operadores de comparación

Los operadores de comparación se utilizan normalmente en contextos booleanos como los que nos sirven para controlar el flujo del programa, como veremos más adelante. El resultado de usar un operador de comparación es siempre del tipo booleano.

Operador

Ejemplo

Definición

Resultado

==

a == b

Igual

True si el valor de a es igual al valor de bFalse de lo contrario

!=

a != b

Diferente

True si el valor de a es diferente a bFalse de lo contrario

<

a < b

Menor

True si el valor de a es menor que b False de lo contrario

<=

a <= b

Menor o igual a

True si el valor de aes menor o igual a bFalse de lo contrario

>

a > b

Mayor

True si el valor de a es mayor en bFalse de lo contrario

>=

a >= b

Mayor o igual a

True si el valor de a es mayor o igual a bFalse de lo contrario

El valor almacenado internamente para una variable en coma flotante puede no ser lo que uno pensaría que iba a ser. Por este motivo es poco práctico comparar variables del tipo coma flotante con el operador de igualdad exacta ==.

Aquí tenéis algunos ejemplos de su uso:

[1]:
x = 5.3
y = 5.5
comparacion_1 = x < y
comparacion_1
[1]:
True
[5]:
letra_a = 'a'
letra_b = 'b'

comparacion_2 = letra_a != letra_b
comparacion_2
[5]:
True
[6]:
letra_a = 'a'
letra_b = 'b'

comparacion_3 = letra_a > letra_b
comparacion_3
[6]:
False

Operadores lógicos

Los operadores lógicos not, or y and modifican y unen expresiones evaluadas en un contexto booleano y nos permiten crear condiciones más complejas.

Expresiones lógicas que incluyen operandos booleanos

Como ha visto, algunas expresiones de Python son, en realidad, de tipo booleano. Es decir, son iguales a uno de los valores Python True or False.

Por ejemplo:

A continuación tenéis la tabla de operadores:

Operador

Ejemplo

Significado

not

not x

True si x es FalseFalse si x es True

or

x or y

True si x o y es TrueFalse en caso contrario

and

x and y

True si x y y son TrueFalse en caso contrario

Para ver su uso, pero sobre todo el resultado de la aplicación de estos operadores en variables del tipo booleano, en continuación tiene un conjunto de ejemplos de su aplicación:

[7]:
verdadero = True
falso = False
[8]:
operador_not = not verdadero
operador_not
[8]:
False
[9]:
operador_or = verdadero or falso
operador_or

[9]:
True
[10]:
operador_or = falso or falso
operador_or
[10]:
False
[11]:
operador_and = verdadero and falso
operador_and
[11]:
False
[12]:
operador_and = verdadero and verdadero
operador_and
[12]:
True

Operadores de asignación aumentada

Antes hemos visto que un signo igual (=) se utiliza para asignar un valor a una variable. Es, por supuesto, perfectamente viable que el valor de la derecha de la asignación sea una expresión que contenga otras variables. Si realizamos la operación sobre una misma variable podemos hacer lo siguiente:

x <op>= y es lo mismo que hacer x = x <op> y

Es decir:

x = 4
y = 5

x += y

Es lo mismo que hacer:

x = x + y

Comentarios en el código

En el mundo de la programación, un comentario es una explicación o anotación legible por el programador en el código fuente de un programa de ordenador. Se escriben con el propósito de facilitar la comprensión del código fuente para futuras lecturas del mismo programador o por otros programadores, son ignorados por los intérpretes.

Muchas veces también usaremos los comentarios para prevenir la ejecución de una parte del código cuando queremos evaluar el funcionamiento de nuestro propio código. En Python los comentarios se expresan con el símbolo #. A continuación veremos dos ejemplos de su uso:

# Esto es un comentario que me ayuda a explicar el blog de código

x = y +3 # Aquí también puedo poner un comentario para describir la expresión

Es recomendable comentar el código que realizamos, en particular aquellas partes más relevantes o que presentan cierta dificultad.

[2]:
# COMENTARIO
variable = 45
resultado = variable + 33
print(resultado)
78

Salida de información

Para poder mostrar información por pantalla, utilizaremos la función print. Esta función puede mostrar cualquier texto (string) separado entre comas.

A continuación tiene varios ejemplos:

[8]:
print("Hola mon!")

print("Esto es un texto" + " el cual concatenam con otro texto")

a = 'a' + " " + 'b'

print("También lo podemos hacer así " + a)

num = 3
print(f'Texto concatenado con un número "{num}"')
Hola mon!
Esto es un texto el cual concatenam con otro texto
También lo podemos hacer así a b
Texto concatenado con un número "3"

Funciones

Una función se define por cuatro aspectos:

  • El nombre de la función: es la manera de poder identificar cada uno de los subprogramas.

  • Los argumentos o parámetros: es la información adicional que podemos suministrar a las funciones. Usualmente, se indica como una lista de valores separada por comas entre paréntesis.

  • El tipo de valor resultado: es el tipo de información que la función puede suministrar como resultado de la su ejecución. El valor que devuelve la función se genera con la instrucción return. En el lenguaje Python no debemos especificar cuál es el tipo del valor resultado.

Hay que notar que en Python existe la palabra reservada def para determinar que un bloque de código se corresponde a una función. Su esquema es el siguiente:

def <nombre>(<parametro_1>, <parametro_2>, ..., <parametro_n>):
    <líneas de código>

El conjunto de líneas de código también se conoce con el número de cuerpo del subprograma. El cuerpo del subprograma debe estar identado.

A continuación veremos cómo se implementa una función que transforma una cantidad de metros a centímetros. Esta función que se llama m_a_cm recibe un parámetro llamado m el cual esperamos que contenga un número sea entero o decimal. Esta función utiliza el parámetro en una expresión y posteriormente devuelve el valor calculado.

[9]:
def m_a_cm(metros):
    centimetros = metros * 100
    return centimetros

La palabra reservada return nos sirve para explicitar el valor que debe devolver la función.

Veamos ejemplos de uso de la función definida anteriormente. Es interesante fijarse en cómo usamos el valor devuelto por la función y lo guardamos en la variable transformado:

[11]:
# La variable transformado recoge el valor de la función m_a_cm
# podemos usar este valor para otras tareas en nuestro programa
m = 33
transformado = m_a_cm(m)

print(f'{m} metros son {transformado} cm')
33 metros son 3300 cm

Ejercicios

La idea es que con ellos consolides los conceptos trabajados hasta este momento: creación de variables y uso de operadores.

  1. Realizar un conjunto de expresiones en Python que nos calcule el índice de masa corporal (IMC) de una persona que mide 2 m i pesa 60 Kg. Se calcula dividiendo el peso entre la altura al cuadrado (en cm).

  2. Realizar un conjunto de expresiones en Python para resolver una ecuación de primer grado de la forma ax+b= 0. Los valores de a y b los pondremos directamente en el código y mostrar la solución por pantalla.

  3. Crear una función que recibe un número entero que representa un año y nos devuelve un valor booleano que representa si es un año bisiesto o no. Comprueba la corrección de tu función usándola.

  4. Realizar una función que recibe los parámetros (números enteros): a, b y c. resuelve una ecuación de segundo grado y devuelve sus soluciones. Ejemplo, la ecuación: \(2x^2 + 20x + 3 = 0\) debe dar -0.1523201 ; -9.8476799. Para calcular la raíz cuadrada podéis usar la función sqrt. Comprueba la corrección de tu función usándola.

Ejemplo de uso de la función:

import math # Al principio del script

math.sqrt(4)