Fundamentos de Programación
Tema 2. Tipos de datos y variables: definición y uso
Grado en Ciencia de Datos
Objetivos
Conocer los tipos de datos más básicos en Python: números enteros y
reales, booleanos y cadenas de caracteres.
Formar y evaluar expresiones combinando distintos tipos de datos.
Definir y asignar valores a variables.
Convertir valores entre distintos tipos de datos.
Usar las funciones básicas de entrada y salida para solicitar datos al
usuario por teclado e imprimir resultados por pantalla.
Escribir comentarios de una o varias líneas para documentar el código
en Python.
2
Índice
1. Tipos de datos: numéricos, boolean, cadenas
2. Expresiones y operadores (aritméticos, relacionales, lógicos)
3. Variables
4. Operador de asignación
5. Conversión de tipo
6. Documentación de código
7. Entrada/Salida de datos básicos: números enteros y reales y cadenas
de caracteres
3
Tipos de datos
Cuando se programa en Python, se ha de tener siempre presente qué
tipo de datos tu programa está procesando.
Un tipo de dato es un conjunto de valores y de operaciones definidas
sobre esos valores.
El lenguaje Python permite trabajar con varios tipos de datos.
En este tema presentaremos únicamente los más básicos:
Tipo de dato Conjunto de valores Operadores básicos Ejemplos
int Números enteros + - * // % ** 99 12 2147483647
float Números reales + - * / ** 3.14 2.5 6.022e23
bool Verdadero/falso and or not True False
str Cadenas de caracteres + 'AB' 'Hola' '2.5'
4
Expresiones
Una expresión es una combinación de valores, variables y operadores
que Python evalúa para producir un valor resultado.
Muchas expresiones tienen el aspecto de fórmulas matemáticas:
operador operandos (y expresiones)
4 * (6 – 3)
Python usa unas reglas de precedencia bien definidas para aplicar los
operadores:
Para operaciones aritméticas, la multiplicación y la división se calculan antes
que las sumas y restas
Pueden usarse paréntesis para modificar el orden de las operaciones
5
Operadores aritméticos
Operador Operación Comentario
+- Signo Cambio de signo
+ Suma Suma de números reales o enterios
- Resta Resta de números reales o enteros
* Multiplicación Multiplicación de números reales o enteros
División
// entera
División de números enteros, descartando la parte fraccional
% Resto Resto de la división entera
/ División División de números reales
** Potencia Elevar la base al exponente
6
Ejemplos de expresiones aritméticas enteras
Expresión entera Valor Comentario
+99 99 Signo positivo
-99 -99 Signo negativo
--99 99 Signo negativo
5 + 3 8 Suma
5 - 3 2 Resta
5 * 3 15 Multiplicación
5 // 3 1 Sin parte fraccional
5 % 3 2 Resto
5 ** 3 125 Potencia
5 // 0 ZeroDivisionError Error: división por cero
3 * 5 - 2 13 * tiene precedencia
3 + 5 // 2 5 // tiene precedencia
3 - 5 - 2 -4 Asociativo por la izquierda
(3 - 5) - 2 -4 Mejor estilo
3 - (5 - 2) 0 No ambiguo
2 ** 2 ** 3 256 Asociativo por la derecha
7
Ejemplos de expresiones aritméticas reales
Expresión real Valor Comentario
3.141 + 2.0 5.141 Suma
3.141 - 2.0 1.141 Resta
3.141 * 2.0 6.282 Multiplicación
3.141 / 2.0 1.5705 División
Los números reales tienen 17 dígitos de
5.0 / 3.0 1.6666666666666667
precisión como máximo
3.141 ** 2.0 9.865881 Potencia
1.0 / 0.0 ZeroDivisionError Error: división por cero
Error: no se puede representar un
2.0 ** 10000.0 OverflowError
número real tan grande
Alcontrario que los números enteros, los números reales tienen un
tamaño y una precisión limitados
Es necesario tenerlo en cuenta, ya que una expresión como
0.1 + 0.1 + 0.1 devuelve el inesperado resultado de 0.30000000000000004
8
Operadores lógicos
El tipo de dato booleano (bool) representa valores de verdad: verdadero
(True) o falso (False)
Los operadores definidos para estos valores se conocen como
operadores lógicos, y tienen definiciones familiares:
a and b es True si ambos operandos son True, y False si alguno de los
dos es False
a or b es False si ambos operandos son False, y True si alguno de los
dos es True
not a es True si a es False, y False si a es True
9
Operadores lógicos
Eloperador not tiene mayor precedencia que el operador and, y este
mayor precedencia que el or
Se pueden usar paréntesis con los operadores lógicos para crear
expresiones más complejas
A menudo, la misma función puede formularse de distintas formas. Por
ejemplo, la expresión (a and b) y not (not a or not b) son
equivalentes, como se demuestra en la siguiente tabla de verdad:
10
Operadores relacionales
Algunos operadores mixtos toman operandos de un tipo y producen
un resultado de otro tipo
Los más importantes son los operadores relacionales, que se definen para
números enteros y reales, y devuelven un valor booleano:
Operador Significado True False
== Igual 2 == (1 + 1) 2.0 == 3.5
!= Distinto 5.0 != 2.5 (2 * 2) != 4
< Menor 2.5 < 5.0 5 < 5
<= Menor o igual 5 <= 5 5.0 <= 2.5
> Mayor 5.0 > 2.5 5 > 5
>= Mayor o igual 5 >= 5 2.5 >= 5.0
11
Operadores relacionales
Los operadores relacionales tienen menor precedencia que los
aritméticos, y mayor que los lógicos
No hace falta, entonces, poner paréntesis en expresiones como:
(2.0*2.0 - 4.0*3.0*5.0) >= 0.0
(5 >= 1) and (5 <= 12)
Aunque por estilo son recomendables
Python extiende el concepto de comparación a otros tipos de datos,
como las cadenas de texto
Los operadores == y != comparan si dos cadenas son iguales o distintas
Con los comparadores <, <=, > y >=, el comportamiento es más complejo.
Cada carácter de la cadena tiene un código numérico que Python usa para
comparar
• 'abajo' es menor que 'arriba', pero 'Barco' es menor que ambos y 'ábaco' es
mayor
12
Operadores de cadenas de caracteres
Las cadenas de texto son secuencias de caracteres (letras, dígitos,
símbolos, espacios y caracteres de control)
Se representan entre comillas simples
Puede usarse la contrabarra para representar caracteres especiales:
Secuencia Significado
'\t' Tabulador
'\n' Salto de línea
'\\' Contrabarra
'\'' Comilla simple
13
Concatenación de cadenas de caracteres
Es posible concatenar (unir) dos cadenas de texto mediante el
operador +
Expresión Valor
'Hola, ' + 'Mundo' 'Hola, Mundo'
'123' + '456' '123456'
'1234' + ' + ' + '99' '1234 + 99'
'123' + 456 SyntaxError: el segundo operador no es una cadena
14
Repetición de cadenas de caracteres
Hay un operador de repetición de cadenas
El símbolo que lo denota es *, el mismo que para la multiplicación de
enteros y/o reales
El resultado es la concatenación de la cadena consigo misma, tantas veces
como indique el número entero:
Expresión Valor
'Hola' * 5 'HolaHolaHolaHolaHola'
20 * '-' '--------------------'
6 * '=' + 3 * '(O)' + 6 * '=' '======(O)(O)(O)======'
15
Variables
Una variable es un nombre asociado a un tipo de dato
Los programas utilizan variables para almacenar valores a medida que
se van desarrollando los cálculos
El nombre de una variable es una secuencia de letras, dígitos y
subrayados ( _ )
El primer carácter del nombre no puede ser un dígito
Python distingue entre letras minúsculas y mayúsculas
Algunas palabras están reservadas por el lenguaje (and, import, in, etc.) y no
pueden usarse como nombres de variables
Ejemplos:
abc abc123
AB_ a_b
16
Reglas de estilo
Los programadores siguen normalmente unas reglas de estilo a la hora
de dar nombre a sus variables:
Deben comenzar por una letra minúscula, seguida de otras letras
(mayúsculas o minúsculas) y dígitos
Se usan las mayúsculas para delimitar las palabras en variables compuestas
por varias de ellas
Ejemplos: i, x, y, total, esBisiesto, fechaDeNacimiento
Una variable se considera constante cuando su valor es siempre el
mismo
La convención, en este caso, es escribir su nombre mediante mayúsculas y
dígitos, y usar el subrayado como separador de palabras
Ejemplos: VELOCIDAD_DE_LA_LUZ, AZUL_MARINO
17
El operador de asignación
Para definir una variable en Python usamos el operador de asignación
(=)
Ejemplo: al escribir a = 1234 , estamos:
Definiendo el identificador a como una nueva variable
Asignándole a la variable a el valor entero 1234
El lado derecho de la asignación puede ser cualquier tipo de expresión
En ese caso, Python evalúa la expresión y le asigna el resultado a la variable
Ejemplo:
18
Ejemplo: incremento de una variable
Elsiguiente código asigna el valor 17 a la variable i, y luego incrementa
en uno su valor:
i = 17
i = i + 1
Esta es una operación muy común en programación. Los pasos son los
siguientes:
Crea la variable i y le asigna el valor entero 17
Python evalúa la expresión i + 1 y obtiene el valor 18
Asigna este nuevo valor, 18, a la variable i
19
Asignaciones con operador
Incrementarel valor de una variable es tan frecuente que existe una
forma compacta de hacerlo en Python
La instrucción i = i + 1 puede escribirse como: i += 1
Ejemplo:
a = 3
b = 2
a += 4 * b
El valor final de a será 11
Todos los operadores aritméticos tienen su asignación con operador
asociada:
Asignación Valor de a Asignación Valor de a
a = 1 1 a //= 3 5
a += 10 11 a %= 2 1
a -= 7 4 a /= 2 0.5
a *= 4 16 a **= 2 0.25
20
Ejemplo: intercambio del valor de dos variables
El siguiente código intercambia los valores de las variables a y b:
a = 1234
b = 99
t = a
a = b
b = t
Los pasos son los siguientes:
a y b tienen inicialmente los valores 1234 y 99, respectivamente
t = a asigna a t el valor de a (ambos comparten ahora el mismo valor:
1234)
a = b asigna el valor de b a a (99). El valor que almacena una variable se
pierde cuando se le asigna uno nuevo
b = t asigna el valor de t a b (1234)
21
Conversión de tipo
Los programas manejan normalmente distintos tipos de datos
Es necesario prestar atención al tipo de cada dato para escoger los valores
y las operaciones a realizar con él
Python convierte automáticamente los enteros a reales cuando se
requiere (conversión implícita)
Ejemplo: 10 / 4.0 se evalúa como 2.5 ya que 4.0 es un número real y
ambos operandos han de ser del mismo tipo; 10 se convierte a real y el
resultado de dividir dos reales es un número real
Otra posibilidad es hacer una conversión explícita usando una función
de conversión (que toma un argumento de un tipo y devuelve uno de
otro tipo)
Estas funciones tienen el mismo nombre que los tipos de datos que hemos
visto: int(), float(), bool() y str()
22
Conversión de tipo explícita
Función Uso Ejemplo Res. Explicación
Convierte el int(2.7) 2 Descarta los decimales
int() argumento a un int(True) 1 True = 1 y False = 0
número entero int('10') 10 Convierte la cadena en entero
Redondea un
round(2.4) 2 Redondea el número real al entero
round() número real a
round(2.6) 3 más cercano
entero
Convierte el float(2) 2.0 Entero a número real
float() argumento a un float(True) 1.0 True = 1.0 y False = 0.0
número real float('2.5') 2.5 Convierte la cadena en real
Convierte el bool(0) False 0=False, distinto de 0=True
bool() argumento a un bool(1.0) True 0.0=False, distinto de 0.0=True
booleano bool('True') True Convierte la cadena en booleano
Convierte el str(10) '10' Convierte el entero en cadena
str() argumento a una str(2.5) '2.5' Convierte el real en cadena
cadena de texto str(True) 'True' Convierte el booleano en cadena
23
Documentación de código
Los comentarios sirven para explicar a las personas que puedan leer el
programa en el futuro, qué es lo que hace el programa, así como
explicar algunas partes del código
Los comentarios se ignoran al ejecutar el código
Escribir comentarios requiere un esfuerzo, pero es una buena práctica y
compensará con creces ese esfuerzo en el futuro
En Python, los comentarios se pueden poner de dos formas:
Comentarios de una sola línea: se escribe el símbolo almohadilla (#) al
comienzo del comentario. El comentario termina al final de la línea
Comentarios de varias líneas: el comentario comienza y termina con unas
comillas dobles triples (""")
24
Documentación de código
Ejemplo:
Python usa los comentarios multi-línea para asociar documentación
con módulos, funciones, clases y métodos (llamados documentation
strings o docstrings)
Veremos estas convenciones más adelante
25
Entrada/Salida de datos básicos
Nuestros programas serían de muy poca utilidad si no fueran capaces
de interaccionar con el usuario
Para pedir información al usuario, se utiliza la función input(), así como
los argumentos de línea de comandos
Para mostrar mensajes en pantalla, se utiliza la función print()
La función de entrada input() hace lo siguiente:
Espera a que el usuario escriba un texto y pulse la tecla de retorno de carro
Entonces prosigue la ejecución, devolviendo una cadena con el texto que
tecleó el usuario
La función input admite un argumento opcional: una cadena con el
mensaje que se le debe mostrar al usuario para este sepa qué información
ha de introducir
La función de salida print() muestra uno o más datos por pantalla
26
Entrada/Salida de datos básicos
Ejemplos
Lee una cadena desde teclado y la muestra por pantalla:
El usuario escribe el texto que quiere
en esta caja. Al pulsar retorno de carro,
la cadena de texto escrita se guarda en
la variable x.
A continuación, el valor de x se
muestra por pantalla gracias a la
instrucción print(x)
En el ejemplo anterior, el usuario no
sabe qué información ha de escribir. Incluyendo un mensaje como
argumento del input(), el programa queda más claro:
El mensaje ‘Dime tu edad:’ se
muestra al solicitar la información al
usuario.
La instrucción print escribe tres
datos (separados por comas). Estos
tres valores aparecen por pantalla
separados por un espacio
27
Entrada/Salida de datos básicos
La función input() devuelve una cadena de texto. En el caso de que
necesitemos un número, tendremos que hacer una conversión de tipo
a int o float
Ejemplo: el siguiente programa indica si el año introducido por el usuario es
o no bisiesto
Conversión
del texto
leído a un
número
entero
Un año es bisiesto si es divisible entre 4, excepto
aquellos divisibles entre 100 pero no entre 400.
28
Formato de salida: argumentos
La función print() usa un espacio en blanco como separador y un
retorno de carro, '\n', como carácter final
El argumento sep permite modificar el separador
El argumento end permite modificar el texto que se muestra al final
Añadimos un punto y un
retorno de carro al final
Separamos las dos cadenas
mediante una coma y un
espacio
29
Formato de salida: cadenas formateadas
Comenzar una cadena con la letra f o F antes de abrir las comillas
permite formatear la salida con gran flexibilidad, combinando:
Caracteres normales, que se imprimirán por pantalla directamente.
Especificadores de formato, entre llaves {}, que definen el modo en que se
visualizarán los valores que se incluyen dentro.
Ejemplo:
evento = 'olimpiadas'
año = 1992
lugar = 'Barcelona'
print(f'Las {evento} de {lugar} del {año}.')
Las olimpiadas de Barcelona del 1992.
30
Formato de salida: cadenas formateadas
En las cadenas formateadas, pueden añadirse opciones de formato
adicionales escribiendo dos puntos (:) tras el valor.
{valor:formato}
Las opciones de formato más habituales son:
[alineamiento][0][ancho][.precisión]
Alineamiento: < (izquierda), > (derecha), ^ (centrado)
0: completa los caracteres que faltan rellenando con ceros en lugar
de espacios.
ancho: mínimo número de caracteres a imprimir.
precisión: número de dígitos decimales a mostrar. Conviene poner el
carácter f tras la precisión para forzar la notación de punto fijo.
31
Formato de salida: cadenas formateadas
Ejemplos (suponemos que a=7, b=2 y nombre='Miguel')
Instrucción Resultado
print(f'Hola {nombre}') Hola Miguel
print(f'Tengo {b * 10} años') Tengo 20 años
print(f'PI={pi:.2f}') PI=3.14
print(f'PI={pi:.4f}') PI=3.1416
print(f'Agente {a:03d}') Agente 007
print(f'({a:10})') ( 7)
print(f'({a:<10})') (7 )
print(f'{a} * {b} = {a * b}') 7 * 2 = 14
print(f'{a} / {b} = {a / b:.2f}') 7 / 2 = 3.50
print(f'{nombre} tiene {a} hijos') Miguel tiene 7 hijos
print(f'\t... y Luis tiene {b}') ... y Luis tiene 2
print(f'{"Unamuno":^10}, {nombre:>10}') Unamuno , Miguel
32