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 NoneResolvida 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