Q:

A melhor forma de fazer um programa de busca de informações

Trabalho com produção de texto e gostaria de fazer um programa de busca que retornasse informações pré-formatadas para que eu somente copiasse e colasse no editor de texto.
Sou iniciante no Python, por isso o meu script é bem rudimentar. Fiz o seguinte:
_joao = 'João Silva, nascido na cidade tal, é engenheiro, ...'
_pedro = 'Pedro da Silva, nascido na cidade tal, é empresário, ...'

nome = ''
while nome != 'sair':
    def busca():
        nome = input('Digite um nome a ser buscado ou digite "sair" para fechar o programa: ')
        if nome == 'joao':
            print (_joao, '\n')
        elif nome == 'pedro':
            print (_pedro, '\n')
        elif nome == 'sair':
            exit()
        else:
            print ('Nome não encontrado')
    busca()

Qual a melhor forma de fazer esse tipo de programa?

A:

Você não precisa definir uma função dentro do loop, ou ela será criada toda vez que repetir. A função poderia ficar fora do loop, ou então simplesmente não precisa de função nesse simples exemplo.
Uma estrutura de dados muito útil para o que você quer fazer, seria o dicionário - ele permite associar cada chave a um objeto - depois, permite recuperar o objeto de forma eficiente em qualquer ordem a partir da chave:
dados = {
    'joao': 'João Silva, nascido na cidade tal, é engenheiro, ...',
    'pedro': 'Pedro da Silva, nascido na cidade tal, é empresário, ...',
    'douglas': 'Douglas 1Alc, nascido na internet, é usuário do SOpt...',
}

Uma vez definido o dicionário, basta usá-lo ao invés de vários ifs:
while True:
    nome = input('Digite um nome a ser buscado ou "sair" para fechar o programa')
    if nome == 'sair':
        break
    print(dados.get(nome, 'Nome nao encontrado!'))

No futuro, se o número de nomes aumentar muito, fica melhor usar um banco de dados como o sqlite para armazenar os dados, ao invés de um dicionário.

