martes, 15 de octubre de 2024

Lenguajes. Python.

Concatenar cadenas


Seguro que has echado de menos la posibilidad de crear textos con más contenido y de mayor complejidad. Una de las causas es la ausencia de instrucciones o procedimientos para encadenar contenidos textual. Sin esto recursos las limitaciones de cualquier lenguaje son muchas. En esta entrada vamos a aprender a concatenar cadenas, variables y cadenas con variables. En realidad todo es uno, así que sabiendo la diferencia entre una cadena (cómo se expresa) y una variable que contiene una cadena (cosa que ya hemos visto) tenemos la mitad del trabajo hecho.


Antes de entrar en materia, no está de más que expliquemos brevemente las razones por las que aprender a concatenar cadenas y variables es de tanta importancia para nuestro objetivo. Y la respuesta es muy simple: sin concatenar nos vemos limitados bien a la parquedad de los datos que podemos procesar (con lo que difícilmente podremos hablar de trabajo con texto) o a la literalidad de la información que mostremos por pantalla (lo que compromete la posibilidad real de automatizar la creación de textos). Por el contrario, concatenando cadenas estamos iniciando el camino hacia la creación de textos, aunque sólo iniciándolo, como podremos comprobar más adelante.

Cuando escribimos un texto con nuestro procesador estamos concatenando contenidos, ya que casi la propia definición de este tipo de dato supone la acción de concatenar; pero cuando más evidente es la necesidad de concatenar cadenas es cuando necesitamos ajustar ciertas partes de su contenido a condiciones específicas, como son las derivadas de la concordancia de género y número, los tiempos verbales o las implicaciones derivadas de ciertas condiciones asociadas a otros contenidos. Aunque suene enrevesado (y lo es en su complejidad gramatical y semántico-contextual), en realidad es algo que realizamos de forma automatizada que no nos damos cuenta, puesto que es el resultado de nuestra competencia lingüística y lógico-discursiva.

Pero lo que es simple para nosotros puede resultar una gran dificultad para un programa informático, y la prueba la tenemos en los complejos algoritmos que emplea la IA para identificar la palabra que corresponda suceder a otras previas en una frase simple. 

Pero tranquilo, que por ahora no nos vamos a preocupar por este tipo de cuestiones. La concatenación sirve para cosas mucho más simples pero de gran importancia como crear mensajes personalizados y/o unir string y/o variables tipo string para generar contenido textual de mayor complejidad. Y por ahora es a lo que nos vamos a limitar, que no es poco.

La primer forma que podemos usar para concatenar string (y string con variables) es utilizar el operador +. Un ejemplo:

a = "Hola"
b = "Mundo"

a+b = HolaMundo

Puedes observar que el resultado presenta un "pequeño" problema": los dos string aparecen unidos sin separación entre ellos. Si queremos evitarlo deberemos añadir un espacio al final del contenido de la primera (a = "Hola ") para obtener lo que esperamos (a+b = "Hola Mundo") y problema resuelto.

Una segunda forma de concatenar string, más adaptada a este tipo de dato es usar la coma como referente para la concatenación, pero presenta algunos problemas de manejo:

a= input()
Hola
b = input()
Mundo
c = a,b
print(c)
('Hola', 'Mundo')

Como puedes ver, de esta forma (c = a,b), más que concatenar lo que hacemos es identificar (y diferenciar) los componentes del string resultante (print(c) -> ('Hola', 'Mundo')), por lo que no nos resulta útil para nuestro objetivo. 

Sin embargo, si aplicamos la función print() directamente sobre las variables creadas (print(a,b)) obtenemos el resultado esperado (Hola Mundo). El mismo resultado que obtenemos si asignamos a c ambas cadenas, incluyendo un espacio entra ambas (c = a + " " +b -> print(c) -> Hola Mundo)

En consecuencia, la forma más sencilla de concatenar cadenas es hacerlo mediante el operador +, que al aplicarlo a string asume la función de unión de elementos. Sin embargo, Python dispone de formas más potentes y flexibles de concatenar cadenas. Veamos algunas de ellas (1).

Primero sobre el pyshell, que será la primera utilidad del IDLE que empleemos. El prompt [>>>] nos indica que pyshell está dispuesto para recibir instrucciones, a la vez que permite diferenciar éstas del resultado de su ejecución: fíjate que las dos primeras líneas de código van precedidas de >>>, pero la tercera (la respuesta o salida/output) no. Esta es una peculiaridad del Shell que no presentan otros soporte de escritura del código.

Después sobre el código mismo:

  • La primera línea del programa, ya sabes, sirve para declarar+asignar contenido a la variable (varNombre="Javier")
  • Al hacerlo con una cadena de texto, implícitamente asignamos a la variable al tipo String. 
  • Un número entrecomillado también se considera un String, pero no si no va entrecomillado.
  • La segunda línea sirve para ordenar la escritura en pantalla del contenido de la variable mediante la instrucción print(). Ésta es la única forma válida de escribirla y cualquier diferencia se considera un error.
  • Tenemos que tener mucho cuidado al escribir el nombre de la variable que contiene print() entre sus paréntesis, ya que también en esto Python es muy estricto: varNombre no es VarNombre, ni Varnombre, ni var_nombre, ni cualquiera otra variación, igualmente válidas como nombres de variables, pero diferentes, por lo que el intérprete Python las identificará como inexistentes.
  • Aquí pasamos a print() una variable, pero también es posible pasarle un carácter, una palabra o una cadena de texto (o un número con función nominal o de categoría). En este caso, al igual que en la asignación del dato a la variable, debemos usar "" o ''.

Para concatenar variables alfanuméricas, en Python podemos emplear dos operadores: (,) y (+)

Para

var1 = "Hola"
var2 = "Mundo"

Con (,):

print(var1,var2) 
 
Obtenemos Hola Mundo. Observa que entre las dos variables intercala un espacio en blanco.

Y con (+):

print(var1+var2)

Obtenemos HolaMundo, que es el resultado esperado de una concatenación de variables string.

Para intercalar un espacio en blanco debemos incluirlo directamente o mediante una tercera variable cuyo dato sea una cadena vacía.

 print(var1+" "+var2)

Nos da como salida (output)  Hola Mundo

Python  permite realizar otras muchas manipulaciones de las cadenas, que iremos viendo en su momento, pero quiero mostrarte algo que creo resulta de interés para entender cómo maneja python las cadenas:

print(var1[1]) devuelve o
print(var1[0]) devuelve H
 
Como puedes ver, Python genera un índice de elementos (caracteres) de la cadena, pudiendo acceder a cada uno de sus componentes mediante su índice.
 
El primer elemento de ese índice es 0, por eso la segunda línea devuelve el carácter H.
En otros lenguajes (OOo Basic, por ejemplo) eso implica que la cadena es tratada como un array de caracteres.

Vamos a comprobar ahora qué sucede cuando usamos estos concatenadores con variables de diferente tipo.

Es necesario recordar una implicación de la declaración implícita de Python: al contrario que en OB, no es posible declarar una variable como string y atribuirle un valor numérico, por lo que necesariamente tenemos que entrecomillar el número si queremos que funciones como un carácter. En consecuencia...

var1 = "2"
var2 = "3"
print(var1+var2)

... si concatenamos var1 con var2 obtendremos necesariamente 23

Pero si...

var1 = "2"
var2 = 3
print(var1+var2)

... el resultado no será el mismo, como sí sucede en OB, sino un mensaje de error

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    print(var1+var3)
TypeError: can only concatenate str (not "int") to str

En esto, Python se muestra mucho más riguroso en el tratamiento de los tipos de variables, lo que resulta conveniente para evitar errores en el procesamiento de los datos.

Para finalizar esta entrada, vamos a reproducir a continuación ese primer script que ya realizamos en PSeInt y en OOo Basic. Me interesa para analizar el modo en que Python plantea la posibilidad de interactuar con el usuario en la forma más básica.

var1=input("Dame un número ")
Dame un número 24
var2=input("Dame otro número ")
Dame otro número 24
print(var1+var2)

    Salida -> 2424

El resultado es la concatenación de dos variables string, no la suma de dos cantidades, lo que contrasta con el resultado que obtendríamos si hubiéramos realizado el input directamente desde el código (sin emplear la instrucción input().

Para obtener el resultado esperado (24+24 = 48) deberemos convertir las variables alfanuméricas a numéricas, haciendo uso de funciones específicas de conversión, algo de lo que aun no hemos hablado, pero que está presente en todos los lenguajes de programación.

print(int(var1)+int(var2)) nos permite obtener el resultado esperado: 48


NOTAS

(1) Efectivamente un operador matemático, pero es que no es el único que podemos emplear con un string, también otros como el de multiplicar. En la lógica del lenguaje "ab"*2 es una expresión perfectamente valida("ab"*2 -> 'abab'), pero no así otras operaciones. Aparentemente esta operación carece de utilidad, pero puede serlo para crear series alfanuméricas, especialmente si combinamos la operación con el uso de colecciones de datos, como una lista.
(2) Dejaremos las de mayor complejidad para más adelante, cuando nos resulte más fácil entender su significado y funcionamiento.

No hay comentarios:

Publicar un comentario

Comenta esta entrada