Acabei dividindo a função em três. Você considera isso prático ou eu o tornei muito difícil?
def cadastrar(nomes):
print ('Insira o seu nome:')
nome = raw_input()
nomes.append(nome)
def menu():
nomes = []
escolha =' '
while( escolha != '0'):
print ('Aperte 1 para cadastrar, 2 para listar, 3 para remover, 4 para alterar nome e 0 para terminar')
escolha = raw_input()
if (escolha == '1'):
cadastrar(nomes)
if(escolha == '2'):
listar(nomes)
if (escolha =='3'):
remover(nomes)
if (escolha == '4'):
alterar_nome(nomes)
def listar(nomes):
print'Listando nomes:'
for nome in nomes:
print nome
def remover (nomes):
nome_removido = raw_input('Digite o nome a ser removido:')
nomes.remove(nome_removido)
def encontrar_um_nome (nomes):
nome_buscado = raw_input('Digite o nome a ser alterado:')
if (nome_buscado in nomes):
print 'Nome encontrado'
else :
print 'Nome nao encontrado'
return nome_buscado
def pegar_posicao (nomes, nome_encontrado):
index_do_nome = nomes.index(nome_encontrado)
return index_do_nome
def alterar_nome (nomes):
nome_encontrado = encontrar_um_nome(nomes) # tem como retorno o nome_buscado
index_do_nome_encontrado = pegar_posicao(nomes, nome_encontrado) # foi adicionado o nome_encontrado como argumento.
novo_nome = raw_input('Digite o novo nome:')
nomes [index_do_nome_encontrado] = novo_nome
menu()