Tema 2. Apuntes A Mano (Imprimir)
Tema 2. Apuntes A Mano (Imprimir)
Tema 2. Apuntes A Mano (Imprimir)
ENTRADA/SALIDA
1. TIPOS DE DATOS BÁSICOS, OPERADORES Y ENTRADA/SALIDA
1.1. Palabras reservadas
En Python existen palabras con un significado especial para el intérprete que no se pueden utilizar para ningún otro propósito, exclusivamente se pueden usar para el fin
que han sido creadas. He aquí la lista de las 34 palabras reservadas del intérprete de Python 3: and, as, assert, async, await, break, class, continue, def, del, elif, else,
except, False, finally, for, from, global, if, import, is, ambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with y yield.
1.2. Comentarios
Los comentarios en Python son líneas dentro de código que el intérprete ignora a la hora de ejecutar el programa. Sirve tanto para facilitar la lectura de código a personas
que no lo hayan desarrollado como para, en el futuro, recordar que hace nuestro programa y cómo lo hace.
Escribir comentarios, aunque requiere un esfuerzo, pero es una muy buena práctica.
Hay dos formas de escribir comentarios en Python:
De una sola línea: Mediante el símbolo de almohadilla (#) conseguiremos que el intérprete
de Python ignore todo lo que haya detrás de ella hasta el final de la línea.
Multilínea: Delimitando el comentario entre los caracteres de triples comillas dobles (“””)
o simples (‘’’) conseguiremos que el intérprete de Python ignore todo lo que hay entre
dichos delimitadores.
Un dato a tener en cuenta es que los comentarios multilínea en Jupyter Notebook no son aceptados, por lo que sólo podremos utilizar comentarios de una sola línea.
1.3. Tipos de datos básicos
Un tipo de dato es un atributo de los datos que indica al sistema y al programador sobre la clase de datos que van a almacenar. Esto incluye imponer restricciones en los
datos como qué valores pueden tomar y qué operaciones se pueden realizar. Por ejemplo, un tipo de dato numérico sólo puede almacenar números, y un tipo de dato
booleano sólo puede almacenar dos estados, verdadero o falso. Según el tipo de datos que se utilice para definir una variable ocupa más o menos espacio en memoria.
Los tipos de datos los podemos dividir en básicos, que son los nativos del lenguaje y avanzados, que son una extensión de los nativos.
Ahora veremos los tipos de datos básicos (numéricos, cadenas de caracteres y lógicos), los avanzados (listas, tupla, conjunto y diccionario)
los veremos más adelante.
Los tipos de datos básicos en Python son: Numeric (Integer, Float and Complex Number), Boolean and Strings.
NUMÉRICOS
Este tipo de datos lo utilizamos para representar números. Dentro de estos datos diferenciamos tres tipos:
Enteros (Integer): Este tipo de datos comprende el conjunto de todos los números enteros, aquellos que no tienen decimales, pero como dicho
conjunto es infinito, en Python el conjunto está limitado realmente por la capacidad de la memoria disponible, no hay un límite de representación
impuesto por el lenguaje.
Decimales o flotantes (Float): Este tipo de dato comprende el conjunto de todos los números reales, aquellos que tienen una parte entera
y una parte decimal. Al igual que los números enteros no existe un límite de representación impuesto por el lenguaje.
Complejos (Complex): Este tipo de datos comprende los números compuestos de una parte real y una parte imaginaria, ambas partes se
representan como tipo flotante, por lo que un número complejo constará a su vez de dos partes diferenciadas de tipo float, una la parte real y
otra la imaginaria.
CADENAS DE CARACTERES (STRINGS)
Las cadenas de caracteres, son secuencias inmutables que contienen caracteres encerrados entre comillas, bien dobles (“”) o bien
simples (‘’). En Python existe una función print () que nos permite mostrar correctamente el valor de una cadena u otros valores o
variables por pantalla. Se utiliza de la manera descrita a la derecha.
LÓGICOS O BOOLEANOS (BOOLEAN)
Representa la mínima expresión racional, los valores verdaderos (True o 1) o falsos (False o 0). Los tipos de datos booleanos se utilizan habitualmente para
guardar en todo momento el estado de una propiedad o característica.
1.4. Variables
Este es un concepto fundamental de la programación, en el cuál se define un identificador y se le asigna un valor y más adelante
podremos utilizarlas como si se tratase de un valor literal, incluso operarlas entre otras variables y volver a asignarles un valor en
cualquier momento.
En realidad, una variable es un lugar en la memoria donde almacenar un dato, cuyo valor podremos variar durante la ejecución del
programa. Tiene un nombre, un valor y es de un tipo. Como vimos anteriormente según el tipo de dato que se utilice para definir
una variable ocupa más o menos espacio en memoria.
El contenido de una variable es su valor, almacenado en memoria. Cualquier operación realizada sobre una variable se realiza sobre
un valor. El continente no es más que la asociación de un nombre, llamado identificador, y una dirección de memoria que apunta hacia el contenido, es decir, el valor
asociado a dicho nombre.
Las reglas para conformar el identificador de una variable son:
Las palabras reservadas no se pueden utilizar como identificadores.
No se permiten espacios en blanco.
No se pueden incluir símbolos especiales, tales como !, @, #, $, %
No está permitido utilizar un dígito como primer carácter.
En esta otra imagen vemos como realizar asignaciones aumentadas y su relación con la asignación simple:
También podemos realizar asignación múltiple de la manera que se muestra a
continuación. Vemos como en “x” se guardará el 1 y en “y” se guardará el 2
mediante la instrucción que se ve a continuación:
Al crear una estructura de cálculo con variables, podemos fácilmente adaptar sus
valores para hacer distintas comprobaciones:
Pero como todos los cambios anteriores se ejecutan inmediatamente, los datos no se almacenan en ninguna variable
por lo que después no podemos comprobar si el cambio de tipo fue el correcto con la función type (). Vamos a hacerlo
un poco mejor.
Si intentamos realizar un casting de una variable del tipo texto (string) a un entero, solo funcionara si la cadena de
caracteres, en su interior, contiene caracteres que se pueden transformar a números, en el momento en el que existan
caracteres del tipo letra, nos dará error.
Otras funciones que nos pueden ayudar bastante en la conversión y manejo de números son round () que nos permite redondear un número a su
entero más cercano, max () que nos devolverá el número mayor de una secuencia de números pasada como parámetro y min () que nos devolverá
el número menor de una secuencia de números pasada como parámetro.
Una cosa a tener en cuenta es que al copiar código de un procesador de textos debe tenerse especial cuidado porque es posible que las comillas no se correspondan con
las utilizadas en Python, por lo que el intérprete no lo entenderá como una cadena y dará error. También puede ocurrir este error cuando se descarga código fuente
codificado en otra región del mundo donde la codificación de caracteres sea diferente y el carácter de la comilla no sea igual que en España. Normalmente hay menos
problemas con la doble comilla que con la comilla simple.
Una de las operaciones más comunes que se puede realizar con cadenas es la concatenación o suma de cadenas. Se suele
realizar con el operador + aunque hay varias formas de realizarla.
Los índices nos permiten posicionarnos en un carácter específico de una cadena y acceder a él. Representan un
número [índice], que empezando por el 0 indica el carácter de la primera posición, y así sucesivamente.
El slicing (rebanando) es una capacidad que tienen las cadenas de devolver un subconjunto o subcadena utilizando dos índices [inicio: fin].
Si en el slicing no se indica un índice se toma por defecto el principio y el final (incluidos)
Si un índice se encuentra fuera del rango de cadena, el intérprete de Python dará error:
Pero con slicing esto no pasa y simplemente se considera el
espacio como vacío:
Una propiedad de las cadenas es la inmutabilidad, no se pueden modificar. Si intentamos reasignar un carácter, no nos dejará:
Sin embargo, utilizando slicing y concatenación podemos generar nuevas cadenas fácilmente:
Una función muy útil que soportan las cadenas es len (), que nos permite saber su longitud (el número de caracteres que contienen)
2.8. La función print ()
Para concatenar cadenas dentro de la función print podemos hacerlo de dos formas diferentes, bien separando las cadenas con una coma,
con lo que se insertará un espacio en blanco entre ellas.
O bien separarlas con un espacio en blanco en lugar de utilizar la coma, de esta manera no se insertará ningún espacio en blanco entre ellas.
Como se aprecia anteriormente, la función print () incluye un salto de línea cada vez que se ejecuta. Si se quiere que Python no añada un salto
de línea al final de un print() se definirá el argumento end con el carácter que se desee implementar como terminador de línea.
Es posible asignar cadenas a variables y la forma correcta de mostrarlas es con la función print ().
3. ENTRADA Y SALIDA DE DATOS
3.1. Entrada de datos por teclado
La entrada de datos por teclado se realiza mediante la función input (), que nos devolverá el valor tecleado hasta la pulsación de la tecla INTRO como una cadena de
caracteres. En la siguiente imagen vemos su uso y comprobamos que el tipo de valor recibido es una cadena de caracteres.
Si a la función input () le pasamos como parámetro una cadena de
caracteres, dicha cadena nos aparecerá como mensaje antes de
leer el valor.
Al recibir un valor mediante esta función hay que tener en cuenta que siempre se recibe una cadena de caracteres
(string) y que no podremos tratarla como un número.
Para tratar el valor recibido como un número entero y poder operar con él debemos realizar un casting a un valor entero (integer) como se ve en la imagen.
Si lo que queremos es tratar el valor recibido como un número decimal y poder operar con él debemos realizar un casting a un valor decimal (float) como se ve en la
imagen:
Para permitir la introducción de múltiples valores recurriremos a la instrucción for, que veremos más adelante:
Para evitar los caracteres especiales, debemos indicar que una cadena es cruda (raw),
anteponiendo una r a la cadena de caracteres a mostrar, como se ve a continuación:
Podemos utilizar “”” (triples comillas) para cadenas multilínea:
Utilizando el parámetro sep podemos separar cada uno de los caracteres de la cadena con el carácter indicado y con el parámetro end
podemos finalizar la cadena con el carácter que le indiquemos:
Existe una funcionalidad en las cadenas de texto que nos permite formatear información cómodamente utilizando
identificadores referenciados, para ello usamos el método format ().
Mediante el método format () también podemos referenciar a partir de la posición de los valores utilizando índices.
O podemos utilizar un identificador con una clave y luego pasarlas al método format ().
También podemos realizar un formateo avanzado, alineando a la derecha en 30 caracteres de la siguiente manera
O bien alineando a la izquierda en 30 caracteres O bien alineamiento al centro en 30 caracteres: Para realizar un truncamiento de 3 caracteres:
Y combinando varios de estos formatos hacemos un alineamiento a la derecha en 30 caracteres con truncamiento de 3:
Y, por último, para formatear números enteros, rellenados con ceros, procedemos de la siguiente manera:
Y eso mismo si lo quisiéramos hacer con números decimales o flotantes, hacemos lo siguiente: