Coding for KidsCoding for Kids
Niveles CreativosDesafíosGuía del Maestro
Votar por funciones
Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel

Módulos de Cadenas y Tiempo
Módulo de Cadenas

Objetivo

Compila los datos de la solicitud y envía cartas de respuesta utilizando el módulo string.

Ahora que se ha contabilizado el material para la construcción de la nueva granja, es hora de dirigir nuestra atención al nuevo personal para la granja. Tenemos varias cartas que deben enviarse para solicitudes de empleo, lo cual naturalmente requeriría mucha escritura; sin embargo, podemos usar el módulo string para compensar esto, permitiéndonos crear plantillas y formatear textos para facilitar el manejo de grandes volúmenes de texto.

Importar el módulo string en esta ocasión se dará de una manera un poco diferente a otros módulos, ya que importaremos clases que extienden el módulo, y se ejecutará de la siguiente manera:

import string from string import Template from string import Formatter

Esto nos proporciona acceso tanto al módulo en sí como a las clases de plantillas y formateo que incluyen sus propias funciones. Para nuestros propósitos, usaremos las siguientes funciones y clases:

  • string.capwords(): Esta función convierte las palabras de una cadena a la capitalización adecuada, haciendo que la primera letra de cada palabra sea mayúscula y el resto minúscula, sin importar cómo esté formateada la cadena.
  • Template(): Esta es una clase de cadenas, se usa para crear un objeto plantilla. Utiliza la función substitute() que te permite configurar una cadena y marcar una ubicación usando el signo $ para intercambiar datos. Esto te permite crear cadenas modulares que puedes usar a voluntad.
  • Formatter(): Esta es una clase de cadenas, se utiliza para formatear o componer una cadena. Funciona de manera similar a la clase Template(), pero es más robusta y adecuada para secuencias de cadenas más extensas. Utiliza la función format() que te permite configurar una cadena e insertar datos en ella utilizando {}.

Comienza caminando hacia la marca X clara y utilizando la función read() mientras te encuentras frente al archivador; esto te permitirá acceder a carpetas con los nombres de varios solicitantes. Estas carpetas están presentes como tres (3) constantes de lista llamadas: folder_a, folder_b y folder_c.

Camina hacia la marca X oscura sobre la alfombra verde y dirígete hacia el escritorio. Crea tres (3) listas llamadas: names_a, names_b y names_c. Usa comprensiones de listas con la función string.capwords() para formatear la capitalización correcta de los nombres. Empareja las listas con las constantes que usan las mismas letras en su nombre; por ejemplo, para names_a usa string.capwords() con folder_a, así: names_a = [string.capwords(x) for x in folder_a]. Usa la misma fórmula para poblar names_b y names_c.

Crea una lista llamada all_names y suma las tres (3) listas de nombres, de esta forma: all_names = names_a + names_b + names_c. Esto combinará todas las listas en una lista mayor. A continuación, usa la función de Python join() para unir todos los elementos de la lista en una cadena. También puedes especificar lo que se colocará entre cada elemento de la lista declarándolo entre comillas, de esta forma: all_names = ", ".join(all_templates). Utiliza la función preescrita write() con la lista all_names para anotar todos los nombres con la correcta capitalización.

A continuación, camina hacia la marca X dorada y dirígete hacia el escritorio; aquí configuraremos las plantillas. Tendremos dos objetos plantilla preescritos llamados red_templates y blue_templates:

red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")

Cada una de estas plantillas tiene un mensaje único, sin embargo, tienen algo en común: un marcador de posición etiquetado como $name. El símbolo $ se utiliza para indicar un marcador de posición que puede ser reemplazado por una cadena de texto de tu elección, en este caso, como sugiere el título, se refiere a un nombre. Si no se sustituye ningún valor, la plantilla simplemente usará el marcador tal como aparece en la cadena. Para complementar esto, crea una lista llamada all_templates.

Crea un bucle for con cuatro (4) iteraciones; con esto, reemplazaremos los nombres en las tres (3) listas de nombres por las plantillas con los nombres incluidos. Por ejemplo, aplicaremos la red_template a la lista names_a. Usa la función substitute() de la clase Template() para reemplazar el marcador $name en la plantilla por los nombres de la lista.

for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])

Haz lo mismo con names_b y names_c: para names_b utiliza también la red_template y para names_c utiliza la blue_template.

Una vez que todas las listas de nombres hayan sido pobladas con las nuevas plantillas, es momento de revisarlas. Crea una nueva lista llamada all_templates y suma todas las listas de nombres juntas, así: all_templates = names_a + names_b + names_c. Usa la misma función join() de antes para compilar todos los nombres con plantilla en un formato legible, de esta forma: all_templates = "\n".join(all_templates). Utiliza la función preescrita write() con all_templates para detallar todos los encabezados de los diferentes nombres.

Luego, camina hacia la marca X oscura sobre la alfombra roja y dirígete hacia el escritorio; aquí formatearemos y redactaremos el primer conjunto de cartas. Comienza creando dos (2) objetos formateadores llamados red_1 y red_2 utilizando la notación de clase, de esta forma: red_1 = Formatter(), red_2 = Formatter(). Para la composición de las cartas, crea una lista llamada red_letters.

Al igual que antes, vamos a tener un bucle for con cuatro (4) iteraciones; tendremos dos conjuntos de cadenas predefinidas que serán formateadas usando la función format() y a las que se les añadirán las variables de nombres correspondientes. Estas cadenas formateadas se agregarán a la lista red_letters, formando una lista comprensiva de cartas que se enviarán. Por ejemplo, los objetos formateados red_1 serán formateados con la lista names_a y añadidos a la lista red_letters.

for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office..." , names_a[x]))

Haz lo mismo con el objeto formateador red_2 utilizando su cadena preescrita y añade names_b al bucle. Una vez que todo esté configurado, utiliza la función join() con red_letters para compilar los datos en un único archivo, de esta manera: red_letters = "\n".join(red_letters). Utiliza la función write() con red_letters para anotar todas las cartas formateadas que serán enviadas.

Por último, camina hacia la marca X oscura sobre la alfombra azul y dirígete hacia el escritorio; aquí formatearás y compondrás el último conjunto de cartas. Al igual que antes, crea dos (2) objetos formateadores llamados blue_1 y blue_2 utilizando la notación de clase, de esta forma: blue_1 = Formatter(), blue_2 = Formatter(). Crea una lista blue_letters para formatear y componer todas las cartas.

Nuevamente, crea un bucle for con cuatro (4) iteraciones y utiliza las cadenas preescritas para formatear las listas de nombres y añadirlas a la lista blue_letters usando la función format(). En este caso, empareja los objetos formateadores blue_1 con la lista names_c y los objetos formateadores blue_2 con la lista names_b. Todo se realiza de la misma forma que con la alfombra roja, pero utilizando valores diferentes, demostrando la versatilidad de usar formatos y plantillas. Una vez finalizado, utiliza la función write() con blue_letters para archivar las últimas cartas y completar el nivel.

Libro de Código