Data Types

Contenido

Los Literales: Los Datos por Sí Mismos

A nivel teórico, un literal se define como un dato cuyo valor está determinado única y exclusivamente por su propia representación literal. Como esta definición formal puede resultar un tanto abstracta y difícil de asimilar al principio, recurramos a un ejemplo práctico para entenderlo a la perfección.

El Experimento de la Identificación

Analicemos detenidamente los dos elementos siguientes:

Caso 1: Una secuencia numérica

123

Si miras este conjunto de dígitos, ¿puedes deducir qué valor representa? La respuesta es inmediata: representa el número ciento veintitrés. No hay espacio para la duda ni la libre interpretación; su valor es fijo y evidente.

Caso 2: Una sola letra

c

Si miras esta letra de forma aislada, ¿sabrías decir con certeza qué valor representa? Aquí la situación cambia. Podría ser el símbolo físico de la velocidad de la luz, la constante de integración en una fórmula de cálculo matemático, o la longitud de la hipotenusa en el teorema de Pitágoras. Las posibilidades son infinitas.

Sin información o contexto adicional (como una línea de código previa que defina su significado), es imposible saber qué representa exactamente esa c.

La Clave de la Distinción

  • 123 es un literal: Su valor es inmutable y obvio desde el momento en que se escribe. No necesita un contexto para “significar” ciento veintitrés; se explica por sí mismo.
  • c no es un literal: Es un símbolo (en programación, habitualmente una variable). Su valor es abstracto y puede cambiar o asignarse dinámicamente a lo largo del programa.

¿Para qué sirven los literales en el código?

En el desarrollo de software, utilizas los literales constantemente para codificar datos duros y fijos directamente dentro de tu código fuente (por ejemplo, cuando escribes el mensaje "Hello, World!", el número de iteraciones de un bucle como 10, o una tasa de interés fija como 0.16).

Sin embargo, para que el intérprete de Python no confunda tus literales con variables u otras instrucciones, el lenguaje exige respetar una serie de convenciones y reglas de escritura muy estrictas según el tipo de dato que estés manejando (enteros, decimales, textos o booleanos).

Aquí tienes la adaptación de esta sección, enfocada en la diferencia fundamental entre cómo procesa la computadora un string frente a un número entero, un concepto clave para entender el manejo de memoria en Python y preparar tu examen PCEP.

Detrás de la Pantalla: Strings vs. Números Enteros

Para entender cómo maneja Python los datos internamente, analicemos el siguiente experimento mental con dos líneas de código muy similares pero con una diferencia crítica:

print("2026")
print(2026)

A primera vista, la primera línea te resultará completamente familiar (un string delimitado por comillas). La segunda línea podría parecer un error debido a la total ausencia de comillas. Sin embargo, si ejecutas este código, el intérprete no protestará. Al contrario, verás dos líneas exactamente idénticas en tu pantalla:

2026
2026

¿Qué pasó realmente? Dos Tipos de Literals

Aunque el resultado visual en la consola sea idéntico, semánticamente estás lidiando con dos especies de datos completamente diferentes:

  1. Un String ("2026"): Una cadena de caracteres que ya dominas.
  2. Un Número Entero (2026): Un literal de tipo numérico entero (integer), algo totalmente nuevo en nuestro recorrido.

La función print() se encarga de traducir ambos a una forma legible para los humanos, y dado que la representación visual de ambos es la misma, en la pantalla se ven igual. Pero dentro de la memoria de la computadora, sus vidas son radicalmente distintas.

La Vida Interna en la Memoria del Computador

El almacenamiento de estos dos literales sigue caminos opuestos en el hardware:

  • El String ("2026"): Para la computadora, este dato no tiene ningún valor matemático. Existe en la memoria simplemente como una secuencia de caracteres o letras independientes (el carácter ‘2’, seguido del ‘0’, luego el ‘2’ y finalmente el ‘6’). La máquina no sabe qué número es, solo guarda los dibujos de los caracteres alineados.
  • El Número Entero (2026): Cuando Python ve los dígitos directos sin comillas, sabe que se trata de una cantidad matemática. El intérprete toma el número y lo convierte directamente en código máquina, es decir, en una representación binaria pura (un conjunto de bits, ceros y unos) dentro de los circuitos del procesador.

Gracias a esta conversión, la computadora puede usar ese 2026 para realizar operaciones aritméticas reales (sumar, restar, multiplicar), algo que sería imposible de hacer directamente con el string "2026".

Aquí tienes la adaptación de esta sección clave sobre los números enteros, estructurada con la claridad conceptual necesaria para asentar las bases del tipado de datos en Python y asegurar puntos en el examen PCEP.

Literales Numéricos: El Tipo Entero (Integer)

Los números que manejan las computadoras modernas se dividen principalmente en dos grandes mundos:

  1. Enteros (Integers / int): Números que carecen por completo de parte fraccionaria o decimal (por ejemplo, 4, -15, 0).
  2. Números de Punto Flotante (Floats / float): Números que contienen (o pueden contener) una parte fraccionaria o decimal (por ejemplo, 3.14, -0.5).

Esta distinción es crítica. La frontera entre ambos es sumamente estricta porque difieren radicalmente en cómo se almacenan en la memoria física del ordenador y en el rango de valores que pueden adoptar.

A la característica que determina la naturaleza de un valor, su rango admisible y sus aplicaciones permitidas se le conoce formalmente como Tipo de Dato (Data Type). En Python, la estructura física de tu literal le indica automáticamente al intérprete qué tipo de dato debe asignarle en memoria.

¿Cómo reconoce Python un número entero?

El proceso es muy intuitivo y se parece a cómo escribes un número con lápiz en papel: es simplemente una secuencia continua de dígitos. Sin embargo, existe una restricción absoluta: no puedes intercalar ningún carácter que no sea un dígito dentro del número.

Tomemos como ejemplo el número once millones ciento once mil ciento once. En el mundo real, para facilitar la lectura de tantas cifras, usarías alguna de estas notaciones:

  • 11,111,111 (Notación anglosajona)
  • 11.111.111 (Notación europea)
  • 11 111 111 (Separación por espacios)

Python prohíbe terminantemente el uso de comas, puntos o espacios en blanco dentro de un entero. Si pones un punto, Python pensará que es un decimal (float); si pones una coma o un espacio, arrojará un error de sintaxis inmediato.

La solución: El uso de guiones bajos (_)

Para resolver este problema de legibilidad en números grandes, Python introdujo una regla especial: permite el uso de guiones bajos individuales como separadores visuales. El intérprete ignora por completo estos guiones bajos al procesar el valor. Por lo tanto, puedes escribir legítimamente ese número de dos formas:

numero_1 = 11111111      # Válido, pero difícil de leer a simple vista
numero_2 = 11_111_111   # Válido, limpio y perfectamente legible

Gestión de Signos: Números Positivos y Negativos

La codificación de la polaridad numérica en Python sigue las convenciones matemáticas universales:

  • Números Negativos: Se configuran anteponiendo de forma obligatoria el operador menos (-) al literal.Pythonprint(-11111111) print(-11_111_111)
  • Números Positivos: No requieren ningún signo que los preceda de forma obligatoria; la ausencia de signo le indica a Python que el número es positivo. Sin embargo, es completamente permisible añadir un signo más (+) si deseas hacerlo explícito en tu código. Las siguientes dos líneas producen exactamente el mismo valor semántico.

Aquí tienes la adaptación de esta sección avanzada sobre los sistemas numéricos alternativos, un tema recurrente y crítico en el examen de certificación PCEP para evaluar tu comprensión profunda de los literales enteros.

Sistemas Numéricos Alternativos: Octal y Hexadecimal

En el mundo de las matemáticas convencionales y en nuestro día a día, estamos acostumbrados a utilizar el sistema decimal (base 10), que emplea los dígitos del 0 al 9. Sin embargo, en el desarrollo de software y en la arquitectura de sistemas, trabajar con otras bases numéricas resulta sumamente eficiente.

Python ofrece dos convenciones especiales para codificar números enteros utilizando sistemas de numeración que no usamos en la vida cotidiana: el sistema octal y el sistema hexadecimal.

El Sistema Octal (Base 8)

Si necesitas representar un número en formato octal, Python exige que utilices un prefijo específico inmediatamente antes de los dígitos: 0o o 0O (el número cero seguido de la letra “o”, ya sea minúscula o mayúscula).

Debido a que el sistema octal funciona en base 8, los literales que utilices después del prefijo deben contener única y exclusivamente dígitos dentro del rango del 0 al 7. Si intentas usar un 8 o un 9 con este prefijo, Python arrojará un error de sintaxis inmediato.

print(0o123)

Al ejecutarla, la consola no mostrará 0o123. Como ya aprendimos, la función print() realiza la conversión de forma automática a nuestra base humana estándar. El resultado en la pantalla será:

83

El Sistema Hexadecimal (Base 16)

La segunda convención nos permite trabajar con el sistema hexadecimal, ampliamente utilizado en informática para representar direcciones de memoria, configuraciones de red (direcciones MAC) o códigos de color.

Para indicarle a Python que estás escribiendo un literal en base 16, debes anteponer el prefijo 0x o 0X (el número cero seguido de la letra “x”).

El sistema hexadecimal utiliza dieciséis caracteres para contar: los dígitos del 0 al 9 y las letras de la A a la F (donde A=10, B=11, C=12, D=13, E=14, F=15), las cuales pueden escribirse indistintamente en mayúsculas o minúsculas.

print(0x123)

La función print() gestionará el valor binario interno y proyectará en la consola su equivalente decimal exacto:

291

Aquí tienes la adaptación de esta sección, enfocada en la sintaxis y las reglas estrictas de los números de punto flotante (floats), un componente vital para el manejo de datos precisos y una pregunta fija en el examen PCEP.

Literales Numéricos: El Tipo Punto Flotante (Float)

Es momento de explorar el segundo gran tipo numérico en Python, diseñado específicamente para representar y almacenar lo que en matemáticas se conoce como números con una fracción decimal no vacía.

Hablamos de los números que tienen (o son capaces de tener) una parte fraccionaria después del punto decimal. Cada vez que piensas en un valor como dos y medio o menos cero coma cuatro, estás ante datos que el intérprete de Python clasifica como números de punto flotante (floating-point numbers o simplemente floats):

2.5
-0.4

La Regla de Oro: El Punto vs. La Coma

Si en tu país natal (como en España o gran parte de Latinoamérica) estás acostumbrado a escribir los decimales utilizando una coma (ej. 2,5), debes prestar mucha atención y cambiar ese hábito al programar: Python utiliza estrictamente el punto (.) como separador decimal.

Asegúrate de que tus números decimales no contengan comas en absoluto. Si intentas escribir algo como print(2,5), Python no lo interpretará como “dos y medio”. Para el intérprete, la coma tiene un significado reservado (separar argumentos), por lo que pensará que le estás pasando dos números enteros independientes (el 2 y el 5) en lugar de un único decimal.

La Regla de la Omisión del Cero (Abreviación)

Cuando escribes un número flotante en Python y el número 0 es el único dígito que se encuentra inmediatamente antes o después del punto decimal, tienes permitido omitirlo por completo. Esto no alterará en absoluto ni el valor matemático ni el tipo de dato del número.

Veamos cómo funciona esta regla de abreviación:

  • Omitir el cero inicial: El valor cero punto cuatro (0.4) se puede escribir simplemente omitiendo el cero antes del punto (.4):
  • Omitir el cero final: El valor cuatro punto cero (4.0) se puede escribir omitiendo el cero que va después del punto:

Ambas formas son completamente válidas y equivalentes en Python. De hecho, ver un número escrito simplemente como 4. es una de las “trampas” visuales más comunes en las preguntas del examen PCEP para comprobar si sabes distinguir un entero de un flotante.

Aquí tienes la adaptación de esta sección, donde se profundiza en el impacto que tiene el punto decimal y se introduce la notación científica mediante la letra e, un recurso indispensable para simplificar números colosales o microscópicos en Python.

Ints vs. Floats y la Notación Científica (e)

Como acabamos de ver, el punto decimal es el factor fundamental que utiliza Python para reconocer un número de punto flotante. Analicemos detenidamente este par de números:

4
4.0

Desde una perspectiva puramente matemática, ambos representan exactamente la misma cantidad. Sin embargo, Python los ve y los procesa de formas completamente distintas:

  • 4 es un número entero (int).
  • 4.0 es un número de punto flotante (float).

La simple presencia del punto cambia las reglas del juego en la memoria de la computadora. Pero el punto no es la única vía para dar vida a un float. Existe otra herramienta matemática clave: la letra e.

La Notación Científica para Números Extremos

Cuando necesitas manipular datos que involucran números extremadamente grandes (como distancias astronómicas) o ridículamente pequeños (como medidas a nivel cuántico), escribir todos los ceros en el editor de código resulta ineficiente y propenso a errores. Para solucionar esto, Python adopta la notación científica.

Pensemos, por ejemplo, en la velocidad de la luz expresada en metros por segundo. Si la escribimos de forma directa y tradicional, se vería así: 300000000

Para evitar saturar el texto con tantos ceros, los libros de física recurren a una abreviación abreviada que seguro te resulta familiar: \(3 \times 10^8\) (tres multiplicado por diez a la potencia de ocho).

En Python, logramos exactamente ese mismo efecto semántico de una manera muy compacta utilizando la letra E (o su versión en minúscula, e):

3e8

Anatomía de la Notación Científica en Python

La letra e proviene de la palabra exponent (exponente) y funciona en el código como un registro abreviado que significa literalmente: “multiplicado por diez a la potencia de”.

Para que Python acepte esta estructura sin protestar, debes memorizar dos reglas sintácticas estrictas para el examen PCEP:

  1. El Exponente (el valor después de la E): Tiene que ser obligatoriamente un número entero. Puede ser positivo (para números grandes) o negativo (para números pequeños), pero nunca decimal.
  2. La Base (el valor delante de la E): Puede ser tanto un número entero como un decimal.

⚠️ Efecto colateral importante: Cualquier número escrito con notación científica (E), independientemente de si la base es un entero, se convertirá automáticamente en un tipo de dato flotante (float) dentro de la memoria de Python.

Por ejemplo, si ejecutas print(3E8), la consola te devolverá 300000000.0, demostrando con ese punto final que el dato ha sido catalogado como un float.

Aquí tienes la adaptación de esta sección, enfocada en cómo codificar números extremadamente pequeños mediante exponentes negativos y cómo Python optimiza automáticamente la representación visual de los floats en la consola.

Codificación de Floats: Exponentes Negativos y la Ley de Economía

En la sección anterior aprendimos a condensar números colosales usando la notación científica con exponentes positivos. Ahora analizaremos cómo aplicar esta misma convención para registrar números que son extremadamente pequeños (aquellos cuyo valor absoluto es ridículamente cercano a cero).

Un ejemplo clásico de la física es la constante de Planck (denotada como \(h\)), cuyo valor en los libros de texto es \(6.62607 \times 10^{-34}\).

Si necesitaras introducir esta constante matemática en un flujo de datos dentro de tu programa, la sintaxis correcta en Python sería:

6.62607e-34

El signo menos (-) colocado inmediatamente después de la E le indica al intérprete que el punto decimal debe desplazarse 34 posiciones hacia la izquierda, dando como resultado un número microscópico.

La Ley de la Presentación Económica de Python

Existe un detalle crítico que suele desconcertar a los programadores principiantes y que es una pregunta recurrente en el examen PCEP: El hecho de que tú elijas una forma específica de escribir un literal flotante no garantiza que Python lo muestre exactamente igual en la pantalla.

Python cuenta con un algoritmo interno diseñado para elegir siempre la forma más económica y compacta de presentar un número en la consola. Imagina que decides escribir un literal flotante repleto de ceros de forma manual en tu editor:

print(0.0000000000000000000001)

Al ejecutar esta instrucción, Python evalúa la cantidad de caracteres. En lugar de ensuciar la terminal imprimiendo una fila interminable de ceros que dificulta la lectura, el intérprete optimiza la salida y te devuelve esto:

1e-22

¿Por qué hace esto Python?

Porque escribir y leer 1e-22 consume muchísimos menos recursos visuales y espacio que su contraparte extendida. El valor matemático interno en la memoria sigue siendo exactamente el mismo, pero la semántica de su presentación se transforma en pro de la legibilidad y la eficiencia.

Aquí tienes la adaptación de esta sección fundamental sobre las cadenas de texto (strings), enfocada en cómo resolver uno de los desafíos sintácticos más comunes en el código: cómo introducir comillas dentro de un texto sin romper las fronteras del propio string.

Literales de Cadena: El Tipo String y el Dilema de las Comillas

Las cadenas de texto o strings se utilizan en programación cuando necesitas procesar texto (como nombres, direcciones, mensajes o párrafos completos) en lugar de cantidades matemáticas. Como ya hemos establecido, los strings necesitan comillas de la misma manera que los floats necesitan un punto decimal. Un literal de cadena estándar se ve así:

"I am a string."

Sin embargo, aquí se presenta un dilema clásico: ¿Cómo podemos introducir una comilla dentro de un texto que ya está delimitado por comillas?

Imagina que necesitas proyectar en la consola este mensaje exacto, incluyendo las comillas internas: I like "Monty Python" . Si intentas escribirlo de forma ingenua como print("I like "Monty Python""), Python se confundirá de inmediato, asumirá que el string termina justo antes de la letra M, y arrojará un error de sintaxis. Para solucionar este problema, el lenguaje nos ofrece dos caminos muy elegantes.

Solución 1: El Carácter de Escape (\)

La primera alternativa se basa en un concepto que ya conocemos: el carácter de escape representado por la barra invertida (\). Así como la barra invertida altera el significado de la letra n para crear un salto de línea (\n), también puede escapar el significado de las comillas. Cuando colocas una barra invertida inmediatamente antes de una comilla, esta cambia su rol semántico: deja de ser interpretada como una frontera o delimitador de código y pasa a ser un simple carácter textual de datos.

print("I like \"Monty Python\"")

Si te fijas bien, hay dos comillas escapadas (\") envolviendo la frase. Al ejecutarse, Python ignorará las barras invertidas en la consola y mostrará las comillas de manera literal.

Solución 2: Alternancia de Delimitadores (Comillas Simples)

La segunda solución suele resultar muy sorprendente y cómoda para los desarrolladores. Python te permite definir un string utilizando tanto comillas dobles (") como comillas simples o apóstrofes ('). Aprovechando esta flexibilidad, si necesitas que tu texto contenga comillas dobles en su interior, puedes delimitar externamente todo el string usando comillas simples:

print('I like "Monty Python"')

Aquí tienes la adaptación de la sección final sobre los literales de Python, enfocada en los valores booleanos, su origen lógico y la resolución del reto interactivo.

Valores Booleanos: El Tipo Lógico (Boolean)

Para concluir el estudio de los literales en Python, debemos analizar los dos últimos elementos del catálogo. A diferencia de los números o los textos, estos dos literales no representan objetos tangibles o cantidades contables, sino un concepto abstracto fundamental: la veracidad.

Cada vez que le pides a Python que compare si un número es mayor que otro o si una contraseña es correcta, esa evaluación genera un tipo de dato específico: un valor booleano (Boolean o bool).

El nombre rinde homenaje a George Boole (1815-1864), un matemático británico que definió el álgebra booleana, una estructura lógica basada exclusivamente en dos estados distintos: Verdadero y Falso, representados matemáticamente como 1 y 0.

El Intérprete Binario: Respuestas sin Matices

En el desarrollo de software, tú escribes el código y el programa le hace preguntas al sistema operativo o a los datos. Python ejecuta esas instrucciones y devuelve las respuestas. Para que una computadora pueda tomar decisiones automatizadas, necesita respuestas absolutas.

Por suerte, los ordenadores solo contemplan dos tipos de contestaciones:

  • Sí, esto es verdadero (True)
  • No, esto es falso (False)

El Desafío: ¿Qué imprimen estas líneas?

Analicemos el reto propuesto por el curso. Si pones a prueba este bloque de código en tu entorno:

print(True > False)
print(True < False)

El Resultado en la Consola:

True
False

Explicación Semántica: ¿Por qué ocurre esto?

Este comportamiento se debe directamente a la herencia del álgebra de George Boole en la arquitectura de computadores. Tras bambalinas, Python asigna un valor numérico intrínseco a los estados lógicos para poder operar con ellos a nivel de bits:

  • True equivale aritméticamente a 1
  • False equivale aritméticamente a 0

Por lo tanto, cuando le pides a Python que evalúe si True > False, el procesador traduce internamente la pregunta a términos matemáticos básicos: ¿Es 1 > 0? Como la respuesta a esa pregunta es afirmativa, la primera instrucción imprime True.

Aquí tienes la adaptación y estructuración de la sección de puntos clave (Key Takeaways) de este módulo, un resumen ideal para repasar antes de realizar los test de práctica del PCEP. He incluido el concepto extra de None de forma muy visual.

Resumen del Módulo: Conceptos Clave (Key Takeaways)

Para consolidar los conocimientos de este capítulo antes de avanzar, repasemos los pilares fundamentales sobre los literales y los tipos de datos en Python:

1. ¿Qué es un Literal?

Los literales son notaciones específicas utilizadas en el código fuente para representar valores fijos e inmutables. Python cuenta con varias familias de ellos:

  • Literales numéricos: Por ejemplo, el entero 123.
  • Literales de cadena (strings): Por ejemplo, "I am a literal.".

2. Sistemas de Numeración Computacional

  • Sistema Binario: Utiliza el 2 como base, lo que significa que se compone únicamente de ceros y unos (0 y 1). Por ejemplo, el binario 1010 equivale al número 10 en nuestro sistema decimal.
  • Sistemas Octal y Hexadecimal: Utilizan el 8 y el 16 como bases, respectivamente. El sistema hexadecimal (0x) se apoya en los números decimales del 0 al 9 y añade seis letras (A a la F) para completar sus dieciséis valores posicionales.

3. Números Enteros (Integers / int)

Son uno de los tipos numéricos nativos de Python. Se caracterizan por escribirse sin ninguna parte fraccionaria o decimal. Pueden ser tanto positivos (256) como negativos (-1).

4. Números de Punto Flotante (Floats / float)

Es el tipo numérico diseñado para almacenar valores continuos que contienen (o tienen la capacidad de contener) un componente fraccionario o decimal separado estrictamente por un punto. Ejemplo: 1.27.

5. El Dilema de las Comillas en los Strings

Para incrustar un apóstrofe o una comilla dentro de un texto sin romper la sintaxis del lenguaje, dispones de dos estrategias:

  • Uso del carácter de escape: Anteponer una barra invertida (\), por ejemplo: 'I\'m happy.'.
  • Alternancia de símbolos: Envolver el texto con los delimitadores opuestos a los que deseas mostrar. Usas comillas dobles externas para proteger un apóstrofe interno ("I'm happy.") o comillas simples externas para proteger comillas dobles internas ('He said "Python"').

6. Valores Booleanos (bool)

Son dos objetos constantes, True (Verdadero) y False (Falso), que se utilizan para representar estados lógicos de veracidad. En contextos puramente numéricos o aritméticos, True se comporta como un 1, mientras que False equivale a un 0.

🌟 Contenido Extra: El Literal Especial None

Existe un último literal altamente especializado en el ecosistema de Python que debes conocer: None.

  • ¿Qué es? Es un objeto único que pertenece a su propio tipo de dato llamado NoneType.
  • ¿Para qué sirve? Se utiliza de forma explícita para denotar la ausencia total de un valor o un estado “vacío”. No equivale al número cero (0), ni a un string vacío (""), ni a False; es simplemente la representación formal de que un contenedor no tiene datos o de que una función no devolvió nada (como el caso de print()).