Suponha que tem uma árvore genealógica organizada usando um dicionário. A chave é um tuplo com dois elementos, em que cada elemento é um tuplo com o nome do progenitor e respectiva idade. O valor é uma lista com tuplos, em que cada tuplo tem o nome do descendente e respectiva idade. Um exemplo:
ag = {(('ernesto',64),('anabela',44)): [('daniela', 15)], (('vitor',72),('irm',68)): [('ines', 39)], (('carlos',68),('mena',65)): [('ricardo', 42), ('marcos', 37)],(('josé',85),('lurdes',82)): [('ernesto', 64), ('afonso',74),('vitor',72), ('carlos',68),('isabel',66)], (('joaobranco',70),('isabel',66)): [('anaisabel', 35),('joana',29)], (('jbp',77),('jbm',70)): [('joaobranco', 70), ('graça',68)]}
Escreva um programa que dada uma árvore genealógica e o nome de uma pessoa, devolva o nome do sobrinho(a) mais velho(a). Exemplo:
>>> sob_mais_velho(ag,'afonso') ricardoOs meus sobrinhos são os filhos dos meus irmãos. Daí fazer sentido ter definições auxiliares para determinar os filhos e os irmãos de uma pessoa.
def irmaos(ag, pessoa):
for prog,filhos in ag.items():
for filho in filhos:
if pessoa == filho[0]:
filhos.remove(filho)
return filhos
def meus_filhos(ag, pessoa):
for prog, filhos in ag.items():
if (pessoa == prog[0][0]) or (pessoa == prog[1][0]):
return filhos
return None
Resolvida esta questão, o resto é fácil. Começamos por calcular os irmãos da pessoa. Caso existam, calculamos os filhos de cada um dos irmãos. Finalmente, determinamos qual deles é o mais velho.
def sob_mais_velho(ag,pessoa):
irm = irmaos(ag,pessoa)
if irm:
filhos = []
for irmao in irm:
filhos.extend(meus_filhos(ag,irmao[0]))
velho = filhos[0]
for fil in filhos[1:]:
if velho[1] < fil[1]:
velho = fil
return velho[0]
return ()
P3 Suponha que tem dois ficheiros de texto com exactamente o mesmo número de linhas. Pretende-se que escreva um programa que dados esses dois ficheiros crie um terceiro cujo conteúdo resulta da junção das linhas dos dois primeiros, feita do seguinte modo. Se A e B forem os dois ficheiros de origem e C o ficheiro resultado, então C vai ter na primeira linha o conteúdo da primeira linha do ficheiro A seguido do conteúdo da primeira linha do ficheiro B, na segunda linha o conteúdo da segunda linha do ficheiro A seguido do conteúdo da segunda linha do ficheiro B, e assim sucessivamente.
Solução trivial. Lemos os dois ficheiros e guardamos o seu conteúdo como listas de linhas. De seguida criamos uma nova lista juntando as linhas de mesma ordem. Finalmente, criamos o novo ficheiro. Notar que temos que retirar o indicador de mudança de linha das linhas do primeiro ficheiro. Usamos o tab como separador.
def concatena_ficheiros(ficheiro_1,ficheiro_2, ficheiro_3):
with open(ficheiro_1, 'r', encoding='utf-8') as fich_1:
with open(ficheiro_2,'r',encoding='utf-8') as fich_2:
with open(ficheiro_3, 'w',encoding='utf-8') as fich_3:
dados_1 = fich_1.readlines()
dados_2 = fich_2.readlines()
dados_3 = []
for i,linha in enumerate(dados_1):
dados_3 += [linha[:-1] + '\t' + dados_2[i]]
fich_3.writelines(dados_3)

Sem comentários:
Enviar um comentário