01.
def
gera_carta(carta,clientes):
02.
"""
03.
carta = texto geral da carta, num ficheiro.
04.
clientes = dicionário com os dados dos clientes.
05.
nome, data de nascimento (dd/mm/aaaa), morada, telefone
06.
"""
07.
PREFIXO
=
'/tempo/data/'
08.
# lê carta
09.
f_in
=
open(carta,
'r'
)
10.
texto_carta
=
f_in.read()
11.
f_in.close()
12.
# filtra clientes
13.
lista_clientes
=
[(nome_cliente(cliente),morada_cliente(cliente))
for
cliente
in
clientes.values()
if
(ano_cliente(cliente) <
1974
)]
14.
15.
for
numero
in
range(len(lista_clientes)):
16.
# processa
17.
saudacao
=
'Caro(a)'
18.
nome
=
lista_clientes[numero][
0
]
19.
morada
=
lista_clientes[numero][
1
]
20.
preambulo
=
saudacao
+
' '
+
nome
+
'\n'
+
morada
+
'\n\n'
21.
22.
f_out
=
open(PREFIXO
+
nome
+
str(numero)
+
'.txt'
,
'w'
)
23.
f_out.write(preambulo)
24.
f_out.write(texto_carta)
25.
f_out.close
26.
27.
28.
29.
def
dados(cliente):
30.
nome,data,morada,telefone
=
cliente
31.
dia, ano, mes
=
data.split(
'/'
)
32.
return
(nome, (int(dia),int(ano),int(mes)),morada, int(telefone))
33.
34.
def
ano_cliente(cliente):
35.
dados_cliente
=
dados(cliente)
36.
ano
=
dados_cliente[
1
][
2
]
37.
return
ano
38.
39.
def
nome_cliente(cliente):
40.
dados_cliente
=
dados(cliente)
41.
nome
=
dados_cliente[
0
]
42.
return
nome
43.
44.
def
morada_cliente(cliente):
45.
dados_cliente
=
dados(cliente)
46.
morada
=
dados_cliente[
2
]
47.
return
morada
48.
49.
if
__name__
=
=
'__main__'
:
50.
clientes
=
{
100
:(
'Ernesto'
,
'15/06/1953'
,
'F 26'
,
'239790019'
),
101
:(
'Joana'
,
'29/09/2001'
,
'A 15'
,
'239700400'
),
102
: (
'Lurdes'
,
'17/06/1913'
,
'G 30'
,
'808242424'
),
103
:(
'Daniela'
,
'31/03/2002'
,
'F 16'
,
'239400400'
)}
51.
gera_carta(
'/tempo/data/carta.txt'
, clientes)
O que é que esta solução tem de especial? Bem, desde logo a sua estrutura lógica: primeiro lemos a carta, depois seleccionamos os clientes e, finalmente, geramos as cartas personalizadas. São possíveis muitas variantes à solução apresentada. Fica para a imaginação e implementação do leitor. Um outro aspecto digno de relevo foi o recurso à abstracção e modularização. Esse aspecto está evidenciado no conjunto de operações que acedem aos dados do cliente. Caso decidamos alterar a representação dos dados do cliente, basta apenas alterar estas operações não sendo necessário mexer no resto do programa. Isto é uma gande vantagem!
Sem comentários:
Enviar um comentário