Carta

Una empresa utilitza plantilles de cartes que envia personalitzades als seus clients. Una plantilla de carta es composa de text ordinari i de símbols que s’han de substituir per les dades concretes dels clients. Els símbols son paraules que comencen amb el caràcter “@”. Per exemple una plantilla de carta seria com la següent:

@benvinguda @tractament @nomclient\nEn aquesta data assenyalada, TTT S.A. li desitja moltes felicitats\n\nAlex Perez\nGerent\n

on:

  • @benvinguda és un símbol que s’ha de substituir per “Benvolgut” o “Benvolguda” depenent del genere del client

  • @tractament és un símbol que s’ha de substituir per “senyor” o “senyora” depenent del genere del client

  • @nomclient és un símbol que s’ha de substituir pel nom del client

  1. Dissenyeu la funció esSimbol(paraula) que donat un string retorni True si és un símbol (si comença amb “@”) i False en cas contrari.

  2. Dissenyeu la funció substitueixSimbol(simbol, nomclient, eshome) que donat un string que conté un simbol, donat un string que representa el nom del client i donat un booleà que té per valor True si el client és un home i False si és una dona, retorna un string que substitueix el símbol pel valor personalitzat. Suposeu que el símbol només pot ser un dels tres símbols descrits amunt.

  3. Dissenyeu la funció personalitzaCarta (plantilla, nomclient, eshome) que, donat un string que conté una plantilla de carta, donat un string que representa el nom del client i donat un booleà que té per valor True si el client és un home i False si és una dona, retorna un string que representa la carta personalitzada. Suposeu que el string de plantilla conté com a possibles símbols únicament els tres símbols descrits amunt. Cal utilitzar la funció substitueixSimbol. Suposeu també que totes les paraules de la plantilla estan separades per un únic espai, que no hi ha espais en blanc al principi i al final de cada línia. Sí que hi pot haver un o més salts de línia a la plantilla.

  4. Un string que representa un client està estructurat de la manera següent: el primer caràcter és la lletra “H” (home) o bé la lletra “D” (dona), el segon caràcter és un espai en blanc i els caràcters següents són el nom i cognoms del client separats per un espai en blanc. Per exemple: D Maria Fuertes Montroig o H Roger Pallés Montero. Dissenyeu la funció obteNomiGenere(client) que donat un string estructurat com s’acaba de descriure, retorna un booleà que tingui per valor True si és un home i False si és una dona i un string que contingui únicament el nom complet del client. Per exemple, “”obteNomiGenere(“D Maria Fuertes Montroig”) ha de retornar (False, “Maria Fuertes Montroig”).

  5. Dissenyeu la funció tractaClients(plantilla, llista) que, donat un string que conté una plantilla de carta i donada una llista de clients, retorni una llista de cartes personalitzades. La llista de clients està formada per strings estructurats com s’ha descrit a la pregunta anterior (genere i nom). Cal utilitzar les dues funcions anteriors.

  6. Dissenyeu la funció llegirPlantilla(nomfitxer) que donat el nom d’un fitxer de text que conté una plantilla de carta, retorni un string que tingui per valor aquesta plantilla.

  7. Dissenyeu la funció llegirClients(nomfitxer) que donat el nom d’un fitxer de text que conté per cada línia el gènere i nom d’un client, retorni una llista de strings estructurada com s’ha descrit a la pregunta 2.

  8. Dissenyeu la funció tractaLlistaClients(fitxerplantilla, fitxerclients) que, donats els noms del fitxer de plantilla i del fitxer de clients, retorni una llista de cartes personalitzades per cada client de la llista.

  9. Dissenyeu una segona versió de les funcions anterior utilitzant un diccionari que tingui com a clau els símbols i com a valors els strings pels que han de ser substituïts.